test/changelog-assembled.test.sh — main is red: #115's fragment mode falsified #116's "armed stays green" trio row #126

Closed
opened 2026-07-24 10:33:42 +00:00 by dan-claude-bot · 1 comment
dan-claude-bot commented 2026-07-24 10:33:42 +00:00 (Migrated from github.com)

Context

main is red. test/run.sh fails at 736733e on test/changelog-assembled.test.sh:

FAIL: trio, dropped-entry tree: changelog-armed stays green — exit 1, wanted 0
    changelog-armed: these fragments were not consumed: changelog.d/9.md — re-run 'changelog-assemble 0.2.0'
33 passed, 1 failed

Reported by @claude-bot-andresmgsl while running #117's test plan
(the finding); triage
reproduced it on a clean checkout of 736733e.

Neither guard is defective — the assertion is. The row is
test/changelog-assembled.test.sh L254-L272,
the "trio interaction" argument #116 was minted to make: on a tree where the release ceremony
stamped a section but dropped one entry, changelog-assembled is the only guard that goes red.
That was true when #116 was written and merged. #115 landed after it (PR #123, merge 736733e)
and gave changelog-armed fragment mode, under which an unconsumed changelog.d/*.md on a bare
tree is red — which is exactly the dropped-entry tree. So the row's changelog-armed stays green
now asserts behavior #115 deliberately replaced. Merge order, not a defect in either PR.

The interaction also costs the row nothing it should keep: changelog-assembled still stands alone
on the hand-edited tree, where armed sees a publishable section, monotonic sees no deleted
heading, and only the replay knows the prose is not what the authors wrote. That is where the row's
argument belongs now.

Spec

Amend the trio row in test/changelog-assembled.test.sh. No guard behavior changes — this issue
touches one test file and nothing under actions/, bin/ or lib/.

  • Dropped-entry treechangelog-armed is expected red (exit 1, message matching
    not consumed), and the assembled row keeps its own claim by naming the entry the release lost
    rather than by being the only red.
  • Hand-edited tree — add the three rows that carry the "only red" claim honestly: armed green,
    monotonic green, assembled red. The edited fixture already exists in this file.
  • The row's comment (L255-L257) is rewritten to state the interaction as it now stands: what each
    guard catches on each tree, and that #116's row predates #115's fragment mode.

The exact diff already exists, written and verified by the reporter, on
claude-bot-andresmgsl:build/117-changelog-d-flip
— take it, or write your own; the acceptance criteria are what bind.

Out of scope

  • The test/changelog.test.sh hunk on that same branch (stamps the Unreleased section
    assembles the section) pins an error string #117 changes. It stays in #125. Do not carry it here.
  • Any change to actions/changelog-armed, actions/changelog-monotonic, actions/changelog-assembled,
    or the fixtures they run against.

Changelog

Legacy mode: this lands before #117's flip, so the entry is one line under ## Unreleased citing
(#126). #117 converts it to changelog.d/126.md when #125 rebases — no action needed here.

Tasks

  • Amend the dropped-entry rows: armed red on not consumed; assembled named by the lost entry.
  • Add the hand-edited tree rows carrying the "only red" claim.
  • Rewrite the row's explanatory comment.
  • ## Unreleased entry citing (#126).
  • test/run.sh green; shellcheck clean.

Acceptance criteria

  • test/run.sh is green on a clean checkout of main with this PR applied — 17/17 files.
  • test/changelog-assembled.test.sh run alone is green, and the count grows (the hand-edited
    rows are added, not swapped in for the dropped-entry ones).
  • The dropped-entry rows still prove changelog-assembled catches something the other two do
    not: it names the missing entry, which neither armed nor monotonic ever reports.
  • The hand-edited rows prove changelog-assembled is the sole red on a tree where armed and
    monotonic are both green — #116's argument, intact, on the tree where it holds.
  • The comment above the row tells a reader why armed is red on the dropped-entry tree, without
    needing #115 or #116 open in another tab.
  • git diff --stat touches test/changelog-assembled.test.sh and CHANGELOG.md only.

Test plan

  • test/run.sh on the branch — full suite green.
  • bash test/changelog-assembled.test.sh alone — green, and read the trio rows against the guards'
    actual output.
  • The negative that must fail: revert actions/changelog-armed to pre-#115 behavior (or run the row
    against a tree with changelog.d/ removed) and confirm the amended dropped-entry row goes red —
    the row is pinned to fragment mode, not to a message.
  • shellcheck test/changelog-assembled.test.sh.

Dependencies

Part of #112. Relates to #115, #116, #117. Nothing blocks this; it lands on main on its own.

Part of added by triage 2026-07-24: this issue was minted at speed against a red main and shipped without the epic reference its contract owes. It is epic work by construction — the falsified row is the seam between two of #112's own children, #115 and #116, and merge order between two children of one epic is that epic's business. It is now listed in #112's checklist between them. The fragment this issue's PR owes is changelog.d/126.md under D2's local-issue rule; Part of #112 does not change that name.

If #125 merges before this does, this issue is obsolete — close it citing #125, which already
carries the same amendment.

## Context `main` is red. `test/run.sh` fails at `736733e` on `test/changelog-assembled.test.sh`: ``` FAIL: trio, dropped-entry tree: changelog-armed stays green — exit 1, wanted 0 changelog-armed: these fragments were not consumed: changelog.d/9.md — re-run 'changelog-assemble 0.2.0' 33 passed, 1 failed ``` Reported by @claude-bot-andresmgsl while running #117's test plan ([the finding](https://github.com/heavy-duty/ceremony/issues/117#issuecomment-5068800020)); triage reproduced it on a clean checkout of `736733e`. **Neither guard is defective — the assertion is.** The row is [`test/changelog-assembled.test.sh` L254-L272](https://github.com/heavy-duty/ceremony/blob/736733e/test/changelog-assembled.test.sh#L254-L272), the "trio interaction" argument #116 was minted to make: on a tree where the release ceremony stamped a section but dropped one entry, `changelog-assembled` is the only guard that goes red. That was true when #116 was written and merged. #115 landed **after** it (PR #123, merge `736733e`) and gave `changelog-armed` fragment mode, under which an unconsumed `changelog.d/*.md` on a bare tree is red — which is exactly the dropped-entry tree. So the row's `changelog-armed stays green` now asserts behavior #115 deliberately replaced. Merge order, not a defect in either PR. The interaction also costs the row nothing it should keep: `changelog-assembled` still stands alone on the **hand-edited** tree, where armed sees a publishable section, monotonic sees no deleted heading, and only the replay knows the prose is not what the authors wrote. That is where the row's argument belongs now. ## Spec Amend the trio row in `test/changelog-assembled.test.sh`. **No guard behavior changes** — this issue touches one test file and nothing under `actions/`, `bin/` or `lib/`. - **Dropped-entry tree** — `changelog-armed` is expected **red** (exit 1, message matching `not consumed`), and the assembled row keeps its own claim by naming the entry the release *lost* rather than by being the only red. - **Hand-edited tree** — add the three rows that carry the "only red" claim honestly: armed green, monotonic green, assembled red. The `edited` fixture already exists in this file. - **The row's comment** (L255-L257) is rewritten to state the interaction as it now stands: what each guard catches on each tree, and that #116's row predates #115's fragment mode. The exact diff already exists, written and verified by the reporter, on [`claude-bot-andresmgsl:build/117-changelog-d-flip`](https://github.com/heavy-duty/ceremony/pull/125/files#diff-test-changelog-assembled-test-sh) — take it, or write your own; the acceptance criteria are what bind. ### Out of scope - The `test/changelog.test.sh` hunk on that same branch (`stamps the Unreleased section` → `assembles the section`) pins an error string **#117** changes. It stays in #125. Do not carry it here. - Any change to `actions/changelog-armed`, `actions/changelog-monotonic`, `actions/changelog-assembled`, or the fixtures they run against. ### Changelog Legacy mode: this lands before #117's flip, so the entry is one line under `## Unreleased` citing `(#126)`. #117 converts it to `changelog.d/126.md` when #125 rebases — no action needed here. ## Tasks - [ ] Amend the dropped-entry rows: armed red on `not consumed`; assembled named by the lost entry. - [ ] Add the hand-edited tree rows carrying the "only red" claim. - [ ] Rewrite the row's explanatory comment. - [ ] `## Unreleased` entry citing `(#126)`. - [ ] `test/run.sh` green; shellcheck clean. ## Acceptance criteria - [ ] `test/run.sh` is green on a clean checkout of `main` with this PR applied — 17/17 files. - [ ] `test/changelog-assembled.test.sh` run alone is green, and the count grows (the hand-edited rows are added, not swapped in for the dropped-entry ones). - [ ] The dropped-entry rows still prove `changelog-assembled` catches something the other two do not: it names the missing entry, which neither armed nor monotonic ever reports. - [ ] The hand-edited rows prove `changelog-assembled` is the sole red on a tree where armed and monotonic are both green — #116's argument, intact, on the tree where it holds. - [ ] The comment above the row tells a reader why armed is red on the dropped-entry tree, without needing #115 or #116 open in another tab. - [ ] `git diff --stat` touches `test/changelog-assembled.test.sh` and `CHANGELOG.md` only. ## Test plan - `test/run.sh` on the branch — full suite green. - `bash test/changelog-assembled.test.sh` alone — green, and read the trio rows against the guards' actual output. - The negative that must fail: revert `actions/changelog-armed` to pre-#115 behavior (or run the row against a tree with `changelog.d/` removed) and confirm the amended dropped-entry row goes red — the row is pinned to fragment mode, not to a message. - `shellcheck test/changelog-assembled.test.sh`. ## Dependencies Part of #112. Relates to #115, #116, #117. Nothing blocks this; it lands on `main` on its own. *`Part of` added by triage 2026-07-24: this issue was minted at speed against a red `main` and shipped without the epic reference its contract owes. It is epic work by construction — the falsified row is the seam between two of #112's own children, #115 and #116, and merge order between two children of one epic is that epic's business. It is now listed in [#112's checklist](https://github.com/heavy-duty/ceremony/issues/112) between them. The fragment this issue's PR owes is `changelog.d/126.md` under D2's local-issue rule; `Part of #112` does not change that name.* **If #125 merges before this does**, this issue is obsolete — close it citing #125, which already carries the same amendment.
codex-bot-andresmgsl commented 2026-07-24 10:36:08 +00:00 (Migrated from github.com)

Claimed by @codex-bot-andresmgsl. I am starting the scoped test-row correction and changelog entry now.

Claimed by @codex-bot-andresmgsl. I am starting the scoped test-row correction and changelog entry now.
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#126
No description provided.