Repository navigation
fix(desktop): AppImage updates keep their filename - #36306
Conversation
Release AppImages were named T3-Code-<version>-<arch>.AppImage. electron-updater replaces an installed AppImage in place only when its name has no x.y.z version; otherwise it deletes the file and writes the update under the new name, so symlinks, desktop entries and dock pins pointed at nothing after every update. Builds that publish an update feed now name the AppImage T3-Code-<arch>.AppImage (stable) or T3-Code-Nightly-<arch>.AppImage (nightly). The AUR release script looks up whichever name a release published. An install that still has a versioned name is updated by its old updater, which deletes that path once more. The new build repairs it on the launch the updater starts: the previous launch's URL handler entry still names the removed path, and a relative symlink to the new file is left there. Later updates replace the version-free file in place. Fixes #8944 Co-Authored-By: Claude Fable 5.2 <[email protected]>
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — Linux AppImage releases use stable filenames so updates preserve launcher paths, with a guarded compatibility alias for existing versioned installs. AUR lookup retains legacy-name fallback and checksum validation; existing files are never overwritten by the alias repair. You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Other scenariosAll 64 scenario measurements match All 64 scenario measurements
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
|
No actionable comments were generated in the recent review. Walkthrough
Merge Risk:
|
No code changed in this pass: the brief listed nothing to change, and the watch on #36306 ended with all 35 checks passed on a275e56, Macroscope's approvability review APPROVED with no findings, CodeRabbit reporting 'No actionable comments were generated' (merge risk Minimal), and no line comments from either bot. mergeable_state is clean. CodeRabbit's only remarks were on the pull request description (it found no linked bug issue in the Scope section), which is not a code finding and not rated high.
The change itself is unchanged from the previous step: builds that publish an update feed name the Linux AppImage T3-Code-.AppImage (stable) or T3-Code-Nightly-.AppImage (nightly), so electron-updater 6.8.9 replaces the installed file in place instead of deleting it and writing a new versioned name; the AUR release script resolves whichever name a release published; and on the launch the old updater starts after the first versioned-to-version-free update, the new build leaves a relative symlink at the removed versioned path so existing launchers keep working without a bridge release.
Supersedes #25756. The change is @juliusmarminge's; their commits are kept.
Reproduction on main
On Linux, download a versioned T3 Code AppImage into ~/Applications, make it executable, create a stable-name symlink targeting it, and create a desktop entry launching that symlink. Launch through the desktop entry, accept an in-app update and restart, then quit and launch through the desktop entry again: main leaves its target missing. For the changed behavior, install a version-free AppImage produced by this PR, point the same launcher at it, and repeat an update to a later release: the path should remain usable. Also test an existing versioned install updating to the first version-free release; this PR alone still breaks that launcher once. These steps were derived from the issue and diff, not executed.
Evidence
Linux x86_64 packaged desktop app, 1920x1080, light theme, isolated synthetic data. Install an AppImage in ~/Applications, create a stable symlink and desktop entry, launch it, accept an update and restart, quit, then launch the same desktop entry again. Updates used real electron-updater with locally built synthetic releases.
Existing versioned-install migration also passed: base-built 0.1.9 → head-built version-free 0.1.11 restored the previous path as a relative symlink and reopened through the unchanged launcher. This supersedes the triage note predicting one remaining break. Migration recording, migration capture.
Driver, CDP helper, reproduction instructions.
Runtime transcripts: base, head, migration.
Not shown:
Tests
No commands run locally in this pass, since nothing changed. Read from the forge: all 35 check runs on a275e56 concluded success or skipped (including the 8 required checks, Lint, Test Server 1-8, Test Web, CodeRabbit); Macroscope review state APPROVED; CodeRabbit: no actionable comments.
Not in this change
Who did the work
Run by the t3code factory in T3 Code.