Repository navigation
fix(finding-triage,done-check,gh-body-audit,implement,review-pipeline): close a finding by its disposition - #257
Merged
Conversation
…ine,implement): close a finding by its disposition Add an `abandoned` disposition for a finding whose validity is not known, or whose fix is not a local edit, when the user directs that the investigation that would settle it not be run. Define a closed finding in finding-triage, and have the gates that worded a waiver of their own point at that definition instead. The waiver in gh-body-audit named no actor, so it could be read as the run waiving its own findings; every closure that makes no fix is now the user's decision.
… bound what an entry directs Scope each entry's handling to the time a finding holds that entry, so the exits the investigation-naming entries state do not contradict `abandoned`. Name both unknowns in the `abandoned` condition instead of "the investigation". In done-check, state the row rule for every closure rather than for three dispositions, and leave the fix to the closed definition. In gh-body-audit, bind the gate to the report for the draft as filed, and drop the copy of the gate from the description and the README row.
…e filed draft State the gh-body-audit gate as what the caller's next step requires — a report for the draft as it will be filed, with every ⚠ closed — so a revised draft with no report of its own cannot pass. Call a finding whose external-system claim cannot be verified open, the term the closed definition uses. Leave done-check's sentence on what a deferred row shows as it was.
…): define closed as closure without a fix Narrow the closed definition to the four dispositions that end a finding with no edit. A fixed finding passes each gate the way it already did, by the re-audit coming back clean, so the gates keep their wording and only the waiver clause becomes a reference to the definition. Scope the premise-check outcome sentence to a completed verification, and say that done-check's gate states how a concern closes rather than that it owns the list.
Key the `abandoned` condition on the user directing that no further work be done, whatever work remains, so a finding whose non-local fix became known in research still has an entry when the user declines it. Put the direction first so it governs both alternatives. Restore the opening of done-check step 5, which told the run to fix any remaining ⚠.
…ition; drop the caller restatement
…review to its own issue
There was a problem hiding this comment.
🟢 Approval recommended
The disposition model and its gate references are consistent and appropriately centralized.
0 open findings
What changed in this PR
Centralizes finding closure in finding-triage and updates consuming gates to use that shared definition.
Changes:
- Adds the
abandoneddisposition and defines closed findings. - Aligns audit and implementation gates with the centralized closure contract.
- Bumps the plugin version to
2026.10.12.
| File | Description |
|---|---|
skills/finding-triage/SKILL.md |
Defines abandonment and finding closure. |
skills/done-check/SKILL.md |
Uses centralized closure rules. |
skills/gh-body-audit/SKILL.md |
Replaces inline waivers with defined closure. |
skills/implement/SKILL.md |
Removes duplicated closure guidance. |
skills/review-pipeline/SKILL.md |
Delegates closure semantics to done-check. |
.claude-plugin/marketplace.json |
Bumps the plugin version. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
This was referenced Oct 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
A gate that could not get a finding fixed let it through on a waiver worded in the gate itself, and the two gates that did this disagreed on who may waive:
skills/done-check/SKILL.mdlet a concern through when "explicitly waived by the user with reasoning", andskills/gh-body-audit/SKILL.mdwhen it had "an inline waiver with a one-line justification", which names nobody. The disposition catalogue inskills/finding-triage/SKILL.mdhad no entry for a finding whose validity stays unknown, or whose fix is not a local edit, once the user stops work on it.The escape is now a disposition. The catalogue gains
abandonedand a definition of a closed finding, and both gates take their closing terms from that definition.Closes #173
Changes
skills/finding-triage/SKILL.mdabandonedis a disposition: the user directs that no further work be done on the finding in this run, and either its validity is not known or it is valid and its fix is not a local edit. The decision is the user's alone, and a follow-up is kept where the user directs one.false-positive,defer,wontfixorabandonedand the run has done what that entry directs.uncertain-validityto keep investigating, and the one inopens-a-questionto re-enterresearch, stop binding a finding the user has taken toabandoned.invariant-premise-checkstates its two outcomes as what follows once the premise is verified, not as the entry's only exits.wontfixcontrasts a reason to postpone with "a reason to drop the fix", which leaves the word "abandon" to the new slug.abandoned, as it does not license the other three closing entries.skills/done-check/SKILL.mdfinding-triagedefines closed".skills/gh-body-audit/SKILL.mdfinding-triagedefines closed; a closed ⚠ does not block".skills/implement/SKILL.md,skills/review-pipeline/SKILL.mddone-check's step 5 gate and says nothing further about what closes a concern there..claude-plugin/marketplace.jsonmetadata.versionis2026.10.12.Impact
Three behaviors change for a run that reaches one of these gates.
done-checkneeds what thedeferentry asks for, an issue or a note kept on the user's direction. The gate used to ask for a follow-up issue filed with the user's approval.gh-body-auditthat is valid, or whose validity is unsettled, passes unfixed only on the user's direction. The old wording, "an inline waiver with a one-line justification", named no actor.abandonedwith a follow-up kept.skills/file-issue/SKILL.md,skills/file-pullreq/SKILL.mdandskills/research/SKILL.mdblock ongh-body-auditstep 4's terms and state none of their own, so they follow without an edit.skills/review-telemetry/SKILL.mdtakes its disposition values from the catalogue by reference, andskills/copilot-review/SKILL.mdhas replies name whichever slug a finding holds; neither is edited.Verification
pre-commit run --all-fileson the branch:ruff checkandruff formatreportPassed.mdformatreportsFailedbecause it rewritesCLAUDE.md, which this change does not touch and which it rewrites the same way onmain.rg -n -i 'waiv' skills README.md CLAUDE.mdreturns four files: the repeat step ofskills/codex-review/SKILL.md, and three whose object is not a finding (skills/code-review-gate/SKILL.mdwaives a missing review,skills/review-pipeline/SKILL.mdrefers to that waiver,skills/review-telemetry/SKILL.mduses the word of a telemetry entry).skills/finding-triage/SKILL.mdalone. A finding whose validity rests on an external system the run cannot execute, with the user directing no more work on it in this run, takesabandonedwith no second candidate. With the user declining only that verification, the reader gave keeping the entry the finding held as the more literal reading, and noted that no sentence supports reading that answer asabandoned.skills/done-check/SKILL.md. Step 5 lets the run proceed past a concern closed aswontfixand past a row whose auditor quoted no rule clause, closed asabandoned, and not past a concern atuncertain-validitywith no direction from the user.skills/gh-body-audit/SKILL.md. The run may not, on its own judgment, proceed past a ⚠ it considers valid.Notes
skills/codex-review/SKILL.md's repeat step keeps its own waiver. That sentence is also the only statement that a user's decision holds across the loop's iterations, and a replacement needs a criterion for when a finding in a later iteration is the same finding. Reviewer loop exits pass a finding whose disposition is unsettled #169 covers that loop.skills/codex-review/SKILL.mdandskills/review-pipeline/SKILL.mdthat continue on a count ofactionablefindings still pass a finding that is not closed. Reviewer loop exits pass a finding whose disposition is unsettled #169.done-checkstep 5 says a deferred row "stays ⚠ with the deferral recorded in its Note" and says nothing for a row closed aswontfix,abandonedorfalse-positive. done-check: step 5 states a deferred row's verdict but not a waived row's #176.done-checkand ofgh-body-auditstill triage intoactionableandfalse-positiveonly, anddone-checkstep 5 still opens "If any ⚠ remains, fix before proceeding". done-check, gh-body-audit: concern triage names two of seven finding-triage dispositions #166.wontfixandabandonedrequire is recorded, andgh-body-auditno longer says where a closed ⚠'s disposition is recorded. finding-triage: wontfix's required reasoning has no receiving surface #177.criticaldoes not ordinarily warrantwontfix" does not mentionabandoned. finding-triage: severity restrains wontfix but no tier need exist #180.