triage · git:20261010.0939c49 · 2026-10-10 · sha256 af6f8538da84b138
triage git:20261010.0939c49A
Immutable. This exact content never changes and is served at /api/v1/blob/af6f8538da84b138.
---
name: triage
description: 'Read-only grounding phase for a card — every card''s pickup. `/super-bootstrap:triage {ID}` dispatches the `triage` subagent (inherit — the session owner''s model) to ground the card cold — premise verify, aim validate, blast collect — and append a Verdict block — `## Verdict — auto-fix · {date}` (Fix-shape / Probe-deps / Execution tags) or `## Verdict — surface · {date}` (the user is needed — a fork the gateway climbs before any hand-off, or a taste call it brings the author an artifact for) — to `docs/work/{ID}.md`. No code changes — the fix is a separate phase. Use at raw-card pickup (a card with no Verdict block) or when the user asks to triage/investigate a BUG/DEBT/GAP item.'
tags: [triage, verdict, card, pipeline]
---
# Triage — Read-Only Grounding Phase
Grounding pickup lane for a card. The thinking runs in the `triage` subagent by default (`agents/triage.md`, `model: inherit` — the session owner's model is the top tier); this skill is the dispatch shell + absorption protocol. The agent grounds the card cold — premise verify, aim validate, blast collect — sizes the fix, appends a Verdict block to the card; the fix is a later phase that inherits the verdict as its context scope.
## Arguments
| Invocation | Behavior |
| --- | --- |
| `/super-bootstrap:triage BUG-012` (any `BUG/DEBT/GAP-[0-9a-z]+` ID) | Dispatch the `triage` subagent on that card. |
| `/super-bootstrap:triage` (bare) | List open cards with no Verdict block yet; the user picks one, then dispatch. |
## Execution
1. Resolve the card: Glob `docs/work/` first (loads no file content, so the check fires no `docs/**` path-scoped rule) — nothing back → the repo carries no card substrate, whatever else tracks its work; print "No runway installed. Run `/super-bootstrap:setup` to set up the pipeline." and stop. Substrate present → the card file `docs/work/{ID}.md` exists; missing → report "no card {ID}", stop. A Verdict block already present in the card → surface its kind and date instead of re-dispatching (re-triage only on explicit user ask).
2. Land first-hand evidence, then dispatch. The session holds a fact about the card the repo does not — a raw observation, repro output, a first-hand source or API read, the user's own words → append it to the card as an `## Amendment` (verbatim, its source named) first. The cold agent reads the card and the repo, never this conversation (`shared/grounding-discipline.md` rule 1): evidence left in the conversation is lost to it, and a re-run that reads the card differently is the symptom. Dispatch: `Agent` tool, `subagent_type: "triage"`, prompt = the card ID + today's date + the gateway-aligned problem-aim when framing sharpened or corrected the card claim (premise / problem / scenario only). Exclude cause theories and fix preferences (bias-input exclusion) — the aligned aim is the user-validated target, not a prior; the card row carries the frozen claim.
3. Absorb the agent's report (`agents/triage.md` § Reporting):
- **DONE / DONE_WITH_CONCERNS** — relay verdict + card path, then by kind:
- **auto-fix** → post the route line off its `Execution:` tag (inline / phased → implement within the envelope, skipping what the tag skips; full → cluster route per CLAUDE.md).
- **surface carrying `### Taste needed`** → no climb, no MCQ, no Design block ahead of the author's judgment: carry its grounding forward, produce the artifact the author judges (candidate replacement words, a variant to look at) — inline or dispatched by its closure (CLAUDE.md § Dispatch) — and hand it to the author with that grounding beside it. The author's acceptance rules the verdict: it lands as a `## Design — {date}` block recording the accepted artifact or where it lives. A rejection revises the artifact on the author's notes and hands it back; the author drops the card → delete the card file (resolve). A `### Decision needed` whose Findings name the author's eye as the only test takes this branch too: its options are a frame the author did not ask for.
- **surface carrying `### Decision needed`** → climb before any hand-off: `docs/decisions.md` closed forks, then the specs / project docs, then the aligned aim (one option contradicts it → the other wins), then the proxy the verdict's `settles by:` names, run in its sized container — an `inline read` runs here; a `dispatched probe` or `phased build` is a route change, so the framing + route line re-fires (CLAUDE.md § Framing + Route) and the measurement dispatches or lands as a plan block (gateway doesn't build — CLAUDE.md § Dispatch) — a fork that resolves there lands as a `## Design — {date}` block naming the settling source, and the route line follows; only a fork inside business / risk / preference / private authority reaches the user as the verdict's `### Decision needed`, then wait for the ruling. User picks an option (the verdict's recommendation as-is counts) → the gateway appends a `## Design — {date}` block (shape, and how a wait ruling names its party: `docs/work/README.md` § Thread contract, Design line); user drops the card → delete the card file (resolve). A taste item the Findings name carries forward past the ruling and takes the Taste branch.
- **NEEDS_CONTEXT** — relay the named gaps; the answer returns as an `## Amendment` append on the card — via `/super-bootstrap:log` (its amend path) or directly by the answering session.
- **NEEDS_GRANTS** — grant the named tooling and re-dispatch; user round-trip only when the grant itself is user-owned (cost, consent).
- **BLOCKED** — premise wrong; relay the counter-diagnosis to the user.
4. The verdict artifact rides the session's normal envelope commit — no in-phase commit.
## Rules
- **Grounding lands on the card, checkable.** The verdict and the evidence it rests on live in the card, never in the conversation, so a re-run reads the same evidence. Default container: the cold dispatch (step 2) — the subagent's clean context keeps gateway priors out of the judgment, so the gateway does not investigate. The user directs grounding in-session → the gateway grounds inline under `shared/grounding-discipline.md`, its cold judge (rule 1) met instead by a provenance line: step 2's evidence landing first, then a Verdict block in `agents/triage.md` § Output formats shape whose first body line, directly under the `## Verdict — …` header and before any tag or `###` section, is `grounded warm, gateway-inline, on user direction`, and which names each gateway-held cause theory or fix preference it set aside. The gateway then enters step 3's DONE branch with the verdict it wrote. The provenance line tells the user and any later reader that no clean context stood between the gateway's priors and the judgment.
- **Check the verdict aim.** The gateway holds the aligned problem-aim; a verdict that re-aims the problem gets surfaced to the user, not absorbed (CLAUDE.md § Framing + Route).
- **Weigh the verdict's grounding.** A verdict resting on design-prose deduction over direct evidence is unproven — surface it for re-grounding, not adoption and not a competing gateway theory.
- **One card per dispatch.** A batch fans out — each dispatch's write set is its own `docs/work/{ID}.md` (`agents/triage.md` § Phase identity), so concurrent grounding keeps verdicts per-card atomic. The gateway's absorb of each verdict (step 3) stays serial.
- **Verdict block is the state.** No status fields anywhere — a Verdict block's presence says the card is grounded, its kind (auto-fix / surface) says whether the user is needed — `/super-bootstrap:needs-me` reads an unruled `surface` as needing the user; `/super-bootstrap:autorun` grounds an ungrounded card itself.
- **Cleaner:** the session resolving the card deletes the card file (doc-sync temporal cleanup).