From 6d6d64ddababff00690bef9c0b189f9d74978340 Mon Sep 17 00:00:00 2001 From: vibesoftwarecoder Date: Thu, 10 Sep 2026 09:07:01 -0500 Subject: [PATCH] docs: correct the claim that a deploy cannot overwrite appsettings.local.json It was true of `dotnet publish` and false of `install-service.ps1 -FromZip`, which is the path people actually upgrade with. That path wiped the entire install directory before copying, so it deleted appsettings.local.json along with everything else -- see #45 and 98b5cfa. Correct-sounding guidance that does not hold on the real path is worse than none, because it stops people checking. Both places CLAUDE.md made the claim now say what is actually true, and note that the fix is not retroactive: a host on 0.6.3 or earlier still has the destructive installer. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SQvL62WkT8xDWXqyjFCGDw --- CLAUDE.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/CLAUDE.md b/CLAUDE.md index 5e8df1a..650956d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -214,6 +214,20 @@ Put anything true of **this machine** rather than of MultiSeat in the shipped `appsettings.json` in the same folder; it is gitignored and absent from the repo, so `dotnet publish` never overwrites it. +⚠️ **"A deploy cannot overwrite it" was only ever true of `dotnet publish`.** Until `98b5cfa` +(2026-09-10) `install-service.ps1 -FromZip` **wiped the entire install directory** — +`Get-ChildItem $InstallDir | Remove-Item -Recurse -Force` — before copying the release payload in, +so an upgrade deleted `appsettings.local.json` *and* `appsettings.json` and left the shipped +defaults behind, with no backup and no warning. The advice above was correct-sounding and did not +hold on the path people actually upgrade with. See issue #45. + +Since `98b5cfa` both files are copied out before that wipe and copied back **byte for byte** +afterwards, the host's `appsettings.json` wins over the shipped one, and a timestamped copy is kept +in `C:\ProgramData\MultiSeat\config-backups\`. Settings a release adds that the host's file lacks +are listed during the install rather than silently applied — keeping the host's file is right, but +hiding a new option forever is not. ⛔ Anyone still on `0.6.3` or earlier has the destructive +installer; this protects the upgrade *after* the one that carries it. + ```jsonc { "MultiSeat": { "AudioMode": "PerSession" } } ``` @@ -256,7 +270,8 @@ Restart the service, re-provision, then set it back - verbose is noisy. - ⚠️ **`debug` does NOT work.** Apollo maps `verbose`=0, `debug`=1, `info`=2, and anything >= 1 silences FFmpeg. Only `verbose` lifts it. - ⛔ **Never hand-edit a seat's `sunshine.conf`** - `ApolloConfigBuilder` regenerates it on every - provision, so the change is lost. `appsettings.local.json` survives deploys. + provision, so the change is lost. `appsettings.local.json` survives deploys — ⚠️ but only since + `98b5cfa`; a `-FromZip` upgrade before that deleted it too. See "Host-local config" above. `SessionHealthCheck` now prints this hint by itself when a seat's Apollo exits within 30s of starting (`IsStartupFailure`), so the failure is signposted rather than silent.