ops(svos): v0.0.18 staged on nh3-svos (kernel 0.0.18, interface 0.0.7, UI 0.0.22); cutover playbook ready, gated on the tag reaching origin and Prime at the board
This commit is contained in:
@@ -122,6 +122,7 @@ _As of 2026-10-18 ~2125 PT. The newest subsection is first; older subsections ca
|
|||||||
|
|
||||||
- **Nothing is mid-action.** No ops-log claims held, no background watchers. eshpfi `main` is pushed (standing push since 2026-10-13); vh/worldtree-instance-configs `main` also has STANDING push since 2026-10-16 (Prime; auto-memory `feedback_git_autonomous`). On Prime's word ~2120 10-18: svoperatingsystem `main` + tag `v0.0.17` (15c2d04) and dotfiles `f909dcf` pushed. ⚠ The working tree and index are shared with infra-hermes, albok-dev and subagents: commit with `git commit -- <paths>` and read `git log origin/main..main` before pushing. `graphify-out/GRAPH_REPORT.md` stays modified on purpose.
|
- **Nothing is mid-action.** No ops-log claims held, no background watchers. eshpfi `main` is pushed (standing push since 2026-10-13); vh/worldtree-instance-configs `main` also has STANDING push since 2026-10-16 (Prime; auto-memory `feedback_git_autonomous`). On Prime's word ~2120 10-18: svoperatingsystem `main` + tag `v0.0.17` (15c2d04) and dotfiles `f909dcf` pushed. ⚠ The working tree and index are shared with infra-hermes, albok-dev and subagents: commit with `git commit -- <paths>` and read `git log origin/main..main` before pushing. `graphify-out/GRAPH_REPORT.md` stays modified on purpose.
|
||||||
- **SVOS v0.0.17 (15c2d04) LIVE since 10-18 2255** (Prime's "deploy now" 2235 via svos-dev, thread `01M595YP8R62Y665C38MHPH6YX`): kernel 0.0.17 + UI 0.0.21 on nh3-svos, config gen `29bc36bf074b8245` (the six runtimes' prompt/working/window), voice `utterance_seconds = 60`; nh3-dev `current → 15c2d04`, only svos-terminal 0.0.6 restarted. No card: terminal revision 6 changes only `version`, so it pinned silently. Verified: 13 `seat/activity_changed` events at 2255:13 (ops-infra working = the positive control, 12 waiting; dev-ldp stays unknown, its 14-day-old claude matches neither mark). Not verified by infra-ops: GET /seats (needs a principal) and the hero "Fleet · working · N" (Prime's eyes). Rollback: servers/nh3-svos/README.md § Release 15c2d04.
|
- **SVOS v0.0.17 (15c2d04) LIVE since 10-18 2255** (Prime's "deploy now" 2235 via svos-dev, thread `01M595YP8R62Y665C38MHPH6YX`): kernel 0.0.17 + UI 0.0.21 on nh3-svos, config gen `29bc36bf074b8245` (the six runtimes' prompt/working/window), voice `utterance_seconds = 60`; nh3-dev `current → 15c2d04`, only svos-terminal 0.0.6 restarted. No card: terminal revision 6 changes only `version`, so it pinned silently. Verified: 13 `seat/activity_changed` events at 2255:13 (ops-infra working = the positive control, 12 waiting; dev-ldp stays unknown, its 14-day-old claude matches neither mark). Not verified by infra-ops: GET /seats (needs a principal) and the hero "Fleet · working · N" (Prime's eyes). Rollback: servers/nh3-svos/README.md § Release 15c2d04.
|
||||||
|
- **SVOS v0.0.18 (6d4cb1c, U20 settings) STAGED on nh3-svos 10-18 2324, NOT cut over** (svos-dev thread `01M59D7NTZNN75SRP0M4ZQF91A`): kit built from the LOCAL tag (origin had only 15c2d04 at 2323); `/opt/svos/releases/6d4cb1c` installed, check-config ok, current still 15c2d04. Cutover = `playbooks/svos-releases/nh3-svos-6d4cb1c-v0.0.18.yaml` (current + front door, then ONLY svos-interface restarts). Two gates: origin's v0.0.18 must name 6d4cb1c64de0 (`git ls-remote`), and Prime must be AT THE BOARD — app-interface 0.0.7 adds verbs, so its card holds the whole interface (wrong-revision) until approved; 15-min expiry. After it: Prime's two grants on ns:interface-settings (read; write autonomous).
|
||||||
- **SVOS (before v0.0.17): v0.0.16 `b51aa5e` on nh3-svos (10-18 1634–2254)** with app-judge (drafting gen-large; six local task models; `[tasks].judge` on, gen `13241a40`); nh3-dev on `3726d73`. Card audio VERIFIED 10-18 (3/3, 4.5–5.5 s). voice.toml `utterance_seconds` was 30 until v0.0.17 (the old web client refused >30); 60 since. **Open:** one drafted scratch task from /tasks (Draft → launch → approve; expect routing, admitted, routed, launching, started) — verifies v0.0.14's gate, the hermes query-file route and U19; Prime must launch it (every spawn is an owner card). Details + rollback material: servers/nh3-svos/README.md.
|
- **SVOS (before v0.0.17): v0.0.16 `b51aa5e` on nh3-svos (10-18 1634–2254)** with app-judge (drafting gen-large; six local task models; `[tasks].judge` on, gen `13241a40`); nh3-dev on `3726d73`. Card audio VERIFIED 10-18 (3/3, 4.5–5.5 s). voice.toml `utterance_seconds` was 30 until v0.0.17 (the old web client refused >30); 60 since. **Open:** one drafted scratch task from /tasks (Draft → launch → approve; expect routing, admitted, routed, launching, started) — verifies v0.0.14's gate, the hermes query-file route and U19; Prime must launch it (every spawn is an owner card). Details + rollback material: servers/nh3-svos/README.md.
|
||||||
- **Worldtree:** all three on v1.0.0b195 `a416ac01c5a2` since 1112 10-16; Matrix bridge profile-gated (`COMPOSE_PROFILES=matrix` on demo + personal box .env; pinned none, renders api only). Retired-config strips DONE (demo `2240110`, personal `4d1aae2`). ⚠ Pinned's seeded host config dir `/opt/worldtree-pinned/config` is NOT tracked in vh/worldtree-instance-configs and `deploy-wt-config` refuses pinned: capture it. The daily memory gate keeps its harness scratch since 10-18 (`--keep-data`, `~/.local/state/wt-memory-gate-batch/scratch/<batch>/`, 14-day user tmpfiles); 10-18 PASS. Keep defaults `library:` (thread `01M4WA58P2M001K1420NN72WFM`).
|
- **Worldtree:** all three on v1.0.0b195 `a416ac01c5a2` since 1112 10-16; Matrix bridge profile-gated (`COMPOSE_PROFILES=matrix` on demo + personal box .env; pinned none, renders api only). Retired-config strips DONE (demo `2240110`, personal `4d1aae2`). ⚠ Pinned's seeded host config dir `/opt/worldtree-pinned/config` is NOT tracked in vh/worldtree-instance-configs and `deploy-wt-config` refuses pinned: capture it. The daily memory gate keeps its harness scratch since 10-18 (`--keep-data`, `~/.local/state/wt-memory-gate-batch/scratch/<batch>/`, 14-day user tmpfiles); 10-18 PASS. Keep defaults `library:` (thread `01M4WA58P2M001K1420NN72WFM`).
|
||||||
- **Decision seat = h2o-lightning-4b (production, Prime 1805 10-13: fix forward, no INC fallback).** The one open margin is the judge's personal-question reading (h2o 18 vs INC 6 on fleet/memory); albok-dev re-fits it forward in small batches on the live seat.
|
- **Decision seat = h2o-lightning-4b (production, Prime 1805 10-13: fix forward, no INC fallback).** The one open margin is the judge's personal-question reading (h2o 18 vs INC 6 on fleet/memory); albok-dev re-fits it forward in small batches on the live seat.
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# nh3-svos: STAGE SVOS v0.0.18 (6d4cb1c) beside the live release. Installs into /opt/svos/releases/6d4cb1c and runs the
|
||||||
|
# new kernel's check-config against the live configuration. Does NOT switch current, stop or start anything.
|
||||||
|
# svos-dev's request (thread 01M59D7NTZNN75SRP0M4ZQF91A): kernel 0.0.18 (version bump only), app-interface 0.0.7 (U20
|
||||||
|
# settings), UI 0.0.22; everything else carried from 15c2d04. Built from the LOCAL tag before Prime's push; the cutover
|
||||||
|
# (nh3-svos-6d4cb1c-v0.0.18.yaml) first checks that origin's v0.0.18 names the same commit.
|
||||||
|
steps:
|
||||||
|
- name: Private staging dir
|
||||||
|
shell: install -d -m 0700 /tmp/svos-stage-6d4cb1c
|
||||||
|
- {name: stage release, upload: {src: /tmp/claude-1000/-home-lkraven-development-eshpfi-management/e0be18fd-0734-4786-b933-904f0a74d2a2/scratchpad/svos-6d4cb1c/svos-release-6d4cb1c.tar.gz, dest: /tmp/svos-stage-6d4cb1c/release.tar.gz, mode: "0644"}}
|
||||||
|
- {name: stage uv, upload: {src: /home/lkraven/bin/uv, dest: /tmp/svos-stage-6d4cb1c/uv, mode: "0755"}}
|
||||||
|
- {name: stage installer, upload: {src: /tmp/claude-1000/-home-lkraven-development-eshpfi-management/e0be18fd-0734-4786-b933-904f0a74d2a2/scratchpad/svos-6d4cb1c/install-release.py, dest: /tmp/svos-stage-6d4cb1c/install-release.py, mode: "0644"}}
|
||||||
|
- name: Verify staged hashes
|
||||||
|
shell: cd /tmp/svos-stage-6d4cb1c && printf '%s %s\n' 1aec2aa30360aebd369c8930350596e77636eb5d23716374088dc6fc85418e9e release.tar.gz 83aa128da93e168283ed32cf75cd819fe17b135b3fc1f7ccb3c912eec198d9fb uv | sha256sum -c -
|
||||||
|
changed_when: "false"
|
||||||
|
- name: Install release 6d4cb1c beside the live one (current NOT switched)
|
||||||
|
sudo: true
|
||||||
|
shell: python3 /tmp/svos-stage-6d4cb1c/install-release.py
|
||||||
|
creates: /opt/svos/releases/6d4cb1c/apps-env/pyvenv.cfg
|
||||||
|
verify:
|
||||||
|
- name: New kernel 0.0.18 accepts the live configuration as it is
|
||||||
|
sudo: true
|
||||||
|
shell: runuser -u svc-svos -- /opt/svos/releases/6d4cb1c/kernel-env/bin/svos-kernel check-config --data-root /var/lib/svos
|
||||||
|
changed_when: "false"
|
||||||
|
- name: current still points at the live release
|
||||||
|
shell: readlink /opt/svos/current
|
||||||
|
changed_when: "false"
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
# nh3-svos -> SVOS v0.0.18 (6d4cb1c): app-interface 0.0.7 (U20 settings: verbs settings + setting, namespace
|
||||||
|
# interface-settings) and UI 0.0.22; kernel 0.0.18 is a version bump with no code change. svos-dev's request, thread
|
||||||
|
# 01M59D7NTZNN75SRP0M4ZQF91A. PRE-REQS: nh3-svos-6d4cb1c-v0.0.18-stage.yaml; origin's v0.0.18 == 6d4cb1c64de0 (checked
|
||||||
|
# on nh3-dev before this runs: git ls-remote); Prime AT THE BOARD - the interface's new manifest raises a held card, and
|
||||||
|
# until he approves it every interface verb answers wrong-revision (the card expires in 15 min; a restart re-raises it).
|
||||||
|
# Order per svos-dev: release (current + front door: UI 0.0.22), then ONLY svos-interface restarts. The kernel, knowledge,
|
||||||
|
# judge and voice keep running 15c2d04's code (kernel 0.0.17 = 0.0.18 in code) until their next restart. No config change.
|
||||||
|
# AFTER: Prime approves the card, then his two runtime grants on ns:interface-settings from the SVOS page's console.
|
||||||
|
steps:
|
||||||
|
- name: Pre-reqs present (release staged; config unchanged since the stage check)
|
||||||
|
sudo: true
|
||||||
|
shell: test -f /opt/svos/releases/6d4cb1c/apps-env/bin/svos-interface && readlink /opt/svos/current && runuser -u svc-svos -- /opt/svos/releases/6d4cb1c/kernel-env/bin/svos-kernel check-config --data-root /var/lib/svos
|
||||||
|
changed_when: "false"
|
||||||
|
- name: Online backup to /var/lib/svos/backup/pre-6d4cb1c (sqlite backup API; svos.db and the interface's stores)
|
||||||
|
sudo: true
|
||||||
|
shell: |
|
||||||
|
set -e
|
||||||
|
d=/var/lib/svos/backup/pre-6d4cb1c
|
||||||
|
runuser -u svc-svos -- install -d -m 0700 $d
|
||||||
|
runuser -u svc-svos -- python3 -c "
|
||||||
|
import sqlite3, glob, os
|
||||||
|
for src in ['/var/lib/svos/state/svos.db'] + sorted(glob.glob('/var/lib/svos/state/apps/interface/*.sqlite3')):
|
||||||
|
dst = '$d/' + os.path.basename(src)
|
||||||
|
s = sqlite3.connect('file:' + src + '?mode=ro', uri=True); t = sqlite3.connect(dst); s.backup(t); t.close(); s.close()
|
||||||
|
c = sqlite3.connect('file:' + dst + '?mode=ro', uri=True); print(os.path.basename(src), 'integrity', c.execute('pragma integrity_check').fetchone()[0], 'user_version', c.execute('pragma user_version').fetchone()[0])"
|
||||||
|
- name: Switch current to 6d4cb1c
|
||||||
|
sudo: true
|
||||||
|
shell: ln -sfn /opt/svos/releases/6d4cb1c /opt/svos/current.new && chgrp -h svc-svos /opt/svos/current.new && mv -T /opt/svos/current.new /opt/svos/current && readlink /opt/svos/current
|
||||||
|
- name: Front door inventory (UI 0.0.22 live; 15c2d04 becomes previous)
|
||||||
|
sudo: true
|
||||||
|
shell: /usr/local/sbin/svos-front-inventory 2>&1 | grep -E 'GENERATED|updated|root \*|path /assets' | head -4
|
||||||
|
- name: Restart ONLY svos-interface (raises the held card)
|
||||||
|
sudo: true
|
||||||
|
shell: |
|
||||||
|
systemctl restart svos-interface; sleep 8; systemctl is-active svos-interface
|
||||||
|
journalctl -u svos-interface --since "-30s" --no-pager -o cat | grep -iE "manifest|revision|card|held|error" | tail -6 | cut -c1-200 || true
|
||||||
|
verify:
|
||||||
|
- name: Interface runs 6d4cb1c
|
||||||
|
sudo: true
|
||||||
|
shell: pid=$(systemctl show svos-interface -p MainPID --value); grep -q /opt/svos/releases/6d4cb1c /proc/$pid/maps && echo "interface pid $pid on 6d4cb1c"
|
||||||
|
changed_when: "false"
|
||||||
|
- name: The interface's new manifest revision and its card (pending until Prime approves)
|
||||||
|
sudo: true
|
||||||
|
shell: |
|
||||||
|
python3 -c "
|
||||||
|
import sqlite3
|
||||||
|
c = sqlite3.connect('file:/var/lib/svos/state/svos.db?mode=ro', uri=True)
|
||||||
|
for r in c.execute(\"select slug, revision, substr(sha256,1,12), state, received_at, decided_at from app_manifests where slug='app-interface' order by revision desc limit 2\"): print(r)
|
||||||
|
for r in c.execute(\"select id, kind, slug, manifest_revision, state, created_at, expires_at from cards where slug='app-interface' order by created_at desc limit 1\"): print(r)"
|
||||||
|
changed_when: "false"
|
||||||
|
- name: Front door inventory current
|
||||||
|
sudo: true
|
||||||
|
shell: /usr/local/sbin/svos-front-inventory --check
|
||||||
|
changed_when: "false"
|
||||||
Reference in New Issue
Block a user