diff --git a/docs/plans/2026-10-12_one-copy-stack.md b/docs/plans/2026-10-12_one-copy-stack.md index c5494e715..08dff5d9d 100644 --- a/docs/plans/2026-10-12_one-copy-stack.md +++ b/docs/plans/2026-10-12_one-copy-stack.md @@ -5,7 +5,8 @@ It is the fix plan in my comment 52 on Vikunja #225, which Mos asked for in sage-0094 ("Tell me the plan before anything touches the wrapper or the unit") and sage-0095 ("Keep the one-copy row brief going"). It follows queue row 77 (#1571), whose round 2 makes `webui-service.sh -install --copy` refuse unless the bus runs from the same copy. +install --copy` refuse unless the bus runs from the same copy. Gitea +#1579. ## Bus, Console and mosaic CLI on one pinned copy (#225) @@ -37,9 +38,10 @@ path, `/mnt/storage/src/mosaic-stack/scripts/mosaic talk pm ...`, which Jason confirmed works (6b5b7aef). The bus also runs code from the moving checkout, so every landing in `packages/bus` or `packages/cli` is live at its next restart, the same problem row 77 fixes for the Console (lead -decision 109). And the unit starts the host without `--pm` -(`packages/cli/src/cli.mjs:265-279`), so no PM session runs unless -someone starts the host by hand (the S7 run log, 2026-10-12T18:49Z). +decision 109). And the unit template has no `--pm` +(`packages/cli/src/cli.mjs:265-279`), so no PM session ran until Mos +added a temporary drop-in that sets it (sage-0096; the S7 run log, +2026-10-12T18:49Z). Accepting a second path in the proof (#225 option B) is rejected: it adds a trusted path and keeps the three trees on different code. @@ -86,7 +88,9 @@ One copy for all three: if any copied path imports it, `package.json` and `package-lock.json`. The script runs `npm ci` in the temp directory before the rename, so the copy carries the pi pin's `node_modules` and `pi-pin.mjs`'s lock - check passes there (`packages/conversation/src/pi-pin.mjs:52-57`). The + check passes there (`packages/conversation/src/pi-pin.mjs:52-57`). Row + 61 adds `packages/tasks/src` and `packages/tasks/fields.json` to what + the Console loads (Darkwing, 2026-10-12), so the list carries them. The script refuses if `package.json` is missing from the temp directory, so `npm ci` can never walk up. Rocko derives the final list from the imports and records how in the packet. @@ -124,6 +128,15 @@ The bus unit: `refactor` points at another commit. It changes nothing. - The `--claude PATH` pin (lead decision 91) is unchanged and is rendered next to `--copy` and `--pm`. +- Mos's temporary drop-in, + `~/.config/systemd/user/mosaic-bus@mosaic-stack.service.d/pm.conf` + (sage-0096, 2026-10-12T18:53:34Z), resets `ExecStart` to add `--pm` + until this row lands. A drop-in overrides the installed unit, so + `status` and `check` read the effective `ExecStart` and + `WorkingDirectory` from `systemctl --user show`, not from the unit + file, and `status` lists any drop-in files. `install` refuses while a + drop-in for `mosaic-bus@` sets `ExecStart` or `WorkingDirectory`, + naming the file. The update step removes `pm.conf` before the install. The check and the wrapper: @@ -143,7 +156,9 @@ The check and the wrapper: The update step, documented once in `docs/TOOLS.md` and pointed to from both READMEs: `stack-copy.sh copy COMMIT`; stop the Console, then the -bus; `bus-service.sh install --copy ID --pm` with its flags; +bus; remove any `mosaic-bus@` drop-in that sets `ExecStart` (the first +time, Mos's `pm.conf`) and run `systemctl --user daemon-reload`; +`bus-service.sh install --copy ID --pm` with its flags; `webui-service.sh install --copy ID` with its flags; `stack-copy.sh wrapper ID`; start the bus, then the Console; `stack-copy.sh check`, `webui-service.sh status`, `/healthz` and `scripts/mosaic launches list`