From 4553418a65b77f3d9a223d6bbc1a41e525274493 Mon Sep 17 00:00:00 2001 From: HiFiGuy <34317110+hifiguy@users.noreply.github.com> Date: Fri, 11 Sep 2026 15:36:08 -0400 Subject: [PATCH] docs(Update): correct which update legs work offline Update.md's "Network unreachable" branch says to re-run "the additive legs that work from the on-disk skill (steps 4-6)", singling out step 3 as the only one needing a fetched payload. Steps 4 and 5 do not work either. On an installed system install/ is bootstrap-only -- the doc says so itself one sentence later -- and: - step 4, InstallHooks.ts, reads install/hooks/hooks.json - step 5, ScaffoldUser.ts, reads install/USER/ Neither exists in a bootstrap-only payload, so both exit ok:false. Only step 6, ActivateImports.ts, runs offline; it reads CLAUDE.md, not the payload. Reproduced clean-room against the v7.40.4 release alone -- skill-root set to the installed copy it ships (LifeOS/install/skills/LifeOS), config-root a scratch dir holding only a CLAUDE.md copied from install/CLAUDE.template.md: InstallHooks.ts -> ok:false payload hooks.json not found ScaffoldUser.ts -> ok:false template USER not found ActivateImports.ts -> ok:true OverlaySystem.ts -> ok:false bootstrap-only blocker Three of the four refuse; the doc predicts one. The wording now names step 6 as the only offline leg, says steps 3-5 all require the fetch, and quotes the two additional refusal messages so they read as expected behaviour rather than a broken install. Applied to both copies of the file, byte-identical on main: LifeOS/Workflows/Update.md and the nested installed copy at LifeOS/install/skills/LifeOS/Workflows/Update.md. --- LifeOS/Workflows/Update.md | 2 +- LifeOS/install/skills/LifeOS/Workflows/Update.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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.