docs: LABELS.md — the label taxonomy (states, stale/blocked, scopes) #33
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:bootstrap
scope:coolify
scope:db
scope:docs
scope:drill
scope:installer
scope:labels
scope:platform
scope:runner
scope:users
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/rig#33
Loading…
Reference in a new issue
No description provided.
Delete branch "docs/label-taxonomy"
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?
What
LABELS.mdat the repo root: the label taxonomy the heavy-duty repos are adopting, tailored to this repo's surfaces. Docs only — no code changes.The design, in one line each:
state:*(PRs, exactly one) — answers who is the ball with, mirroring the review loop:building(draft) →bots-reviewing(waiting on the three bots' round) →addressing(all bots reviewed; coding agent owes the single reply + fixes) →needs-human(all bots approve; final review requested).bots-reviewingandaddressingstay distinct because staleness means different things in each: poke the bots vs. the agent dropped the ball.stale— 48h of silence, sweep-managed, never hand-applied.state:building+staleis precisely a forgotten draft.blocked— quiet legitimately (waiting on another PR/issue); the sweep skips it.release— the release-flow work already tracked in heavy-duty/box#83 / heavy-duty/rig#32 / heavy-duty/cast#96.scope:*— this repo's surfaces, one calm color; scopes locate, states alert.bug/enhancement/documentation, issues only — a PR's type already lives in its conventional title.Why states are automation-owned
Every state is derivable from GitHub's own facts (draft flag, requested reviewers, review states), so a scheduled workflow will recompute and reconcile them statelessly — a hand-moved label is a lie waiting to happen. That workflow is a follow-up PR; until it lands,
state:labels are advisory. The doc carries the bootstrap block because label creation needs push access (dan-claude-botis triage-only — creating them was attempted and 404'd), so either a maintainer runs the block or the workflow's first run creates them idempotently.🤖 Generated with Claude Code
Verdict: Approve — I agree with this as-is.
Clear, shared taxonomy:
state:*answers who has the ball (and correctly keepsbots-reviewingvsaddressingdistinct for staleness meaning), cross-cuttingstale/blocked/release, and repo-specificscope:with one calm color. Maintenance section is honest thatstate:is advisory until the reconciler lands, and bootstrap/gh labelsnippets match the tables.Docs-only, no code risk. No blockers.
🔧 Reviewed — I agree with most; feedback below.
The shared taxonomy is well-reasoned —
state:*answering "who is the ball with", thebots-reviewing/addressingsplit, sweep-ownedstale/blocked, and automation-owned states. The rig-specificscope:*set (bootstrap,users,runner,coolify,db,installer) maps cleanly ontocommands/*andinstall.sh, and the create block matches the table.One minor point on the bootstrap block:
gh label create … --forcelines are idempotent, but the trailinggh label delete … --yeslines are not —gh label deleteexits non-zero on a label that's already gone, so a second hand-run (or a repo that never had the stock labels) errors on them. Since the doc frames the block as safe-to-run and the workflow as idempotent,gh label delete X --yes 2>/dev/null || true(or a loop) would keep re-runs clean.Docs-only, no other concerns.
— automated review by
claude-bot-andresmgsl· heavy-duty-review-botVerdict: I have feedback.
Please resolve the already-raised bootstrap rerun/idempotency concern before merge. I found no additional issues in the taxonomy, linked release context, or current diff.
Round 1 — all three reviews in, one shared finding, fixed.
@claude-bot-andresmgsl flagged (and on rig, @codex-bot-andresmgsl seconded) that the bootstrap block's trim lines were not idempotent:
gh label deleteis not an upsert, so the second run of a block billed as safe-to-run would error once the stock labels were gone. Agreed — the fix replaces the six bare deletes with a loop that swallows the already-gone case (gh label delete "$L" --yes 2>/dev/null || true), with a comment stating why, so the block converges on re-run exactly like the--forcecreates above it. Pushed as the latest commit.No other findings were raised. Re-requesting reviews.
Verdict: I agree with everything and have no additional feedback.
The idempotent delete loop resolves my prior concern; the current diff and checks are acceptable.
✅ Reviewed — I agree with all of this, no concerns.
Re-reviewed
ca37eb8. My one prior point is resolved: the bootstrap trim is now a loop that swallows the already-gone case —gh label delete "$L" --yes 2>/dev/null || trueover the six stock labels — so the block converges on re-run exactly like the--forcecreates above it. That was my only concern; docs-only, no further feedback.— automated review by
claude-bot-andresmgsl· heavy-duty-review-bot