fix(acpmux): erase persisted peer tails on sign-out

Merged
TE
3d ago
+277-4

Signing out currently clears the in-memory pane tails but leaves acpmux's persisted peer copies on this machine. Clear those copies after Cloud links stop, including copies from peers whose leases already ended. A Rust generation barrier prevents queued or late replies from the previous peers from recreating them. If the daemon is stopped, the same erasure runs under its exclusive disk lock without starting it.

Leo requested: “the text shows up right on click but the actual thing loads a second later … but it's just text / from folders / on your machine / you should be able to simply see the text rendered instantly wherever it is” and “even for remote things it should be fast”. This is the sign-out privacy prerequisite for persisted remote tails. That request supersedes the old in-memory-only pane-tail decision. Normal peer disconnects still keep their offline copies; explicit sign-out erases all of them. No synchronization or new persistence location is added.

Tests cover queued capture deletion, late old-instance rejection, new-instance reuse, unread previous-run files, offline lock exclusion, and local-only/idempotent RPC access. Independent Claude Opus 5.5 medium review passed at a600d933771ac3a77e8cc92114d1e5accaa9b463. App compile passed at that head (62 seconds, job 09cc9e2b9dea376d37cd47f0). The test-only commit failed the new RPC test with Method not found (step fd8291806aa4f0ea09a189d1); the implementation passed 66 snapshot tests and its RPC access/idempotence test (run 41593765399). Final-head run 41600588201 passed all 66 snapshot tests and the RPC access/idempotence test. Its all-targets clippy step reports the existing single_element_loop at daemon/exe_path_tests.rs:52 (introduced by base #29063); that file and the Rust toolchain are byte-identical on base and head. The normal PR clippy check passes. All eight web/react-apps-base-check verdicts are green. Inventory test_event_stream_drift_is_rejected fails identically on base 39ca8ed627c with selection-changed missing stream metadata.

MetricBeforeAfterDeltaHarness/run link
Chat-switch latencyUnchanged by this cleanup-only PRUnchangedNo render-path changeParent instant-switch measurement: https://github.com/manaflow-ai/cmuxterm-hq/issues/6338

The cold-long-chat scene and before/after switching measurements belong to the companion early-tail rendering change; this PR changes sign-out behavior only and has no visual state to capture.

Risk: deletion is intentionally local-only and errors are reported without preventing auth revocation. A failed filesystem removal remains on the daemon's existing retry queue; the CLI refuses offline deletion while any writer holds the daemon lock.
🤖 Generated with Codex

Agent session: agent session