fix: strip the grouped headings from the four drifted fragments #162

Merged
claude-bot-andresmgsl merged 1 commit from build/158-strip-grouped-headings into main 2026-07-24 16:05:33 +00:00
claude-bot-andresmgsl commented 2026-07-24 15:47:07 +00:00 (Migrated from github.com)

Closes #158

Ceremony is a flat repo (#112 D3), but four banked fragments drifted grouped — each individually legal to changelog_fragment_problem, so each passed its own PR's CI, and together they made changelog.d/ mixed-shape: bin/changelog-assemble 0.3.0 --check refused on main with the grouped/flat error. This PR deletes the ### heading line and the single blank line that follows it from changelog.d/135.md, 137.md, 144.md, 151.md — two lines removed per file, zero lines added, every bullet byte-identical (#157 D1).

No changelog.d/ fragment for this PR (#157 D2): the whole diff is unpublished fragment text, so there is no behavior change to publish.

Acceptance criteria

  • On main before this PR, bin/changelog-assemble 0.3.0 --check fails with the grouped/flat refusal; on this branch it succeeds — verified both sides (refusal reproduced verbatim at f168bbf, then exit 0 after the strip).
  • The diff touches only the four named fragments; each hunk deletes exactly one ### line and one blank line, adds nothing (4 files changed, 8 deletions(-)).
  • All eleven fragments survive with their prose byte-identical — --check output lists eleven entries, no ### heading among them.
  • The PR adds no changelog.d/ fragment of its own.
  • bash test/run.sh green locally (18 files, 0 failed); changelog-armed green in this PR's CI (step inside the self-guards job, run 30106770398).

Worklog

  • Reproduce the refusal on main at f168bbf
  • Strip heading + blank line from the four fragments
  • bin/changelog-assemble 0.3.0 --check passes: one flat section, eleven entries
  • bash test/run.sh — 18 passed, 0 failed
  • Open draft PR
  • Confirm changelog-armed (and full CI) green — all checks pass on fb6f16a
  • Mark ready-for-review, request the panel
Closes #158 Ceremony is a flat repo (#112 D3), but four banked fragments drifted grouped — each individually legal to `changelog_fragment_problem`, so each passed its own PR's CI, and together they made `changelog.d/` mixed-shape: `bin/changelog-assemble 0.3.0 --check` refused on `main` with the grouped/flat error. This PR deletes the `### ` heading line and the single blank line that follows it from `changelog.d/135.md`, `137.md`, `144.md`, `151.md` — two lines removed per file, zero lines added, every bullet byte-identical (#157 D1). **No `changelog.d/` fragment for this PR** (#157 D2): the whole diff is unpublished fragment text, so there is no behavior change to publish. ## Acceptance criteria - [x] On `main` before this PR, `bin/changelog-assemble 0.3.0 --check` fails with the grouped/flat refusal; on this branch it succeeds — verified both sides (refusal reproduced verbatim at `f168bbf`, then exit 0 after the strip). - [x] The diff touches only the four named fragments; each hunk deletes exactly one `### ` line and one blank line, adds nothing (`4 files changed, 8 deletions(-)`). - [x] All eleven fragments survive with their prose byte-identical — `--check` output lists eleven entries, no `### ` heading among them. - [x] The PR adds no `changelog.d/` fragment of its own. - [x] `bash test/run.sh` green locally (18 files, 0 failed); `changelog-armed` green in this PR's CI (step inside the `self-guards` job, [run 30106770398](https://github.com/heavy-duty/ceremony/actions/runs/30106770398)). ## Worklog - [x] Reproduce the refusal on `main` at `f168bbf` - [x] Strip heading + blank line from the four fragments - [x] `bin/changelog-assemble 0.3.0 --check` passes: one flat section, eleven entries - [x] `bash test/run.sh` — 18 passed, 0 failed - [x] Open draft PR - [x] Confirm `changelog-armed` (and full CI) green — all checks pass on `fb6f16a` - [x] Mark ready-for-review, request the panel
danmt (Migrated from github.com) reviewed 2026-07-24 15:47:07 +00:00
claude-bot-andresmgsl commented 2026-07-24 15:50:45 +00:00 (Migrated from github.com)

⟲ resuming from fb6f16ae0c

⟲ resuming from fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023
codex-bot-andresmgsl commented 2026-07-24 15:55:45 +00:00 (Migrated from github.com)

🔎 reviewing head fb6f16ae0c

🔎 reviewing head fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023
grok-bot-andresmgsl commented 2026-07-24 15:55:47 +00:00 (Migrated from github.com)

🔎 reviewing head fb6f16ae0c

🔎 reviewing head fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023
kimi-bot-andresmgsl commented 2026-07-24 15:56:17 +00:00 (Migrated from github.com)

🔎 reviewing head fb6f16ae0c

🔎 reviewing head fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023
grok-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 15:56:39 +00:00
grok-bot-andresmgsl (Migrated from github.com) left a comment

Verdict: approve

Head fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023 against #158.

Acceptance criteria

Criterion Evidence
On main, bin/changelog-assemble 0.3.0 --check refuses grouped/flat; on this head it succeeds Reproduced on origin/main (f168bbf): refusal names 151.md grouped vs 154.md flat, exit 1. At this head: exit 0, one flat section, eleven entries, no ### heading in any fragment.
Diff touches only the four named fragments; each hunk deletes one ### line + one blank line, adds nothing git diff origin/main...HEAD: changelog.d/{135,137,144,151}.md only — 4 files changed, 8 deletions(-), zero additions.
All eleven fragments survive with prose byte-identical Assembled bullets match; only the heading+blank lines were removed. Eleven fragments listed; grep '^### ' over changelog.d/*.md is empty.
No changelog.d/ fragment of its own (#157 D2) No new fragment file; correct for a PR whose whole diff is unpublished fragment text.
bash test/run.sh green; changelog-armed green in CI Local: 18 test files, 0 failed. CI on this head: test, self-guards (carries changelog-armed), release-exercise, action-exercise, docs-sync-exercise all SUCCESS.

Spec / constraints

Matches #158 and #157 D1/D2 exactly: mechanical strip only, no re-litigation of shape, no behavior change that would require a fragment. Closes #158 present. Panel request is live; I am on-panel (author is claude-bot-andresmgsl).

Checks this box ran

  • Detached worktree at fb6f16a
  • bin/changelog-assemble 0.3.0 --check (main fail + head pass)
  • Full bash test/run.sh
  • Diff and fragment inventory review
  • CI status rollup via API

No blockers. Approve.

## Verdict: approve Head `fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023` against #158. ### Acceptance criteria | Criterion | Evidence | |---|---| | On `main`, `bin/changelog-assemble 0.3.0 --check` refuses grouped/flat; on this head it succeeds | Reproduced on `origin/main` (`f168bbf`): refusal names `151.md` grouped vs `154.md` flat, exit 1. At this head: exit 0, one flat section, eleven entries, no `### ` heading in any fragment. | | Diff touches only the four named fragments; each hunk deletes one `### ` line + one blank line, adds nothing | `git diff origin/main...HEAD`: `changelog.d/{135,137,144,151}.md` only — `4 files changed, 8 deletions(-)`, zero additions. | | All eleven fragments survive with prose byte-identical | Assembled bullets match; only the heading+blank lines were removed. Eleven fragments listed; `grep '^### '` over `changelog.d/*.md` is empty. | | No `changelog.d/` fragment of its own (#157 D2) | No new fragment file; correct for a PR whose whole diff is unpublished fragment text. | | `bash test/run.sh` green; `changelog-armed` green in CI | Local: 18 test files, 0 failed. CI on this head: `test`, `self-guards` (carries `changelog-armed`), release-exercise, action-exercise, docs-sync-exercise all SUCCESS. | ### Spec / constraints Matches #158 and #157 D1/D2 exactly: mechanical strip only, no re-litigation of shape, no behavior change that would require a fragment. `Closes #158` present. Panel request is live; I am on-panel (author is `claude-bot-andresmgsl`). ### Checks this box ran - Detached worktree at `fb6f16a` - `bin/changelog-assemble 0.3.0 --check` (main fail + head pass) - Full `bash test/run.sh` - Diff and fragment inventory review - CI status rollup via API No blockers. Approve.
codex-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 15:57:13 +00:00
codex-bot-andresmgsl (Migrated from github.com) left a comment

The implementation matches #158 exactly: the diff touches only the four named fragments and removes only each grouped heading plus its following blank line (8 deletions, no additions), leaving every entry intact.

Verified:

  • At base f168bbf, bash bin/changelog-assemble 0.3.0 --check exits 1 with the expected grouped/flat refusal.
  • At head fb6f16a, the same command exits 0 and emits all eleven entries as one flat section with no grouped headings.
  • bash test/run.sh passes all 18 test files with 0 failures. The yq-dependent parse_labeler_config cases were skipped because yq is unavailable in this box; they are unrelated to this prose-only diff.
  • Current-head CI reports the substantive test, self-guards, action, docs-sync, and release-exercise checks successful; cancelled duplicate reconcile runs are superseded by successful runs.
The implementation matches #158 exactly: the diff touches only the four named fragments and removes only each grouped heading plus its following blank line (8 deletions, no additions), leaving every entry intact. Verified: - At base `f168bbf`, `bash bin/changelog-assemble 0.3.0 --check` exits 1 with the expected grouped/flat refusal. - At head `fb6f16a`, the same command exits 0 and emits all eleven entries as one flat section with no grouped headings. - `bash test/run.sh` passes all 18 test files with 0 failures. The `yq`-dependent `parse_labeler_config` cases were skipped because `yq` is unavailable in this box; they are unrelated to this prose-only diff. - Current-head CI reports the substantive test, self-guards, action, docs-sync, and release-exercise checks successful; cancelled duplicate reconcile runs are superseded by successful runs.
kimi-bot-andresmgsl (Migrated from github.com) approved these changes 2026-07-24 15:59:20 +00:00
kimi-bot-andresmgsl (Migrated from github.com) left a comment

Approve — head fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023, reviewed against #158's spec.

Verified in a detached worktree at the head:

  • Refusal reproduced on the base: at f168bbf, bin/changelog-assemble 0.3.0 --check refuses with fragment 'changelog.d/151.md' is grouped but fragment 'changelog.d/154.md' is not — a repo is one shape or the other. At the PR head the same command exits 0 and lists 11 entries, none carrying a ### heading.
  • Diff shape matches the spec exactly: 4 files changed, 8 deletions, 0 additions — changelog.d/135.md, 137.md, 144.md, 151.md, each hunk deleting one ### heading line and the one blank line after it. Every bullet byte-identical. No changelog.d/ fragment added for this PR (#157 D2 honored).
  • Directory is one shape again: grep -l '^### ' changelog.d/*.md finds nothing; the tree holds 11 fragments plus README.md (the "eleven" in the criteria checks out — README.md is not a fragment).
  • CI green at this head (run 30106770398: test, self-guards incl. changelog-armed, action-exercise, docs-sync-exercise, release-exercise all pass).

Environment gaps I could not close locally, per the verdict doctrine: this box has no node and no jq, so bash test/run.sh in my worktree reported 7 of 18 test files red — every failure traced to node is required for version-source: package-json or jq: command not found, none touching code paths this diff changes (the diff is fragment text only). I relied on the PR's green CI for those suites rather than counting the local reds against the change.

Nothing blocking. The 0.3.0 cut (#160) is unblocked by this repair; the standing guard against re-drift is #159, out of scope here.

**Approve** — head `fb6f16ae0ce8b0b6d9d2b3eb3260bc881e080023`, reviewed against #158's spec. Verified in a detached worktree at the head: - **Refusal reproduced on the base**: at `f168bbf`, `bin/changelog-assemble 0.3.0 --check` refuses with `fragment 'changelog.d/151.md' is grouped but fragment 'changelog.d/154.md' is not — a repo is one shape or the other`. At the PR head the same command exits 0 and lists 11 entries, none carrying a `### ` heading. - **Diff shape matches the spec exactly**: 4 files changed, 8 deletions, 0 additions — `changelog.d/135.md`, `137.md`, `144.md`, `151.md`, each hunk deleting one `### ` heading line and the one blank line after it. Every bullet byte-identical. No `changelog.d/` fragment added for this PR (#157 D2 honored). - **Directory is one shape again**: `grep -l '^### ' changelog.d/*.md` finds nothing; the tree holds 11 fragments plus `README.md` (the "eleven" in the criteria checks out — `README.md` is not a fragment). - **CI green** at this head (run 30106770398: `test`, `self-guards` incl. `changelog-armed`, `action-exercise`, `docs-sync-exercise`, `release-exercise` all pass). Environment gaps I could not close locally, per the verdict doctrine: this box has **no `node` and no `jq`**, so `bash test/run.sh` in my worktree reported 7 of 18 test files red — every failure traced to `node is required for version-source: package-json` or `jq: command not found`, none touching code paths this diff changes (the diff is fragment text only). I relied on the PR's green CI for those suites rather than counting the local reds against the change. Nothing blocking. The `0.3.0` cut (#160) is unblocked by this repair; the standing guard against re-drift is #159, out of scope here.
claude-bot-andresmgsl commented 2026-07-24 16:01:31 +00:00 (Migrated from github.com)

Round summary — handing off

What shipped — one commit, fb6f16a: stripped the grouped ### heading line and the single blank line after it from the four drifted fragments (changelog.d/135.md, 137.md, 144.md, 151.md). 4 files changed, 8 deletions, 0 additions; every bullet byte-identical (#157 D1). This restores changelog.d/ to the flat shape #112 D3 mandates. Deliberately no changelog.d/ fragment for this PR itself (#157 D2): the whole diff is unpublished fragment text, so there is no behavior change to publish.

Rounds — one. The panel (codex, grok, kimi) reviewed head fb6f16a and all three approved with no changes requested; no addressing rounds, so the approved head is the only head this PR has ever had.

Verified

  • The grouped/flat refusal from bin/changelog-assemble 0.3.0 --check reproduced on main at f168bbf, and the same command exits 0 on this head — checked by me and independently re-run by all three reviewers.
  • All eleven fragments survive with prose intact: --check lists eleven flat entries, no ### heading among them.
  • bash test/run.sh locally: 18 files, 0 failed.
  • Full CI green on fb6f16a, including the changelog-armed step in self-guards (run 30106770398) and labels / reconcile.

Post-merge residue — none owed by this PR. On merge, main's changelog.d/ is uniformly flat again and changelog-assemble 0.3.0 --check passes on main, unblocking the 0.3.0 assembly; #158 closes automatically via the PR link. No follow-up work is queued behind this.

Round converged: whole panel approved the current head, zero blockers. Handing off — requesting @danmt's review and setting state:needs-human. The remaining move is the human's merge.

## Round summary — handing off **What shipped** — one commit, `fb6f16a`: stripped the grouped `### ` heading line and the single blank line after it from the four drifted fragments (`changelog.d/135.md`, `137.md`, `144.md`, `151.md`). 4 files changed, 8 deletions, 0 additions; every bullet byte-identical (#157 D1). This restores `changelog.d/` to the flat shape #112 D3 mandates. Deliberately no `changelog.d/` fragment for this PR itself (#157 D2): the whole diff is unpublished fragment text, so there is no behavior change to publish. **Rounds** — one. The panel (codex, grok, kimi) reviewed head `fb6f16a` and all three approved with no changes requested; no addressing rounds, so the approved head is the only head this PR has ever had. **Verified** - The grouped/flat refusal from `bin/changelog-assemble 0.3.0 --check` reproduced on `main` at `f168bbf`, and the same command exits 0 on this head — checked by me and independently re-run by all three reviewers. - All eleven fragments survive with prose intact: `--check` lists eleven flat entries, no `### ` heading among them. - `bash test/run.sh` locally: 18 files, 0 failed. - Full CI green on `fb6f16a`, including the `changelog-armed` step in `self-guards` ([run 30106770398](https://github.com/heavy-duty/ceremony/actions/runs/30106770398)) and `labels / reconcile`. **Post-merge residue** — none owed by this PR. On merge, `main`'s `changelog.d/` is uniformly flat again and `changelog-assemble 0.3.0 --check` passes on `main`, unblocking the 0.3.0 assembly; #158 closes automatically via the PR link. No follow-up work is queued behind this. Round converged: whole panel approved the current head, zero blockers. Handing off — requesting @danmt's review and setting `state:needs-human`. The remaining move is the human's merge.
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#162
No description provided.