feat(settings): new builds follow the launcher's channel until the player picks one #14
No reviewers
Labels
No labels
area/build
area/install
area/saves
area/ui
area/updates
good first issue
gpu/amd
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
platform/linux
platform/steam-deck
platform/windows
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/LongshotLauncher!14
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/LongshotLauncher:feat/build-channel-follows-launcher"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
A nightly launcher starts new builds on stable, which has no Longshot release yet, so its home says the version to build is not known and Build stays off. settings.json saved the old default,
"stable", for every player, so there was no way to tell a pick from the default.What changed
LauncherSettings.DefaultChannel(Core/LauncherSettings.cs) is now null until the player picks a channel in Settings.BuildChannel(ownTag)gives the channel new builds start on: the pick, else the launcher's own channel (SelfUpdate.ChannelOf:LauncherChannelwhen set, elseVersions.TrackOf(<launcher version>, LauncherFirstMajor)). A nightly launcher builds nightlies, an rc launcher release candidates, a stable one (and a build from a checkout) stable.Loadreads a format-1 file's"defaultChannel": "stable"as no pick, once (format 1 wrote that for everyone);"rc"or"nightly"there was a pick and stays. A format bump rather than adefaultChannelChosenflag: no second field to keep in step with the first forever, and null already means "not picked". The one case it gets wrong, a player who really picked stable under format 1, is the same as the old default and still builds stable on a stable launcher.LauncherService.DefaultChannelis that channel; the home's Build and "Change", the channel picker and Settings use it (HomeViewModel,ChannelPickerViewModel,SettingsViewModel). The picker's row and Settings' hint for it add "It follows the launcher until you pick one in Settings." while nothing is picked. Changing Launcher updates moves it along. The picker still picks for one build only and saves nothing, as before.SettingsChecksintests/launcher_core/Program.cs: each launcher track (stable, rc, nightly, dev),LauncherChannel, a pick that sticks after a save and load, no pick saved as null, and the migration of a format-1 file (stable read as no pick, rc kept).Flags and settings
defaultChannelMeasurements
main:
968b7963(2026-11-13)this PR: feat/build-channel-follows-launcher @
497d5399Hardware: Linux (CachyOS), sway on Wayland
Scene: the launcher's empty home, a copy of a real settings.json (
format: 1,defaultChannel: "stable",launcherChannel: null)Method: each side built Release with
-p:LongshotTag=nightly-8-3b243d73and started with its own HOME holding the copy; the home's channel read off the window. Tests:python -I tests/test_launcher_core.pyandpython -I tests/test_release.pyHow to reproduce:
dotnet build App -c Release -p:LongshotTag=nightly-8-3b243d73 -o out, then startout/LongshotLauncherwithHOMEpointing at a folder whose.local/share/longshot/launcher/settings.jsonis a format-1 file with"defaultChannel": "stable"968b7963497d5399Testing
Tested: Release build with warnings as errors; the launcher core checks and release tests (above). The real launcher on sway (Wayland, 1.5 scale, headless output): main and this PR, both stamped nightly-8-3b243d73, on a copy of a format-1 settings.json; the home and the channel picker (screenshots).
Not tested: Windows (the change is in shared code and view models, nothing platform-specific); the Settings page itself on screen (its hint uses the same text as the picker).
Needs other testers:
Screenshots
main @
968b7963, a nightly launcher with an old settings.json: stable, nothing to buildthis PR @
497d5399: nightlythis PR @
497d5399: the pickerRisk and rollback
A player who had picked stable under format 1 gets the launcher's channel once (only on an rc or nightly launcher); picking stable again in Settings sticks. Reverting the commit is enough: format 1 reads a null channel as stable.
Reviewer notes
HomeViewModelchanges in four lines only (Service.Settings.DefaultChanneltoService.DefaultChannel), to stay clear of the busy-states work.Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
mainand passing here.tests/that reads changed source updated in this PR, not weakened.