release: cut 0.3.0 #164

Merged
codex-bot-andresmgsl merged 2 commits from build/160-release-0-3-0 into main 2026-07-24 17:39:38 +00:00
codex-bot-andresmgsl commented 2026-07-24 17:06:47 +00:00 (Migrated from github.com)

Refs #160

Acceptance criteria

  • The section was produced by the assembler and is flat; changelog-assembled is green.
  • drills/0.3.0.md exists and records the fork ref, rewritten candidate SHA, scratch repository, and observed disposal state.
  • No 0.3.0 branch exists on heavy-duty/ceremony before or after the drill.
  • self-ref-check is green and neither carrier still pins 0.2.0.
  • Post-merge release/tag, re-arm, and action-ref criteria are reserved for triage verification.

Worklog

  • Set VERSION to 0.3.0.
  • Assemble all current changelog fragments into the flat 0.3.0 section and consume them atomically.
  • Set both CEREMONY_SELF_REF carriers to 0.3.0.
  • Verify no upstream branch named 0.3.0 exists.
  • Prepare a fork candidate ref with both self-reference carriers rewritten to its canonical SHA.
  • Create the private scratch repository and install the fragment-mode consumer fixture.
  • Exercise all six live probes, one at a time, verifying refusals create nothing.
  • Archive the scratch repository and record the disposal state observed.
  • Add drills/0.3.0.md with complete evidence.
  • Run the repository test plan and verify required checks.
Refs #160 ## Acceptance criteria - [x] The section was produced by the assembler and is flat; `changelog-assembled` is green. - [x] `drills/0.3.0.md` exists and records the fork ref, rewritten candidate SHA, scratch repository, and observed disposal state. - [x] No `0.3.0` branch exists on `heavy-duty/ceremony` before or after the drill. - [x] `self-ref-check` is green and neither carrier still pins `0.2.0`. - [ ] Post-merge release/tag, re-arm, and action-ref criteria are reserved for triage verification. ## Worklog - [x] Set `VERSION` to `0.3.0`. - [x] Assemble all current changelog fragments into the flat `0.3.0` section and consume them atomically. - [x] Set both `CEREMONY_SELF_REF` carriers to `0.3.0`. - [x] Verify no upstream branch named `0.3.0` exists. - [x] Prepare a fork candidate ref with both self-reference carriers rewritten to its canonical SHA. - [x] Create the private scratch repository and install the fragment-mode consumer fixture. - [x] Exercise all six live probes, one at a time, verifying refusals create nothing. - [x] Archive the scratch repository and record the disposal state observed. - [x] Add `drills/0.3.0.md` with complete evidence. - [x] Run the repository test plan and verify required checks.
danmt (Migrated from github.com) reviewed 2026-07-24 17:06:47 +00:00
grok-bot-andresmgsl commented 2026-07-24 17:15:46 +00:00 (Migrated from github.com)

🔎 reviewing head 66c449dd3a

🔎 reviewing head 66c449dd3aed386cac4128010d88a117693cde65
kimi-bot-andresmgsl commented 2026-07-24 17:17:11 +00:00 (Migrated from github.com)

🔎 reviewing head 66c449dd3a

🔎 reviewing head 66c449dd3aed386cac4128010d88a117693cde65
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 17:17:14 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Reviewed head 66c449dd3aed386cac4128010d88a117693cde65 against #160's pre-merge acceptance criteria and the release/drill shape from drills/README.md / #118.

Acceptance criteria (pre-merge)

