Skip to content

fix(release): tag immutable desktop candidates - #4811

Open
wesbillman wants to merge 1 commit into
mainfrom
carl/immutable-desktop-release
Open

fix(release): tag immutable desktop candidates#4811
wesbillman wants to merge 1 commit into
mainfrom
carl/immutable-desktop-release

Conversation

@wesbillman

Copy link
Copy Markdown
Collaborator

Summary

Redesign the permanent Desktop release flow so unrelated merges to main cannot invalidate an already reviewed, green release candidate.

  • Tag the immutable, API-confirmed release PR head instead of its later squash commit.
  • Treat the merged PR—including an authorized owner/admin bypass—as publication authorization, while requiring trusted check evidence that was complete at merge time.
  • Make tag creation idempotent and collision-safe: an existing tag succeeds only at the exact candidate SHA, and create races refetch before accepting equality.
  • Replace ancestry-based previous-release discovery with a validated metadata ledger for side-history candidate tags.
  • Compute the next release from the prior frozen base to the new frozen base, excluding only the prior release squash SHA so unrelated commits remain in the changelog.
  • Preserve schema-1 production-tag migration and reject malformed metadata or equal/decreasing versions.
  • Update operator documentation for the normal squash-merge workflow.

This is the reusable release process for 0.5.6 onward, not the retired one-shot 0.5.5 recovery path.

Invariants covered

  • Candidate creation → unrelated main merge → authorized squash merge → immutable candidate tag.
  • Trusted producer IDs and merge-time completion timestamps; DCO's bounded post-merge exception remains isolated.
  • Missing/spoofed checks, tampered candidates, ambiguous PR associations, conflicting tags, and equal/decreasing versions fail closed.
  • Same-SHA retries succeed; different-SHA collisions fail.
  • Legacy schema-1 tag-on-main migration and schema-2 side-history accounting both preserve the correct next-release changelog.

Related issue

N/A — follows the Desktop release failures in #4788 and #4800 and the recovery revert in #4808.

Testing

At clean commit 6a91fbed8147a48cf174997de0c3e4cb2fb26474:

  • scripts/test-desktop-release-candidate.sh
  • scripts/test-release-ref-contract.sh

Both focused suites passed with HEAD unchanged. Princess Donut cleared the security/provenance surface, including the hostile merge-time timestamp cases. Mongo cleared the side-history ledger, migration, version-order, documentation, and contract-test surface.

@wesbillman
wesbillman requested a review from a team as a code owner August 4, 2026 23:21
@wesbillman
wesbillman force-pushed the carl/immutable-desktop-release branch 4 times, most recently from 58387b1 to 264b528 Compare August 5, 2026 00:30
Make the merged release PR authorize publication of its exact reviewed head,
freeze trusted check evidence at merge time, and carry a metadata-backed
ledger across squash-merged candidate tags.

Co-authored-by: Carl <c7ebe626f000404285d3686e1dc74cc07cc60a9754a150041ba132e14bd3e2ec@buzz.block.builderlab.xyz>
Signed-off-by: Wes <wesbillman@users.noreply.github.com>
@wesbillman
wesbillman force-pushed the carl/immutable-desktop-release branch from 264b528 to c4711cb Compare August 5, 2026 00:30
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