$npx -y skills add gtrabanco/agentic-workflow --skill fold-findingsTake a review/audit findings ledger (review-findings.md) or an audit-pr BLOCKED verdict's blocker list and truly repair each fix-now finding — closing the escape hatches a lazy or weak model reaches for: a known-issues/backlog dump, a decisions.md tradeoff note, a downgrade
| 1 | # Fold Findings |
| 2 | |
| 3 | Repair fix-now findings for real. `review-change` and `audit-pr` already |
| 4 | classify — this skill's only job is to make each classified fix-now finding |
| 5 | disappear by fixing its root cause, never by relabeling, deferring, or |
| 6 | weakening the check that caught it. |
| 7 | |
| 8 | ## Turn contract — verify before ending the turn |
| 9 | |
| 10 | ``` |
| 11 | ✓ 1. Every finding taken up this turn produced its fixed per-finding output |
| 12 | line (FOLDED <sha> | DISPUTED <reason> | BLOCKED <missing input> | |
| 13 | REPLAN <proposed phase(s)>) — no finding silently skipped. |
| 14 | ✓ 2. For each FOLDED finding: the gate was RUN (not assumed) and green, a |
| 15 | single commit was RUN with its sha pasted, and (if the branch has an |
| 16 | open PR) `git push` was RUN immediately after that commit. |
| 17 | ✓ 3. The ledger row for each FOLDED finding was flipped `folded: no → yes` |
| 18 | in the same commit — never a bare code fix with the ledger left stale. |
| 19 | ✓ 4. No finding was reclassified: no severity downgrade, no fix-now → |
| 20 | non-fix-now, no "actually this is fine" — a genuine objection produced |
| 21 | `DISPUTED` with evidence, routed to `/triage-issue`, never a silent drop. |
| 22 | ✓ 5. The closing `Folded: n/m · Disputed: k · Blocked: j[ · Replan: r]` tally and the |
| 23 | outcome-branched `→ Next:` block are printed as the ABSOLUTE last output. |
| 24 | ``` |
| 25 | |
| 26 | About to end the turn with any box unchecked? The turn is NOT done — complete |
| 27 | the missing box first (weak models drop end-of-document duties; this list is |
| 28 | first on purpose). |
| 29 | |
| 30 | ## When to use |
| 31 | |
| 32 | - After a `/review-change` run reports `Decision: FAIL` with one or more |
| 33 | fix-now findings on the unit's `review-findings.md` ledger. |
| 34 | - After an `/audit-pr` run reports `VERDICT: BLOCKED` — every blocker on a |
| 35 | BLOCKED verdict is fix-now by definition and should already be persisted to |
| 36 | the same ledger (see `skills/audit-pr/SKILL.md` step 5). If it isn't — |
| 37 | ledger absent or blockers missing — this skill reconstructs the rows from |
| 38 | the verdict itself (Step 0) instead of reporting "no findings". |
| 39 | - Never for findings not yet routed fix-now (postpone / wontfix / promote / |
| 40 | documented-tradeoff) — those are `/triage-issue`'s job, not this skill's. |
| 41 | |
| 42 | ## Step 0 — Discover the project (always first) |
| 43 | |
| 44 | Per the agent guide's **Workflow conventions**, then read what this skill |
| 45 | needs: |
| 46 | |
| 47 | 1. The unit's `review-findings.md` ledger — `docs/features/<NN>-<slug>/` for a |
| 48 | feature or `docs/fix/<n>-<topic>/` for a fix. Fixed schema (owned by |
| 49 | `review-change`/`audit-pr`, never redefined here): |
| 50 | |
| 51 | ``` |
| 52 | | id | file:line | axis | severity | class | route | folded | |
| 53 | ``` |
| 54 | |
| 55 | **Ledger missing or missing blockers after an `audit-pr` BLOCKED verdict → |
| 56 | reconstruct, never report "no findings".** If this run was invoked after a |
| 57 | `VERDICT: BLOCKED` (the verdict is in the conversation, pasted by the user, |
| 58 | or in the PR's audit comment — read it via the forge CLI when needed) and |
| 59 | the ledger file is absent or lacks rows for one or more listed blockers: |
| 60 | append one row per missing blocker yourself, in the ledger's fixed schema |
| 61 | (`class: fix-now`, `folded: no`, next free `Fn` ids, dedupe by |
| 62 | `file:line`+axis), commit it as `docs(<unit>): reconstruct fold ledger from |
| 63 | audit-pr blockers`, and proceed with the fold. Ending the turn with |
| 64 | "no findings" while a BLOCKED verdict lists blockers is a contract |
| 65 | violation. |
| 66 | 2. Rows with `folded: no` are this turn's queue. If invoked with explicit |
| 67 | finding IDs as arguments, restrict the queue to those IDs only — everything |
| 68 | else on the ledger is left untouched (never opportunistically folded). |
| 69 | 3. The project's verification gate (type-check, tests, build — per its own |
| 70 | docs) and its forge CLI (examples use `gh`; translate if the project |
| 71 | declares another forge). |
| 72 | 4. Whether the branch already has an open PR (`gh pr view` or equivalent) — |
| 73 | this decides whether each commit pushes immediately (see *Process*). |
| 74 | |
| 75 | ## Frozen classification (hard rule, never relaxed) |
| 76 | |
| 77 | This skill **never** edits a finding's `severity`, `class`, or `route`, and |
| 78 | never moves a finding out of fix-now. Those fields belong to `review-change` / |
| 79 | `audit-pr`, the skills that produced the verdict — reopening them here would |
| 80 | let a fix turn into a recl |