Repository navigation
Fix status:* label hygiene in the ZenDev runbooks - #22
Merged
Merged
Conversation
Closes #20 The label catalog allows at most one status:* per Issue, and a closed Issue carries none. The author runbook set status:in-progress, status:needs-review, and status:blocked without ever removing a prior status:* label, and the acceptor runbook never removed the label when closing an Issue. Seven closed Issues (#19, #17, #14, #10, #8, #6, #4) had accumulated stale status labels as a result; their labels are removed as part of this change.
3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #20
Achieved outcome
Status-label hygiene now holds across the AUTHOR/ACCEPTOR loop: setting a
status:*label always replaces whichever one was already there, and closing anIssue removes its
status:*label. The seven closed Issues that had alreadyaccumulated a stale label (#19, #17, #14, #10, #8, #6, #4) are cleaned up directly.
Tested revision
d86b979bfd27cffd7b1648aae69f78f35918cc8eChanged artifacts
docs/zendev/AUTHOR_RUNBOOK.md— section 3 (claim) now says settingstatus:in-progressreplaces any existingstatus:*label; section 7 (hand off)says
status:needs-reviewreplacesstatus:in-progress; section 8 (blocked) saysstatus:blockedreplaces any existingstatus:*label.docs/zendev/ACCEPTOR_RUNBOOK.md— section 4 (verdict) now says that once anIssue is confirmed closed, every
status:*label it still carries is removed, andnames the fallback when the merge does not close the Issue automatically: close it
yourself, then remove the label(s).
status:*labels from closedIssues IMPLEMENTATION_STATUS goes stale the moment a pull request merges #19, Lock a hash-verified seeded legacy baseline (REQ-MIGRATION-002) #17, Give canonical TypeScript work a required check #14, Mirror only the allowlisted specification package #10, Record what each autonomous run consumes, privately #8, spec-sync fails: RCLONE_VERSION is consumed by rclone as a flag #6, Establish the autonomous development loop for this repository #4, per the Issue's correction comment.
Acceptance criteria
status:*label —docs/zendev/ACCEPTOR_RUNBOOK.mdsection 4.status:*label — verified withgh issue list --state all --json number,labels.ACCEPTOR_RUNBOOK.md section 4, added paragraph.
status:*label, and no closed Issue carries any — verified with
gh issue list --state all --json number,labels: Closed Issues keep an active status label #20 (open) carries onlystatus:in-progress; IMPLEMENTATION_STATUS goes stale the moment a pull request merges #19, Lock a hash-verified seeded legacy baseline (REQ-MIGRATION-002) #17, Give canonical TypeScript work a required check #14, Mirror only the allowlisted specification package #10, Record what each autonomous run consumes, privately #8, spec-sync fails: RCLONE_VERSION is consumed by rclone as a flag #6, Establish the autonomous development loop for this repository #4 (closed) carry none.status:*label replaces any existing one — AUTHOR_RUNBOOK.md sections 3, 7, 8.Checks
npm cinpm run typechecktsc --noEmitcleannpm testnpm run builddotnet restoredotnet build --configuration Releasedotnet test --configuration Releasepython -m unittest discover -s scripts/testspython scripts/policy_guard.py --base origin/masterAll checks run locally against the tested revision above; no check is
not_runorunavailable.Not checked
Nothing deliberately skipped. This is a docs-only change to two runbook files; there
is no product behavior to regress, so no new automated test was added — the change
is process guidance, verified by re-reading the edited sections and by the label
state shown above.
Assumptions and unknowns
comment) are the full scope of this unit of work; the correction comment states
"Nothing else about the Issue changes," which I took as authoritative over the
original body wherever the two differ.
status:*" (stated in thecorrection comment) is an existing catalog rule this PR documents in the runbooks,
not a new rule being introduced —
gh label listshows the sixstatus:*labelsas a single-select-by-convention axis, consistent with
AGENTS.md's Issuestandard.
this diff (labels are not repository files); they're recorded here and on the
Issue as the durable evidence.
Highest-risk area for review
The three edited points in
AUTHOR_RUNBOOK.md(claim, hand-off, blocked) are theonly enforcement mechanism for "at most one
status:*label" going forward — it's arunbook instruction, not a workflow-enforced guard, matching the Issue's explicit
non-goal ("No automation of label hygiene in a workflow"). If a future AUTHOR run
skips the replace step, the label can drift again; that's an accepted, named
trade-off, not an oversight.
Remaining gate
None. No decision, authority, or follow-up is required to accept this change.