memory: snapshot — 3.2.0 migration complete, and a miss of my own worth keeping

All four notified seats re-declared within about twelve minutes and the
log went quiet. Five of five pane routes now carry the guard fields, and
delivery is confirmed on a claude seat, a pi seat and a grok seat.

Two findings survive the close-out. The herald's exclusion reason is
false for the migration case -- every declaring process was alive and
four days old with no pid wrap, and the real cause is simply that the
route predates the fields the guard needs. And the uv trap stands as the
thing most likely to bite the next person.

The third is mine. I raised non-Claude pane delivery with forseti as an
open risk on their release when forseti had personally measured it days
earlier, on the exact seats in question, and the resulting matrix is what
characterised the settle bug they fixed. The error was not caution, it
was calling something open without checking whether it was already
settled, with the peers who knew right in front of me. Recorded because
"I don't know" and "this is an open risk" are different claims and I made
the second when only the first was true.

Still open with forseti: the uv --force runbook fix, an exclusion-message
third branch, --discover-pid against a non-Claude process tree, the
one-tick latency note, and status not being durable evidence.
This commit is contained in:
2026-09-01 22:28:13 -07:00
parent 2d2c88e43c
commit 28dd516be1
2 changed files with 78 additions and 52 deletions
@@ -106,43 +106,76 @@ 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 ROUTESthe herald's stated reason is FALSE, and all four are non-Claude
## ✅ MIGRATION COMPLETE — 5/5 pane routes pinned by 22:26, all four re-declared in ~12 min
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:
Operator directed notification; all four told individually with their own measured pid, pane
and start time. Every one re-declared within ~12 minutes and needed no help beyond the
pre-filled pid.
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
handle pid started_at command status
bil-smithy-dev 98493 1713267 kimi push, poked via pane
dvalin-smithy-dev 96050 1691681 grok push
eitri-smithy-dev 103662 1752089 node/codex push
regin-smithy-dev 96864 1700952 pi push, poked via pane
infra-ops 2175612 38608652 claude push, poked via pane
**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.**
Zero stale routes; last exclusion line 22:25:01, everything after is `poked <handle> via pane`.
**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:
## ⚠ FINDING — the herald's exclusion reason is FALSE for the migration case
- **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.
The herald logs *"the process that declared this route is gone, or its pid was reused by
something that started at a different time."* **Neither disjunct was true for any of the
four.** Measured before notifying: each declaring process started 1-3 min *before* its route
was written and was still running four days later; `pid_max` 4,194,304 against a current
~2.86M, so no wrap and no reuse to suspect. bil-smithy-dev independently confirmed it against
pid 98493.
⚠ 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.
Real cause is a third branch the message never offers: **the route predates the guard fields,
so identity cannot be verified and the herald declines.** Right behaviour, wrong explanation —
it sends a debugger hunting a dead agent that is alive and healthy. ⚠ **Do not trust that log
line at face value.** Raised with forseti with a suggested third branch.
## ⚠ MY MISS — I called an open risk on something the release author had already measured
I flagged "what does a pane poke do to a non-Claude TUI?" to forseti as an **open risk on the
release**. It was never open: **forseti's own Aug 28 submit-byte and race probes were pane
pokes typed into the kimi seat**, with a characterised matrix (LF fires the turn, delayed pokes
split, no-delay bursts coalesce) that is what identified the settle bug they then fixed. regin
had also smoke-tested 3.0.3 on the `pi` seat.
**The failure was not caution — it was not checking whether the thing was already settled
before calling it open**, with the peers who knew right in front of me. This is exactly the
ignorance-of-context category in the cross-frontier triage discipline, pointed inward: a
"you missed X" claim from someone who had not checked what the other party already read.
**"I don't know" and "this is an open risk on the release" are different claims.** Saying the
first was honest; asserting the second was not warranted. Retracted with forseti and with all
three seats. → [[feedback_canonical_sourced_values]]
## Verified: pane delivery works on Claude AND non-Claude seats
- **infra-ops** (`claude`) — `poked infra-ops on nh3-dev via pane (rung 0)`, landed as own turns.
- **regin-smithy-dev** (`pi`) — first **3.2.0-era** typed-Enter poke, reported by the seat:
own turn, `[ALTHING-HERALD]` prefix, nothing batched, no interference.
- **dvalin-smithy-dev** (`grok`) — pre-3.2.0 pokes landed as own submitted turns, no leftover
unsubmitted text.
## ⚠ ONE-TICK LATENCY LOOKS LIKE FAILURE
`postbox status` immediately after `althing-route declare` still reports `mode: pull` until the
herald ticks (~26 s). Two of four hit it. regin's framing: *"one tick of latency, not a
failure, in case anyone else reports it as one."* Asked forseti for a line in the skill.
## Open with forseti (nothing blocking)
1. `uv tool install .` runbook fix (`--force`) — the one that would bite the next person.
2. Exclusion-message third branch.
3. **`--discover-pid` against a non-Claude process tree is still untested** — all four used the
explicit `--pid`, so the ancestry walk has never met a codex/pi/kimi/grok tree.
4. One-tick-latency note in the skill.
5. `postbox status` push/reachable is not durable evidence.
**Withdrawn:** non-Claude delivery risk (was forseti's own prior work).
**Moot:** log back-off — zero stale routes, the log went quiet on its own.
## Rollback (unused)
+14 -21
View File
@@ -135,27 +135,20 @@ _As of 2026-09-01 — **the GX10 is on the operator's desk, NOT racked. Standing
instead**, which is the power answer rather than a power triage. Do not relaunch on ana-ml2
without deciding that first. Exactly TWO 3c launches, only one died.
`persistent-memory.d/2026-08-27-run3c-launch-count-reconstruction.md`
- **🟢 ALTHING 3.2.0 DEPLOYED on nh3-dev (2026-09-01 22:13).** forseti authored, infra-ops
deployed: `uv tool install --force .` (3.1.2 -> 3.2.0, **7** binaries — `althing-route` is
the new one the SessionStart hook calls by name), herald restart, skill sync. Pane-poking
replaces detached waiters because **CC 2.1.257 reaps detached tasks when the seat sits in
`shell`** — corroborated by our own waiter dying with status `killed` 30 min earlier.
**`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>`. **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
after it had reported `push`/`reachable`. **A green `postbox status` is not durable evidence
of monitoring, and re-arming in a loop is not a fix.**
`persistent-memory.d/2026-09-01-althing-320-deploy.md`
- **🟢 ALTHING 3.2.0 DEPLOYED + MIGRATION COMPLETE on nh3-dev (2026-09-01 22:13-22:26).**
forseti authored, infra-ops deployed; **5/5 pane routes pinned**, all four affected seats
re-declared within ~12 min of individual notice, log clean. Pane-poking replaces detached
waiters because **CC 2.1.257 reaps detached tasks when the seat sits in `shell`**.
**`uv tool install .` is a SILENT NO-OP on reinstall** — matches the source *spec*, not
contents; exits 0 having done nothing. **Always `--force` from a local path.**
⚠ **The herald's exclusion reason ("process gone, or pid reused") is FALSE for the migration
case** — all four declaring processes were alive 4 days, no pid wrap; real cause is the route
predating the guard fields. Don't debug a dead agent that isn't.
**My miss:** I called non-Claude pane delivery an "open risk" when forseti had personally
measured it on Aug 28 — didn't check whether it was already settled before calling it open.
Delivery now confirmed on `claude`, `pi` and `grok` seats.
⚠ One-tick latency after `declare` reads as failure; `--discover-pid` on a non-Claude process
tree remains untested. → `persistent-memory.d/2026-09-01-althing-320-deploy.md`
- **✅ A6000 window CLOSED 2026-09-01 — operator freed ComfyUI's VRAM instead of anyone
stopping it.** ⚠ It was a **model unload, not a stop**: `comfyui` still up 8 days, same pid,
HTTP 200, 18,500 -> 612 MiB. ⚠ **The resulting ~43.8 GB free is a snapshot, not a floor**