diff --git a/persistent-memory.d/2026-09-15-svos-miranda-plugin-validation.md b/persistent-memory.d/2026-09-15-svos-miranda-plugin-validation.md index bb7f044..1bfa4fa 100644 --- a/persistent-memory.d/2026-09-15-svos-miranda-plugin-validation.md +++ b/persistent-memory.d/2026-09-15-svos-miranda-plugin-validation.md @@ -59,6 +59,35 @@ expected refusal — which looked like the plugin's collision reading was wrong. was not: doctor's sandbox holds no built-ins, so nothing was claimed and **my positive case was not positive.** Reported as untested rather than as a finding. +## ✅✅ FULLY LIVE 2026-09-15 02:17 — SVOS restarted, roster verified both ends + +svos-dev restarted `:8770` (pid 3931403; the pre-cutover process running since 09-09 is +gone) and both startup lines printed clean: + + hermes roster required: platform_toolsets[api_server] = ['svos_miranda'] ; + agent.disabled_toolsets NOT required + hermes roster verified: ('svos_miranda',) -> [the eight] + +**Independently confirmed from this side**, not taken on their word: `:8770` → 200, +pid matches, an unauthenticated Bifrost dispatch → **401** (wall armed), and Hermes +reports 29 toolsets with `svos_miranda` the sole `enabled=True`. + +### ⭐⭐ Two ops patterns from their restart — both generalise well past SVOS + +**1. Dry-run boot against the still-held port.** They ran `python -m server` while the +OLD process still held `:8770`. It printed both roster lines and restored the thread, +then died on `[Errno 98] address already in use`. **Every check above the bind proven, +zero downtime, before touching anything.** It converts a one-way restart into a +rehearsed one and costs nothing. Adopt for any service whose startup does meaningful +validation before it binds. + +**2. ⚠⚠ SIGTERM released the port but did NOT end the process.** It sat in shutdown for +**35 seconds** and needed SIGKILL — and **the port was free that whole time.** A script +that waits on the port would have started the replacement alongside a still-live old +process. ⭐ **Kill by PID and wait on the PID, never on the port.** Same family as +*an unreachable post office is an OUTAGE, not an empty inbox*: a freed port is not +evidence of a dead process. + ## ✅ LIVE 2026-09-15 02:10 — gateway restarted, plugin registered `GET /v1/toolsets` = **29 rows including `svos_miranda`**. An api_server session diff --git a/persistent-memory.md b/persistent-memory.md index 6d49967..f2b0349 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -177,6 +177,8 @@ hardened for ha-dev (`d1769ed` ff); `kb` KB-search tool (`68fa80f`). - `[2026-09-15]` **Parakeet STT live on fv-ml1 GPU 0, behind LiteLLM `ext-stt` / `whisper-1`.** ⚠ **Placed on GPU 3 first, which was wrong — operator caught it.** A ~800 MiB seat should ride the card with the most uncommitted headroom (GPU 0, util 0.88, ~13 GB spare), not put the first fingerprint on the one pristine 96 GB card: vLLM sizes KV cache against TOTAL VRAM, so any tenant on an empty card eats a future full-size seat's profiling margin (flash-next needs 93 of 96 GiB). **GPU 3 is now a deliberate reserve at 2 MiB.** Retargeted the existing `stacks/parakeet/` (sherpa-onnx + our own FastAPI wrapper) from irv-ml1; v3 int8, 25 languages. ⚠ **ORT's CUDA EP compiles kernels lazily and the first decode on sm_120 took 45.7 s** — every later call ~0.5 s; a startup warmup in `app.py` now absorbs it, so the first real request is 0.65 s instead of a 45 s hang that no client would wait through. GPU use was **verified by a process on GPU 3 (922 MiB), not by the `provider=cuda` log line**, because ORT falls back to CPU silently and still returns correct text. Silence → `""` (null control), known sentence → near-exact (positive control). → `persistent-memory.d/2026-09-15-parakeet-stt-fv-ml1.md` +- `[2026-09-15]` ⭐⭐ **Two restart patterns from svos-dev worth stealing: (a) DRY-RUN BOOT against the still-held port** — start the new process while the old one holds the socket; it proves every check above the bind and dies on `[Errno 98]`, so a one-way restart becomes a rehearsed one at zero cost. **(b) ⚠ SIGTERM freed the port but left the process alive for 35 s** — a script waiting on the port would have run two copies. **Kill by PID, wait on the PID, never on the port.** A freed port is not evidence of a dead process. + - `[2026-09-15]` ⭐ **`svos_miranda` ENABLED and LIVE in Hermes — but `agent.disabled_toolsets` is permanently OFF by operator ruling ("i dont want the tools disabled everywhere").** That key is a **global** end-of-pipeline subtraction, not api_server-scoped: measured 46 tools → 20 on a default session. It is also **unnecessary** — `platform_toolsets.api_server: [svos_miranda]` alone resolves an api_server session to exactly the 8 tools, write-klass absent. Gateway restarted 02:10 (PID 3107822→3901622, observed); `/v1/toolsets` now 29 rows incl. `svos_miranda`; operator's own surface verified intact at 46. ⚠ **SVOS must stop verifying against the GLOBAL roster before it restarts** — it will see 29 and refuse, by design now. → `persistent-memory.d/2026-09-15-svos-miranda-plugin-validation.md` - `[2026-09-15]` **irv-ml1 parakeet RETIRED; voice-studio STOPPED.** Both operator rulings. Parakeet lost tts-dev's bench to the FV seat at both clip lengths and to whisper-large-v3 at 6.24 s; no gateway alias depended on it and every other host reference was a port-register comment. voice-studio existed for the dots mint loop, which Breeze obsoleted 2026-09-06 — retired rather than repaired.