Skip to content

fix(tray): hand Sparkle the SemVer comparator + RC-channel update policy - #967

Merged
github-actions[bot] merged 1 commit into
mainfrom
fix/sparkle-semver-comparator
Aug 8, 2026
Merged

fix(tray): hand Sparkle the SemVer comparator + RC-channel update policy#967
github-actions[bot] merged 1 commit into
mainfrom
fix/sparkle-semver-comparator

Conversation

@Dumbris

@Dumbris Dumbris commented Aug 8, 2026

Copy link
Copy Markdown
Member

Second (and final) release-blocker found by the Stage 1 RC dress rehearsal.

Root cause: SUStandardVersionComparator reports 0.54.0-rc.2, 0.54.0-rc.3 and 0.54.0 as EQUAL (verified directly against Sparkle 2.9.3) — every RC→RC and RC→stable update was invisible, producing "You're up to date" against a feed that plainly carried a newer item. The FR-006 SemVer util existed but was never handed to Sparkle.

Fixes

  • SemVerSparkleComparator: the missing versionComparator(for:) delegate (SemVer 2.0 precedence; non-version strings fall back to Sparkle's comparator). 5 new tests.
  • Channel policy (maintainer decision): RC → next RC or next stable, whichever is newer; stable → stables only. release.yml publishes the stable item into the beta feeds too (untagged = visible to every channel; SemVer makes stable outrank its RCs) + a second beta-channel site dispatch.
  • Sparkle decision diagnostics (feed URL / allowed channels / loaded items) — the missing lines that cost this debugging session.
  • vv double-prefix fix in the supersede consent label.

Verified end-to-end with production artifacts: locally-built rc.2 tray with this fix → detected rc.3 on the live mcpproxy.app beta feed → one click → real enclosure downloaded → production-EdDSA verified → bundle swapped → relaunched as rc.3 → old core superseded (core: v0.54.0-rc.3, launched_by: tray). Swift suite: 939 tests, 1 known-environmental failure.

Related #957

🤖 Generated with Claude Code

…c.3 and stable EQUAL

Related #957

SUStandardVersionComparator treats the entire prerelease suffix as noise
(verified directly against Sparkle 2.9.3: 0.54.0-rc.2 vs 0.54.0-rc.3 vs
0.54.0 all compare orderedSame), so every RC-to-RC and RC-to-stable
update was invisible — 'You're up to date' on a feed that plainly
carried a newer item, found live on the v0.54.0-rc.3 dress rehearsal.
The FR-006 SemanticVersion util existed but was never plugged into
Sparkle; SemVerSparkleComparator is the missing versionComparator(for:)
delegate, falling back to Sparkle's comparator only for strings that are
not versions.

Also, channel policy per maintainer decision: RC users update to the
next RC OR the next stable, whichever is newer; stable users only ever
see stables. release.yml now copies the stable feed over the beta feeds
and fires a second beta-channel site dispatch, so RC users are not
stranded on their last RC when a cycle ends. SemVer precedence makes
the stable outrank its own RCs.

Plus: Sparkle decision diagnostics (feed URL, allowed channels, loaded
appcast items — the lines whose absence cost this debugging session)
and the vv double-prefix fix in the supersede consent label.

Verified end to end against production artifacts: a locally-built rc.2
tray with this fix detected rc.3 on the live beta feed, one-click
downloaded the real enclosure, EdDSA-verified with the production key,
swapped, relaunched as rc.3, and superseded the old core.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 8, 2026

Copy link
Copy Markdown

Deploying mcpproxy-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: bcaec3c
Status: ✅  Deploy successful!
Preview URL: https://bd0b3b12.mcpproxy-docs.pages.dev
Branch Preview URL: https://fix-sparkle-semver-comparato.mcpproxy-docs.pages.dev

View logs

@codecov-commenter

Copy link
Copy Markdown

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rehearsal-verified fix: SemVer comparator handed to Sparkle; channel policy per maintainer decision.

@github-actions
github-actions Bot merged commit 6411a5f into main Aug 8, 2026
35 checks passed
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.

2 participants