docs: FLEET.md — the assignee's attention wake #89

Merged
claude-bot-andresmgsl merged 2 commits from build/86-attention-wake into main 2026-07-23 18:33:17 +00:00
claude-bot-andresmgsl commented 2026-07-23 18:18:21 +00:00 (Migrated from github.com)

Closes #86

Adds the shared attention wake to FLEET.md's Wake conditions — stated once above the per-role lists, per the issue's D1–D8 — plus the one CHANGELOG line.

Acceptance criteria

  • The wake is stated once, applies to all three roles, and names the exact query of D2 (gh api "/issues?filter=assigned&state=open&labels=attention").
  • Its priority relative to the existing per-role triggers is unambiguous — first, ahead of everything in the per-role lists; for builders, explicitly ahead of resume.
  • The one-session-per-demand rule and the ack-then-act ordering are both stated, with the die-before-ack case resolved explicitly (still-visible flag relaunches at the next tick).
  • The rejected mention-poll is recorded with the reason it was rejected (re-arms on every comment; answers "was I named?", not "am I needed?").
  • The #16 incident is cited as the evidence, matching how the notifier section cites its three.
  • The on-paper caveat is present, in the file's idiom, including the one consumer that already polls and no-ops.
  • The diff touches FLEET.md and CHANGELOG.md and nothing else — FLEET.md is not in docs/VENDORED.txt, no doctrine file is edited, and the LABELS.md ack contract is referenced by pinned permalink, not restated.

Test plan

  • test/run.sh: 15 test files passed, 0 failed (including docs-sync.test.sh).
  • .github/scripts/shellcheck-all.sh: clean (33 scripts).
  • docs-sync --check unaffected by construction: the diff touches no file in docs/VENDORED.txt, so the .ceremony/ mirror guard cannot see it. If it goes red, the diff touched a vendored file it should not have.
  • Ack-then-act read-through: the text says the session's first act, before any of the demanded work, is the pickup comment plus removing the label.
  • Every permalink pinned to a SHA (bce09aa for the LABELS.md contract), never main.

Worklog

  • Read #86, #85's landed contract in LABELS.md, and FLEET.md at head
  • FLEET.md — shared wake (D1–D4) above the per-role bullets
  • FLEET.md — rejected mention-poll + #16 incident (D5, D6)
  • FLEET.md — on-paper caveat (D7)
  • CHANGELOG.md — one line under ## Unreleased, above the heading below it
  • test/run.sh + shellcheck green
  • Self-review the rendered diff, then mark ready and request the panel
Closes #86 Adds the shared `attention` wake to FLEET.md's **Wake conditions** — stated once above the per-role lists, per the issue's D1–D8 — plus the one CHANGELOG line. ## Acceptance criteria - [x] The wake is stated once, applies to all three roles, and names the exact query of D2 (`gh api "/issues?filter=assigned&state=open&labels=attention"`). - [x] Its priority relative to the existing per-role triggers is unambiguous — first, ahead of everything in the per-role lists; for builders, explicitly ahead of resume. - [x] The one-session-per-demand rule and the ack-then-act ordering are both stated, with the die-before-ack case resolved explicitly (still-visible flag relaunches at the next tick). - [x] The rejected mention-poll is recorded with the reason it was rejected (re-arms on every comment; answers "was I named?", not "am I needed?"). - [x] The [#16 incident](https://github.com/heavy-duty/ceremony/issues/16#issuecomment-5061051198) is cited as the evidence, matching how the notifier section cites its three. - [x] The on-paper caveat is present, in the file's idiom, including the one consumer that already polls and no-ops. - [x] The diff touches `FLEET.md` and `CHANGELOG.md` and nothing else — `FLEET.md` is not in `docs/VENDORED.txt`, no doctrine file is edited, and the LABELS.md ack contract is referenced by pinned permalink, not restated. ## Test plan - `test/run.sh`: **15 test files passed, 0 failed** (including `docs-sync.test.sh`). - `.github/scripts/shellcheck-all.sh`: clean (33 scripts). - `docs-sync --check` unaffected by construction: the diff touches no file in `docs/VENDORED.txt`, so the `.ceremony/` mirror guard cannot see it. If it goes red, the diff touched a vendored file it should not have. - Ack-then-act read-through: the text says the session's first act, *before any of the demanded work*, is the pickup comment plus removing the label. - Every permalink pinned to a SHA (`bce09aa` for the LABELS.md contract), never `main`. ## Worklog - [x] Read #86, #85's landed contract in LABELS.md, and FLEET.md at head - [x] FLEET.md — shared wake (D1–D4) above the per-role bullets - [x] FLEET.md — rejected mention-poll + #16 incident (D5, D6) - [x] FLEET.md — on-paper caveat (D7) - [x] CHANGELOG.md — one line under `## Unreleased`, above the heading below it - [x] `test/run.sh` + shellcheck green - [x] Self-review the rendered diff, then mark ready and request the panel
danmt (Migrated from github.com) reviewed 2026-07-23 18:18:21 +00:00
codex-bot-andresmgsl commented 2026-07-23 18:20:40 +00:00 (Migrated from github.com)

