docs(nh3-dev): Hermes bearer rotation hold released
svos-dev split their Bifrost wall's HS256 signing key off the Hermes Bearer (svos main 7165272), so nh3-dev/hermes/api-server-key is free to rotate again. The previous note said do-not-rotate and would have made a future session refuse a legitimate rotation on stale grounds. Not rotating now: the key was minted today, is vaulted, and has never been exposed — rotation is a hygiene action with a trigger, and none applies. What changed is the capability, which is what the record needs to reflect. Also records two things for when the svos_miranda plugin arrives: it will reference the dispatch key rather than the Bearer (expected, not a defect), and its tools array is legitimately seven or eight entries because repo_read is conditional on a config block SVOS owns. A third number is a real fault.
This commit is contained in:
@@ -105,11 +105,22 @@ local Bash already executes here — no SSH-to-self needed for non-privileged wo
|
|||||||
present and unused; `provider: custom` is explicit so it is not a candidate,
|
present and unused; `provider: custom` is explicit so it is not a candidate,
|
||||||
and `hermes fallback list` is empty, so there is no degraded-mode route that
|
and `hermes fallback list` is empty, so there is no degraded-mode route that
|
||||||
quietly re-bills z.ai. Miranda fails rather than fails over if LiteLLM is down.
|
quietly re-bills z.ai. Miranda fails rather than fails over if LiteLLM is down.
|
||||||
- ⚠ **Do not rotate `nh3-dev/hermes/api-server-key` yet.** SVOS currently reuses
|
- **`nh3-dev/hermes/api-server-key` is free to rotate** (hold released
|
||||||
that value as the HS256 signing key on its Bifrost wall, so a rotation would
|
2026-09-14, svos main `7165272`). It had been locked: SVOS signed its own
|
||||||
401 every Miranda tool call. svos-dev is splitting theirs off (operator-
|
Bifrost wall's HS256 dispatch tokens with the same value, so a routine
|
||||||
approved 2026-09-14) and will confirm when it lands; rotation is safe after
|
rotation would have 401'd every Miranda tool call — silently, since losing
|
||||||
that, not before.
|
signature validity does not raise. SVOS now verifies against its own secret
|
||||||
|
(`SVOS_BIFROST_DISPATCH_KEY`, vaulted at `nh3-dev/svos/bifrost-dispatch-key`,
|
||||||
|
theirs — nothing here reads it), and the Bearer has exactly one job again.
|
||||||
|
Rotating it now only means svos-dev repoints `SVOS_HERMES_API_KEY`.
|
||||||
|
⚠ The invariant did not rot, its *precondition* did: "one shared secret" was
|
||||||
|
sound while SVOS owned both ends of the key and stopped being sound the moment
|
||||||
|
the runtime became externally managed. Worth remembering when any other peer
|
||||||
|
reuses a credential across a boundary we control.
|
||||||
|
⚠ When the `svos_miranda` plugin arrives for `hermes plugins validate`, it
|
||||||
|
will reference the **dispatch key, not the Bearer** — expected, not a defect.
|
||||||
|
Assert its per-row `tools` array has **seven or eight** entries (`repo_read` is
|
||||||
|
config-conditional on SVOS's side); any other number is a real fault.
|
||||||
- **bloom_music dev** — `~/development/bloom_music`; its `web/` test harness uses
|
- **bloom_music dev** — `~/development/bloom_music`; its `web/` test harness uses
|
||||||
Playwright headless Chromium for OSMD browser-geometry assertions.
|
Playwright headless Chromium for OSMD browser-geometry assertions.
|
||||||
- **The Booth** — ephemeral media drop board (`:8090`, `booth.service`), from
|
- **The Booth** — ephemeral media drop board (`:8090`, `booth.service`), from
|
||||||
|
|||||||
Reference in New Issue
Block a user