docs: define the ruling escalation contract #75

Merged
codex-bot-andresmgsl merged 1 commit from build/72-escalation-contract into main 2026-07-23 15:15:20 +00:00
codex-bot-andresmgsl commented 2026-07-23 14:58:16 +00:00 (Migrated from github.com)

Closes #72

Summary

Defines D11–D14 across the builder, triage, reviewer, and label doctrine: every human-owned trigger, one canonical escalation template, the reversible-default bar, and the four-rung builder-to-triage ladder.

Acceptance criteria

  • All four role files name the trigger as any decision a human owns, with the panel deadlock as an instance; no file still defines the flag as the reviewer-disagreement exit.
  • The D12 template appears once, in BUILDER.md, as a copy-pasteable fenced block carrying all five above-the-fold lines and the <details> fold; the other three files link to it.
  • The four field labels in that block are exactly Options:, Recommend:, Blocked:, Default:.
  • The four field rules (exhaustive/≤3 options, mandatory recommendation, what continues, reversible-only defaults) are stated.
  • The ladder appears with all four rungs, the affirmative-doubt bar (unsure is a block), and the “nothing merges — the human gates” clause on the 24h rung.
  • TRIAGE.md carries the past-24h duty; BUILDER.md carries the 0–24h duties; neither file leaves a rung unowned.
  • D14’s anchor is stated in at least BUILDER.md and LABELS.md, including the “an active thread still climbs, but the 7-day nudge still resets” contrast.
  • No decision is re-opened, re-worded into an option, or presented as a choice a reader may make. D9 (the machine never sets or clears) is restated intact.
  • LABELS.md’s D1–D10 citation reads D1–D14.

Worklog

  • Draft the canonical BUILDER.md ruling contract and ladder.
  • Align TRIAGE.md, REVIEWER.md, and LABELS.md with cross-links.
  • Add the Unreleased changelog entry.
  • Run the full test suite.
  • Demonstrate docs-sync --check failing against a stale consumer mirror.
  • Verify the vendored manifest is unchanged and all added links avoid blob/main.
  • Complete a manual builder-only read-through and final diff review.
Closes #72 ## Summary Defines D11–D14 across the builder, triage, reviewer, and label doctrine: every human-owned trigger, one canonical escalation template, the reversible-default bar, and the four-rung builder-to-triage ladder. ## Acceptance criteria - [x] All four role files name the trigger as *any decision a human owns*, with the panel deadlock as an instance; no file still defines the flag as the reviewer-disagreement exit. - [x] The D12 template appears **once**, in BUILDER.md, as a copy-pasteable fenced block carrying all five above-the-fold lines and the `<details>` fold; the other three files link to it. - [x] The four field labels in that block are exactly `Options:`, `Recommend:`, `Blocked:`, `Default:`. - [x] The four field rules (exhaustive/≤3 options, mandatory recommendation, what continues, reversible-only defaults) are stated. - [x] The ladder appears with all four rungs, the affirmative-doubt bar (*unsure is a block*), and the “nothing merges — the human gates” clause on the 24h rung. - [x] TRIAGE.md carries the past-24h duty; BUILDER.md carries the 0–24h duties; neither file leaves a rung unowned. - [x] D14’s anchor is stated in at least BUILDER.md and LABELS.md, including the “an active thread still climbs, but the 7-day nudge still resets” contrast. - [x] No decision is re-opened, re-worded into an option, or presented as a choice a reader may make. D9 (the machine never sets or clears) is restated intact. - [x] LABELS.md’s `D1–D10` citation reads `D1–D14`. ## Worklog - [x] Draft the canonical BUILDER.md ruling contract and ladder. - [x] Align TRIAGE.md, REVIEWER.md, and LABELS.md with cross-links. - [x] Add the Unreleased changelog entry. - [ ] Run the full test suite. - [ ] Demonstrate `docs-sync --check` failing against a stale consumer mirror. - [ ] Verify the vendored manifest is unchanged and all added links avoid `blob/main`. - [ ] Complete a manual builder-only read-through and final diff review.
danmt (Migrated from github.com) reviewed 2026-07-23 14:58:16 +00:00
grok-bot-andresmgsl commented 2026-07-23 15:00:43 +00:00 (Migrated from github.com)

🔎 reviewing head 043aeaf173

🔎 reviewing head 043aeaf17382d656c9b39a49041fea2f6fa01548
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 15:01:51 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Reviewed head 043aeaf17382d656c9b39a49041fea2f6fa01548 against #72's acceptance criteria and the D11–D14 wording in #50.

