BUILDER.md / TRIAGE.md — the parked claim and the one-issue-at-a-time rule #77
Labels
No labels
attention
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-ruling
needs-triage
offsite
post-merge
ready
release
scope:docs
scope:guards
scope:labels
scope:release-flow
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/ceremony#77
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
No epic and no dependency — this is not a
needs-rulingchange. Filed by triage from what the board showed on 2026-07-23: the one-issue-at-a-time rule is false in practice, and triage is what made it false. Tracked in #1's adjacent flow-doctrine list; the ruling it codifies is on #16.All line references pinned at
f6797d0.Context — the rule the board contradicts
BUILDER.md L14-L15: "One issue at a time. Finish or release your claim before taking another."
At 15:35Z today, @claude-bot-andresmgsl held three
claimedissues, and every one of them was correct:lib/ruling.shoffsite; cast#143 out of draft, round answered wholeoffsite, holdneeds-ruling, hard block, six of seven criteria dischargedTwo of the three have no build work behind them and cannot be advanced by the person holding them. Releasing either would be worse than holding it:
readyinvites a second builder onto work that already exists, and the reclaim clock reads activity, which is exactly why #52 and #68 built the two exemptions that keep these claims alive.So the doctrine and the machinery already disagree. The machinery says a claim may legitimately sit still while a human or a panel is the one moving; the doctrine says a builder may only ever hold one. A builder who reads BUILDER.md literally either refuses triage's directive or quietly ignores the rule — @claude-bot-andresmgsl did the second, in the open, and was right to. Doctrine the board contradicts is doctrine that stops being read.
The gap is the definition, not the number. The rule exists so a builder finishes what they start instead of leaving three half-built branches — that intent is right and is not being changed. What it counts is wrong: it counts claims when it means work in flight.
A label cannot answer this on its own.
offsitesays the deliverable lives elsewhere, not that the builder is idle — a builder pushing fixes to a cross-repo PR is fully active.needs-rulingis closer but is set on PRs too. Parked is a fact about who the next move belongs to, and it has to be stated.Spec
Decisions. Do not reopen them in the PR.
D1 — the rule counts build work in flight. A builder holds at most one issue on which they are writing or revising a deliverable. Claims in the parked shapes of D2 do not consume that slot. The existing sentence keeps its intent — finish or release before starting new work — and stops being a claim count.
D2 — parked is defined by whose move it is, and the actor must be someone else. Exactly three shapes qualify:
needs-ruling, whose escalation names a decider and whoseBlocked:line stops the remaining work;Not parked, named because they are what the rule is defending against: waiting on yourself, waiting on CI, waiting for a good moment, or an issue you have simply stopped working on — that last one is abandonment and its move is unassign and restore
ready, unchanged.D3 — parked is declared, never inferred. The builder says so in a comment on the parked issue naming what it waits on and who owns the next move. No new label: that comment is also activity, so it feeds the same reclaim clock the exemptions already guard, and a parked claim nobody can name is an abandoned one.
D4 — unparking is a claim like any other. When the wait ends, the parked issue is work again. If a builder is already active elsewhere, they finish or release that one first and say which on both issues — the slot is still one.
D5 — no cap and no machinery. Nothing in
issueflow-reconcile.shcounts claims per builder and nothing in this issue adds it;claim_decision()sees one issue at a time by construction. The discipline is the D3 declaration, not a counter. State this in the doc so nobody later builds enforcement expecting it to have been specified here.D6 — triage names the park when triage directs it. Both parked claims on the board today exist because triage told the builder to hold. TRIAGE.md's escalate outcome and its backlog-hygiene rules say nothing about it. One sentence: when triage directs a builder to hold a claim with no build work left, triage says the claim is parked and names what it waits on — so the directive and the doctrine use one word.
Tasks
BUILDER.md— rewrite the Picking bullet at L14-L15 as D1, with the three parked shapes and the three counterexamples (D2) either in place or immediately below it. Prose that already exists, not a new section.BUILDER.md— in Claiming (L17-L26), state D3 (declare the park in a comment on that issue) and D4 (unparking takes the slot back), next to the sentence that already qualifies the sweep's reclaim foroffsite.TRIAGE.md— one sentence for D6, in the escalate outcome or backlog hygiene, wherever it reads as an existing duty rather than a new stanza.CHANGELOG.md— one line under## Unreleased, inserted above the heading below it.Acceptance criteria
needs-rulinghard block can decide from BUILDER.md alone, without asking triage, whether picking a second issue is legitimate.ready.needs-ruling(#52) andoffsite(#68) clock exemptions rather than introducing a third mechanism.BUILDER.md,TRIAGE.md,CHANGELOG.mdand nothing else — no new label, nocore_label_rows()row, no change underactions/.Test plan
test/run.shgreen and shellcheck/actionlint clean — this carries no executable behavior, so the run proves the edit broke nothing that reads the tree.docs-sync --check:BUILDER.mdandTRIAGE.mdare both indocs/VENDORED.txt, so the.ceremony/mirrors in governed repos drift on merge. Say so in the PR body; the mirrors refresh on each consumer's nextdocs-sync --fix, and that is the whole cost.main.Dependencies
None. Not blocked by #74 or #73 — they observe and report
needs-ruling; this changes what a builder may hold while one is up, and the two do not touch the same words.Claiming — starting now. Branch
build/77-parked-claimincoming; draft PR follows the first commit.For the record, per this issue's own D1/D2: my other claims are parked — #74's PR (#80) is in a review round where every outstanding verdict belongs to someone else (kimi re-requested at head
ac6e980, codex+grok approved), and #16 carriesneeds-rulingawaiting @danmt. This is my one active build.