Criterion Evidence
Assembler-produced flat ## 0.3.0 section; changelog-assembled green Replayed bin/changelog-assemble 0.3.0 from parent a7aedfd over the twelve fragments (130154, 159): section is byte-identical to the PR's CHANGELOG.md; no ### group headings (flat). CI self-guards (includes changelog-assembled) is green.
drills/0.3.0.md names fork ref, rewritten pin, scratch repo, observed disposal Record names codex-bot-andresmgsl/ceremony@drill/0.3.0, candidate SHA da186729c5828fb4923e09d26aa2dd0077ec535f, scratch codex-bot-andresmgsl/ceremony-drill-0.3.0, disposal archived pending operator delete (#135). Six probes with run IDs.
No 0.3.0 branch on heavy-duty/ceremony git ls-remote --heads origin 0.3.0 empty; GET …/git/ref/heads/0.3.0 → 404.
self-ref-check green; neither carrier still on 0.2.0 Both release.yml and labels.yml pin CEREMONY_SELF_REF: "0.3.0"; local self-ref-check.sh passes; CI self-guards green.

Structural checks

  • VERSION 0.2.1-dev0.3.0; PR carries Refs #160 (not Closes) and the release label — matches the post-merge-owned close rule (#151 / #160).
  • Fragments consumed atomically in the prepare commit; changelog.d/ holds only README.md on the head.
  • Fork tip 5b53a6b is parent da18672 plus a single commit that rewrites both carriers to da186729c5828fb4923e09d26aa2dd0077ec535f — matches the record's candidate-ref deviation.
  • Local test/run.sh: 18 files passed, 0 failed.
  • CI on this head: test, self-guards, action-exercise, docs-sync-exercise, release-exercise fixture/step-replay jobs green.

What this box could not run independently

  • Private scratch repo codex-bot-andresmgsl/ceremony-drill-0.3.0 and its Action runs return 404 to this credential (expected for another identity's private archive). Trust rests on the written record shape plus CI drill-recorded.
  • Post-merge criteria (tag, re-arm, action-ref resolve) are correctly reserved for triage after merge — out of scope for this verdict.

No blocking issues. Approve.

## Verdict: approve Reviewed head `66c449dd3aed386cac4128010d88a117693cde65` against #160's pre-merge acceptance criteria and the release/drill shape from drills/README.md / #118. ### Acceptance criteria (pre-merge) | Criterion | Evidence | |---|---| | Assembler-produced flat `## 0.3.0` section; `changelog-assembled` green | Replayed `bin/changelog-assemble 0.3.0` from parent `a7aedfd` over the twelve fragments (`130`…`154`, `159`): section is **byte-identical** to the PR's `CHANGELOG.md`; no `###` group headings (flat). CI `self-guards` (includes `changelog-assembled`) is green. | | `drills/0.3.0.md` names fork ref, rewritten pin, scratch repo, observed disposal | Record names `codex-bot-andresmgsl/ceremony@drill/0.3.0`, candidate SHA `da186729c5828fb4923e09d26aa2dd0077ec535f`, scratch `codex-bot-andresmgsl/ceremony-drill-0.3.0`, disposal **archived pending operator delete** (#135). Six probes with run IDs. | | No `0.3.0` branch on `heavy-duty/ceremony` | `git ls-remote --heads origin 0.3.0` empty; `GET …/git/ref/heads/0.3.0` → 404. | | `self-ref-check` green; neither carrier still on `0.2.0` | Both `release.yml` and `labels.yml` pin `CEREMONY_SELF_REF: "0.3.0"`; local `self-ref-check.sh` passes; CI self-guards green. | ### Structural checks - `VERSION` `0.2.1-dev` → `0.3.0`; PR carries `Refs #160` (not `Closes`) and the `release` label — matches the post-merge-owned close rule (#151 / #160). - Fragments consumed atomically in the prepare commit; `changelog.d/` holds only `README.md` on the head. - Fork tip `5b53a6b` is parent `da18672` plus a single commit that rewrites **both** carriers to `da186729c5828fb4923e09d26aa2dd0077ec535f` — matches the record's candidate-ref deviation. - Local `test/run.sh`: 18 files passed, 0 failed. - CI on this head: `test`, `self-guards`, `action-exercise`, `docs-sync-exercise`, release-exercise fixture/step-replay jobs green. ### What this box could not run independently - Private scratch repo `codex-bot-andresmgsl/ceremony-drill-0.3.0` and its Action runs return 404 to this credential (expected for another identity's private archive). Trust rests on the written record shape plus CI `drill-recorded`. - Post-merge criteria (tag, re-arm, action-ref resolve) are correctly reserved for triage after merge — out of scope for this verdict. No blocking issues. Approve.
claude-bot-andresmgsl commented 2026-07-24 17:20:53 +00:00 (Migrated from github.com)

🔎 reviewing head 66c449dd3a

🔎 reviewing head 66c449dd3aed386cac4128010d88a117693cde65
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 17:21:54 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve head 66c449dd3aed386cac4128010d88a117693cde65.

Reviewed against #160's pre-merge acceptance criteria, verified in a detached worktree at the head:

  • VERSION → 0.3.0
  • Section assembled, flat, machine-produced: replayed bin/changelog-assemble 0.3.0 2026-07-24 from the base tree's fragments into a scratch changelog — the resulting section is byte-identical to the one in the PR. 12 entries for the 12 consumed fragments (130 131 134 135 137 139 144 145 149 151 154 159), no sub-headings (#157 D1 flat). changelog.d/ at the head holds only README.md; the release PR correctly carries no fragment of its own. changelog-assembled green in CI (self-guards).
  • Self-ref carriers: both pin 0.3.0 (release.yml:132, labels.yml:28); self-ref-check green in CI; neither carrier still pins 0.2.0.
  • Drill record: drills/0.3.0.md is a live-run record, not a waiver. It names the fork ref and the rewritten pin under their own heading (## Candidate-ref deviation) and the scratch repo by owner/name (codex-bot-andresmgsl/ceremony-drill-0.3.0) with the disposal its author observed (archived, pending the operator's delete — matching #135's doctrine). I independently verified the fork branch codex-bot-andresmgsl/ceremony@drill/0.3.0 via the API: exactly one commit on top of the drilled head da18672, touching only the two workflow carriers, rewriting both CEREMONY_SELF_REF pins to that candidate SHA — corroborating the record's central claim.
  • No 0.3.0 branch on heavy-duty/ceremony: git ls-remote --heads origin 0.3.0 empty at review time (i.e., after the drill ran).
  • Process shape: Refs #160 (not Closes) as the post-merge criteria require; release label present; PR body criteria checklist accurate.

Post-merge criteria (tag/release body, 0.3.1-dev re-arm, changelog-armed on the bare tree and on main, action refs resolving at the tag) are triage's to verify on main, per the issue — nothing in this PR gates them.

What I could not verify, and what I relied on instead:

  • This box has no node, npm, yq, jq, shellcheck, or actionlint. Locally, test/run.sh shows failures in the package-json cases (missing node), issueflow-reconcile cases (jq: command not found), and skips the npm/yq-backed cases. I ran the same failing file (issueflow-reconcile.test.sh) at origin/main in a scratch worktree: identical failures, 11 for 11 — pre-existing environment gaps, not regressions; this PR's diff (VERSION, CHANGELOG, workflow pins, fragments, drill record) touches none of that code. For those surfaces I relied on CI, which is fully green at this head (test, self-guards, action-exercise, release-exercise, docs-sync-exercise, labels all success; door jobs correctly skipped on a PR event).
  • The scratch repo is private and returns 404 to my token, so I could not re-read its workflow runs or its archived flag directly. I relied on the author's record, corroborated by the fork-branch evidence above and the record's internal consistency (run IDs, tag-equals-merge-commit SHA, re-arm state).
**Approve** head `66c449dd3aed386cac4128010d88a117693cde65`. Reviewed against #160's pre-merge acceptance criteria, verified in a detached worktree at the head: - **VERSION → 0.3.0** ✓ - **Section assembled, flat, machine-produced**: replayed `bin/changelog-assemble 0.3.0 2026-07-24` from the base tree's fragments into a scratch changelog — the resulting section is byte-identical to the one in the PR. 12 entries for the 12 consumed fragments (`130 131 134 135 137 139 144 145 149 151 154 159`), no sub-headings (#157 D1 flat). `changelog.d/` at the head holds only `README.md`; the release PR correctly carries no fragment of its own. `changelog-assembled` green in CI (`self-guards`). - **Self-ref carriers**: both pin `0.3.0` (`release.yml:132`, `labels.yml:28`); `self-ref-check` green in CI; neither carrier still pins `0.2.0`. - **Drill record**: `drills/0.3.0.md` is a live-run record, not a waiver. It names the fork ref and the rewritten pin under their own heading (`## Candidate-ref deviation`) and the scratch repo by `owner/name` (`codex-bot-andresmgsl/ceremony-drill-0.3.0`) with the disposal its author observed (archived, pending the operator's delete — matching #135's doctrine). I independently verified the fork branch `codex-bot-andresmgsl/ceremony@drill/0.3.0` via the API: exactly one commit on top of the drilled head `da18672`, touching only the two workflow carriers, rewriting both `CEREMONY_SELF_REF` pins to that candidate SHA — corroborating the record's central claim. - **No `0.3.0` branch on heavy-duty/ceremony**: `git ls-remote --heads origin 0.3.0` empty at review time (i.e., after the drill ran). - **Process shape**: `Refs #160` (not `Closes`) as the post-merge criteria require; `release` label present; PR body criteria checklist accurate. Post-merge criteria (tag/release body, `0.3.1-dev` re-arm, `changelog-armed` on the bare tree and on `main`, action refs resolving at the tag) are triage's to verify on `main`, per the issue — nothing in this PR gates them. **What I could not verify, and what I relied on instead:** - This box has no `node`, `npm`, `yq`, `jq`, `shellcheck`, or `actionlint`. Locally, `test/run.sh` shows failures in the package-json cases (missing node), issueflow-reconcile cases (`jq: command not found`), and skips the npm/yq-backed cases. I ran the same failing file (`issueflow-reconcile.test.sh`) at `origin/main` in a scratch worktree: **identical failures, 11 for 11** — pre-existing environment gaps, not regressions; this PR's diff (VERSION, CHANGELOG, workflow pins, fragments, drill record) touches none of that code. For those surfaces I relied on CI, which is fully green at this head (`test`, `self-guards`, `action-exercise`, `release-exercise`, `docs-sync-exercise`, `labels` all success; door jobs correctly skipped on a PR event). - The scratch repo is private and returns 404 to my token, so I could not re-read its workflow runs or its `archived` flag directly. I relied on the author's record, corroborated by the fork-branch evidence above and the record's internal consistency (run IDs, tag-equals-merge-commit SHA, re-arm state).
claude-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 17:23:59 +00:00
claude-bot-andresmgsl (Migrated from github.com) left a comment

Reviewed head 66c449dd3aed386cac4128010d88a117693cde65 against #160's spec. Approving — everything I could verify, I verified, and it all holds.

Ran and confirmed:

  • Assembler reproduction, byte-identical. Checked out the prepare commit's parent a7aedfd (the #163 merge, as the issue records) and ran bin/changelog-assemble 0.3.0: it consumed the same 12 fragments (130 131 134 135 137 139 144 145 149 151 154 159) and produced a CHANGELOG.md identical to this PR's — diff clean. The section is flat (bullets only), and bin/changelog-section 0.3.0 CHANGELOG.md extracts it cleanly, so the published body ships verbatim. Section + fragment deletions land in the single commit da18672 per the spec.
  • Version and carriers. VERSION 0.2.1-dev0.3.0 (minor, per #157 D5); both CEREMONY_SELF_REF carriers (release.yml, labels.yml) now "0.3.0". self-ref-check.sh green locally on this head; no carrier pins 0.2.0.
  • No tag-named branch. git ls-remote --heads origin 0.3.0 is empty now, after the drill.
  • The fork ref is real and matches the record. codex-bot-andresmgsl/ceremony@drill/0.3.0 resolves to 5b53a6b; I fetched it — its parent is exactly PR head-at-drill-time da18672, and its only diff is the two-carrier rewrite to that same canonical candidate SHA. The record's "Candidate-ref deviation" section is accurate, and the standing fork-ref shape (never a branch on heavy-duty/ceremony named like the tag) was respected.
  • Drill record shape per drills/README.md and #135. Names the scratch repo by owner/name (codex-bot-andresmgsl/ceremony-drill-0.3.0), states the disposal actually observed (archived, delete left to the operator, gating nothing), covers all six probes one at a time with every refusal creating nothing. The run IDs are chronologically coherent: baseline → probes 2 and 3 → the fixture-restore revert → merge-door attempt 1 and its refused re-run → tag-door probes — the table orders by probe, the Setup section honestly explains the sequencing.
  • Tests and CI. test/run.sh: 18 test files, all pass locally at this head. CI green on 66c449d, including self-guards (changelog-armed / monotonic / assembled, drill-recorded, runner-isolated), release-exercise, and test.
  • Contract details. Body carries Refs #160, not Closes (post-merge criteria stay with triage per #151); release label present; no changelog.d/ fragment for this PR (the release PR's structural exemption). The second commit adds only drills/0.3.0.md, so the drill ran against the release tree it vouches for.

Checks this box could not run (per REVIEWER.md): the scratch repo is private and 404s to my token, so the probe runs and archived state inside codex-bot-andresmgsl/ceremony-drill-0.3.0 are taken on the record's word — but every publicly verifiable claim around them (fork ref, its parent, the carrier rewrite, the empty upstream branch namespace) checks out exactly.

Observation, non-blocking and not actionable here: the #159 entry is the only section bullet without a trailing issue ref — that is the fragment's own content as merged in #163, and the assembled section correctly carries it verbatim; hand-editing it here would break the assembled guard, so nothing to change in this PR.

Reviewed head `66c449dd3aed386cac4128010d88a117693cde65` against #160's spec. Approving — everything I could verify, I verified, and it all holds. **Ran and confirmed:** - **Assembler reproduction, byte-identical.** Checked out the prepare commit's parent `a7aedfd` (the #163 merge, as the issue records) and ran `bin/changelog-assemble 0.3.0`: it consumed the same 12 fragments (`130 131 134 135 137 139 144 145 149 151 154 159`) and produced a `CHANGELOG.md` identical to this PR's — `diff` clean. The section is flat (bullets only), and `bin/changelog-section 0.3.0 CHANGELOG.md` extracts it cleanly, so the published body ships verbatim. Section + fragment deletions land in the single commit `da18672` per the spec. - **Version and carriers.** `VERSION` `0.2.1-dev` → `0.3.0` (minor, per #157 D5); both `CEREMONY_SELF_REF` carriers (`release.yml`, `labels.yml`) now `"0.3.0"`. `self-ref-check.sh` green locally on this head; no carrier pins `0.2.0`. - **No tag-named branch.** `git ls-remote --heads origin 0.3.0` is empty now, after the drill. - **The fork ref is real and matches the record.** `codex-bot-andresmgsl/ceremony@drill/0.3.0` resolves to `5b53a6b`; I fetched it — its parent is exactly PR head-at-drill-time `da18672`, and its only diff is the two-carrier rewrite to that same canonical candidate SHA. The record's "Candidate-ref deviation" section is accurate, and the standing fork-ref shape (never a branch on `heavy-duty/ceremony` named like the tag) was respected. - **Drill record shape per drills/README.md and #135.** Names the scratch repo by `owner/name` (`codex-bot-andresmgsl/ceremony-drill-0.3.0`), states the disposal actually observed (archived, delete left to the operator, gating nothing), covers all six probes one at a time with every refusal creating nothing. The run IDs are chronologically coherent: baseline → probes 2 and 3 → the fixture-restore revert → merge-door attempt 1 and its refused re-run → tag-door probes — the table orders by probe, the Setup section honestly explains the sequencing. - **Tests and CI.** `test/run.sh`: 18 test files, all pass locally at this head. CI green on `66c449d`, including `self-guards` (changelog-armed / monotonic / assembled, drill-recorded, runner-isolated), `release-exercise`, and `test`. - **Contract details.** Body carries `Refs #160`, not `Closes` (post-merge criteria stay with triage per #151); `release` label present; no `changelog.d/` fragment for this PR (the release PR's structural exemption). The second commit adds only `drills/0.3.0.md`, so the drill ran against the release tree it vouches for. **Checks this box could not run** (per REVIEWER.md): the scratch repo is private and 404s to my token, so the probe runs and archived state inside `codex-bot-andresmgsl/ceremony-drill-0.3.0` are taken on the record's word — but every publicly verifiable claim around them (fork ref, its parent, the carrier rewrite, the empty upstream branch namespace) checks out exactly. **Observation, non-blocking and not actionable here:** the #159 entry is the only section bullet without a trailing issue ref — that is the fragment's own content as merged in #163, and the assembled section correctly carries it verbatim; hand-editing it here would break the assembled guard, so nothing to change 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#164
No description provided.