diff --git a/LifeOS/Workflows/Update.md b/LifeOS/Workflows/Update.md index a861bf0bae..478656b9e1 100644 --- a/LifeOS/Workflows/Update.md +++ b/LifeOS/Workflows/Update.md @@ -22,7 +22,7 @@ curl -s -X POST http://localhost:31337/notify -H "Content-Type: application/json - **Latest version**: read `tag_name` from `https://api.github.com/repos//releases/latest` — the same endpoint the bootstrap resolves against (`LIFEOS_REPO` defaults in `install/install.sh`). - **Equal** → report "already current" and exit. - **Behind** → fetch the newer payload FIRST: run the shipped bootstrap, `bash /install/install.sh`. It is additive — it replaces only the LifeOS skill dir and backs up the prior one. Then re-read the NEW skill's `Workflows/Update.md` and continue from its step 3 (steps may have changed between versions). - - **Network unreachable** → say so and stop after re-running the additive legs that work from the on-disk skill (steps 4–6). Step 3's overlay needs a full fetched payload: on an installed system `/install/` holds only the bootstrap files, so `OverlaySystem.ts` will refuse with a `bootstrap-only` blocker until the fetch in the "Behind" branch has run. That refusal is expected, not a failure. + - **Network unreachable** → say so and stop after re-running step 6, the only leg that works from the on-disk skill. Steps 3–5 all need a full fetched payload: on an installed system `/install/` holds only the bootstrap files, so `OverlaySystem.ts` refuses with a `bootstrap-only` blocker, `InstallHooks.ts` fails with `payload hooks.json not found`, and `ScaffoldUser.ts` fails with `template USER not found`, until the fetch in the "Behind" branch has run. Those refusals are expected, not failures. Never diff the on-disk payload's version against the install marker — the payload is what wrote the marker, so that comparison always says "already current" and the update never fetches anything. 3. **Re-overlay system** — refresh every system-owned file that changed (which `copyMissing` cannot do — it only writes files that are absent, so an update otherwise leaves most of the machinery stale while `VERSION` bumps). Run `bun Tools/OverlaySystem.ts --config-root ` first to preview, then `--apply`. It overwrites only system-owned paths (hooks, skills, agents, LIFEOS/{TOOLS,DOCUMENTATION,ALGORITHM,RULES,PULSE}, CLAUDE.md, the system prompt), never touches `USER/`, `LIFEOS/MEMORY/`, or `settings.json`, never deletes, skips symlinks, and writes `VERSION` last (only on a fully successful apply, so a partial update can't claim the new version). It backs up an existing CLAUDE.md and system prompt to a timestamped `.pre-overlay-*.bak` before overwriting — read the tool's `backups`/`note` output and reconcile any local edits from those, since step 6's `ActivateImports.ts --apply` then re-activates the identity imports the fresh CLAUDE.md ships commented. diff --git a/LifeOS/install/skills/LifeOS/Workflows/Update.md b/LifeOS/install/skills/LifeOS/Workflows/Update.md index a861bf0bae..478656b9e1 100644 --- a/LifeOS/install/skills/LifeOS/Workflows/Update.md +++ b/LifeOS/install/skills/LifeOS/Workflows/Update.md @@ -22,7 +22,7 @@ curl -s -X POST http://localhost:31337/notify -H "Content-Type: application/json - **Latest version**: read `tag_name` from `https://api.github.com/repos//releases/latest` — the same endpoint the bootstrap resolves against (`LIFEOS_REPO` defaults in `install/install.sh`). - **Equal** → report "already current" and exit. - **Behind** → fetch the newer payload FIRST: run the shipped bootstrap, `bash /install/install.sh`. It is additive — it replaces only the LifeOS skill dir and backs up the prior one. Then re-read the NEW skill's `Workflows/Update.md` and continue from its step 3 (steps may have changed between versions). - - **Network unreachable** → say so and stop after re-running the additive legs that work from the on-disk skill (steps 4–6). Step 3's overlay needs a full fetched payload: on an installed system `/install/` holds only the bootstrap files, so `OverlaySystem.ts` will refuse with a `bootstrap-only` blocker until the fetch in the "Behind" branch has run. That refusal is expected, not a failure. + - **Network unreachable** → say so and stop after re-running step 6, the only leg that works from the on-disk skill. Steps 3–5 all need a full fetched payload: on an installed system `/install/` holds only the bootstrap files, so `OverlaySystem.ts` refuses with a `bootstrap-only` blocker, `InstallHooks.ts` fails with `payload hooks.json not found`, and `ScaffoldUser.ts` fails with `template USER not found`, until the fetch in the "Behind" branch has run. Those refusals are expected, not failures. Never diff the on-disk payload's version against the install marker — the payload is what wrote the marker, so that comparison always says "already current" and the update never fetches anything. 3. **Re-overlay system** — refresh every system-owned file that changed (which `copyMissing` cannot do — it only writes files that are absent, so an update otherwise leaves most of the machinery stale while `VERSION` bumps). Run `bun Tools/OverlaySystem.ts --config-root ` first to preview, then `--apply`. It overwrites only system-owned paths (hooks, skills, agents, LIFEOS/{TOOLS,DOCUMENTATION,ALGORITHM,RULES,PULSE}, CLAUDE.md, the system prompt), never touches `USER/`, `LIFEOS/MEMORY/`, or `settings.json`, never deletes, skips symlinks, and writes `VERSION` last (only on a fully successful apply, so a partial update can't claim the new version). It backs up an existing CLAUDE.md and system prompt to a timestamped `.pre-overlay-*.bak` before overwriting — read the tool's `backups`/`note` output and reconcile any local edits from those, since step 6's `ActivateImports.ts --apply` then re-activates the identity imports the fresh CLAUDE.md ships commented.