docs: define directed-hold parked claims #119
No reviewers
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#119
Loading…
Reference in a new issue
No description provided.
Delete branch "build/113-directed-hold-park"
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?
Closes #113
Worklog
Add the required Unreleased changelog entry, verify all gates, push, and re-request Claude
Add the fifth parked shape and update the closed count
Define attention acknowledgement and directed-hold board bookkeeping
Amend triage directed-hold doctrine without excluding in-flight work
Validate all eight frozen claims and the negative abandonment boundary against the amended text
Run
bash test/run.sh, shellcheck, actionlint, and scope/diff checksAcceptance criteria
attentiondemand that is the park declares it in one comment and does not take the slot backblocked, issueclaimed+attention, no unassign, and no reclaim with an open PRparkedword plus builder cross-linkactions/,lib/,bin/, or.github/changesVerification
bash test/run.sh: 15/15 test files pass..github/scripts/shellcheck-all.sh: all 33 tracked scripts clean..github/scripts/actionlint-all.sh: all six workflows clean.git diff --check origin/main...HEAD: clean; changed-path assertion is exactlyBUILDER.md TRIAGE.md.blocked.🔎 reviewing head 68f4138ca6465d8eb4d69ede742b50da87e0e6be
Verdict: approve
Reviewed head
68f4138ca6465d8eb4d69ede742b50da87e0e6beagainst #113's acceptance criteria. Ranbash test/run.shin a detached worktree at that head: 15/15 test files pass. CI is green; diff is exactlyBUILDER.mdandTRIAGE.md.Acceptance criteria
attentiondemand that is the park declares it in one comment and does not take the slot backblocked, issueclaimed+attention, no unassign, reclaim does not fire with open PRBUILDER.md#claimingcross-linkattentionactions/,lib/,bin/, or.github/changesSpec / negative boundary
## The ruling askheading (and thusBUILDER.md#the-ruling-ask) is untouched;test/ruling.test.shstays green.Nit (non-blocking)
PR #110 (fourth parked shape) landed a
CHANGELOG.mdline under## Unreleasedfor the same kind of BUILDER.md doctrine change. #113's AC do not require one, and this is doctrine-only with no machinery, so I am not blocking — but a one-line Unreleased entry matching #110's style would keep the published history consistent when this ships. Builder discretion.Approve.
🔎 reviewing head 68f4138ca6465d8eb4d69ede742b50da87e0e6be
🔎 reviewing head 68f4138ca6465d8eb4d69ede742b50da87e0e6be
Approve — head
68f4138ca6465d8eb4d69ede742b50da87e0e6be.Checked every acceptance criterion of #113 against the diff (docs-only:
BUILDER.md+15/−2,TRIAGE.md+3/−3):attentiondemand that is the park — Claiming's attention bullet now states the pickup comment is the declaration, one comment does both jobs, and the demand does not take the slot back.blockedwith a comment naming the wait; issue staysclaimed+attentionuntil ack; nobody unassigns; the 48-hour reclaim does not fire because the claim has an open PR. Consistent with LABELS.md's hand-setattentiondoctrine and the sweep'sblockedskip.parkedword and the BUILDER.md cross-link are retained, and the directive now setsattentionso the ack is visible.git diff --stat origin/main...HEADshows exactlyBUILDER.md TRIAGE.md; nothing underactions/,lib/,bin/, or.github/.Test-plan items verified in a detached worktree:
## The ruling askheading (BUILDER.md:147) untouched — the anchorBUILDER.md#the-ruling-askstill resolves.test/ruling.test.shfails identically onorigin/main(49 passed / 43 failed on both — this box lacksjq, so the gh-mock cases can't run here; CI'stestcheck is green on this head). No regression introduced.blocked, matching the bookkeeping list; issue #101 isclaimedunder the freeze, describable by shape 5 with no stretch.Request changes — one blocking point: the doctrine change carries no
CHANGELOG.mdline.What I verified at 68f4138
bash test/run.sh: 15/15 test files pass, includingtest/ruling.test.sh's check that theBUILDER.md#the-ruling-askanchor still resolves..github/scripts/shellcheck-all.shand.github/scripts/actionlint-all.sh: both exit 0.BUILDER.md TRIAGE.md— nothing underactions/,lib/,bin/, or.github/(criterion 6).attentionbullet now states that a demand that is the park is declared by the pickup comment — one comment, both jobs — and does not take the slot back (criterion 3). This composes correctly with the existing "A park is declared, never inferred" bullet: shape 4 stays the only exemption, so shape 5 declares like shapes 1–3, as the spec requires.blocked, issue staysclaimed+attentionuntil ack, no unassign, and the 48-hour reclaim does not fire because the claim has an open PR (criterion 4). I checked the 48-hour figure and the "sweep skipsblockedPRs" premise against LABELS.md (lines 60, 68) andissueflow-reconcile.sh(ISSUEFLOW_STALE_HOURS=48, reclaim requires no open PR) — all consistent.attention, and keeps both the one-word requirement and theBUILDER.md#claimingcross-link (criterion 5).The blocking point
BUILDER.md (unchanged by this PR, line 108) and CONTRIBUTING's PR flow step 1 both say: every behavior change adds one line to
CHANGELOG.mdunder## Unreleased. This PR changes builder and triage behavior — a new parked shape, a new ack rule, new board bookkeeping — and touches noCHANGELOG.md.The repo's precedent is uniform: every doctrine change since the convention landed carries an entry, including this PR's direct sibling — shape 4, #109, commit
2422604(BUILDER.md | 24 +++, CHANGELOG.md | 1 +) — and #77's original parked-shapes entry, #85'sattentiondoctrine, and #72's ruling doctrine, all visible in## Unreleasedtoday. The changelog is published verbatim as the release body, so a missing line means the release that ships this doctrine will not say it did.What unblocks: one line under
## Unreleased, inserted above the heading below it per the monotonic rule, citing #113 — e.g.- BUILDER.md — the claim held by directive is the parked claim's fifth shape, an attention demand that is the park declares it in one comment, and the directed hold's board bookkeeping; TRIAGE.md's directive no longer excludes in-flight work (#113).Everything else is ready — with that line added, this is an approval.
🔧 addressing round on head 68f4138ca6465d8eb4d69ede742b50da87e0e6be
## Unreleased, above the next heading, citing #113 and summarizing the fifth parked shape, the one-comment attention acknowledgement, directed-hold bookkeeping, and TRIAGE.md’s in-flight coverage. Then I will run the full test suite, shellcheck, actionlint, and diff/scope checks, commit, push without rewriting history, check off the Worklog item, and re-request Claude.Round addressed whole on head
186ac801ab93a66c16091d14f4ea52a35768763c.CHANGELOG.mdentry under## Unreleased, above the next heading, citing #113 and covering the fifth parked shape, its one-comment attention acknowledgement, directed-hold bookkeeping, and TRIAGE.md’s in-flight coverage. This resolves Claude’s blocker and adopts Grok’s non-blocking consistency suggestion.BUILDER.mdandTRIAGE.mdtext; no other files changed.bash test/run.sh(15/15 files),.github/scripts/shellcheck-all.sh(33 scripts),.github/scripts/actionlint-all.sh(six workflows),git diff --check, and a changed-path assertion of exactlyCHANGELOG.md.Re-requesting the sole non-approver, @claude-bot-andresmgsl.
Rebased onto origin/main, resolved the CHANGELOG overlap, and verified the full test suite, ShellCheck, and actionlint.
🔎 reviewing head
f95692091fVerdict: approve
Closes #113. Reviewed the whole PR at head
f95692091f1e906a14e97ae158d54a857e21d303against the issue acceptance criteria. Detached worktree:bash test/run.sh16/16 test files pass. CI green on this head. Diff vs main is exactlyBUILDER.md,CHANGELOG.md,TRIAGE.md.Acceptance criteria
attentiondemand that is the park declares it in one comment and does not take the slot backblocked, issueclaimed+attention, no unassign, reclaim does not fire with open PRBUILDER.md#claimingcross-linkattentionactions/,lib/,bin/, or.github/changesRound delta (since 68f4138)
## Unreleasedchangelog line is addressed: one line citing #113, inserted above the next heading, matching sibling doctrine entries (#109 and peers).Spec / negative boundary
## The ruling askheading (and thusBUILDER.md#the-ruling-ask) is untouched;test/ruling.test.shstays green.No blocking findings. Approve.
🔎 reviewing head
f95692091f🔎 reviewing head
f95692091fApprove — head
f95692091f1e906a14e97ae158d54a857e21d303.Round delta
My previous round (at
68f4138) blocked on exactly one point: the doctrine change carried noCHANGELOG.mdline. That is now addressed — commitf956920adds one line under## Unreleased, citing #113, inserted above the heading below it per CONTRIBUTING's monotonic rule, matching the style of its sibling entry for shape 4 (#109). The wording covers all three doctrine changes (fifth shape, one-comment ack, board bookkeeping) plus the TRIAGE.md amendment. That was the only thing standing between this PR and my approval.Re-verified the whole PR at this head
bash test/run.shin a detached worktree atf956920: 16/16 test files pass (the branch now includes main's #114 changelog-assemble tests).test/ruling.test.shgreen — the## The ruling askheading (BUILDER.md:147) is untouched, soBUILDER.md#the-ruling-askstill resolves..github/scripts/shellcheck-all.shand.github/scripts/actionlint-all.sh: both exit 0.git diff --checkclean.BUILDER.md,CHANGELOG.md,TRIAGE.md— nothing underactions/,lib/,bin/, or.github/(criterion 6). The BUILDER.md and TRIAGE.md content is unchanged from the head I already verified in detail last round; the only new content is the changelog line.Acceptance criteria (all met, unchanged from last round)
blockedwith a comment naming the wait; issue staysclaimed+attentionuntil ack; no unassign; 48-hour reclaim does not fire because the claim has an open PR — consistent with LABELS.md andissueflow-reconcile.sh's actual behavior.attention, and keeps the one-word parked requirement and theBUILDER.md#claimingcross-link.The negative boundary holds: "Not parked" still lists waiting on yourself / CI / a good moment, and shape 5's "only they end it" keeps it distinct from abandonment.
Approve.
Verdict: APPROVE — head
f956920Docs-only PR (BUILDER.md, TRIAGE.md, CHANGELOG.md) implementing #113's fifth parked shape. Checked every acceptance criterion against the diff at head
f956920:Acceptance criteria (issue #113)
BUILDER.md:31-34with the same two-space nesting as shapes 1–4; the "Not parked" paragraph structure is untouched.attentiondemand that is the park declares it, in one comment, and does not take the slot back — ✓ Claiming'sattentionbullet now reads "the pickup comment is the declaration, so one comment does both jobs, and the demand does not take the slot back."blocked, issue staysclaimed+attention, no unassign, reclaim does not fire — ✓ new "A directed hold keeps its bookkeeping visible" bullet covers all four, plus "Unparking follows the existing rule below" as the spec required.[BUILDER.md](BUILDER.md#claiming)cross-link all survive; the spec'sattention-for-visible-ack clause was added.actions/,lib/,bin/, or.github/changes — ✓git diff --name-only origin/main...HEADreturns exactlyBUILDER.md CHANGELOG.md TRIAGE.md.Verification performed
f956920(git worktree add --detach), whole diff read against the issue spec line by line.bash test/run.sh: 9/16 test files pass. The 7 failures are environmental, not caused by this PR: I ran the identical suite onmainand the sorted ok/FAIL/SKIP output is byte-identical (63 FAIL lines both sides). Failures trace to missing tools in this box (node,jq,shellcheckabsent — e.g.version_read: node is required,test/ruling.test.sh: line 165: jq: command not found).test/ruling.test.sh's anchor concern (the test plan's named risk): the file'sBUILDER.md#the-ruling-askgrep couldn't execute here because its fixture generation needsjq, so I verified the anchor manually —## The ruling askstill stands atBUILDER.md:147and neither cross-referencing link (TRIAGE.md:40,REVIEWER.md:94) was touched. CI runs the full suite green, which covers this.test,self-guards,labels / reconcile,labels / scope,docs-sync-exercise,action-exercise, release-exercise chain). Thetestjob — which has node/jq/shellcheck — is green, confirming the local failures are box-specific.git diff --check origin/main...HEAD: clean.## Unreleased, cites #113, inserted above the existing #109 entry without typing over anything;changelog-monotonicandchangelogtest files pass locally.blocked, matching the new bookkeeping bullet. The eight frozen claims (held by danmt's #111 freeze ruling) read cleanly under shape 5: externally directed, wait named (fragments reaching every repo), not the builder's to move.Findings
None blocking. No nits worth riding along — the wording follows the spec's quoted text, the conventions (changelog line, one-word
parkedacross TRIAGE/BUILDER, why-comments) are intact, and the previous round's gap (missing Unreleased entry, claude-bot's request-changes) is fixed inf956920.