diff --git a/persistent-memory.d/2026-09-01-althing-320-deploy.md b/persistent-memory.d/2026-09-01-althing-320-deploy.md index 50465d1..a759c9e 100644 --- a/persistent-memory.d/2026-09-01-althing-320-deploy.md +++ b/persistent-memory.d/2026-09-01-althing-320-deploy.md @@ -106,6 +106,44 @@ confirming it is up."** Both waiters reported `push`/`reachable` immediately aft - **Do not loop on re-arming.** Two kills is the pattern; declare a pane route instead. Raised both consequences with forseti on the deploy thread. +## ⚠ THE FOUR REVOKED ROUTES — the herald's stated reason is FALSE, and all four are non-Claude + +Operator directed notification (2026-09-01); all four told individually with their own pid, +pane and start time. Measured **before** writing, which is what turned up both findings: + + handle pid declaring proc started alive running + bil-smithy-dev 98493 Aug 28 10:33:02 4d11h kimi + dvalin-smithy-dev 96050 Aug 28 10:29:26 4d11h grok + eitri-smithy-dev 103662 Aug 28 10:39:30 4d11h codex + regin-smithy-dev 96864 Aug 28 10:30:59 4d11h pi + +**FINDING 1 — the exclusion message misdescribes the migration case.** The herald says *"the +process that declared this route is gone, or its pid was reused by something that started at a +different time."* **Neither disjunct is true for any of the four.** Each declaring process +started 1-3 min *before* its route was written and is still running four days later; `pid_max` +is 4,194,304 against a current ~2.86M, so the counter has not wrapped and there is no reuse to +suspect. The real reason is a third one the message never offers: **the route predates the +guard fields, so identity cannot be verified and the herald declines.** Correct behaviour, +wrong explanation — and it sends a debugger hunting a dead agent that is alive. Raised with +forseti with a suggested third branch. ⚠ **Do not trust that log line at face value.** + +**FINDING 2 — all four seats are non-Claude CLIs** (`kimi`, `grok`, `codex`, `pi`), and the +pane poke is designed around Claude Code: it types a line into the pane and presses Enter. +Two things unverified, both raised with forseti and stated plainly to the four rather than +papered over: + +- **Does `--discover-pid` recognise a non-Claude process tree?** It walked to `claude` + correctly for infra-ops. Unknown for a `codex` or `pi` tree. Sidestepped by handing each + agent their measured pid (`althing-route declare --pid `) — but a fresh agent following + the skill reaches for `--discover-pid` first. +- **What does a pane poke do to a non-Claude TUI?** Might be input; might be a keystroke the + TUI did not expect. Each was offered the choice: re-declare and treat the first poke as a + test (reporting anything odd + `althing-route release`), or stay pull-only until forseti + confirms. Not decided for them. + +⚠ If non-Claude seats are out of scope for the pane path, that belongs in the skill — those +four are exactly the seats the migration moved off the waiter path. + ## Rollback (unused) `uv tool install althing-core==3.1.2` restores the six binaries; the SessionStart hook returns diff --git a/persistent-memory.md b/persistent-memory.md index 253351a..f17a48a 100644 --- a/persistent-memory.md +++ b/persistent-memory.md @@ -143,8 +143,13 @@ _As of 2026-09-01 — **the GX10 is on the operator's desk, NOT racked. Standing ⚠ **`uv tool install .` is a SILENT NO-OP on reinstall** — uv matches the source *spec*, not its contents; exits 0 having done nothing. **Always `--force` from a local path.** ⚠ 4 pane routes revoked by the new guards (bil-/dvalin-/eitri-/regin-smithy-dev); they - re-declare with `althing-route declare --pid `. **Deliberately not notified** (no - unsolicited fleet broadcast) — operator's call. + re-declare with `althing-route declare --pid `. **All four notified individually + 2026-09-01 on operator direction.** ⚠ Two findings from measuring first: the herald's + exclusion reason ("process gone, or pid reused") is **FALSE for the migration case** — all + four declaring processes are alive 4 days, no pid wrap; the real cause is the route + predating the guard fields. And **all four seats are non-Claude CLIs** (kimi/grok/codex/pi) + while the pane poke types into a Claude Code pane — `--discover-pid` and poke behaviour + against a non-Claude TUI are both UNVERIFIED. Both raised with forseti. ⚠ **infra-ops now runs on a PANE ROUTE, not a waiter** (`althing-route declare --discover-pid` — walks to the long-lived `claude` pid, never `$$`). The reap killed our `althing-listen` **twice in one session, the second within minutes of arming**, each time