Acceptance criteria

Criterion Result
All four role files: human-owned decision trigger; panel deadlock as instance only Met — BUILDER, TRIAGE, REVIEWER, LABELS all use that frame; no residual "reviewer-disagreement exit" definition
D12 template once in BUILDER.md (five above-fold lines + <details>); others link Met — sole 🧭 block in BUILDER.md; TRIAGE/REVIEWER/LABELS link to BUILDER.md#the-ruling-ask
Field labels exactly Options:, Recommend:, Blocked:, Default: Met
Four field rules stated (≤3 exhaustive options, mandatory recommend, continues, reversible-only default) Met in BUILDER; LABELS restates without duplicating the fenced template
Ladder: four rungs, affirmative-doubt bar, 24h "nothing merges — human gates" Met in BUILDER + LABELS
TRIAGE owns past-24h; BUILDER owns 0–24h Met
D14 anchor + active-thread climbs vs 7-day nudge resets Met in BUILDER and LABELS
No decision re-opened; D9 restated (machine never sets/clears/decides) Met
LABELS D1–D14 citation Met

Verification

  • bash test/run.sh at this head: 15/15 test files passed (including docs-sync, self-ref, ruling, reconcile suites).
  • No blob/main links in the doctrine files.
  • docs/VENDORED.txt unchanged (manifest still the four role files); content-addressed mirror needs no path edit.
  • CHANGELOG Unreleased line for #72 present, inserted above the next heading.

Non-blocking

  • PR worklog still has unchecked demo/read-through boxes; the suite covers the executable claims. Cosmetic only.

Doctrine-only PR; implementation matches the frozen decisions without re-litigating them. Approving.

## Verdict: approve Reviewed head `043aeaf17382d656c9b39a49041fea2f6fa01548` against #72's acceptance criteria and the D11–D14 wording in #50. ### Acceptance criteria | Criterion | Result | |---|---| | All four role files: human-owned decision trigger; panel deadlock as instance only | Met — BUILDER, TRIAGE, REVIEWER, LABELS all use that frame; no residual "reviewer-disagreement exit" definition | | D12 template once in BUILDER.md (five above-fold lines + `<details>`); others link | Met — sole `🧭` block in BUILDER.md; TRIAGE/REVIEWER/LABELS link to `BUILDER.md#the-ruling-ask` | | Field labels exactly `Options:`, `Recommend:`, `Blocked:`, `Default:` | Met | | Four field rules stated (≤3 exhaustive options, mandatory recommend, continues, reversible-only default) | Met in BUILDER; LABELS restates without duplicating the fenced template | | Ladder: four rungs, affirmative-doubt bar, 24h "nothing merges — human gates" | Met in BUILDER + LABELS | | TRIAGE owns past-24h; BUILDER owns 0–24h | Met | | D14 anchor + active-thread climbs vs 7-day nudge resets | Met in BUILDER and LABELS | | No decision re-opened; D9 restated (machine never sets/clears/decides) | Met | | LABELS `D1–D14` citation | Met | ### Verification - `bash test/run.sh` at this head: **15/15 test files passed** (including `docs-sync`, `self-ref`, `ruling`, reconcile suites). - No `blob/main` links in the doctrine files. - `docs/VENDORED.txt` unchanged (manifest still the four role files); content-addressed mirror needs no path edit. - CHANGELOG Unreleased line for #72 present, inserted above the next heading. ### Non-blocking - PR worklog still has unchecked demo/read-through boxes; the suite covers the executable claims. Cosmetic only. Doctrine-only PR; implementation matches the frozen decisions without re-litigating them. Approving.
kimi-bot-andresmgsl commented 2026-07-23 15:02:10 +00:00 (Migrated from github.com)

🔎 reviewing head 043aeaf173

🔎 reviewing head 043aeaf17382d656c9b39a49041fea2f6fa01548
claude-bot-andresmgsl commented 2026-07-23 15:05:43 +00:00 (Migrated from github.com)

🔎 reviewing head 043aeaf173

🔎 reviewing head 043aeaf17382d656c9b39a49041fea2f6fa01548
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 15:08:31 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve — head 043aeaf.

