feat(mosaic): mosaic update re-seeds framework + relaunches agents (#609)
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful

Closes R13 (F3-m3). mosaic update installed the new npm CLI but never
re-seeded ~/.config/mosaic from the package's bundled framework/, so shipped
launcher/runtime changes (agent-name export + native HB) stayed DORMANT until
a manual re-seed — operators got the new CLI on a stale framework.

- update-checker.ts: resolveBundledFrameworkRoot, buildReseedCommand (install.sh
  in MOSAIC_SYNC_ONLY=1 MOSAIC_INSTALL_MODE=keep — the P4 data-safe reconcile:
  framework-owned overwrite + backup-once; SOUL/USER/*.local/credentials kept),
  runFrameworkReseed, readRosterAgentNames, buildRelaunchCommands.
- cli.ts update: after a successful CLI install that includes @mosaicstack/mosaic,
  re-seed the framework (default-on; --no-reseed to skip). Then --relaunch restarts
  rostered agents (systemctl --user restart mosaic-agent@<name>), else prints clear
  activation guidance. Only re-seeds when the framework-bearing package updated.

Flow: update CLI -> re-seed framework (data-safe) -> relaunch agents (opt-in).

Verified: 6 new unit tests + 19 runtime + 26 launch tests green; tsc/eslint/
prettier clean. Sync data-safety already proven (P4 matrix + live validation).

Refs #609

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EsgTQzV5YUGk1JtCLP4B83
This commit is contained in:
2026-06-21 22:29:03 -05:00
parent 528700ceea
commit dcb7477007
5 changed files with 267 additions and 2 deletions

View File

@@ -0,0 +1,29 @@
# F3-m3 — `mosaic update` re-seeds framework + relaunches agents (R13)
- **Issue:** #609 · **Branch:** `feat/f3-m3-update-reseed`
## Gap (found in 0.0.39 production validation)
`mosaic update` installs the new npm CLI but never re-seeds `~/.config/mosaic/` from the package's
bundled `framework/`. So the shipped custom Pi harness (agent-name export + native HB, 0.0.39) stays
DORMANT until a re-seed — operators get the new CLI on a stale framework.
## Implementation
- `update-checker.ts`: `resolveBundledFrameworkRoot()`, `buildReseedCommand()` (install.sh in
`MOSAIC_SYNC_ONLY=1 MOSAIC_INSTALL_MODE=keep` — the P4 data-safe reconcile), `runFrameworkReseed()`,
`readRosterAgentNames()`, `buildRelaunchCommands()` (systemctl --user restart per agent).
- `cli.ts` `update`: after a successful CLI install that includes `@mosaicstack/mosaic`, re-seed the
framework (default-on; `--no-reseed` to skip). Then either `--relaunch` (restart rostered agents) or
print clear guidance to run `mosaic update --relaunch` / `mosaic fleet restart`.
## Flow
`update CLI → re-seed framework (data-safe) → relaunch agents (opt-in)` — closes R13, activates the
native harness for every operator.
## Verification
- 6 new unit tests (reseed command/env, relaunch commands, roster parse, missing-installer guard).
- 19 runtime + 26 launch tests still green; tsc/eslint/prettier clean.
- Data-safety of the sync is already proven (P4 5-fixture matrix + live dragon-lin validation).