labels-reconcile — the attention core label row #84

Closed
opened 2026-07-23 17:20:36 +00:00 by dan-claude-bot · 1 comment
dan-claude-bot commented 2026-07-23 17:20:36 +00:00 (Migrated from github.com)

Part of #83. Blocked by nothing. From discussion #82, approved by @danmt.

All line references pinned at 87f2432.

Context

The attention label needs to exist in every governed repo before anything can be parked on it or polled for it. #83 carries the why; this issue is the row and its taxonomy entry, and nothing else.

Read #83's D1 before you start — the discussion asked for a .github/labels.conf row and that is wrong. labels.conf is the per-repo file: panel=, triage-actors=, and this repo's own scope:* rows. A core label placed there would exist in ceremony and in no consumer. The core taxonomy is core_label_rows() L382-L401, which every consumer bootstrap reads by reference from the pinned ceremony ref.

Spec

Decisions. Do not reopen them in the PR.

  • D1 — the row, verbatim: attention|D93F0B|A demand is parked here for the assignee: pick up the thread, ack by removing this label (88 chars of description; GitHub's limit is 100).
  • D2 — placement: in the heredoc beside offsite and needs-ruling, the other hand-set flags the machine only reads. Not among the state:* or blocker:* rows.
  • D3 — the color repeat is intentional. D93F0B is also state:addressing's. Both say the assignee owes the next move; they can never co-occur, because state:* is PR-only and machine-owned while attention is issue-only and hand-set. If the PR wants to note that, one clause in the row's neighborhood is enough — no essay.
  • D4 — LABELS.md gets exactly one line here: a row in the Cross-cutting table (L63-L72), so the taxonomy document does not omit a label the taxonomy creates. The usage contract — who sets it, who clears it, how it relates to needs-ruling — is #85's, deliberately: two PRs editing the same paragraph is a conflict for nothing.
  • D5 — no behavior. Nothing under actions/ changes except the heredoc. No reconciler branch reads attention, no clock exemption, no comment, no validation. The two invariants that make that true already hold by construction and are asserted by tests below, not by new code.

Tasks

  • actions/labels-reconcile/labels-reconcile.sh — add the D1 row to core_label_rows() at the D2 position.
  • LABELS.md — one row in the Cross-cutting table (D4).
  • test/labels.test.sh — assert the row is emitted, with its exact color, and that its description survives the name|color|desc field split (the file already refuses pipes in descriptions — L37-L38).
  • test/issueflow-reconcile.test.sh — assert the two inertness invariants of D5: queue_decision returns KEEP for claimed + attention, and claim_clock_exempt returns SWEEP for the same input.
  • CHANGELOG.md — one line under ## Unreleased, inserted above the heading below it.

Acceptance criteria

  • core_label_rows() emits attention|D93F0B|A demand is parked here for the assignee: pick up the thread, ack by removing this label, once, byte-exact.
  • bootstrap_labels therefore upserts it with no change to bootstrap_labels itself — the row is data, the bootstrap loop is untouched.
  • LABELS.md's Cross-cutting table lists attention with #D93F0B, issue-only, hand-set, machine-never-written.
  • A test fails if the row is dropped or its color is changed.
  • A test fails if attention ever starts pausing the claim clock or tripping the queue-conflict flag.
  • The diff touches actions/labels-reconcile/labels-reconcile.sh, LABELS.md, the two test files and CHANGELOG.md, and nothing else. No .github/labels.conf row (D1 of #83), no new reconciler branch, no workflow change.
  • The operator's bootstrap dispatch is not part of this issue's done — it is tracked on #83. Say so in the PR body so the reviewer does not fail the PR for a label that does not exist on the repo yet.

Test plan

  • test/run.sh green; shellcheck and actionlint clean via .github/scripts/.
  • The cases that must fail: delete the row → test/labels.test.sh red; change D93F0B to any other value → red; add attention to claim_clock_exempt's exempt set → test/issueflow-reconcile.test.sh red.
  • docs-sync --check: LABELS.md is in docs/VENDORED.txt, so consumer .ceremony/ mirrors drift on merge and refresh at each consumer's next docs-sync --fix. Note it in the PR body; that is the whole cost.
  • Manual, post-merge and not yours: after the operator's dispatch, gh label list -R heavy-duty/ceremony | grep attention shows the label with the right color and description.

Dependencies

Blocked by nothing. Blocks #85. Part of #83.

Part of #83. Blocked by nothing. From discussion [#82](https://github.com/heavy-duty/ceremony/discussions/82), approved by @danmt. All line references pinned at [`87f2432`](https://github.com/heavy-duty/ceremony/tree/87f243299d17b1a3831c3345fa11fa638eb21b1d). ## Context The `attention` label needs to exist in every governed repo before anything can be parked on it or polled for it. #83 carries the why; this issue is the row and its taxonomy entry, and nothing else. **Read #83's D1 before you start** — the discussion asked for a `.github/labels.conf` row and that is wrong. [`labels.conf`](https://github.com/heavy-duty/ceremony/blob/87f243299d17b1a3831c3345fa11fa638eb21b1d/.github/labels.conf) is the *per-repo* file: `panel=`, `triage-actors=`, and this repo's own `scope:*` rows. A core label placed there would exist in ceremony and in no consumer. The core taxonomy is [`core_label_rows()` L382-L401](https://github.com/heavy-duty/ceremony/blob/87f243299d17b1a3831c3345fa11fa638eb21b1d/actions/labels-reconcile/labels-reconcile.sh#L382-L401), which every consumer bootstrap reads by reference from the pinned ceremony ref. ## Spec Decisions. Do not reopen them in the PR. - **D1 — the row, verbatim:** `attention|D93F0B|A demand is parked here for the assignee: pick up the thread, ack by removing this label` (88 chars of description; GitHub's limit is 100). - **D2 — placement:** in the heredoc beside `offsite` and `needs-ruling`, the other hand-set flags the machine only reads. Not among the `state:*` or `blocker:*` rows. - **D3 — the color repeat is intentional.** `D93F0B` is also `state:addressing`'s. Both say *the assignee owes the next move*; they can never co-occur, because `state:*` is PR-only and machine-owned while `attention` is issue-only and hand-set. If the PR wants to note that, one clause in the row's neighborhood is enough — no essay. - **D4 — `LABELS.md` gets exactly one line here:** a row in the **Cross-cutting** table ([L63-L72](https://github.com/heavy-duty/ceremony/blob/87f243299d17b1a3831c3345fa11fa638eb21b1d/LABELS.md#L63-L72)), so the taxonomy document does not omit a label the taxonomy creates. The usage contract — who sets it, who clears it, how it relates to `needs-ruling` — is #85's, deliberately: two PRs editing the same paragraph is a conflict for nothing. - **D5 — no behavior.** Nothing under `actions/` changes except the heredoc. No reconciler branch reads `attention`, no clock exemption, no comment, no validation. The two invariants that make that true already hold by construction and are asserted by tests below, not by new code. ## Tasks - [ ] `actions/labels-reconcile/labels-reconcile.sh` — add the D1 row to `core_label_rows()` at the D2 position. - [ ] `LABELS.md` — one row in the Cross-cutting table (D4). - [ ] `test/labels.test.sh` — assert the row is emitted, with its exact color, and that its description survives the `name|color|desc` field split (the file already refuses pipes in descriptions — [L37-L38](https://github.com/heavy-duty/ceremony/blob/87f243299d17b1a3831c3345fa11fa638eb21b1d/test/labels.test.sh#L37-L38)). - [ ] `test/issueflow-reconcile.test.sh` — assert the two inertness invariants of D5: `queue_decision` returns `KEEP` for `claimed` + `attention`, and `claim_clock_exempt` returns `SWEEP` for the same input. - [ ] `CHANGELOG.md` — one line under `## Unreleased`, inserted **above** the heading below it. ## Acceptance criteria - [ ] `core_label_rows()` emits `attention|D93F0B|A demand is parked here for the assignee: pick up the thread, ack by removing this label`, once, byte-exact. - [ ] `bootstrap_labels` therefore upserts it with no change to `bootstrap_labels` itself — the row is data, the bootstrap loop is untouched. - [ ] `LABELS.md`'s Cross-cutting table lists `attention` with `#D93F0B`, issue-only, hand-set, machine-never-written. - [ ] A test fails if the row is dropped or its color is changed. - [ ] A test fails if `attention` ever starts pausing the claim clock or tripping the queue-conflict flag. - [ ] The diff touches `actions/labels-reconcile/labels-reconcile.sh`, `LABELS.md`, the two test files and `CHANGELOG.md`, and nothing else. **No** `.github/labels.conf` row (D1 of #83), no new reconciler branch, no workflow change. - [ ] The operator's bootstrap dispatch is **not** part of this issue's done — it is tracked on #83. Say so in the PR body so the reviewer does not fail the PR for a label that does not exist on the repo yet. ## Test plan - `test/run.sh` green; `shellcheck` and `actionlint` clean via `.github/scripts/`. - The cases that must fail: delete the row → `test/labels.test.sh` red; change `D93F0B` to any other value → red; add `attention` to `claim_clock_exempt`'s exempt set → `test/issueflow-reconcile.test.sh` red. - `docs-sync --check`: `LABELS.md` is in [`docs/VENDORED.txt`](https://github.com/heavy-duty/ceremony/blob/87f243299d17b1a3831c3345fa11fa638eb21b1d/docs/VENDORED.txt), so consumer `.ceremony/` mirrors drift on merge and refresh at each consumer's next `docs-sync --fix`. Note it in the PR body; that is the whole cost. - Manual, post-merge and not yours: after the operator's dispatch, `gh label list -R heavy-duty/ceremony | grep attention` shows the label with the right color and description. ## Dependencies Blocked by nothing. Blocks #85. Part of #83.
codex-bot-andresmgsl commented 2026-07-23 17:27:01 +00:00 (Migrated from github.com)

Starting this build. I will implement the exact core taxonomy row, documentation entry, inertness/row tests, and changelog entry from the issue contract.

Starting this build. I will implement the exact core taxonomy row, documentation entry, inertness/row tests, and changelog entry from the issue contract.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/ceremony#84
No description provided.