(activity): remote decay clears busy without claiming response-ready; PTY purge skips remote rows - #259
Merged
Conversation
… PTY purge skips remote rows setActivity gains opts.armReady (default true); remote-activity-ui's decay passes armReady:false since silence isn't proof a turn actually finished. updateRunningIndicators now skips dataset.remoteAlias rows and routes its local purge through session-activity's new purgeActivityFor.
devsuitup
added a commit
that referenced
this pull request
Sep 11, 2026
…efore a tmux attach (#262) A killed local CLI leaves its descriptor behind and read as busy until the app restarted; getStatus now re-probes the pid lazily, throttled. The remote inventory prints an ALIVE marker per descriptor from /proc so dead CLIs are dropped without a second ssh. The attach probe checks /proc/<pid>/cmdline is a claude CLI before attaching to a recycled pid, and probe/restore ssh calls get ConnectTimeout=5. Comment sweep on the activity files merged in #259.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Audit 2026-09-11, findings 3 and 7 (
.work-files/switchboard/audit-fable-2026-09-11.md, local note).Why
Since #248 the remote activity decay called
setActivity(id, false), which for a non-selected session armsresponseReadySessions— the green "finished, you have not looked" marker. Twenty seconds of transcript silence is not that: a long tool call, or a parent delegating to subagents, went "response ready" on every unviewed remote row. An adapter without a PTY can only say "stopped writing".Separately,
updateRunningIndicatorspurged busy / ready / attention state for every row without a local PTY whenever the PTY set changed — wiping remote spinners on any unrelated local start or stop — and was the last writer of those collections outsidesession-activity.js.What
setActivity(id, active, via, { armReady }): an explicit opt-out of the idle → response-ready transition. The remote decay and seed-decay pass{ armReady: false }; PTY callers unchanged.purgeActivityFor(id, via)insession-activity.jsis the only purge path;app.jscalls it and skips rows carryingdata-remote-alias(set bybuildSessionItem) — a remote row's busy state belongs to the remote adapter..cli-busynor.response-ready; a PTY-sourced idle still arms response-ready.Proof
Mutations: drop the
armReadyguard → remote decay test and the unit test red, PTY test green; drop the remote-row skip → the source-pin test red.task check: 1259 pass, 0 fail, 8 pre-existing skips.Comment trim to one-line pointers follows in the next batch (the machine is too loaded for another hook run right now; patch kept locally).