Repository navigation
LOCAL: decode fork feed tags once so in-app fork updates find their release - #27
Merged
Merged
Conversation
…elease GitHub's releases.atom serves a fork tag percent-encoded (swaplabs-v1.4.214%2B202609282117). The feed parser kept it that way and every download URL encoded it again (%252B), so each fork manifest 404'd, the check came back not-ready, and a Mac showed "Couldn't reach the update server". Decode the href once, skip mirrored upstream tags (v1.4.216) that name another source's version instead of probing them, and give a fork source's not-ready check the "not available yet" copy. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Review complete. No issues found — approved ✅. Adds Reviewed commit: 7b67ac2 |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This was referenced Oct 22, 2026
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ELI5
Fork builds checking for updates asked GitHub for the wrong file name, got "not found" every time, and told the user the update server was unreachable. This fixes the name, so a fork build finds its newer release.
What Changed
Before: clicking Check for Updates on a SwapLabs build (seen on a Mac at 2026-09-29 18:43Z) showed "Update Check Failed: Couldn't reach the update server", even though the newer release and its assets were all published.
After: the check finds the newer SwapLabs release. If a release really isn't installable yet, the card says "A newer release isn't available for this device yet".
Mechanism:
swaplabs-v1.4.214%2B202609282117,+as%2B). The feed parser kept that form, and every URL built from the tag encoded it again (%252B). Every manifest request 404'd, so the check came back "not ready".v1.4.216,v1.4.215, …), which carry no fork assets. Those entries are now skipped instead of spending manifest probes on them.Why
I replayed the real feed-resolution code against live GitHub for a Mac on
…202609281805. Before the fix, every manifest request went to%252BURLs and 404'd, and the result wasnot-ready. After the fix,…2117resolves asreadyand nothing is fetched for the bare upstream tags. Linux fork builds used the same path, so this affected every in-app fork update.Decoding at the single place the feed is parsed fixes every consumer: the pinned feed URL, the manifest probes, and the Mac installer. The alternative was to stop encoding when building URLs, but upstream tags and REST-sourced tags rely on that encoding.
Linked Issue
N/A. Operator report of the Mac "Update Check Failed" card (fork workstream 4).
Visual Proof
N/A. The only visible change is the error text choice, which is covered by a test. The fix itself is in network resolution.
Testing
updater-prerelease-feed.test.ts: the fork-feed fixture now writes hrefs the way GitHub does (percent-encoded). 7 fork cases, including a new one that uses a mirrored upstream tag, fail on the old code and pass now.updater.check-failure.test.ts: a new case checks that a fork build's not-ready check shows "A newer release isn't available…". It fails on the old code.pnpm tc:node,check:code-quality:changed, oxlint and oxfmt pass.5 tests in
updater.server-update-help-url/linux-root-package-install/headless-serve-installfail identically on theswaplabs/mainbase without this change. They are not touched here.I manually tested these changes locally
Automated tests added/updated, or explained why not below
AI Disclosure
Claude Opus 5.5 via Claude Code.
Review
Agent skill upstream boundary
docs/reference/agent-skill-sharing-upstream-boundary.mdand copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.Notes
Fork-only (
LOCAL:). Decoding is a no-op for upstream tags (v1.4.216has nothing encoded), and the bare-tag skip only removes entries that name another source's version, so upstream-source checks are unchanged.Checklist
N/Awith reasonpnpm lint,pnpm typecheck,pnpm test, andpnpm buildpass (or CI will cover; local preferred)🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.