docs(memory): SVOS/Miranda fully live; bank two restart patterns from svos-dev

svos-dev restarted :8770 at 02:17 and both roster lines printed clean. Confirmed
from this side rather than taken on their word: :8770 answers 200 on the new pid,
an unauthenticated Bifrost dispatch gets 401, and Hermes reports 29 toolsets with
svos_miranda the sole enabled=True row.

Two patterns from their restart that generalise past this service.

A dry-run boot against the still-held port: start the new process while the old
one still owns the socket, and it proves every check above the bind before dying
on EADDRINUSE. Zero downtime, no commitment, and it turns a one-way restart into a
rehearsed one. Worth doing for any service whose startup validates before binding.

And a trap: SIGTERM released the port but left the process alive for 35 seconds,
needing SIGKILL. The port was free that entire time, so a script waiting on port
availability would have started the replacement alongside a still-running old
process. Kill by PID and wait on the PID, never on the port - a freed port is not
evidence of a dead process, the same way an unreachable post office is an outage
rather than an empty inbox.
This commit is contained in:
2026-09-15 02:20:10 -07:00
parent 406769e64b
commit 01f0014489
2 changed files with 31 additions and 0 deletions
@@ -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
+2
View File
@@ -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.