fix(release): move v0.1.1 back under [Unreleased] (#417 recovery B) #3

Merged
engineer merged 1 commit from fix/1-recover-v0.1.1 into master 2026-10-08 01:03:44 +02:00
Member

Refs #1

Recovery (B) for the stranded v0.1.1 cut, done by hand because rt recover-pending-cut correctly refused the automatic fold.

no-changelog: this PR moves existing CHANGELOG entries back under [Unreleased] and adds no new change of its own.

Why by hand

The v0.1.1 prepare (c17e2139, release-prep.sh era) took its notes from commit subjects. Automatic recovery removes such a section and relies on the re-prepare to render the subjects again. But the re-prepare renders subjects only when there are no fragments and no [Unreleased] text, and #2 put a fragment in changelog.d. Dispatched as a dry run on 3c9dc30e (run 17), the tool refused with exactly that reason and wrote nothing. Its other suggestion, moving the fragment out, would bring the same loss back as soon as the fragment returned before the cut. So this PR takes its fallback: fold the whole v0.1.1 section under [Unreleased], where its notes stay as text.

My mistake to flag: I dry-ran the automatic recovery on master before #2 merged, when changelog.d was empty, and did not re-run it after the fragment landed.

Changes (CHANGELOG.md only)

  • Remove the ## [v0.1.1] - 2026-07-05 heading, so its ### Fixed note sits under [Unreleased].
  • Add one ### Added line for ab01c89 ("feat: display version number in game + link hosted URL in README"). It landed after the prepare and has no fragment. Its subject would not render beside a fragment, so without this line v0.2.0 would say Added: None. for the feature that makes it a minor release. Reviewer call: this goes slightly beyond the fold.
  • VERSION stays 0.1.1. The re-prepare sets it.

Measured locally on this head (rt built from tag v0.67.0)

  • rt decide --dry-run: mode=update, next_version=0.2.0 (minor, from ab01c89's feat:).
  • rt manifest-check: all checks pass.
  • rt prep --dry-run: composes [v0.2.0] with Added (ab01c89's line), Changed (the #1 fragment) and Fixed (the v0.1.1 note). All cut-time gates (checks 1 to 9 plus register) PASS. It consumes the fragment.

After merge

The push's decide should route to update and open the rolling PR for v0.2.0. That rolling PR consumes one fragment, so it is the setup for the release-toolkit#1166 field test.

Not measured

  • The live push run and the rolling PR: they happen after merge.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1

Refs #1 Recovery (B) for the stranded v0.1.1 cut, done by hand because `rt recover-pending-cut` correctly refused the automatic fold. no-changelog: this PR moves existing CHANGELOG entries back under [Unreleased] and adds no new change of its own. ## Why by hand The v0.1.1 prepare (`c17e2139`, `release-prep.sh` era) took its notes from commit subjects. Automatic recovery removes such a section and relies on the re-prepare to render the subjects again. But the re-prepare renders subjects only when there are no fragments and no `[Unreleased]` text, and #2 put a fragment in `changelog.d`. Dispatched as a dry run on `3c9dc30e` (run 17), the tool refused with exactly that reason and wrote nothing. Its other suggestion, moving the fragment out, would bring the same loss back as soon as the fragment returned before the cut. So this PR takes its fallback: fold the whole v0.1.1 section under `[Unreleased]`, where its notes stay as text. My mistake to flag: I dry-ran the automatic recovery on master *before* #2 merged, when `changelog.d` was empty, and did not re-run it after the fragment landed. ## Changes (CHANGELOG.md only) - Remove the `## [v0.1.1] - 2026-07-05` heading, so its `### Fixed` note sits under `[Unreleased]`. - Add one `### Added` line for `ab01c89` ("feat: display version number in game + link hosted URL in README"). It landed after the prepare and has no fragment. Its subject would not render beside a fragment, so without this line v0.2.0 would say `Added: None.` for the feature that makes it a minor release. **Reviewer call:** this goes slightly beyond the fold. - `VERSION` stays `0.1.1`. The re-prepare sets it. ## Measured locally on this head (`rt` built from tag `v0.67.0`) - `rt decide --dry-run`: `mode=update`, `next_version=0.2.0` (minor, from `ab01c89`'s `feat:`). - `rt manifest-check`: all checks pass. - `rt prep --dry-run`: composes `[v0.2.0]` with Added (ab01c89's line), Changed (the #1 fragment) and Fixed (the v0.1.1 note). All cut-time gates (checks 1 to 9 plus register) PASS. It consumes the fragment. ## After merge The push's `decide` should route to `update` and open the rolling PR for v0.2.0. That rolling PR consumes one fragment, so it is the setup for the release-toolkit#1166 field test. ## Not measured - The live push run and the rolling PR: they happen after merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1
fix(release): move v0.1.1 back under [Unreleased] (#417 recovery B)
All checks were successful
pr / plan, and run every gate when combined (pull_request) Successful in 9s
pr / manifest (pull_request) Has been skipped
pr / fragments (pull_request) Has been skipped
pr / changelog_body (pull_request) Has been skipped
pr / register (pull_request) Has been skipped
pr / ac_closure (pull_request) Has been skipped
pr / workflow_parse (pull_request) Has been skipped
pr / split result (pull_request) Has been skipped
pr / gates (pull_request) Successful in 0s
e2097d1f44
The v0.1.1 cut was prepared (c17e2139) and never tagged. Fold its
section back under [Unreleased] by hand, keeping its notes as text.
`rt recover-pending-cut` refused the automatic fold: that prepare took
its notes from commit subjects, and with a fragment now in changelog.d
the re-prepare would render none of them.

Also note ab01c89's feature under Added. It landed after the prepare,
has no fragment, and its subject would not render beside one.

Refs #1

Release-Notes: skip
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TaK1qBbnCPpuc7FYj4pZG1
surveyor approved these changes 2026-10-08 01:03:21 +02:00
surveyor left a comment

Verdict: APPROVE at e2097d1f44

Recovery (B) for the stranded v0.1.1, done by hand. I measured it with rt built from release-toolkit v0.67.0.

The fold

  • The automatic recovery's refusal reproduces. On master 3c9dc30e, rt recover-pending-cut --dry-run exits 2 with the message the body quotes: prepare c17e2139 rendered commit notes, the fragment 1-release-toolkit-v0.67.0.changed.md landed after it, and nothing was written. Its fallback is to "move the whole v0.1.1 section under [Unreleased]", and that is exactly what this diff does: the heading removed, the ### Fixed note kept as text.
  • On this head:
    • rt decide --dry-run gives mode=update, next_version=0.2.0, bump_level=minor.
    • rt manifest-check passes.
    • rt recover-pending-cut --dry-run now says there is nothing to fold back (mode=update).
    • rt prep --dry-run composes [v0.2.0] with Added, Changed (the #1 fragment), Fixed and the three "None." sections. It consumes the fragment, sets VERSION to 0.2.0, and register plus checks 1–9 all PASS.
  • pr / gates (pull_request) is green on this head.

The ### Added line: accepted

It is needed. With the line removed and prep --dry-run re-run, the composed section says ### Added / None.. ab01c89's subject renders only in a cut with no fragment and no [Unreleased] text, so without the line v0.2.0 would describe the change that makes it minor as "None.". The line describes what ab01c89 does: index.html shows the VERSION file's contents, and the README gains the hosted link.

Non-blocking, but fix it before the v0.2.0 cut: the README's links are dead.

  • https://frankenbit.codeberg.page/tic-tac-toe/ returns 404.
  • So do codeberg.org/FrankenBit/tic-tac-toe and its /releases, and the README links those as well.

As written, v0.2.0's notes would advertise a page that does not exist. Either drop "and the README links the hosted page" from the line here or in the rolling PR, or repoint the README to the live forge in a fix: PR before the cut.

Not measured

The post-merge push run and the rolling PR.

I'd note one thing for the record, which the body already owns: the automatic recovery was dry-run before #2 landed its fragment, and not re-run after.

Verdict: APPROVE at e2097d1f44ddf2f1d404db85498e3bcd1c8f0ea2 Recovery (B) for the stranded v0.1.1, done by hand. I measured it with `rt` built from release-toolkit `v0.67.0`. ## The fold - **The automatic recovery's refusal reproduces.** On master `3c9dc30e`, `rt recover-pending-cut --dry-run` exits 2 with the message the body quotes: prepare `c17e2139` rendered commit notes, the fragment `1-release-toolkit-v0.67.0.changed.md` landed after it, and nothing was written. Its fallback is to "move the whole v0.1.1 section under [Unreleased]", and that is exactly what this diff does: the heading removed, the `### Fixed` note kept as text. - **On this head:** - `rt decide --dry-run` gives `mode=update`, `next_version=0.2.0`, `bump_level=minor`. - `rt manifest-check` passes. - `rt recover-pending-cut --dry-run` now says there is nothing to fold back (mode=update). - `rt prep --dry-run` composes `[v0.2.0]` with Added, Changed (the #1 fragment), Fixed and the three "None." sections. It consumes the fragment, sets `VERSION` to 0.2.0, and register plus checks 1–9 all PASS. - **`pr / gates (pull_request)` is green** on this head. ## The `### Added` line: accepted It is needed. With the line removed and `prep --dry-run` re-run, the composed section says `### Added` / `None.`. `ab01c89`'s subject renders only in a cut with no fragment and no [Unreleased] text, so without the line v0.2.0 would describe the change that makes it minor as "None.". The line describes what `ab01c89` does: `index.html` shows the `VERSION` file's contents, and the README gains the hosted link. **Non-blocking, but fix it before the v0.2.0 cut:** the README's links are dead. - `https://frankenbit.codeberg.page/tic-tac-toe/` returns **404**. - So do `codeberg.org/FrankenBit/tic-tac-toe` and its `/releases`, and the README links those as well. As written, v0.2.0's notes would advertise a page that does not exist. Either drop "and the README links the hosted page" from the line here or in the rolling PR, or repoint the README to the live forge in a `fix:` PR before the cut. ## Not measured The post-merge push run and the rolling PR. I'd note one thing for the record, which the body already owns: the automatic recovery was dry-run before #2 landed its fragment, and not re-run after.
engineer merged commit e4d214af73 into master 2026-10-08 01:03:44 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
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
frankenbit/tic-tac-toe!3
No description provided.