fix(server): block updates under legacy service launchers - #11940
Conversation
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a small, targeted compatibility fix that blocks unsafe updates from legacy launchers while preserving the current protocol path. Its runtime impact is confined to the existing service preflight boundary and is directly covered by tests. You can add or adjust custom eligibility rules. Learn more. |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe service launcher protocol advances from version 2 to version 3. Preflight tests now verify that launcher protocols 1 and 2 return the complete blocked response. ChangesService launcher compatibility
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~10 minutes Change: Bug fix · Severity of issue fixed: Medium Suggested reviewers: Merge Risk: ⚪ Minimal · up to The protocol update rejects legacy launchers and adds coverage for protocols 1 and 2. No concrete merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Fleet project tools keep upstream's shared GitHub circuit and GraphQL budget from pingdotgg#11888; the ownership overlay follows launcher protocol 3 from pingdotgg#11940.
## What's Changed * feat(mobile): add v2 preview store builds by @juliusmarminge in pingdotgg/t3code#11966 * fix(mobile): block incompatible server connections by @juliusmarminge in pingdotgg/t3code#11974 * fix(web): keep PR controls readable in narrow panels by @Bil0000 in pingdotgg/t3code#11962 * fix(server): block updates under legacy service launchers by @Gigioxx in pingdotgg/t3code#11940 * fix: reduce GitHub quota use with sharing enabled by @Bil0000 in pingdotgg/t3code#11888 * fix(usage): refresh limits when the tab opens by @Bil0000 in pingdotgg/t3code#11928 * fix(contracts): avoid Intl.Segmenter in monogram validation (Hermes crash) by @bompus in pingdotgg/t3code#11984 * feat(lint): extend Hermes API bans with a configurable API list by @juliusmarminge in pingdotgg/t3code#11982 * fix(server): reuse Git index metadata during checkpoint capture by @im-kvijay in pingdotgg/t3code#10792 * refactor: give project monograms their own icon variant by @juliusmarminge in pingdotgg/t3code#11993 * fix(clients): disable incompatible environments during discovery by @juliusmarminge in pingdotgg/t3code#11990 * fix(antigravity): stop health checks from filling the disk with _MEI folders by @t3dotgg in pingdotgg/t3code#12008 * fix(mobile): bare t3code:// links no longer reset navigation to Home by @SunkenInTime in pingdotgg/t3code#12002 * fix(server): keep Claude rewind when fork history length changes by @maria-rcks in pingdotgg/t3code#11954 * fix(mobile): use native toolbar search for licenses by @juliusmarminge in pingdotgg/t3code#12011 ## New Contributors * @bompus made their first contribution in pingdotgg/t3code#11984 * @im-kvijay made their first contribution in pingdotgg/t3code#10792 **Full Changelog**: pingdotgg/t3code@v0.0.41-nightly.20260915.1780...v0.0.41-nightly.20260916.1795 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.41-nightly.20260916.1795
> [!NOTE] > Moves styal CLI, managed services, SSH, and WSL onto standalone executables while retaining npm installation. CI passed; the implementation is ready for review. Merging remains blocked on npm publication configuration. The current CLI requires Node/npm-managed runtimes, and desktop SSH still selects upstream `t3` packages. This change distributes styal executables for macOS arm64, Linux x64/arm64, and Windows x64/arm64, with npm as a launcher for those same payloads. Windows desktop bundles the Linux archive for its WSL cache. Launcher protocol 4 distinguishes the new executable layout from styal's existing protocol 3 npm layout. Existing installations retain migration guidance, isolated runtime storage, ownership checks, and rollback. Intel macOS remains unsupported. Upstream changes are grouped in three source-attributed commits. Two separately attributed fixes make the macOS terminal helper executable and preserve SSH runner/process ownership and literal shell interpolation. ### Validation Native macOS arm64 and Windows x64 archives passed terminal, bundled web, pairing, authenticated synthetic project reads, and restart persistence checks. npm installation and offline reinstall retained native dependencies. Production SSH scripts passed concurrent installation, cached reuse, owned-server reconnect, stop, and restart against a local release fixture. A disposable launchd service booted and stopped successfully. Production WSL cache scripts and the cached Linux executable passed cold/warm reuse, tamper recovery, invalidation, pairing, persistence, and managed-launcher checks. Focused service/launcher and SSH tests cover fork adaptations. Fork CI passed on `02391a42fd0c81d55d3df27d9386351dce135d89`: code checks, workspace tests, server tests, and release smoke. [CI run](https://github.com/incognitojam/styal/actions/runs/35385944052). Full legacy npm-service migration under its real service manager, packaged Electron WSL selection/fallback, and production signing were not exercised by these host checks. Unchanged upstream behavior relies on upstream validation and fork CI. ### Release prerequisite `STYAL_CLI_PUBLISH_ENABLED` is already `true`, but the five new public npm platform packages do not exist. Configure their first publication and trusted publishers before enabling this release path, or explicitly gate platform publication during rollout. This branch does not change registry configuration or live installations. ### Source PRs: `pingdotgg#5302`, `pingdotgg#5769`, `pingdotgg#9843`, `pingdotgg#10105`, `pingdotgg#10285`, `pingdotgg#10289`, `pingdotgg#10301`, `pingdotgg#11316`, `pingdotgg#11317`, `pingdotgg#11318`, `pingdotgg#11319`, `pingdotgg#11451`, `pingdotgg#11510`, `pingdotgg#11511`, `pingdotgg#11605`, `pingdotgg#11606`, `pingdotgg#11607`, `pingdotgg#11659`, `pingdotgg#11696`, `pingdotgg#11702`, `pingdotgg#11732`, `pingdotgg#11738`, `pingdotgg#11741`, `pingdotgg#11750`, `pingdotgg#11770`, `pingdotgg#11940`, `pingdotgg#12044`. Only service prerequisite diagnostics from `pingdotgg#9602` are included; its Link/relay changes remain deferred, so it is not claimed as fully imported. Upstream-PR: 5302, 5769, 9843, 10105, 10285, 10289, 10301, 11316, 11317, 11318, 11319, 11451, 11510, 11511, 11605, 11606, 11607, 11659, 11696, 11702, 11732, 11738, 11741, 11750, 11770, 11940, 12044 --- Written by an agent (Codex, GPT-6).
Older background-service launchers still expect
node_modules/t3/dist/bin.mjs, so they reject complete standalone runtimes with a misleading “missing or incomplete” error.Bump the launcher protocol to 3 so the existing staged preflight blocks activation with the instruction to update the launcher on the server machine. Document the runtime-layout compatibility boundary and cover legacy protocols 1 and 2. A local
t3 updateis still required to upgrade the launcher.Closes #11934.
Verification
Reproduced the exact rejection using the pre-feat(server): manage runtimes as release archives only, never from npm #11510 launcher and disposable runtime fixtures; the same fixture now stops at preflight with the actionable message.
Protocol-2 regression test failed before the fix. All 65 focused preflight, self-update, launcher, launcher-client, and boot-service tests pass.
Server typecheck, focused lint, and formatting pass.
Isolated Chrome and disposable dev server: a controlled update RPC failure displays the actionable message and keeps Retry available. No installed service was updated.
Claude Opus 5 reviewed the change before PR creation: no actionable findings.
Model: GPT-6, using the Codex harness.
Summary by CodeRabbit