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 0dba47d..21df35d 100644 --- a/persistent-memory.d/2026-09-01-althing-320-deploy.md +++ b/persistent-memory.d/2026-09-01-althing-320-deploy.md @@ -356,6 +356,36 @@ Write-without-Enter beats the status quo for **neither**: for bil it removes the the exact thing they accepted risk to keep; for regin it removes only the submission, leaving the operator to delete herald text from his in-flight sentences routinely. +## ⚠⚠ DO NOT ARM `althing-listen` ON A PANE-ROUTED SEAT — `/althing:monitor` IS STALE + +The `/althing:monitor` slash command is a **different artifact from the canonical skill**, and +`scripts/sync_skill.sh` does NOT cover it: + + canonical althing/skills/althing/SKILL.md -> 3.2.2, correct, synced + plugin cmd ~/.claude/plugins/cache/althing/althing/0.0.1/commands/monitor.md + -> pre-3.2.0 text, ZERO occurrences of "pane", never synced + +⚠ **Following it verbatim on a pane-routed seat is ACTIVE HARM, not stale docs.** The canonical +skill's precedence rule: *"**A live waiter wins.** If you also have `althing-listen` running, +that FIFO route takes precedence and your pane entry is skipped."* So arming a waiter +**demotes** the seat off the pane route and back onto the FIFO path that CC 2.1.257 reaps — +the path that died **twice in one session** here. The command does not warn; it predates the +problem. **Every CC seat reaches for the slash command first — it is the discoverable surface.** + +**On this seat: declined to arm, route left intact.** Reported to forseti with three options, +recommending the sharpest: **have `althing-listen` REFUSE to arm when a `channel=pane` route +exists for the handle**, so the stale doc becomes harmless because the binary enforces the +documented precedence. The doc-only fixes rely on a reader noticing. + +## ⚠ A STALE WAITER LOCK IS A SILENT PERMANENT OUTAGE THAT REPORTS HEALTHY + +`~/.althing/wake-listener-.lock` survived the waiter's reap (held dead pid 2854412 from +22:16). A future `althing-listen` seeing it returns **exit 3 = "a waiter is already running"**, +whose documented response is *"do NOT drain, do NOT re-arm"*. So a stale lock converts a reap +into a **permanent monitoring outage that looks like correct behaviour.** Removed here (pid +verified dead, own handle, literal path). Suggested to forseti that the waiter clear a lock +whose pid is dead rather than trusting the file. + ## Rollback (unused) `uv tool install althing-core==3.1.2` restores the six binaries; the SessionStart hook returns