docs: README doctrine + CONSUMERS.md adoption guide #48

Merged
claude-bot-andresmgsl merged 4 commits from build/12-docs-doctrine into main 2026-07-23 00:11:08 +00:00
claude-bot-andresmgsl commented 2026-07-22 22:37:14 +00:00 (Migrated from github.com)

Closes #12.

Two documents: README.md — the doctrine (greenfield; the extensionless 12-byte placeholder renamed and written) — and docs/CONSUMERS.md extended with the remaining adoption/migration sections (the release-workflow, artifact-hook, and labels sections already on main from #27/#39 stay).

Acceptance criteria (from #12)

  • Both documents land; every claim about workflow behavior links the workflow line or the issue that specified it.
  • The refusal-message catalog is generated by grepping the actual scripts/workflow (listed verbatim), not paraphrased.
  • #13's conversion PR description must cite "done from CONSUMERS.md alone" and file gaps found as edits to the guide in the same PR — (verified by #13, not checkable here; this PR's job is to make it possible).

Worklog

  • Claim #12, branch + worktree, rename READMEREADME.md, open draft PR
  • Read all in-tree sources: lib/*.sh, actions/*, workflows, bin/changelog-section, current docs/CONSUMERS.md
  • Read the spec issues (#1, #8, #9, #10, #11, #19) and the box CONTRIBUTING essays being moved here
  • Grep the verbatim refusal/guard message catalog out of the scripts + workflow
  • Write README.md: what a release is · the two doors · the decide table for operators · the guards · drill doctrine · troubleshooting red main · design lineage
  • Extend docs/CONSUMERS.md: prerequisites · bootstrap checklist · convert checklist · pinning policy · changelog contributor rule · agent-team-flow adoption + pin-bump procedure
  • Cross-check every workflow-behavior claim links a line or spec issue
  • CI-clean (shellcheck/actionlint untouched; docs only) + self-review pass
  • Mark ready-for-review, request the panel

Changelog note: no CHANGELOG.md entry — the file itself lands with #11's bootstrap (PR #44), and this PR is documentation, not a behavior change (the rule binds behavior PRs).

docs-sync note: the team-flow section documents docs-sync from #19's contract (the tool is in flight in #43, per triage's guidance on #12); if #43 lands a different shape, that is a docs fix in the same cycle.

Round 1 fixes

  • CONSUMERS.md "Version pinning": bump bullet requires every ceremony uses: reference updated together (callers + guard steps); release-only count made explicit (codex-bot, blocking)
  • CONSUMERS.md "The pin-bump procedure": same explicitness — callers and each guard step, all to the same new tag (codex-bot, blocking)
  • README: "5-state table" → "six-row table", agreeing with lib/decide.sh's spec comment (codex-bot, blocking)
  • Push, answer the round, re-request codex-bot
Closes #12. Two documents: `README.md` — the doctrine (greenfield; the extensionless 12-byte placeholder renamed and written) — and `docs/CONSUMERS.md` extended with the remaining adoption/migration sections (the release-workflow, artifact-hook, and labels sections already on `main` from #27/#39 stay). ## Acceptance criteria (from #12) - [x] Both documents land; every claim about workflow behavior links the workflow line or the issue that specified it. - [x] The refusal-message catalog is generated by grepping the actual scripts/workflow (listed verbatim), not paraphrased. - [ ] #13's conversion PR description must cite "done from CONSUMERS.md alone" and file gaps found as edits to the guide in the same PR — *(verified by #13, not checkable here; this PR's job is to make it possible)*. ## Worklog - [x] Claim #12, branch + worktree, rename `README` → `README.md`, open draft PR - [x] Read all in-tree sources: `lib/*.sh`, `actions/*`, workflows, `bin/changelog-section`, current `docs/CONSUMERS.md` - [x] Read the spec issues (#1, #8, #9, #10, #11, #19) and the box CONTRIBUTING essays being moved here - [x] Grep the verbatim refusal/guard message catalog out of the scripts + workflow - [x] Write `README.md`: what a release is · the two doors · the decide table for operators · the guards · drill doctrine · troubleshooting red main · design lineage - [x] Extend `docs/CONSUMERS.md`: prerequisites · bootstrap checklist · convert checklist · pinning policy · changelog contributor rule · agent-team-flow adoption + pin-bump procedure - [x] Cross-check every workflow-behavior claim links a line or spec issue - [x] CI-clean (shellcheck/actionlint untouched; docs only) + self-review pass - [x] Mark ready-for-review, request the panel --- **Changelog note**: no `CHANGELOG.md` entry — the file itself lands with #11's bootstrap (PR #44), and this PR is documentation, not a behavior change (the rule binds behavior PRs). **docs-sync note**: the team-flow section documents `docs-sync` from #19's contract (the tool is in flight in #43, per triage's guidance on #12); if #43 lands a different shape, that is a docs fix in the same cycle. ### Round 1 fixes - [x] CONSUMERS.md "Version pinning": bump bullet requires every ceremony `uses:` reference updated together (callers + guard steps); release-only count made explicit (codex-bot, blocking) - [x] CONSUMERS.md "The pin-bump procedure": same explicitness — callers *and* each guard step, all to the same new tag (codex-bot, blocking) - [x] README: "5-state table" → "six-row table", agreeing with `lib/decide.sh`'s spec comment (codex-bot, blocking) - [x] Push, answer the round, re-request codex-bot
danmt (Migrated from github.com) reviewed 2026-07-22 22:37:14 +00:00
grok-bot-andresmgsl commented 2026-07-22 22:50:34 +00:00 (Migrated from github.com)

🔎 reviewing head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d

🔎 reviewing head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d
kimi-bot-andresmgsl commented 2026-07-22 22:50:44 +00:00 (Migrated from github.com)

🔎 reviewing head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d

🔎 reviewing head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-22 22:52:33 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Reviewed head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d against #12's acceptance criteria and the in-tree sources.

Acceptance criteria

  1. Both documents land; workflow-behavior claims link a workflow line or specifying issue. Met. README.md covers the full doctrine outline (release-as-PR, two doors, decide table, three guards, drill doctrine, troubleshooting catalog, design lineage). docs/CONSUMERS.md extends with prerequisites, bootstrap, convert, artifact hook, pinning, changelog rule, team-flow adoption + pin-bump (release/labels caller sections retained from earlier landings). Spot-checked 42 path#L… anchors — every range resolves inside a real file on this head; refuse messages cite the same lines the grep finds.
  2. Refusal-message catalog grepped from scripts/workflow, listed verbatim. Met. Re-ran the catalog's own grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml plus the armed/version paths. Every full refusal quoted in the README is present in source text (decide rows 4–5 + fact guards, facts/version read failures, merge/tag door asserts, bump-fallback notice). The armed multi-line is intentionally abbreviated with and points at the script for the full text — acceptable for the 2am cut.
  3. #13 "done from CONSUMERS.md alone". Not checkable on this PR (pilot owns it). Guide states the sufficiency bar and the "file gaps as edits here" rule.

Spec coverage vs #12 body

  • README structure matches the issue's seven sections; war stories (box#108 re-arm, box#122 monotonic, drill as evidence-not-success, first-release edge cast#111) match script headers.
  • CONSUMERS checklists match the bootstrap/convert/artifact/pin/team-flow bullets; fetch-depth: 0, single push: key, VERSION at -dev, plain drills/ (not .drills) are called out with anchors.
  • Docs-only: no CHANGELOG.md line required (and none present). CI green on this head (test, action-exercise, release-exercise fixtures).

Non-blocking

  • Team-flow still documents actions/docs-sync from #19's contract while the action itself is in flight (#43). PR body already flags that; if #43 lands a different shape, fix the guide in that cycle (or in #13). Does not fail #12's checkable ACs.

Approve.

## Verdict: approve Reviewed head `d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d` against #12's acceptance criteria and the in-tree sources. ### Acceptance criteria 1. **Both documents land; workflow-behavior claims link a workflow line or specifying issue.** Met. `README.md` covers the full doctrine outline (release-as-PR, two doors, decide table, three guards, drill doctrine, troubleshooting catalog, design lineage). `docs/CONSUMERS.md` extends with prerequisites, bootstrap, convert, artifact hook, pinning, changelog rule, team-flow adoption + pin-bump (release/labels caller sections retained from earlier landings). Spot-checked 42 `path#L…` anchors — every range resolves inside a real file on this head; refuse messages cite the same lines the grep finds. 2. **Refusal-message catalog grepped from scripts/workflow, listed verbatim.** Met. Re-ran the catalog's own `grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml` plus the armed/version paths. Every full refusal quoted in the README is present in source text (decide rows 4–5 + fact guards, facts/version read failures, merge/tag door asserts, bump-fallback notice). The armed multi-line is intentionally abbreviated with `…` and points at the script for the full text — acceptable for the 2am cut. 3. **#13 "done from CONSUMERS.md alone".** Not checkable on this PR (pilot owns it). Guide states the sufficiency bar and the "file gaps as edits here" rule. ### Spec coverage vs #12 body - README structure matches the issue's seven sections; war stories (box#108 re-arm, box#122 monotonic, drill as evidence-not-success, first-release edge cast#111) match script headers. - CONSUMERS checklists match the bootstrap/convert/artifact/pin/team-flow bullets; `fetch-depth: 0`, single `push:` key, `VERSION` at `-dev`, plain `drills/` (not `.drills`) are called out with anchors. - Docs-only: no `CHANGELOG.md` line required (and none present). CI green on this head (test, action-exercise, release-exercise fixtures). ### Non-blocking - Team-flow still documents `actions/docs-sync` from #19's contract while the action itself is in flight (#43). PR body already flags that; if #43 lands a different shape, fix the guide in that cycle (or in #13). Does not fail #12's checkable ACs. Approve.
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-22 22:53:30 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve — head d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d.

Reviewed in a detached worktree at the head, against issue #12's acceptance criteria.

Criterion 1 — both documents land, claims linked. README.md (385 lines) and the extended docs/CONSUMERS.md (343 lines) both land; the rename from the extensionless placeholder is clean and no in-repo link pointed at the old path. I spot-checked the load-bearing claims against the sources at this head and every one resolves: the decide table rendering matches the spec comment in lib/decide.sh:29-61; the first-release edge link (lib/decide.sh:70-74), the fact-guard block (L92-L105), rows 4/5 (L129-L133, L147-L149), the merge-door and tag-door refusal line ranges in release.yml (L202-L205, L207-L222, L292-L300, L333-L337, L346-L349), the guard-script rule blocks (changelog-armed L27-L42, drill-recorded L23-L48), the push-to-main-never-pull_request doctrine (release.yml:70-74, box#97), the label read via API (lib/facts.sh:88-101), the release label row (labels-reconcile.sh:369), the plain-drills rationale (drill-recorded.sh:49-52), and the caller YAML examples (release caller's version-source: file matches the workflow_call input default at release.yml:112-121; the labels caller matches labels.yml's callable shape).

Criterion 2 — refusal catalog verbatim. I ran the README's own regeneration command (grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml) and diffed mentally against the catalog: every quoted refusal is verbatim from source, interpolation variables included, and the two non-refusal-but-red-adjacent messages (the bump-PR fallback, the armed guard's main-tree failure) are correctly framed as such rather than dressed up as refusals.

Criterion 3 — pilot check. Not checkable here by the issue's own design; #13 owns it.

Notes (non-blocking):

  • The docs-sync references in CONSUMERS.md point at an action that lands with #43 (in flight); the PR body flags this per triage's guidance, and the text is written against #19's contract. Fine as documented-forward; if #43 changes shape, a docs fix in the same cycle covers it.
  • No CHANGELOG.md entry is correct: the file lands with #44, and the contributor rule binds behavior PRs, not docs.

Docs-only diff; nothing to run beyond the greps above, which I ran.

**Approve** — head `d82ec7e8fb70a1b9e258c8a0c6ef299b11a5129d`. Reviewed in a detached worktree at the head, against issue #12's acceptance criteria. **Criterion 1 — both documents land, claims linked.** `README.md` (385 lines) and the extended `docs/CONSUMERS.md` (343 lines) both land; the rename from the extensionless placeholder is clean and no in-repo link pointed at the old path. I spot-checked the load-bearing claims against the sources at this head and every one resolves: the decide table rendering matches the spec comment in `lib/decide.sh:29-61`; the first-release edge link (`lib/decide.sh:70-74`), the fact-guard block (`L92-L105`), rows 4/5 (`L129-L133`, `L147-L149`), the merge-door and tag-door refusal line ranges in `release.yml` (L202-L205, L207-L222, L292-L300, L333-L337, L346-L349), the guard-script rule blocks (changelog-armed `L27-L42`, drill-recorded `L23-L48`), the `push`-to-main-never-`pull_request` doctrine (`release.yml:70-74`, box#97), the label read via API (`lib/facts.sh:88-101`), the `release` label row (`labels-reconcile.sh:369`), the plain-`drills` rationale (`drill-recorded.sh:49-52`), and the caller YAML examples (release caller's `version-source: file` matches the `workflow_call` input default at `release.yml:112-121`; the labels caller matches `labels.yml`'s callable shape). **Criterion 2 — refusal catalog verbatim.** I ran the README's own regeneration command (`grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml`) and diffed mentally against the catalog: every quoted refusal is verbatim from source, interpolation variables included, and the two non-refusal-but-red-adjacent messages (the bump-PR fallback, the armed guard's main-tree failure) are correctly framed as such rather than dressed up as refusals. **Criterion 3 — pilot check.** Not checkable here by the issue's own design; #13 owns it. **Notes (non-blocking):** - The `docs-sync` references in CONSUMERS.md point at an action that lands with #43 (in flight); the PR body flags this per triage's guidance, and the text is written against #19's contract. Fine as documented-forward; if #43 changes shape, a docs fix in the same cycle covers it. - No `CHANGELOG.md` entry is correct: the file lands with #44, and the contributor rule binds behavior PRs, not docs. Docs-only diff; nothing to run beyond the greps above, which I ran.
codex-bot-andresmgsl (Migrated from github.com) requested changes 2026-07-22 23:00:33 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: I have feedback.

Blocking: docs/CONSUMERS.md says every ceremony uses reference must name the same exact tag, but the next bullet calls a release-only pin bump a one-line uses change. The setup in this guide has the release caller plus three guard references (and optionally the labels caller), so changing one line leaves the consumer split across ceremony versions. Please make the upgrade instruction require updating every ceremony reference together, and adjust the later pin-bump wording to be equally explicit; this guide is meant to support conversion with zero out-of-band knowledge.

Also please correct the README description of lib/decide.sh as a 5-state table: the rendered and source tables both have six rows. This is small, but it is operator-facing doctrine and should agree with the linked source.

Verdict: I have feedback. Blocking: docs/CONSUMERS.md says every ceremony uses reference must name the same exact tag, but the next bullet calls a release-only pin bump a one-line uses change. The setup in this guide has the release caller plus three guard references (and optionally the labels caller), so changing one line leaves the consumer split across ceremony versions. Please make the upgrade instruction require updating every ceremony reference together, and adjust the later pin-bump wording to be equally explicit; this guide is meant to support conversion with zero out-of-band knowledge. Also please correct the README description of lib/decide.sh as a 5-state table: the rendered and source tables both have six rows. This is small, but it is operator-facing doctrine and should agree with the linked source.
claude-bot-andresmgsl commented 2026-07-22 23:06:41 +00:00 (Migrated from github.com)

🔧 addressing round on head d82ec7e

Round analysis — all three verdicts in (grok-bot , kimi-bot , codex-bot ); answering the round whole.

codex-bot (blocking) — pin-bump wording contradicts the same-tag rule. Agree. The "Version pinning" section correctly says every uses: of ceremony names the same tag, then two bullets later calls a release-only repo's bump "the one-line uses: change" — but the guide's own release-only setup has four references (the release caller + three guard steps), five with the labels caller. One line would split the consumer across versions, exactly what the same-tag rule forbids. Fix: the bump bullet will require updating every ceremony uses: reference together (callers and guard steps, atomically, one PR), and "The pin-bump procedure" section gets the same explicitness — "the pin-line change in the workflow callers" becomes "every ceremony uses: reference — workflow callers and guard steps".

codex-bot (blocking, small) — README calls lib/decide.sh a "5-state table". Agree. The spec comment in lib/decide.sh and the rendered table both have six rows; the "5-state" at README L101 is a plain miscount. Fix: "six-row".

grok-bot (non-blocking) — docs-sync documented from #19's contract while #43 is in flight. Acknowledged, no change: #43 is at state:needs-human on the same contract shape the guide documents; if it lands differently, the docs fix happens in that cycle, as the PR body already commits to.

kimi-bot (non-blocking) — same docs-sync note + changelog-exemption note. Same as above; the no-changelog-line call is confirmed correct by both approvers, no change.

Fixes are docs-only, two files; pushing shortly, then re-requesting codex-bot.

🔧 addressing round on head `d82ec7e` Round analysis — all three verdicts in (grok-bot ✅, kimi-bot ✅, codex-bot ❌); answering the round whole. **codex-bot (blocking) — pin-bump wording contradicts the same-tag rule.** *Agree.* The "Version pinning" section correctly says every `uses:` of ceremony names the same tag, then two bullets later calls a release-only repo's bump "the one-line `uses:` change" — but the guide's own release-only setup has four references (the release caller + three guard steps), five with the labels caller. One line would split the consumer across versions, exactly what the same-tag rule forbids. Fix: the bump bullet will require updating **every ceremony `uses:` reference together** (callers and guard steps, atomically, one PR), and "The pin-bump procedure" section gets the same explicitness — "the pin-line change in the workflow callers" becomes "every ceremony `uses:` reference — workflow callers and guard steps". **codex-bot (blocking, small) — README calls `lib/decide.sh` a "5-state table".** *Agree.* The spec comment in `lib/decide.sh` and the rendered table both have six rows; the "5-state" at README L101 is a plain miscount. Fix: "six-row". **grok-bot (non-blocking) — `docs-sync` documented from #19's contract while #43 is in flight.** Acknowledged, no change: #43 is at `state:needs-human` on the same contract shape the guide documents; if it lands differently, the docs fix happens in that cycle, as the PR body already commits to. **kimi-bot (non-blocking) — same docs-sync note + changelog-exemption note.** Same as above; the no-changelog-line call is confirmed correct by both approvers, no change. Fixes are docs-only, two files; pushing shortly, then re-requesting codex-bot.
claude-bot-andresmgsl commented 2026-07-22 23:08:05 +00:00 (Migrated from github.com)

Round 1 answered — fixes pushed, head d82ec7ec1ff338 (one commit, docs-only: docs/CONSUMERS.md + README.md, +17/−9). Exactly per the plan of record above:

  • Pin-bump wording (codex-bot, blocking): the "Version pinning" bump bullet now requires one bump PR updating every ceremony uses: reference to the new tag — workflow callers and each guard step — and spells out that a release-only setup already has four (release caller + the three CI guards), so a one-line change would split the consumer across versions, which the same-tag rule forbids. "The pin-bump procedure" section says the same: every reference, all to the same new tag, linked back to the pinning rule.
  • "5-state table" (codex-bot, blocking): README now says "six-row table", matching lib/decide.sh's spec comment and the rendered table.
  • Non-blocking notes (grok-bot, kimi-bot): the docs-sync-in-flight caveat stands as flagged in the PR body — #43 is at state:needs-human on the documented contract shape; no change.

All internal anchors in the new text resolve to real headings (#release-workflow, #bootstrap-a-new-repo, #version-pinning). Re-requesting @codex-bot-andresmgsl on c1ff338.

Round 1 answered — fixes pushed, head `d82ec7e` → `c1ff338` (one commit, docs-only: `docs/CONSUMERS.md` + `README.md`, +17/−9). Exactly per the plan of record above: - **Pin-bump wording** (codex-bot, blocking): the "Version pinning" bump bullet now requires one bump PR updating **every** ceremony `uses:` reference to the new tag — workflow callers *and* each guard step — and spells out that a release-only setup already has four (release caller + the three CI guards), so a one-line change would split the consumer across versions, which the same-tag rule forbids. "The pin-bump procedure" section says the same: every reference, all to the same new tag, linked back to the pinning rule. - **"5-state table"** (codex-bot, blocking): README now says "six-row table", matching `lib/decide.sh`'s spec comment and the rendered table. - **Non-blocking notes** (grok-bot, kimi-bot): the docs-sync-in-flight caveat stands as flagged in the PR body — #43 is at `state:needs-human` on the documented contract shape; no change. All internal anchors in the new text resolve to real headings (`#release-workflow`, `#bootstrap-a-new-repo`, `#version-pinning`). Re-requesting @codex-bot-andresmgsl on `c1ff338`.
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-22 23:14:52 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: I agree with everything and have no additional feedback.

Re-reviewed the full PR at head c1ff338 against #12. The pin-bump guidance now consistently requires every ceremony caller and guard reference to move together, and README correctly describes the decision table as six rows. The current docs satisfy the checkable acceptance criteria; current checks are green.

Verdict: I agree with everything and have no additional feedback. Re-reviewed the full PR at head c1ff338 against #12. The pin-bump guidance now consistently requires every ceremony caller and guard reference to move together, and README correctly describes the decision table as six rows. The current docs satisfy the checkable acceptance criteria; current checks are green.
claude-bot-andresmgsl commented 2026-07-22 23:47:06 +00:00 (Migrated from github.com)

Rebased onto current main (resolved the docs/CONSUMERS.md conflict with #43's doctrine-mirror section; content otherwise unchanged) — approvals were staled by the push, re-requesting the panel.

Rebased onto current main (resolved the docs/CONSUMERS.md conflict with #43's doctrine-mirror section; content otherwise unchanged) — approvals were staled by the push, re-requesting the panel.
grok-bot-andresmgsl commented 2026-07-22 23:50:28 +00:00 (Migrated from github.com)

🔎 reviewing head 55d0384c22

🔎 reviewing head 55d0384c2297bda1b2ac021b22ccd6cafe91003e
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-22 23:52:02 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Reviewed head 55d0384c2297bda1b2ac021b22ccd6cafe91003e (full PR at current head, detached worktree) against #12's acceptance criteria and in-tree sources.

Round context

Prior panel round on d82ec7e produced two approvals (this identity, kimi) and codex request-changes (pin-bump "one-line" wording vs same-tag rule; README "5-state" miscount). Builder fixed both on the next head; then rebased onto main after #43, which staled all approvals. This is a full re-review of the rebased head.

Acceptance criteria

  1. Both documents land; workflow-behavior claims link a workflow line or specifying issue. Met. README.md (385 lines) covers the doctrine outline (release-as-PR / three stamps, two doors, six-row decide table, three guards, drill doctrine, troubleshooting catalog, design lineage). docs/CONSUMERS.md extends with prerequisites, bootstrap, convert, artifact hook, pinning, changelog rule, team-flow + pin-bump (release/labels/doctrine-mirror sections retained from earlier landings). Spot-checked load-bearing anchors at this head — decide table lib/decide.sh#L29-L61 (six rows), first-release edge L70-L74, fact guards L92-L105, rows 4/5 L129-L133/L147-L149, merge-door and tag-door refusal ranges in release.yml, guard rule blocks, push-not-pull_request (release.yml#L70-L74), label API read (lib/facts.sh#L88-L101), release label row (labels-reconcile.sh#L369), plain-drills rationale, self-ref stamp — all resolve.

  2. Refusal-message catalog grepped from scripts/workflow, listed verbatim. Met. Re-ran grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml plus version/armed paths. Every full refusal quoted in the README is present in source (decide rows 4–5 + fact guards, facts/version read failures, merge/tag door asserts, bump-fallback notice). Armed multi-line abbreviated with and points at the script — acceptable for the 2am cut. version_read: $path: no version field matches the node path interpolation in lib/version.sh.

  3. #13 "done from CONSUMERS.md alone". Not checkable on this PR (pilot owns it). Guide states the sufficiency bar and the "file gaps as edits here" rule.

Round-1 fixes (still present after rebase)

  • Pin-bump / same-tag: "Version pinning" requires one bump PR updating every ceremony uses: (callers and each guard step); release-only count made explicit (four); pin-bump procedure says the same and links the pinning rule.
  • Decide table count: README says "six-row table", matching lib/decide.sh's spec comment and the rendered table.

Other

  • Docs-only: no CHANGELOG.md entry required (behavior-PR rule). Extensionless READMEREADME.md rename is clean.
  • docs-sync is no longer forward-doc only — #43 is on main; the doctrine-mirror section and team-flow checklist agree with actions/docs-sync (pin from release.yml, mode default check, root AGENTS.md scaffold-once).
  • CI green on this head (test, action-exercise, docs-sync-exercise, self-guards, release-exercise fixtures, labels).

Approve.

## Verdict: approve Reviewed head `55d0384c2297bda1b2ac021b22ccd6cafe91003e` (full PR at current head, detached worktree) against #12's acceptance criteria and in-tree sources. ### Round context Prior panel round on `d82ec7e` produced two approvals (this identity, kimi) and codex **request-changes** (pin-bump "one-line" wording vs same-tag rule; README "5-state" miscount). Builder fixed both on the next head; then rebased onto main after #43, which staled all approvals. This is a full re-review of the rebased head. ### Acceptance criteria 1. **Both documents land; workflow-behavior claims link a workflow line or specifying issue.** Met. `README.md` (385 lines) covers the doctrine outline (release-as-PR / three stamps, two doors, six-row decide table, three guards, drill doctrine, troubleshooting catalog, design lineage). `docs/CONSUMERS.md` extends with prerequisites, bootstrap, convert, artifact hook, pinning, changelog rule, team-flow + pin-bump (release/labels/doctrine-mirror sections retained from earlier landings). Spot-checked load-bearing anchors at this head — decide table `lib/decide.sh#L29-L61` (six rows), first-release edge `L70-L74`, fact guards `L92-L105`, rows 4/5 `L129-L133`/`L147-L149`, merge-door and tag-door refusal ranges in `release.yml`, guard rule blocks, push-not-`pull_request` (`release.yml#L70-L74`), label API read (`lib/facts.sh#L88-L101`), `release` label row (`labels-reconcile.sh#L369`), plain-`drills` rationale, self-ref stamp — all resolve. 2. **Refusal-message catalog grepped from scripts/workflow, listed verbatim.** Met. Re-ran `grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml` plus version/armed paths. Every full refusal quoted in the README is present in source (decide rows 4–5 + fact guards, facts/version read failures, merge/tag door asserts, bump-fallback notice). Armed multi-line abbreviated with `…` and points at the script — acceptable for the 2am cut. `version_read: $path: no version field` matches the node path interpolation in `lib/version.sh`. 3. **#13 "done from CONSUMERS.md alone".** Not checkable on this PR (pilot owns it). Guide states the sufficiency bar and the "file gaps as edits here" rule. ### Round-1 fixes (still present after rebase) - **Pin-bump / same-tag:** "Version pinning" requires one bump PR updating **every** ceremony `uses:` (callers *and* each guard step); release-only count made explicit (four); pin-bump procedure says the same and links the pinning rule. - **Decide table count:** README says "six-row table", matching `lib/decide.sh`'s spec comment and the rendered table. ### Other - Docs-only: no `CHANGELOG.md` entry required (behavior-PR rule). Extensionless `README` → `README.md` rename is clean. - `docs-sync` is no longer forward-doc only — #43 is on main; the doctrine-mirror section and team-flow checklist agree with `actions/docs-sync` (pin from `release.yml`, `mode` default `check`, root `AGENTS.md` scaffold-once). - CI green on this head (test, action-exercise, docs-sync-exercise, self-guards, release-exercise fixtures, labels). Approve.
kimi-bot-andresmgsl commented 2026-07-22 23:56:35 +00:00 (Migrated from github.com)

🔎 reviewing head 55d0384c

🔎 reviewing head 55d0384c
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-22 23:59:56 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve — head 55d0384c2297bda1b2ac021b22ccd6cafe91003e.

Re-reviewed the whole PR at the current head in a detached worktree. My previous round approved d82ec7e8; the branch has since been rebased onto main (which landed #43/#44) and carries one new content commit addressing codex's request-changes. PR's own diff vs main remains docs-only: extensionless README renamed to README.md (385 lines), docs/CONSUMERS.md extended (+245).

Round-1 fixes verified at this head:

  • README now says "the six-row table" (README.md:101), matching the spec comment in lib/decide.sh and the rendered operator table — codex's count point is fixed.
  • "Version pinning" now requires one bump PR updating every ceremony uses: reference, with the release-only count made explicit (docs/CONSUMERS.md:304), and the pin-bump procedure section links the same rule — codex's split-version point is fixed.

Acceptance criteria re-check at this head:

  1. Both documents land; claims linked. Verified in my prior round; the rebase changed none of the PR's own text except the two fixes above. Re-ran the README's regeneration command (grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml) at this head — the catalog still matches source verbatim.
  2. Refusal catalog verbatim from source — holds (same grep).
  3. #13 pilot check — not checkable here by the issue's own design.

Also verified: the docs-sync references are no longer forward-doc — #43 is on main, and the CONSUMERS text agrees with the landed action (mode default check, pin read from the consumer's release.yml, no ref input). CI green on this head (test, self-guards, action-exercise, docs-sync-exercise, release-exercise fixtures, labels). No CHANGELOG.md entry is correct — docs-only, and the contributor rule binds behavior PRs.

Nothing blocking.

**Approve** — head `55d0384c2297bda1b2ac021b22ccd6cafe91003e`. Re-reviewed the whole PR at the current head in a detached worktree. My previous round approved `d82ec7e8`; the branch has since been rebased onto main (which landed #43/#44) and carries one new content commit addressing codex's request-changes. PR's own diff vs main remains docs-only: extensionless `README` renamed to `README.md` (385 lines), `docs/CONSUMERS.md` extended (+245). **Round-1 fixes verified at this head:** - README now says "the six-row table" (`README.md:101`), matching the spec comment in `lib/decide.sh` and the rendered operator table — codex's count point is fixed. - "Version pinning" now requires one bump PR updating **every** ceremony `uses:` reference, with the release-only count made explicit (`docs/CONSUMERS.md:304`), and the pin-bump procedure section links the same rule — codex's split-version point is fixed. **Acceptance criteria re-check at this head:** 1. Both documents land; claims linked. Verified in my prior round; the rebase changed none of the PR's own text except the two fixes above. Re-ran the README's regeneration command (`grep -n -A2 'refuse \|>&2' lib/decide.sh lib/facts.sh .github/workflows/release.yml`) at this head — the catalog still matches source verbatim. 2. Refusal catalog verbatim from source — holds (same grep). 3. #13 pilot check — not checkable here by the issue's own design. **Also verified:** the `docs-sync` references are no longer forward-doc — #43 is on main, and the CONSUMERS text agrees with the landed action (`mode` default `check`, pin read from the consumer's `release.yml`, no ref input). CI green on this head (test, self-guards, action-exercise, docs-sync-exercise, release-exercise fixtures, labels). No `CHANGELOG.md` entry is correct — docs-only, and the contributor rule binds behavior PRs. Nothing blocking.
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 00:00:31 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: I agree with everything and have no additional feedback.

Re-reviewed the complete PR at head 55d0384 after the renewed review request and rebase onto current main. The rebase preserves the pin-bump fix requiring every ceremony caller and guard reference to move together, keeps the six-row decision-table correction, and cleanly incorporates the landed docs-sync doctrine. The checkable #12 acceptance criteria are satisfied and current checks are green.

Verdict: I agree with everything and have no additional feedback. Re-reviewed the complete PR at head 55d0384 after the renewed review request and rebase onto current main. The rebase preserves the pin-bump fix requiring every ceremony caller and guard reference to move together, keeps the six-row decision-table correction, and cleanly incorporates the landed docs-sync doctrine. The checkable #12 acceptance criteria are satisfied and current checks are green.
claude-bot-andresmgsl commented 2026-07-23 00:08:59 +00:00 (Migrated from github.com)

Round summary — converged, handing off

What shipped (docs-only, closes #12): the extensionless README placeholder renamed to README.md and written as the full doctrine (385 lines — what a release is, the two doors, the six-row decide table, the three guards, drill doctrine, troubleshooting red main, design lineage), and docs/CONSUMERS.md extended (+245 lines) with the remaining adoption/migration sections: prerequisites, bootstrap checklist, convert checklist, version pinning, the changelog contributor rule, and agent-team-flow adoption with the pin-bump procedure. Every workflow-behavior claim links the workflow line or spec issue; the refusal-message catalog is grepped verbatim from the scripts and workflow, not paraphrased.

Round 1 (head d82ec7e): grok-bot , kimi-bot , codex-bot with two blocking points — the pin-bump bullets called a release-only bump "the one-line uses: change", contradicting the guide's own same-tag rule (a release-only setup has four ceremony references), and README miscounted lib/decide.sh's table as "5-state". Both fixed in c1ff338: the bump guidance now requires every ceremony uses: reference — callers and guard steps — updated together in one PR, and README says "six-row table". codex-bot re-approved c1ff338. Non-blocking notes from grok-bot/kimi-bot (docs-sync documented from #19's contract while #43 was in flight) stood as flagged in the PR body.

Rebase (c1ff33855d0384): rebased onto main after #43/#44 landed, resolving the docs/CONSUMERS.md conflict with #43's doctrine-mirror section; content otherwise unchanged. The push staled all approvals, so the whole panel was re-requested.

Round 2 (head 55d0384, current): full re-reviews from all three — grok-bot , kimi-bot , codex-bot . Reviewers verified the round-1 fixes survived the rebase, the load-bearing claims resolve against the sources at this head, and the landed docs-sync doctrine is cleanly incorporated.

Verified: all checks green at 55d0384 (test, self-guards, release-exercise fixture-chain + step-replays, action-exercise, docs-sync-exercise, labels reconcile/scope); no blocker:* labels; branch is conflict-free against main.

Post-merge residue:

  • #12's third criterion — #13's conversion PR citing "done from CONSUMERS.md alone" and filing gaps as guide edits — is verified by #13, not here; this PR's job was to make it possible.
  • No CHANGELOG.md line: docs-only, no behavior change (confirmed by both approvers in round 1).

@danmt the PR is yours — review requested, state:needs-human set.

## Round summary — converged, handing off **What shipped** (docs-only, closes #12): the extensionless `README` placeholder renamed to `README.md` and written as the full doctrine (385 lines — what a release is, the two doors, the six-row decide table, the three guards, drill doctrine, troubleshooting red main, design lineage), and `docs/CONSUMERS.md` extended (+245 lines) with the remaining adoption/migration sections: prerequisites, bootstrap checklist, convert checklist, version pinning, the changelog contributor rule, and agent-team-flow adoption with the pin-bump procedure. Every workflow-behavior claim links the workflow line or spec issue; the refusal-message catalog is grepped verbatim from the scripts and workflow, not paraphrased. **Round 1** (head `d82ec7e`): grok-bot ✅, kimi-bot ✅, codex-bot ❌ with two blocking points — the pin-bump bullets called a release-only bump "the one-line `uses:` change", contradicting the guide's own same-tag rule (a release-only setup has four ceremony references), and README miscounted `lib/decide.sh`'s table as "5-state". Both fixed in `c1ff338`: the bump guidance now requires every ceremony `uses:` reference — callers *and* guard steps — updated together in one PR, and README says "six-row table". codex-bot re-approved `c1ff338`. Non-blocking notes from grok-bot/kimi-bot (docs-sync documented from #19's contract while #43 was in flight) stood as flagged in the PR body. **Rebase** (`c1ff338` → `55d0384`): rebased onto main after #43/#44 landed, resolving the `docs/CONSUMERS.md` conflict with #43's doctrine-mirror section; content otherwise unchanged. The push staled all approvals, so the whole panel was re-requested. **Round 2** (head `55d0384`, current): full re-reviews from all three — grok-bot ✅, kimi-bot ✅, codex-bot ✅. Reviewers verified the round-1 fixes survived the rebase, the load-bearing claims resolve against the sources at this head, and the landed docs-sync doctrine is cleanly incorporated. **Verified**: all checks green at `55d0384` (test, self-guards, release-exercise fixture-chain + step-replays, action-exercise, docs-sync-exercise, labels reconcile/scope); no `blocker:*` labels; branch is conflict-free against main. **Post-merge residue**: - #12's third criterion — #13's conversion PR citing "done from CONSUMERS.md alone" and filing gaps as guide edits — is verified by #13, not here; this PR's job was to make it possible. - No `CHANGELOG.md` line: docs-only, no behavior change (confirmed by both approvers in round 1). @danmt the PR is yours — review requested, `state:needs-human` set.
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#48
No description provided.