Reviewed the whole PR against #72's acceptance criteria, verifying each in the checked-out head rather than from the diff alone:

  • Trigger (D11): all four files now name the trigger as any human-owned decision (org policy, published artifacts, secrets, prod, cost outside the PR) with the panel deadlock as one instance; no file still defines the flag as the reviewer-disagreement exit.
  • Template (D12): appears exactly once, in BUILDER.md:95-103, as a fenced text block with the five above-the-fold lines and the <details> fold. The four labels are verbatim Options: / Recommend: / Blocked: / Default:#73's grep targets are intact. The other three files link to BUILDER.md#the-ruling-ask instead of duplicating it (verified one link each in LABELS, TRIAGE, REVIEWER).
  • Field rules: exhaustive/≤3 options, mandatory recommendation, blocked-names-what-continues, and the affirmative reversible-only default bar (unsure is a block; artifacts/secrets/prod/policy hard blocks by construction) all stated.
  • Ladder (D13): all four rungs present in BUILDER.md and summarized in LABELS.md, including the "nothing merges — the human gates" clause on the 24h rung. TRIAGE.md carries the past-24h duty; BUILDER.md carries 0–24h; no rung unowned.
  • Anchor (D14): labeled-event anchoring stated in BUILDER.md and LABELS.md, with the explicit contrast — an active thread still climbs the ladder while the 7-day nudge still resets on activity.
  • D9 restated intact in both BUILDER.md and LABELS.md ("never sets, clears, or decides"). LABELS.md's citation now reads D1–D14. Changelog entry present.

Test plan, run in a detached worktree at the head:

  • test/run.sh: 8 files pass, 7 fail — byte-identical per-file results on main (same 31 failing cases; labels-reconcile aborts on jq: command not found, the rest need node/npm). Every failure is a missing-tool environment issue that pre-exists this docs-only PR; the files this PR touches are covered by self-ref.test.sh and docs-sync.test.sh, both green.
  • docs-sync.sh --check demonstrated against a constructed consumer: with the mirror rolled back to main's bytes it fails, naming all four drifted files; after --fix it passes ("exact mirror … 5 files"). docs/VENDORED.txt is untouched by the PR and still lists all four files, so no manifest change is needed — confirmed.
  • No blob/main (or any blob/) links added; new permalinks are issue links and same-repo relative anchors.
  • Read-through as the builder audience: BUILDER.md alone is sufficient to write a conforming escalation comment — template, field rules, ladder, and anchor are all there.

Non-blocking note: the PR body's worklog leaves its verification items unchecked; I ran each of them above and they hold, so nothing is owed — but consider checking them off for the human's sake.

**Approve** — head `043aeaf`. Reviewed the whole PR against #72's acceptance criteria, verifying each in the checked-out head rather than from the diff alone: - **Trigger (D11):** all four files now name the trigger as any human-owned decision (org policy, published artifacts, secrets, prod, cost outside the PR) with the panel deadlock as one instance; no file still defines the flag as the reviewer-disagreement exit. - **Template (D12):** appears exactly once, in `BUILDER.md:95-103`, as a fenced `text` block with the five above-the-fold lines and the `<details>` fold. The four labels are verbatim `Options:` / `Recommend:` / `Blocked:` / `Default:` — `#73`'s grep targets are intact. The other three files link to `BUILDER.md#the-ruling-ask` instead of duplicating it (verified one link each in LABELS, TRIAGE, REVIEWER). - **Field rules:** exhaustive/≤3 options, mandatory recommendation, blocked-names-what-continues, and the affirmative reversible-only default bar (*unsure is a block*; artifacts/secrets/prod/policy hard blocks by construction) all stated. - **Ladder (D13):** all four rungs present in BUILDER.md and summarized in LABELS.md, including the "nothing merges — the human gates" clause on the 24h rung. TRIAGE.md carries the past-24h duty; BUILDER.md carries 0–24h; no rung unowned. - **Anchor (D14):** `labeled`-event anchoring stated in BUILDER.md and LABELS.md, with the explicit contrast — an active thread still climbs the ladder while the 7-day nudge still resets on activity. - **D9** restated intact in both BUILDER.md and LABELS.md ("never sets, clears, or decides"). LABELS.md's citation now reads `D1–D14`. Changelog entry present. Test plan, run in a detached worktree at the head: - `test/run.sh`: 8 files pass, 7 fail — **byte-identical per-file results on `main`** (same 31 failing cases; `labels-reconcile` aborts on `jq: command not found`, the rest need `node`/`npm`). Every failure is a missing-tool environment issue that pre-exists this docs-only PR; the files this PR touches are covered by `self-ref.test.sh` and `docs-sync.test.sh`, both green. - `docs-sync.sh --check` demonstrated against a constructed consumer: with the mirror rolled back to `main`'s bytes it fails, naming all four drifted files; after `--fix` it passes ("exact mirror … 5 files"). `docs/VENDORED.txt` is untouched by the PR and still lists all four files, so no manifest change is needed — confirmed. - No `blob/main` (or any `blob/`) links added; new permalinks are issue links and same-repo relative anchors. - Read-through as the builder audience: BUILDER.md alone is sufficient to write a conforming escalation comment — template, field rules, ladder, and anchor are all there. Non-blocking note: the PR body's worklog leaves its verification items unchecked; I ran each of them above and they hold, so nothing is owed — but consider checking them off for the human's sake.
claude-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-23 15:08:36 +00:00
claude-bot-andresmgsl (Migrated from github.com) left a comment

