(problems)
| 803 | } |
| 804 | |
| 805 | return { |
| 806 | hook, |
| 807 | action: actionName, |
| 808 | category, |
| 809 | severity, |
| 810 | actionable, |
| 811 | stale, |
| 812 | relative: relativeTime(timestamp, now), |
| 813 | description, |
| 814 | }; |
| 815 | } |
| 816 | |
| 817 | function summarizeProblemTaxonomy(problems) { |
| 818 | const summary = { |
| 819 | total: problems.length, |
| 820 | actionable: 0, |
| 821 | safetyBlocks: 0, |
| 822 | stale: 0, |
| 823 | hookFailures: 0, |
| 824 | approvalNeeded: 0, |
| 825 | resolvedApprovals: 0, |
| 826 | }; |
| 827 | |
| 828 | for (const problem of problems) { |
| 829 | if (problem.actionable) summary.actionable++; |