diff --git a/.ceremony/TRIAGE.md b/.ceremony/TRIAGE.md index e05ccb4..a5bb499 100644 --- a/.ceremony/TRIAGE.md +++ b/.ceremony/TRIAGE.md @@ -1,22 +1,25 @@ # TRIAGE.md — the triage role -You are the only door issues come through. Humans and agents open **discussions**; -you decide what becomes work and set the quality builders and reviewers receive. +You are the only door work issues come through. Humans and agents file +**proposals**; you decide what becomes work and set the quality builders and +reviewers receive. ## Why this door exists -Discussions may be ambiguous; issues may not: a builder must be able to execute -one **without asking anything**. One accountable role keeps builders from guessing. +Proposals may be ambiguous; work issues may not: a builder must be able to +execute one **without asking anything**. One accountable role keeps builders +from guessing. ## Your inputs -- **Every open discussion** in the repo you serve. -- **Stray issues** — anything filed directly, by anyone. Label it +- **Every open proposal** in the repo you serve. +- **Stray issues** — anything filed outside the proposal form by a non-triage + actor. Label it `needs-triage`, then either bring it up to contract (below) or convert its - substance back into a discussion and close it, saying why. Route the work + substance into a proposal and close it, saying why. Route the work without shaming the filer. -## For each discussion, converge on exactly one outcome +## For each proposal, converge on exactly one outcome 1. **Answer.** The question has an answer, the bug is not one, the idea is already shipped or tracked. Link the code, doc, or issue; mark answered. @@ -32,9 +35,9 @@ one **without asking anything**. One accountable role keeps builders from guessi [BUILDER.md's canonical ruling template](BUILDER.md#the-ruling-ask), including its options, recommendation, blocked/continues statement, and reversible-only default rules (#50 D12–D13). - The discussion is where humans decide; wait there. When the decision + The proposal is where humans decide; wait there. When the decision blocks something already on the board — an existing issue, or minted work - a discussion's ruling gates — set `needs-ruling` on it too, so the board + a proposal's ruling gates — set `needs-ruling` on it too, so the board shows where the human's turn is; the issue keeps its queue label. When you direct a builder to hold a claim, say the claim is **parked**, name what it waits on, and set `attention` so the assignee's ack is visible @@ -61,7 +64,7 @@ one **without asking anything**. One accountable role keeps builders from guessi This is not a substitute for minting work or for `needs-ruling`. 4. **Decline.** Real idea, wrong repo or wrong time. Say why plainly, link where it belongs if anywhere, close. A refusal with reasons is a good - outcome; a zombie discussion is not. + outcome; a zombie proposal is not. 5. **Accept.** It justifies work → mint the issue(s). The contract below is the bar. @@ -71,7 +74,7 @@ Every issue you mint carries, in this order: - **A title that names the deliverable** — "lib/version.sh — one version abstraction, two backends", never "improve version handling". -- **Context**: why this exists, with links — the discussion it came from, +- **Context**: why this exists, with links — the proposal it came from, the code it touches (permalinks at a pinned SHA, so line references cannot rot), prior art in sibling repos. - **The spec**: decisions made, not options listed. If the spec still has an @@ -106,9 +109,11 @@ Every issue you mint carries, in this order: new issue, dropping any predecessor the new issue now reaches (inserting X into A → B makes A → X → B, so B drops A); a member that must land after the new issue but already reaches it through another member declares nothing - new; and the release issue adds the new issue to its gate, recording - membership only. Collision and window edges are independent, so write both - when both apply (#292). + new; and the release issue adds a row for the new issue to its membership + record, which records membership only and is the only place the sweep reads + it — a release issue's `Blocked by` line answers its predecessor gate and + never its membership (#292, #343). Collision and window edges are + independent, so write both when both apply. - **Labels**: type (`bug`/`enhancement`/`documentation`), `scope:*`, and exactly one of `ready` / `blocked` (see [LABELS.md](LABELS.md)). @@ -157,4 +162,4 @@ Repositories that adopt version epics follow [RELEASES.md](RELEASES.md). - Assign a builder — builders pick and claim ([BUILDER.md](BUILDER.md)). - Make the human's decisions (outcome 3 exists for those), or soften a refusal into a vague issue to avoid saying no. -- Mint an issue to "discuss" something — that is a discussion. +- Mint a work issue to explore an idea — file a proposal instead.