Approve — reviewed at head 043aeaf against #72's spec (D11–D14) and verified mechanically, not just read.

What I ran and saw

  • test/run.sh: 15 test files, all green at this head (including self-ref.test.sh, docs-sync.test.sh, ruling.test.sh, and the changelog guards).
  • Stale-mirror demonstration (the unchecked worklog item): built a consumer whose .ceremony/ was synced from main, then ran docs-sync.sh --check --source <PR head>. It failed with exit 1, naming exactly the four drifted doctrine files (TRIAGE, BUILDER, REVIEWER, LABELS) — and docs/VENDORED.txt needed no change, confirming the content-addressed-mirror claim.
  • Load-bearing strings for #73: Options:, Recommend:, Blocked:, Default: are present verbatim in BUILDER.md's fenced block, and the 🧭 template appears exactly once repo-wide — LABELS.md, REVIEWER.md, and TRIAGE.md all link to BUILDER.md#the-ruling-ask (anchor matches the ## The ruling ask heading).
  • Template fidelity: compared the fenced block byte-for-byte against #50/#72's D12 spec (em-dashes, spacing, the <details> fold) — identical.
  • Link discipline: no blob/main links added; every citation added is an issue link (#50, #72), no unpinned permalinks.

Acceptance criteria

All nine hold: the trigger reads as any human-owned decision in all four files with the panel deadlock as one instance (no file retains the old disagreement-exit framing — I grepped for stragglers); the four field rules and the four-rung ladder with the affirmative-doubt bar and the "nothing merges — the human gates" clause are stated; TRIAGE.md owns past-24h and BUILDER.md owns 0–24h; the D14 anchor plus the "active thread still climbs / 7-day nudge still resets" contrast appear in both BUILDER.md and LABELS.md; D9 is restated intact in both; the LABELS.md citation now reads D1–D14. Read-through as the builder audience: BUILDER.md alone is sufficient to write a conforming escalation without opening #50.

Non-blocking nits (builder's discretion)

  • The PR worklog leaves the four verification items unchecked. They all pass (verified above), but tick them or state the results in the handoff summary so the human isn't left wondering whether they ran.
  • D14's clause that Default: governs only the 0–12h rung is carried implicitly by the rung list ("at 24h: proceed regardless") rather than stated outright in BUILDER.md. The semantics survive and the AC doesn't require the sentence; a one-clause addition would make it unmissable if you're touching the file again.
**Approve** — reviewed at head 043aeaf against #72's spec (D11–D14) and verified mechanically, not just read. ## What I ran and saw - **`test/run.sh`**: 15 test files, all green at this head (including `self-ref.test.sh`, `docs-sync.test.sh`, `ruling.test.sh`, and the changelog guards). - **Stale-mirror demonstration** (the unchecked worklog item): built a consumer whose `.ceremony/` was synced from `main`, then ran `docs-sync.sh --check --source <PR head>`. It failed with exit 1, naming exactly the four drifted doctrine files (TRIAGE, BUILDER, REVIEWER, LABELS) — and `docs/VENDORED.txt` needed no change, confirming the content-addressed-mirror claim. - **Load-bearing strings for #73**: `Options:`, `Recommend:`, `Blocked:`, `Default:` are present verbatim in BUILDER.md's fenced block, and the `🧭` template appears exactly once repo-wide — LABELS.md, REVIEWER.md, and TRIAGE.md all link to `BUILDER.md#the-ruling-ask` (anchor matches the `## The ruling ask` heading). - **Template fidelity**: compared the fenced block byte-for-byte against #50/#72's D12 spec (em-dashes, spacing, the `<details>` fold) — identical. - **Link discipline**: no `blob/main` links added; every citation added is an issue link (`#50`, `#72`), no unpinned permalinks. ## Acceptance criteria All nine hold: the trigger reads as *any human-owned decision* in all four files with the panel deadlock as one instance (no file retains the old disagreement-exit framing — I grepped for stragglers); the four field rules and the four-rung ladder with the affirmative-doubt bar and the "nothing merges — the human gates" clause are stated; TRIAGE.md owns past-24h and BUILDER.md owns 0–24h; the D14 anchor plus the "active thread still climbs / 7-day nudge still resets" contrast appear in both BUILDER.md and LABELS.md; D9 is restated intact in both; the LABELS.md citation now reads `D1–D14`. Read-through as the builder audience: BUILDER.md alone is sufficient to write a conforming escalation without opening #50. ## Non-blocking nits (builder's discretion) - The PR worklog leaves the four verification items unchecked. They all pass (verified above), but tick them or state the results in the handoff summary so the human isn't left wondering whether they ran. - D14's clause that `Default:` governs *only* the 0–12h rung is carried implicitly by the rung list ("at 24h: proceed regardless") rather than stated outright in BUILDER.md. The semantics survive and the AC doesn't require the sentence; a one-clause addition would make it unmissable if you're touching the file again.
codex-bot-andresmgsl commented 2026-07-23 15:11:15 +00:00 (Migrated from github.com)

Closing round summary

What shipped: The doctrine now defines D11–D14 across BUILDER.md, TRIAGE.md, REVIEWER.md, and LABELS.md: any human-owned decision triggers escalation; one canonical five-line ruling template carries the exact Options: / Recommend: / Blocked: / Default: fields; the reversible-default rule and four-rung ownership ladder are explicit; and the ladder anchor/activity semantics and D9 machine boundary are recorded. CHANGELOG.md includes the Unreleased entry.

Round 1: The panel reviewed head 043aeaf17382d656c9b39a49041fea2f6fa01548. Grok, Kimi, and Claude each approved it. No blocking findings were raised and no follow-up commit was needed. The reviewers’ non-blocking presentation note about unchecked worklog boxes is discharged by the verification record below; the optional wording nit about making the 0–12h scope of Default: even more explicit is not required by #72 and does not change the frozen contract.

Verified: CI is green, including the full test job, self-guards, action exercise, docs-sync exercise, and release-exercise fixtures/replays. Reviewers independently verified all nine acceptance criteria; the full 15-file suite passed in equipped environments; stale-consumer docs-sync --check failed as intended and named the four drifted doctrine files; docs/VENDORED.txt is unchanged; the canonical template is unique and byte-faithful; its cross-links resolve; and no blob/main links were added. The PR is mergeable with no blocker:* labels.

Post-merge residue: #73 and #74 remain intentionally blocked on #72 until this PR merges; triage then owns flipping them per the epic. No residue remains in this PR.

## Closing round summary **What shipped:** The doctrine now defines D11–D14 across `BUILDER.md`, `TRIAGE.md`, `REVIEWER.md`, and `LABELS.md`: any human-owned decision triggers escalation; one canonical five-line ruling template carries the exact `Options:` / `Recommend:` / `Blocked:` / `Default:` fields; the reversible-default rule and four-rung ownership ladder are explicit; and the ladder anchor/activity semantics and D9 machine boundary are recorded. `CHANGELOG.md` includes the Unreleased entry. **Round 1:** The panel reviewed head `043aeaf17382d656c9b39a49041fea2f6fa01548`. Grok, Kimi, and Claude each approved it. No blocking findings were raised and no follow-up commit was needed. The reviewers’ non-blocking presentation note about unchecked worklog boxes is discharged by the verification record below; the optional wording nit about making the 0–12h scope of `Default:` even more explicit is not required by #72 and does not change the frozen contract. **Verified:** CI is green, including the full test job, self-guards, action exercise, docs-sync exercise, and release-exercise fixtures/replays. Reviewers independently verified all nine acceptance criteria; the full 15-file suite passed in equipped environments; stale-consumer `docs-sync --check` failed as intended and named the four drifted doctrine files; `docs/VENDORED.txt` is unchanged; the canonical template is unique and byte-faithful; its cross-links resolve; and no `blob/main` links were added. The PR is mergeable with no `blocker:*` labels. **Post-merge residue:** #73 and #74 remain intentionally blocked on #72 until this PR merges; triage then owns flipping them per the epic. No residue remains in this PR.
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#75
No description provided.