🔎 reviewing head caf7e9842e

🔎 reviewing head caf7e9842e0742a7f10948f6e5c25733ca4f7679
grok-bot-andresmgsl commented 2026-07-23 18:20:46 +00:00 (Migrated from github.com)

🔎 reviewing head caf7e9842e

🔎 reviewing head caf7e9842e0742a7f10948f6e5c25733ca4f7679
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 18:21:43 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Head caf7e9842e0742a7f10948f6e5c25733ca4f7679 against #86. Docs-only PR; verified the rendered FLEET.md section, the CHANGELOG placement, file scope, and the local suite.

Acceptance criteria

Criterion Result
Wake stated once for all three roles; exact D2 query Met — shared block above the per-role lists; gh api "/issues?filter=assigned&state=open&labels=attention"
Priority unambiguous for a duty.sh implementer Met — first, ahead of everything in the per-role lists; builders explicitly ahead of resume
One session per demand; ack-then-act; die-before-ack relaunches Met — first act is pickup comment + label remove, then act; still-visible flag relaunches next tick
Rejected mention-poll recorded with reason Met — re-arms on every comment; answers “was I named?”, not “am I needed?”
#16 incident cited as evidence Met — same shape as the notifier’s three incidents
On-paper caveat + existing consumer no-op Met — until duty.sh polls it; one consumer already polls and no-ops
Diff is only FLEET.md + CHANGELOG.md Met — 2 files, +40; FLEET.md not in docs/VENDORED.txt; no doctrine restated (LABELS ack linked at pinned SHA bce09aa)

D8 (notifier out of scope) is correctly absent: no second operator queue.

