finding-triage
Single source of truth for per-finding review-triage dispositions and response selection for actionable findings, which the review and audit skills apply by…
Skill by ultimatile
Chalk Labs
Need help deploying finding-triage?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/ultimatile-finding-triage
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/finding-triage
What's inside
- Skill name
finding-triage- Description
- Single source of truth for per-finding review-triage dispositions and response selection for actionable findings, which the review and audit skills apply by reference.
- License
- MIT
- Instructions
- 104 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Finding Triage (SSOT) Skills that triage review findings apply these dispositions by reference; do not copy the class definitions into them, point at them by name. A reviewer (Codex, Copilot, a fresh-context auditor) produces findings without the project context you hold — test results, design intent, scope constraints, conversation history. Triage is the step that converts a raw finding into a disposition. This file is the catalogue of dispositions and the response-selection rules for actionable findings; neither varies by reviewer. ## Scope: stateless, per-finding Every disposition here is judged on **one finding in isolation** — no dependence on what other findings said or on prior iterations. Loop-level criteria that depend on history across review iterations (oscillation detection, re-triage carryover policy) are **out of scope for this SSOT** — they belong to whatever orchestrates the review loop. A standalone review run applies these per-finding classes without the loop machinery — which is exactly why the classes cannot live in the loop orchestrator alone. ## The dispositions Each finding receives exactly one disposition. A finding may be *re-triaged* to a different disposition after investigation (e.g. `uncertain-validity` → `actionable`), but at any moment it holds one. What an entry tells the run to do with a finding binds only while the finding holds that entry. - **actionable** — a real issue the reviewer correctly identified, whose resolution is a **local edit**: one the run makes directly, needing none of the non-local work that defines `opens-a-question` below, however many sites it touches — `generalize`, `delete`, and `deduplicate` below are local in this sense. Which edit is selected per **Response selection (actionable findings)** below. A run that judges the edit out of scope for the current task asks the user whether to make it in this run, and makes it only if the user says to. - **false-positive** — plausible but wrong given context the reviewer lacked (test results, deliberate design choice, a system constraint that rules out the hypothesized input). Dismiss **with explicit reasoning** stated to the user. Never silently override a finding: false-positive classification is itself a triage step the user can challenge. This should be rare enough to be worth paper-trailing. When the dismissal rests on the behavior of an external system (a markdown renderer, parser, compiler, ABI, API), verify it before dismissing per **Verifying external-system claims** below. - **uncertain-validity** — you cannot yet tell whether the finding is real. The open question is **validity**. Investigate — read code, run a targeted probe — until it resolves to `actionable` or `false-positive`. When the targeted probe judges an external-system-behavior claim, verify it per **Verifying external-system claims** below. Do not carry an unresolved `uncertain-validity` past the point where a fix would be committed. - **opens-a-question** — the finding **is real**, but its resolution is **non-local**: it needs investigation or a design choice beyond a local edit. Both default responses are wrong here: - "fix in place" is wrong — the fix is not local. - "escalate to the user" is wrong — the resolution is probe-able. The correct handling is to **re-enter `research`** with the finding as the task, then escalate only the genuinely user-owned residue (scope authority, taste, an external constraint). - **invariant-premise-check** — the finding's *conclusion* may be correct, but its *premise* may be wrong. Applies to claims about mathematical properties, semantic validity, or precondition necessity. Before committing a fix, **verify the premise** — check whether the invariant the finding assumes actually holds, by reading code and tests and running targeted experiments. When the premise is an external-system-behavior claim, verify it per **Verifying external-system claims** below. Once the premise is verified, the finding resolves to `actionable` (premise holds → fix it) or `false-positive` (premise fails → the finding's conclusion does not follow). The mechanism for verifying the premise is the caller's; this SSOT owns only the class. - **defer** — the finding is valid and its fix is understood, and the user directs that it not be fixed in this run, by any direction other than one that meets `wontfix` below. A fix is understood, here and in `wontfix`, exactly when it is the local edit `actionable` names. Keep a follow-up for it and do not fix now; a follow-up is an issue or a note that carries the finding to a later fix. Entering this entry or `wontfix` takes the finding out of `actionable`. - **wontfix** — the finding is valid and its fix is understood, and the user directs both that it not be fixed in this run and that no follow-up be kept. The decision is the user's alone; the run records the disposition and the user's reasoning, which states what the fix would have cost. Both a reason to postpone and a reason to drop the fix can hold of one finding; where they do, the user's direction, not the reason, selects. - **abandoned** — the user directs that no further work be done on the finding in this run, and either whether it is valid is not known, or it is valid and its fix is not the local edit `actionable` names. The decision is the user's alone; the run records the disposition and the user's reasoning, and keeps a follow-up where the user directs that one be kept. Meeting this condition takes a finding out of `uncertain-validity`, `invariant-premise-check` or `opens-a-question`, whichever it held. ## Closed findings A finding is **closed** when it holds `false-positive`, `defer`, `wontfix` or `abandoned` and the run has done what that entry directs. ## Taking a finding as its disposition directs Taking a finding as its disposition directs follows it through every re-triage that work produces, and ends when the finding is closed or the edit that resolves it has been made. ## Response selection (actionable findings) An `actionable` disposition settles validity; it does not settle the edit. Select the edit with the rules below — per-finding and stateless, like every disposition above. **Inputs**: the finding; the target text; the evidence the run has already produced (test results, executed probes); and the predicate below. **Predicate**: - **load-bearing** — does the target text, taken as a whole across every copy the finding concerns, genuinely require the disputed content (e.g. the coverage an enumeration claims, the statement divergent copies make, the behavior a description asserts)? Judge the need for the content itself, not whether deleting one copy happens to leave it stated elsewhere. **Axes**: - **severity** — exclusive tiers; take the first that applies. `critical`: the specified behavior is wrong on the happy path. `may-fail`: a failure mode exists. `consistency-only`: behavior is identical under every admissible reading; only descriptions can drift. Severity does not choose the edit — the selection below is severity-independent. Severity bears instead on declining the fix: a finding at `critical` does not ordinarily warrant `wontfix`. - **case-space** — `bounded` / `unbounded`; defined whenever the finding is a coverage-gap claim — the rule's domain may be stated as an enumeration, stated as a prose predicate, or left implicit (`n-a` for findings that claim no coverage gap). A domain not shown bounded (finite, closed membership) is classified `unbounded`; an implicit domain is never shown bounded. **Response kinds**: - **fix-in-place** — the local edit the finding asks for. - **generalize** — restate the coverage intensionally: replace an enumeration with its defining predicate, or correct a stated predicate so it covers the domain. - **delete** — remove the claim that generates the disputed surface, together with the references to it. - **deduplicate** — collapse divergent copies into one statement plus references. **Selection — which edit.** Dispatch on the finding's class; take the first branch that fits: - **Coverage-gap claim** (case-space is defined), `bounded` → add the missing case (`fix-in-place`) when load-bearing is true; `delete` the claim that declares the domain when it is false. - **Coverage-gap claim**, `unbounded` → never add the case, at any severity. `generalize` when load-bearing is true; `delete` when it is false. When `generalize` is selected but the defining predicate is not derivable from the finding and the target text, re-triage to `opens-a-question` instead. - **Drift between copies of one rule** — the same rule stated in more than one place, whether or not the drift affects behavior → `deduplicate` when load-bearing is true (the collapsed statement carries the corrected content); `delete` when it is false. Rewriting the divergent copies in place is not an outcome. - **Otherwise** (a statement misdescribes the behavior it annotates, a wrong action, a typo) → `fix-in-place`: correct it, when load-bearing is true; `delete` when it is false. The selected edit is applied in the current run, subject to the question `actionable` puts to the user for an out-of-scope edit; a re-triage out of `actionable` exits instead. Declining the fix is such an exit; this section does not settle which disposition a declined finding takes, and the entry conditions in **The dispositions** above govern that question. The regeneration signal — whether the target sentence was written to answer a prior finding — is iteration history, out of scope here per **Scope: stateless, per-finding**. ## Findings judged against a plan's Failure scenarios section This section applies to the findings of a review of a plan that carries `research`'s Failure scenarios section. A finding that asks for a guard, a validation, or other defensive handling only against scenarios the section's table lists as Covered `no` is `false-positive`: those rows record the deliberate design choice, and the reasoning cites them. A finding that asks for such handling against a scenario the table does not list, which is every scenario when the section states that the change handles no input or operation, and against no scenario the table lists as covered, is `opens-a-question` when it shows one of `research`'s scenario records, of the first or second kind of Occurs evidence, that reports the scenario happening: whether that scenario gets a row, and with which Covered value, is the plan's decision. Without such a record it is `false-positive`: the plan deliberately handles only the scenarios its section identifies, and the reasoning states that the finding shows no record of this one happening. A finding that shows the section is not accurate for the change, as `research` defines accurate, takes neither `false-positive` above: the section is the plan's premise, so the finding is `opens-a-question`. Every other finding takes the dispositions above. ## Pre-existing instances do not license dismissal A finding is not downgraded to `false-positive`, `defer`, `wontfix` or `abandoned` merely because the surrounding code already exhibits the same flaw. Pre-existing instances of a problem are unextracted debt, not a convention that licenses adding another — "matches the surrounding code" describes the debt, it does not dismiss the finding. Dismissal still requires the disposition's own bar: for `false-positive`, context that makes *this* finding wrong; for `defer`, `wontfix` and `abandoned`, the user's direction the entry names. ## opens-a-question vs uncertain-validity The two differ in **what is known**: - `uncertain-validity` — "**is the finding real?**" Validity unknown. - `opens-a-question` — "the finding **is** real, but its **resolution is non-local**." Validity known. A finding can pass through both in sequence: resolve validity first (`uncertain-validity` → real), then, if the fix turns out non-local, re-triage to `opens-a-question`. ## The tell for opens-a-question An `opens-a-question` finding often first reads as a **user gate** — "ask the user to decide X." The diagnostic: a *genuine* user gate stays a gate after investigation, whereas an `opens-a-question` **dissolves the moment someone investigates** — it was never user-owned. If the escalation would evaporate once a probe runs, route it through `research`, not straight to the user. ## Verifying external-system claims What follows binds a verdict that rests on a claim about an **external system's behavior** (a markdown renderer, parser, compiler, ABI, API, runtime), whichever disposition that verdict carries. **Requirement.** Before committing a verdict that rests on such a claim, run the finding's input through that system's **authoritative implementation** (`gh api /markdown` for GitHub rendering; the actual compiler / parser / runtime otherwise). A local proxy (a regex standing in for a renderer, a reimplemented parser) or a hand-derivation is built from your own mental model of how the system behaves — the same model that produced your reading — so it can only confirm that reading; only the authoritative implementation can test whether the reading holds. **Scope.** This fires only for claims about an external system's *behavior*, and only at the point a verdict is committed (a fix shipped, a finding dismissed) — not for intermediate reasoning. **When the authoritative implementation is unavailable or too costly to run.** Cost decides whether you can pay to confirm; it never makes a proxy into sufficient evidence. If you cannot run the authoritative implementation, the claim does not resolve via a proxy: the finding stays unresolved rather than advancing to a committed verdict, and whether the verification is worth its cost — or whether an alternative authoritative source exists — escalates to the user.
From ultimatile/development-skills, MIT.
More from ultimatile/development-skills
- 0.564score
copilot-review
ultimatile
Create a GitHub PR with Copilot as reviewer and poll until the review arrives.
SkillAFreshness: AClaude Code +9 - 0.561score
authoritative-text-rules
ultimatile
Single source of truth for audit items covering text that an agent executes as instructions.
SkillAFreshness: AClaude Code +9 - 0.561score
codex-contract-test-review
ultimatile
Narrow Codex pass on a newly added contract test, verifying it is not tautological and would fail on the original buggy implementation.
SkillAFreshness: AClaude Code +9 - 0.561score
bug-to-contract
ultimatile
Promote a review finding or bug fix into a contract test that prevents the underlying invariant violation from recurring.
SkillAFreshness: AClaude Code +9 - 0.561score
code-review-gate
ultimatile
Run the built-in /code-review against the current diff through a fallback lane chain with lane-failure, retry, and exhaustion handling.
SkillAFreshness: AClaude Code +9 - 0.561score
diff-root
ultimatile
Single source of truth for the diff root — the ref a change is measured from — covering the consumer contract, where the root comes from, and the per-command…
SkillAFreshness: AClaude Code +9 - 0.561score
done-check
ultimatile
Single-pass audit of the current diff against the applicable quality rule sets before declaring a task complete or requesting external review.
SkillAFreshness: AClaude Code +9 - 0.561score
gate-miss-to-issue
ultimatile
Promote a late-caught defect — one an earlier gate should have caught — into a development-skills issue proposing a fix to that gate's procedure.
SkillAFreshness: AClaude Code +9 - 0.561score
file-pullreq
ultimatile
Draft and file a GitHub PR using gh-body-conventions and the PR body skeleton, via the gh-post wrapper.
SkillAFreshness: AClaude Code +9 - 0.561score
finding-to-audit
ultimatile
Promote a review finding into a pre-commit audit rule that catches the diff-inspectable issue class (import direction, pub widening, debug artifacts, dropped…
SkillAFreshness: AClaude Code +9 - 0.558score
file-issue
ultimatile
Draft and file a GitHub issue using gh-body-conventions and the issue body skeleton, via the gh-post wrapper.
SkillAFreshness: AClaude Code +9 - 0.558score
codex-plan-review
ultimatile
Review an implementation plan with OpenAI Codex before coding, getting a second opinion on assumptions and approach.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 71
- Last commit (this folder)
- Oct 22, 2026 (8 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ultimatile/development-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ultimatile
- 0.564score
copilot-review
ultimatile
Create a GitHub PR with Copilot as reviewer and poll until the review arrives.
SkillAFreshness: AClaude Code +9 - 0.561score
codex-contract-test-review
ultimatile
Narrow Codex pass on a newly added contract test, verifying it is not tautological and would fail on the original buggy implementation.
SkillAFreshness: AClaude Code +9 - 0.561score
bug-to-contract
ultimatile
Promote a review finding or bug fix into a contract test that prevents the underlying invariant violation from recurring.
SkillAFreshness: AClaude Code +9 - 0.561score
code-review-gate
ultimatile
Run the built-in /code-review against the current diff through a fallback lane chain with lane-failure, retry, and exhaustion handling.
SkillAFreshness: AClaude Code +9 - 0.561score
authoritative-text-rules
ultimatile
Single source of truth for audit items covering text that an agent executes as instructions.
SkillAFreshness: AClaude Code +9 - 0.561score
diff-root
ultimatile
Single source of truth for the diff root — the ref a change is measured from — covering the consumer contract, where the root comes from, and the per-command…
SkillAFreshness: AClaude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get finding-triage running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
finding-triage skill. Agent Mart. https://agentmart.dev/skills/ultimatile-finding-triage (last updated 2026-10-24)