Skip to content

chore(release): v0.5.92 (manual bootstrap; v0.5.91 immutable-release lockout)#152

Merged
githubrobbi merged 1 commit intomainfrom
release/v0.5.92
May 8, 2026
Merged

chore(release): v0.5.92 (manual bootstrap; v0.5.91 immutable-release lockout)#152
githubrobbi merged 1 commit intomainfrom
release/v0.5.92

Conversation

@githubrobbi
Copy link
Copy Markdown
Collaborator

Summary

Manual workspace version bump 0.5.91 → 0.5.92 to recover from the v0.5.91 immutable-release lockout and unblock release-plz active-mode automation.

Why this PR exists

v0.5.91 was prepared and tagged via the bespoke auto-tag-release.ymlrelease.yml chain on 2026-05-08, but the release.yml finalize step hit a server-side ruleset rejection:

```
error finalizing release: HttpError: Validation Failed:
pre_receive Repository rule violations found
Cannot create ref due to creations being restricted
tag_name was used by an immutable release
```

After the partial release was deleted to recover, the tag name itself became permanently locked by GitHub's immutable releases feature — the pre-receive hook now refuses any future ref creation under `v0.5.91`, even though the release object is gone (verified twice via `git push origin v0.5.91` and via the REST API).

Resolution

Skip v0.5.91 entirely. Public release sequence jumps `v0.5.90` → `v0.5.92`. All intended v0.5.91 changes are rolled forward; `CHANGELOG.md` carries a Note on the v0.5.91 gap explaining the discontinuity.

What's in v0.5.92

See `CHANGELOG.md` v0.5.92 section for the full delta.

Post-merge expectations

  1. `auto-tag-release.yml` detects the version bump and pushes `v0.5.92` tag (fresh tag name, never burned).
  2. `release.yml` fires on the tag push and builds 29 assets (1 CHECKSUMS + 13 SBOMs + 15 binaries).
  3. `release-plz` now has a baseline tag (`v0.5.92`) whose worktree contains the R3.5 dep-version fix, so the `release-plz-pr` job can compute next-versions for v0.5.93+ via R4 active mode.
  4. Phase R5 (retire bespoke tooling) becomes safe to schedule once we've observed at least one fully release-plz-driven cycle — likely v0.5.93.

Validation

  • `taplo` / file-size / typos / reuse / commit-subjects — green.
  • Tier 1 pre-push (cargo-check / clippy lint-ci / lint-prod / lint-tests / rustdoc / doc-tests / tests / smoke / deny / lint-ci-windows) — green in 147s.
  • No Cargo.lock drift beyond the bumped workspace versions.

Rollback

Revert the merge commit; `v0.5.92` tag is fresh, so it can be deleted (no immutable-release lock unless we let `release.yml` finalise it). Cargo.toml workspace version reverts to 0.5.91 (which is still locked, so a follow-up bump to 0.5.93 would be needed if a re-cut is required).

Bump workspace to 0.5.92 and skip the burned v0.5.91 tag.

GitHub's immutable releases feature permanently locked the v0.5.91 tag

name after the original release was deleted (the pre-receive hook on

this repo refuses any future ref creation under that name even after

the release object is gone).  All v0.5.91 changes are rolled forward

into v0.5.92; CHANGELOG.md carries a 'Note on the v0.5.91 gap' to

explain the discontinuity in the public release sequence.

After this release lands, release-plz has a baseline tag (v0.5.92)

with the R3.5 dep-version fix in its worktree, so R4 active-mode

release-pr / release jobs can take over for v0.5.93+.
@githubrobbi githubrobbi enabled auto-merge (squash) May 8, 2026 11:34
@githubrobbi githubrobbi merged commit c590635 into main May 8, 2026
21 checks passed
@githubrobbi githubrobbi deleted the release/v0.5.92 branch May 8, 2026 11:49
githubrobbi added a commit that referenced this pull request May 8, 2026
…153)

Phase R5 of `docs/architecture/release-automation-plan.md`.  Deletes the
parallel `auto-tag-release.yml` + `update_all_versions.rs` + `version-bump`
recipes track that has been driving releases since v0.4.x; release-plz
(R4 active since 2026-05-08) is now the sole version-bump + tag creator.
This is the point-of-no-return milestone for the release-automation
initiative; the bespoke flow can no longer be the fallback on the next
push to `main`.

