chore(release): v0.35.0 #635

Closed
release-bot wants to merge 1 commit from release-prep/rolling into main
Member

Added

None.

Changed

None.

Fixed

None.

Removed

None.

Deprecated

None.

Upgrade

None.

### Added None. ### Changed None. ### Fixed None. ### Removed None. ### Deprecated None. ### Upgrade None.
chore(release): prepare v0.35.0
Some checks failed
changelog-body-check / changelog body Cold-Read linter (pull_request) Failing after 4s
changelog-body-check / check (pull_request) Failing after 0s
check-self-bootstrap / check (pull_request) Has been skipped
go-ci / lint + build + test (pull_request) Successful in 33s
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
manifest-check / check (pull_request) Successful in 0s
register-check / register-drift check (pull_request) Successful in 4s
register-check / check (pull_request) Successful in 0s
tests / bats (pull_request) Successful in 2m9s
tests / shellcheck (pull_request) Successful in 8s
ccee542bda
Generated by release-toolkit rt prep.

Tracker: frankenbit/release-toolkit#1
Owner

Closing — the generator is quiet, and the ORDER was the load-bearing part

Cause: .release-toolkit-manifest.json carried last_released_version = 0.34.0 while v0.35.0 was published at 16:03. release-decide.sh:149 treats the manifest as the anchor, so it walked commits already released in v0.35.0, re-derived the same minor bump, and proposed v0.35.0 a second time — with an all-None. body because every fragment had been consumed by the first cut.

Fixed by #636 (394f83f), which advanced the anchor:

last_released_version  0.34.0 → 0.35.0
last_released_tag      v0.34.0 → v0.35.0
last_released_sha      eff2d9d1 → ff2f352b
last_released_at       2026-07-29T21:46:55Z → 2026-07-31T14:03:19Z

Confirmed quiet by @engineer on current main, both implementations: mode=noop. With the anchor correct there is nothing to release, so this branch has nothing to propose.

⚠️ #636 was merged BEFORE this was closed, deliberately

@engineer's instruction and it was right:

While main carries the stale anchor a regeneration can re-propose the identical cut, and closing #635 first just gives it room to come back.

#635 is the output; the stale anchor was the input. Closing the output first would have produced a second identical PR and made the recurrence look like a regression of a fixed bug.

What did NOT catch this

changelog-body-check reddened, and that was luck of timing. It failed because the body was empty — a symptom of the fragments having been consumed. Had they not been, the same stale anchor would have produced a duplicate v0.35.0 with a plausible body and that gate would have passed.

⚠️ And this was NOT release-toolkit#625. That tracker's precondition is no release-toolkit.yml; this repo has one (1630 bytes), so config_render_tag never enters the empty-with-exit-0 path. The #623 collision guard is also prerelease-gated by construction ([[ -n "$PRERELEASE_ARG" ]]), and #635 was a release cut — out of scope by an explicit decision, not a failure.

Two guards that look like they should have fired, and neither was in scope. Recorded so the next reader does not re-derive the wrong cause, as I did.

The real follow-up

The manifest write-back is AUTOMATED and has regressed. release.yml:14-16 documents mode=cut as committing and pushing the manifest, and release-bot did exactly that through v0.33.0 (a1bf251, 23 July). It has failed for v0.34.0 and v0.35.0, both patched by hand.

That is a bisect between two known-good and two known-bad releases, not a feature request. Tracked with @engineer.

## Closing — the generator is quiet, and the ORDER was the load-bearing part **Cause**: `.release-toolkit-manifest.json` carried `last_released_version = 0.34.0` while `v0.35.0` was published at 16:03. `release-decide.sh:149` treats the manifest as the anchor, so it walked commits already released in v0.35.0, re-derived the same minor bump, and proposed `v0.35.0` a second time — with an all-`None.` body because every fragment had been consumed by the first cut. **Fixed by #636** (`394f83f`), which advanced the anchor: ``` last_released_version 0.34.0 → 0.35.0 last_released_tag v0.34.0 → v0.35.0 last_released_sha eff2d9d1 → ff2f352b last_released_at 2026-07-29T21:46:55Z → 2026-07-31T14:03:19Z ``` **Confirmed quiet by @engineer on current main, both implementations: `mode=noop`.** With the anchor correct there is nothing to release, so this branch has nothing to propose. ### ⚠️ #636 was merged BEFORE this was closed, deliberately @engineer's instruction and it was right: > **While main carries the stale anchor a regeneration can re-propose the identical cut, and closing #635 first just gives it room to come back.** **#635 is the output; the stale anchor was the input.** Closing the output first would have produced a second identical PR and made the recurrence look like a regression of a fixed bug. ### What did NOT catch this **`changelog-body-check` reddened, and that was luck of timing.** It failed because the body was empty — a symptom of the fragments having been consumed. **Had they not been, the same stale anchor would have produced a duplicate `v0.35.0` with a plausible body and that gate would have passed.** ⚠️ **And this was NOT release-toolkit#625.** That tracker's precondition is *no `release-toolkit.yml`*; this repo has one (1630 bytes), so `config_render_tag` never enters the empty-with-exit-0 path. **The #623 collision guard is also prerelease-gated by construction** (`[[ -n "$PRERELEASE_ARG" ]]`), and #635 was a release cut — out of scope by an explicit decision, not a failure. **Two guards that look like they should have fired, and neither was in scope.** Recorded so the next reader does not re-derive the wrong cause, as I did. ### The real follow-up **The manifest write-back is AUTOMATED and has regressed.** `release.yml:14-16` documents `mode=cut` as committing and pushing the manifest, and `release-bot` did exactly that through **v0.33.0** (`a1bf251`, 23 July). It has failed for **v0.34.0 and v0.35.0**, both patched by hand. **That is a bisect between two known-good and two known-bad releases, not a feature request.** Tracked with @engineer.
bosun closed this pull request 2026-08-01 00:24:50 +02:00
Some checks are pending
changelog-body-check / changelog body Cold-Read linter (pull_request) Failing after 4s
Required
Details
changelog-body-check / check (pull_request) Failing after 0s
Required
Details
check-self-bootstrap / check (pull_request) Has been skipped
Required
Details
go-ci / lint + build + test (pull_request) Successful in 33s
Required
Details
manifest-check / manifest-vs-tag consistency (pull_request) Successful in 5s
Required
Details
manifest-check / check (pull_request) Successful in 0s
Required
Details
register-check / register-drift check (pull_request) Successful in 4s
Required
Details
register-check / check (pull_request) Successful in 0s
Required
Details
tests / bats (pull_request) Successful in 2m9s
Required
Details
tests / shellcheck (pull_request) Successful in 8s
Required
Details
ac-closure-check / ac-closure check (pull_request)
Required
ac-closure-check / check (pull_request)
Required
fragment-check / check (pull_request)
Required
fragment-check / coverage (pull_request)
Required
fragment-check / density (pull_request)
Required
gitea-twin-check / check (pull_request)
Required
prep-order-check / check (pull_request)
Required
readme-pin-check / digest (pull_request)
Required
tests / contract-paths (pull_request)
Required
tests / dated-examples (pull_request)
Required
tests / workflow-schema (pull_request)
Required
toolkit-self-gates / toolkit-self gates (PR's own rt) (pull_request)
Required
workflow-parse-check / check (pull_request)
Required
workflow-parse-check / toolkit-self parse guard and controls (pull_request)
Required
workflow-parse-check / workflow parse and schema (pull_request)
Required

Pull request closed

Sign in to join this conversation.
No description provided.