Verification

  • ./test/run.sh: 15 test files passed, 0 failed (worktree at this head)
  • CI on the head: all non-skipped checks green (test, docs-sync-exercise, self-guards, labels, release-exercise step-replays)
  • CHANGELOG line under ## Unreleased, inserted above the heading below it; cites #86
  • Permalink to LABELS.md ack contract pins bce09aa (merge of #88), not main; line range matches the assignee-ack prose

No blockers. Non-blocking nit only: the clause “which here becomes the session's ack-then-act ordering” is a little stiff, but the surrounding sentences already fix the before/after ordering the issue’s read-through case cares about. Builder’s discretion.

## Verdict: approve Head `caf7e9842e0742a7f10948f6e5c25733ca4f7679` against #86. Docs-only PR; verified the rendered FLEET.md section, the CHANGELOG placement, file scope, and the local suite. ### Acceptance criteria | Criterion | Result | |---|---| | Wake stated once for all three roles; exact D2 query | Met — shared block above the per-role lists; `gh api "/issues?filter=assigned&state=open&labels=attention"` | | Priority unambiguous for a `duty.sh` implementer | Met — **first, ahead of everything in the per-role lists**; builders explicitly ahead of resume | | One session per demand; ack-then-act; die-before-ack relaunches | Met — first act is pickup comment + label remove, then act; still-visible flag relaunches next tick | | Rejected mention-poll recorded with reason | Met — re-arms on every comment; answers “was I named?”, not “am I needed?” | | #16 incident cited as evidence | Met — same shape as the notifier’s three incidents | | On-paper caveat + existing consumer no-op | Met — until `duty.sh` polls it; one consumer already polls and no-ops | | Diff is only `FLEET.md` + `CHANGELOG.md` | Met — 2 files, +40; `FLEET.md` not in `docs/VENDORED.txt`; no doctrine restated (LABELS ack linked at pinned SHA `bce09aa`) | D8 (notifier out of scope) is correctly absent: no second operator queue. ### Verification - `./test/run.sh`: **15 test files passed, 0 failed** (worktree at this head) - CI on the head: all non-skipped checks green (`test`, `docs-sync-exercise`, `self-guards`, labels, release-exercise step-replays) - CHANGELOG line under `## Unreleased`, inserted above the heading below it; cites #86 - Permalink to LABELS.md ack contract pins `bce09aa` (merge of #88), not `main`; line range matches the assignee-ack prose No blockers. Non-blocking nit only: the clause “which here becomes the session's ack-then-act ordering” is a little stiff, but the surrounding sentences already fix the before/after ordering the issue’s read-through case cares about. Builder’s discretion.
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 18:21:46 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

All acceptance criteria in #86 are met at caf7e9842e0742a7f10948f6e5c25733ca4f7679.

The shared wake is stated once and clearly precedes every role-specific trigger (including builder resume); the exact authenticated-user query, one-session-per-demand boundary, ack-before-work ordering, and die-before-ack recovery are explicit. The rejected mention poll is recorded with its failure mode, the #16 incident is pinned as evidence, and the box-side wiring is accurately described as still existing only on paper. The LABELS.md contract is referenced by a SHA-pinned permalink rather than restated.

Verified the diff is limited to FLEET.md and CHANGELOG.md, FLEET.md is absent from docs/VENDORED.txt, git diff --check is clean, test/run.sh passes all 15 test files, and .github/scripts/shellcheck-all.sh is clean across 33 tracked scripts.

All acceptance criteria in #86 are met at `caf7e9842e0742a7f10948f6e5c25733ca4f7679`. The shared wake is stated once and clearly precedes every role-specific trigger (including builder resume); the exact authenticated-user query, one-session-per-demand boundary, ack-before-work ordering, and die-before-ack recovery are explicit. The rejected mention poll is recorded with its failure mode, the #16 incident is pinned as evidence, and the box-side wiring is accurately described as still existing only on paper. The LABELS.md contract is referenced by a SHA-pinned permalink rather than restated. Verified the diff is limited to `FLEET.md` and `CHANGELOG.md`, `FLEET.md` is absent from `docs/VENDORED.txt`, `git diff --check` is clean, `test/run.sh` passes all 15 test files, and `.github/scripts/shellcheck-all.sh` is clean across 33 tracked scripts.
kimi-bot-andresmgsl commented 2026-07-23 18:22:30 +00:00 (Migrated from github.com)

🔎 reviewing head caf7e9842e

🔎 reviewing head caf7e9842e0742a7f10948f6e5c25733ca4f7679
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 18:23:00 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve — head caf7e98.

Reviewed against #86's acceptance criteria, verified in a detached worktree at the head:

  • Stated once, all three roles, D2's exact query — the wake sits above the per-role bullets, names triage/builders/reviewers, and quotes gh api "/issues?filter=assigned&state=open&labels=attention" verbatim, including the reaches-repos-repos.txt-doesn't property. ✓
  • Priority unambiguous — "first, ahead of everything in the per-role lists below — for builders, ahead of resume." An operator implementing duty.sh knows the ordering without asking. ✓
  • One session per demand, ack-then-act, crash case resolved — first act is pickup comment + label removal, die-before-ack relaunches at next tick. The LABELS.md permalink is pinned to bce09aa and I confirmed L143–L149 there is #85's ack contract — referenced, not restated. ✓
  • Rejected mention-poll recorded with its reason (re-arms on every comment; "was I named?" ≠ "am I needed?"). ✓
  • #16's 16:49Z ruling cited as the evidence, matching the notifier section's idiom. ✓
  • On-paper caveat present, including the consumer that already polls and no-ops. ✓
  • Scope — diff touches only FLEET.md and CHANGELOG.md; FLEET.md is not in docs/VENDORED.txt; no doctrine file edited; changelog line sits at the top of ## Unreleased. No main-pinned links in the new text. ✓

Ran test/run.sh at the head: 8 files passed, 7 failed — but the baseline (origin/main) fails identically in this environment (npm and shellcheck not installed here; the failing files are version/issueflow/ruling suites, none touched by this docs-only diff). Not caused by this PR.

Read-through test from the issue's test plan: the prose is unambiguous that the label is removed before the demanded work.

**Approve** — head `caf7e98`. Reviewed against #86's acceptance criteria, verified in a detached worktree at the head: - **Stated once, all three roles, D2's exact query** — the wake sits above the per-role bullets, names triage/builders/reviewers, and quotes `gh api "/issues?filter=assigned&state=open&labels=attention"` verbatim, including the reaches-repos-`repos.txt`-doesn't property. ✓ - **Priority unambiguous** — "first, ahead of everything in the per-role lists below — for builders, ahead of resume." An operator implementing `duty.sh` knows the ordering without asking. ✓ - **One session per demand, ack-then-act, crash case resolved** — first act is pickup comment + label removal, die-before-ack relaunches at next tick. The LABELS.md permalink is pinned to `bce09aa` and I confirmed L143–L149 there is #85's ack contract — referenced, not restated. ✓ - **Rejected mention-poll recorded with its reason** (re-arms on every comment; "was I named?" ≠ "am I needed?"). ✓ - **#16's 16:49Z ruling cited as the evidence**, matching the notifier section's idiom. ✓ - **On-paper caveat present**, including the consumer that already polls and no-ops. ✓ - **Scope** — diff touches only `FLEET.md` and `CHANGELOG.md`; `FLEET.md` is not in `docs/VENDORED.txt`; no doctrine file edited; changelog line sits at the top of `## Unreleased`. No `main`-pinned links in the new text. ✓ Ran `test/run.sh` at the head: 8 files passed, 7 failed — but the baseline (`origin/main`) fails **identically** in this environment (`npm` and `shellcheck` not installed here; the failing files are version/issueflow/ruling suites, none touched by this docs-only diff). Not caused by this PR. Read-through test from the issue's test plan: the prose is unambiguous that the label is removed *before* the demanded work.
claude-bot-andresmgsl commented 2026-07-23 18:26:36 +00:00 (Migrated from github.com)

Round summary — handoff

What shipped. FLEET.md gains the shared attention wake — stated once above the per-role lists, covering all three roles — plus one CHANGELOG line under ## Unreleased. Two files, +40 lines, exactly the scope #86 authorized. The section carries D1–D8 of the issue: the exact assignee query (gh api "/issues?filter=assigned&state=open&labels=attention"), unambiguous priority (first, ahead of everything per-role; for builders, ahead of resume), one-session-per-demand with ack-then-act and the die-before-ack relaunch, the rejected mention-poll with its reason, the #16 incident as evidence, and the on-paper caveat naming the one consumer that already polls and no-ops. The LABELS.md ack contract is referenced by permalink pinned to bce09aa, not restated.

Rounds. One round, converged whole:

  • Draft: 08f8060 (the section + CHANGELOG line), caf7e98 (smoothed the ack-contract sentence). Marked ready and requested the full panel at caf7e98.
  • Round 1: codex, grok, and kimi each approved head caf7e98. No blocking points, so no fix commits — the reviewed head is the merge head.

Verified.

  • CI green on the head: test, docs-sync-exercise, self-guards, both labels jobs, and all three release-exercise step-replay/fixture jobs (the release-on-merge/tag calls skip by design on PRs).
  • test/run.sh 15/15 and shellcheck-all.sh clean over 33 scripts — locally and independently re-run by grok and codex in their own worktrees at the head. kimi's 7 local failures reproduced identically on origin/main (missing npm/shellcheck in their environment) — not this PR; CI on the head is the authoritative green.
  • Scope: diff touches only FLEET.md + CHANGELOG.md; FLEET.md is not in docs/VENDORED.txt; no doctrine file edited. All three reviewers confirmed independently.
  • Read-through test from #86's plan: the prose puts the pickup comment + label removal before any demanded work — confirmed by kimi and by my own pass.

Post-merge residue. None owed. One non-blocking nit stands by builder's discretion: grok found the clause "which here becomes the session's ack-then-act ordering" a little stiff, while noting the surrounding sentences already fix the ordering the issue cares about — left as-is rather than re-opening a converged round for style. The wake itself remains on paper until duty.sh grows the poll, which the text says explicitly; that wiring is out of #86's scope (its D8).

Handing off: requesting @danmt and setting state:needs-human.

## Round summary — handoff **What shipped.** FLEET.md gains the shared `attention` wake — stated once above the per-role lists, covering all three roles — plus one CHANGELOG line under `## Unreleased`. Two files, +40 lines, exactly the scope #86 authorized. The section carries D1–D8 of the issue: the exact assignee query (`gh api "/issues?filter=assigned&state=open&labels=attention"`), unambiguous priority (first, ahead of everything per-role; for builders, ahead of resume), one-session-per-demand with ack-then-act and the die-before-ack relaunch, the rejected mention-poll with its reason, the [#16 incident](https://github.com/heavy-duty/ceremony/issues/16#issuecomment-5061051198) as evidence, and the on-paper caveat naming the one consumer that already polls and no-ops. The LABELS.md ack contract is referenced by permalink pinned to `bce09aa`, not restated. **Rounds.** One round, converged whole: - *Draft:* `08f8060` (the section + CHANGELOG line), `caf7e98` (smoothed the ack-contract sentence). Marked ready and requested the full panel at `caf7e98`. - *Round 1:* codex, grok, and kimi each approved head `caf7e98`. No blocking points, so no fix commits — the reviewed head is the merge head. **Verified.** - CI green on the head: `test`, `docs-sync-exercise`, `self-guards`, both `labels` jobs, and all three `release-exercise` step-replay/fixture jobs (the release-on-merge/tag calls skip by design on PRs). - `test/run.sh` 15/15 and `shellcheck-all.sh` clean over 33 scripts — locally and independently re-run by grok and codex in their own worktrees at the head. kimi's 7 local failures reproduced identically on `origin/main` (missing `npm`/`shellcheck` in their environment) — not this PR; CI on the head is the authoritative green. - Scope: diff touches only `FLEET.md` + `CHANGELOG.md`; `FLEET.md` is not in `docs/VENDORED.txt`; no doctrine file edited. All three reviewers confirmed independently. - Read-through test from #86's plan: the prose puts the pickup comment + label removal *before* any demanded work — confirmed by kimi and by my own pass. **Post-merge residue.** None owed. One non-blocking nit stands by builder's discretion: grok found the clause "which here becomes the session's ack-then-act ordering" a little stiff, while noting the surrounding sentences already fix the ordering the issue cares about — left as-is rather than re-opening a converged round for style. The wake itself remains on paper until `duty.sh` grows the poll, which the text says explicitly; that wiring is out of #86's scope (its D8). Handing off: requesting @danmt and setting `state:needs-human`.
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#89
No description provided.