Removed (~1430 LOC):

  - `.github/workflows/auto-tag-release.yml` (168 LOC).
  - `build/update_all_versions.rs` (1073 LOC).
  - `scripts/ci/ci-pipeline.rs` (53 LOC) — Phase 7 deprecation shim;
    `REMOVE-AFTER: v0.5.73` marker satisfied at v0.5.92.
  - `increment_version` + `version_bump` fns in
    `scripts/ci-pipeline/src/version.rs`.
  - `STEP_VERSION_INCREMENT` from `ALL_STEPS` in
    `scripts/ci-pipeline/src/workflow.rs`.
  - Version-bump step from `run_enhanced_phase2` (ship.rs) and
    `phase2_optimized` (phases.rs).
  - `version-bump` recipe in `just/build.just`.
  - Version-bump step from `quick-deploy` recipe in `just/dev.just`.
  - `!build/update_all_versions.rs` carve-out in `.gitignore`.

Added (~140 LOC, mostly comments + workflow YAML):

  - `detect-release-bump` short-circuit job in
    `.github/workflows/release-cache-warm.yml` — diffs
    `[workspace.package].version` between `HEAD` and `HEAD~1` and
    skips the warm matrix when the push is a version bump (saves
    ~165 runner-min/release because `release.yml` rebuilds + caches
    that same dep graph anyway).
  - Bridge step in `release-plz.yml`'s release job —
    `gh workflow run release.yml ...` after release-plz creates the
    workspace tag.  Replaces the GITHUB_TOKEN anti-loop workaround
    that R4 deferred to a future GitHub App / PAT setup; uses
    `workflow_dispatch` (explicitly carved out of the anti-loop
    policy) instead.  Flips `git_release_enable = false` in
    `release-plz.toml` so `release.yml` owns the GitHub Release page
    (avoids the body-overwrite race that softprops/action-gh-release
    would otherwise hit when run against a release-plz-created
    Release with `body_path: release-notes.md`).

Doc updates:

  - `docs/architecture/release-automation-plan.md` — flip R5 row to
    🟢, append four deviation log entries (v0.5.91 immutable-release
    lockout, R5-before-R4-bakein pragmatic acceleration, R5
    cache-warm short-circuit, R5 downstream-trigger bridge resolves
    prior R4 deferred row).
  - `docs/architecture/dev-flow-implementation-plan.md` — tick the
    final Phase 7 bake-in checkbox (deprecation shim retired,
    `REMOVE-AFTER: v0.5.73` satisfied at v0.5.92).
  - `CONTRIBUTING.md` — rewrite the Release row in the four-layer
    quality-gates matrix to describe the post-R5 release-plz flow.
  - `docs/publishing.md` — flip R3.5 / R5 / R6 status rows to landed;
    R4 stays 🟡 (active, bake-in pending first release-plz-driven
    release).
  - `docs/architecture/security/supply-chain-posture.md` — replace
    `auto-tag-release.yml` reference with the post-R5 chain.
  - Trailing comments in `release-plz.toml`, `Cargo.toml`,
    `scripts/ci-pipeline/Cargo.toml`, `.gitignore`, and
    `scripts/ci-pipeline/src/{version,workflow,ship,phases}.rs`
    rewritten to describe the post-R5 steady state and explicitly
    note the R5 retirement of any pre-R5 tooling they referenced.

Validation:

  - `cargo check --workspace --locked --all-targets` green.
  - `cargo clippy -p uffs-ci-pipeline --locked --all-targets
    -- -D warnings` green.
  - `cargo fmt --all` green.
  - `actionlint` on the two modified workflow YAML files green.
  - `just gates-drift` — manifest + consumers agree (23 gates).

R4 bake-in completes naturally on the next `feat:` / `fix:` / `perf:` /
`security:` commit to `main`, which release-plz will turn into the
first end-to-end release-plz-driven release (v0.5.93).  At that point
the R4 row in the dashboard flips to 🟢 in a follow-up commit.

Refs: #148 (R4 active-mode flip), #145 (R3.5 internal-dep version
requirements + R6 metadata), #151 (`release_always = false` gate),
#152 (v0.5.92 manual bootstrap after v0.5.91 immutable-release
lockout).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant