memory: snapshot — the four revoked routes are non-Claude, and the herald's reason is wrong

Operator directed that the four affected seats be told directly. Measured
their state before writing, which turned up two things worth more than
the notification itself.

The herald logs each exclusion as "the process that declared this route
is gone, or its pid was reused by something that started at a different
time." Neither is true for any of the four. Each declaring process
started minutes before its route was written and is still running four
days later, and pid_max is 4194304 against a current 2.86M so the counter
has not wrapped. The real cause is a third one the message never offers:
the route predates the guard fields, so identity cannot be verified. The
behaviour is right and the explanation is wrong, and it would send anyone
debugging it hunting a dead agent that is alive.

Separately, all four seats run non-Claude CLIs -- kimi, grok, codex and
pi -- while the pane poke is built around typing into a Claude Code pane.
Whether --discover-pid walks a non-Claude process tree, and what a poke
does to a non-Claude TUI, are both unverified. Each agent was given their
measured pid to sidestep the first, told plainly about the second, and
offered the choice between re-declaring as a test or staying pull-only.

Both findings raised with forseti.
This commit is contained in:
2026-09-01 22:23:43 -07:00
parent e014f756fb
commit 2d2c88e43c
2 changed files with 45 additions and 2 deletions
@@ -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 <n>`) — 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
+7 -2
View File
@@ -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 <pid>`. **Deliberately not notified** (no
unsolicited fleet broadcast) — operator's call.
re-declare with `althing-route declare --pid <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