You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The report's presentation contract — repository sections followed by five grouped confidence lists — does not survive contact with a real fleet. It produces a per-item enumeration of what is, operationally, one decision per repository, and it emits the same target more than once when several findings apply to it.
Evidence
One run: 869 findings, 6204 lines, 19 repositories. The bulk categories are 263 reclaimable-worktree, 214 merged-local-branch, and 163 merged-worktree — 74% of all findings in three categories that a reader will act on wholesale, per repository, or not at all.
Duplicate targets are real. …/github-iac/.claude/worktrees/feat+176-work-class-label-axis emits both HIGH locked-worktree and MEDIUM worktree-nested-in-repository. A reader triages the same path twice and, because the two land in different confidence groups, may not notice they are the same path.
The grouped-list contract also has no way to say "this repository is clean" — the question an operator actually asks of a hygiene tool. It answers "here are 869 observations."
Proposed change
Aggregate first. Default output is a per-repository rollup table with counts by finding kind, plus a fleet header. Per-item detail moves behind --detail or into a sidecar file.
Group findings by target. One entry per path or branch, carrying every applicable finding, rather than one entry per (finding, target) pair.
Emit a per-repository verdict line — CLEAN / N candidates / BLOCKED (evidence gap) — and a fleet verdict at the top.
The existing rule that a truncation or evidence gap must be reported per repository rather than once globally should be preserved in the rollup: a reader skimming a summary table must still see that a given repository's absent findings prove nothing.
Acceptance criteria
A 19-repository fleet produces a report that fits on a screen by default, with detail available on request.
No target appears in more than one finding entry.
Every repository carries an explicit verdict, including "clean".
A JSON artifact is produced and is sufficient input for the execution half.
Context: #2597
Problem
The report's presentation contract — repository sections followed by five grouped confidence lists — does not survive contact with a real fleet. It produces a per-item enumeration of what is, operationally, one decision per repository, and it emits the same target more than once when several findings apply to it.
Evidence
One run: 869 findings, 6204 lines, 19 repositories. The bulk categories are 263
reclaimable-worktree, 214merged-local-branch, and 163merged-worktree— 74% of all findings in three categories that a reader will act on wholesale, per repository, or not at all.Duplicate targets are real.
…/github-iac/.claude/worktrees/feat+176-work-class-label-axisemits both HIGHlocked-worktreeand MEDIUMworktree-nested-in-repository. A reader triages the same path twice and, because the two land in different confidence groups, may not notice they are the same path.The grouped-list contract also has no way to say "this repository is clean" — the question an operator actually asks of a hygiene tool. It answers "here are 869 observations."
Proposed change
--detailor into a sidecar file.CLEAN/N candidates/BLOCKED (evidence gap)— and a fleet verdict at the top.The existing rule that a truncation or evidence gap must be reported per repository rather than once globally should be preserved in the rollup: a reader skimming a summary table must still see that a given repository's absent findings prove nothing.
Acceptance criteria