Skip to content

fix(nightly-v2): offer Update server when a Fork Nightly server is behind the app - #90

Merged
saphid merged 1 commit into
mainfrom
fix/ov2-pin-version-skew
Sep 23, 2026
Merged

saphid merged 1 commit into
mainfrom
fix/ov2-pin-version-skew

Conversation

@saphid

@saphid saphid commented Sep 23, 2026 •

Copy link
Copy Markdown
Owner

What Changed

Pin the Fork Nightly version skew fix into Fork Nightly. When the app and its server are both Fork Nightly (nightly-v2) builds, the app now recognises a server built earlier than itself and offers Update server. Every other version combination is compared exactly as before.

Fork main carries release configuration, not V2 source. This PR adds one source commit after the existing 15 patches.

Why

On 2026-09-23 the desktop app updated itself from 0.0.42-nightly-v2.20260922.* to 0.0.42-nightly-v2.20260923.1790125491283725. The background service stayed on 0.0.42-nightly-v2.20260918.1789701374653468, and no update notice appeared in the conversation or in Settings → Connections.

resolveVersionMismatch compares two nightly builds in full only when the first prerelease identifier is exactly nightly. The shared semver parser splits on split("-", 2), so 0.0.42-nightly-v2.20260918.1789701374653468 parses with prerelease ["nightly"] and loses its date and run. Running the real code, compareSemverVersions(server, client) returns 0 for the two versions above, so the app decided the server was current. Upstream versions (-nightly.20260923.12) are unaffected. The hyphenated nightly-v2 train comes from this fork, and fork patch 5564f3a taught cliRelease.ts about it but not the skew check.

The fix gives the skew check its own ordering for nightly-v2 builds: core version, then build date, then run number (as BigInt), ignoring +metadata. It applies only when both versions are nightly-v2. The shared semver parser is unchanged, because provider version checks depend on it.

The installed 0918 service already supports the fork's channel (t3 update --channel nightly-v2, releases from saphid/t3code), so the offered Update server action can complete.

Verification

  • A new test for the incident versions fails on base 379bd7ab3e and passes with the fix. vp test run apps/web/src/versionSkew.test.ts: 23 passed. The new tests cover ordering by date and run, metadata on either side, matching and newer servers, upstream nightly builds with metadata, and mixed trains.
  • A differential test ran the base and fixed resolveVersionMismatch over 108 versions: upstream nightly, metadata, missing run, extra identifiers, preview, beta and nightly-v2, each with and without a v prefix and surrounding whitespace. Across about 11,700 client/server pairs, results differed only where both sides were nightly-v2.
  • Web vp exec tsc --noEmit -p apps/web/tsconfig.json, focused vp lint and vp fmt: passed. The chat and settings component suites: 110 of 111 files passed. MessagesTimeline.test.tsx failed only in the parallel run and passed alone (66 tests); it does not use version skew.
  • A local replay of all 16 patches onto upstream t3code/codex-turn-mapping at 060756de5adcda82fedace42d8c47b449bc1097b applied cleanly. The resulting source matches the tested tree apart from 4 generated package.json versions. node --test .github/scripts/downstream-nightly.test.mjs: 22 passed.
  • GPT-6 Astra at high effort reviewed 481891d1db through Codex CLI and requested changes. Routing upstream nightlies through the stricter channel regex dropped warnings for versions with build metadata, and mixed-train results changed. Head 6f6ae98244 limits the new path to nightly-v2 pairs. The second review approved with no findings, after its own differential check of 46,656 pairs.
  • CI: "Validate fork Nightly automation" passed on this head. Check, Test, Release Smoke and Mobile Native Static Analysis are queued with no Blacksmith runner, as for fix(nightly-v2): keep startup recovery running past undecodable thread projections #89 and every fork ci.yml run since 2026-09-23 02:44Z.
  • Not verified end to end in the app: the notice appearing and the service updating will be confirmed after this release installs.

Checklist

  • This PR is small and focused
  • I explained what changed and why

Implementation: Claude Opus 5.5 in Claude Code. Independent review: GPT-6 Astra in Codex CLI, high effort.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XS labels Sep 23, 2026
@saphid
saphid merged commit a716e7a into main Sep 23, 2026
12 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant