Fix pane watcher audit regressions#578
Merged
brickfrog merged 3 commits intoJun 13, 2026
Merged
Conversation
Owner
Author
|
Choir: GitHub Actions rollup reports all checks successful on the latest head — re-check review/merge policy on GitHub (not an approval or merge signal by itself). |
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.
Fixes Sarcasmotron audit receipt f2358fc8 for feature/pane-watcher-revival.
Closes audit finding 1 from receipt f2358fc8: apply_recovered_agent registered recovered agents but never reattached pane watching. Alive recovered agents with terminal targets now call watch_pane and the regression asserts watched_agents plus resolved pane id after recovery.
Closes audit findings 2 and 3 from receipt f2358fc8: pre-TDD leaf no-handoff still sent a LocalTerminalInput prod and the Prod/prodded_at machinery survived. The decision enum is now binary, pre-TDD escalates directly to the parent at the idle threshold, worker_no_handoff_prodded_at and reload serialization are deleted, and targeted tests assert nothing is sent to the leaf pane.
Closes audit finding 4 from receipt f2358fc8: src/runtime pane watcher used @exec through a native default. PaneWatcher::new is now hermetic with an empty host; the serve path continues injecting the native dump-screen adapter at the bin/server boundary, and src/runtime no longer imports choir/src/exec.
Closes audit finding 5 from receipt f2358fc8: missing host-observable live zellij dump-screen check. Added a self-skipping real exec integration test that creates a scratch tab only when ZELLIJ_SESSION_NAME points at a live session, resolves pane/tab ids, asserts dump-screen --pane-id returns text without changing query-tab-names output, and closes by tab id.
Also removes stale stop_subscribe naming in the pane-watch drop path.
Verified:
Verification
Generated by Choir from commands executed in the leaf workspace.
moon test --target nativemoon build src/bin/choir_lint --target native && _build/native/debug/build/src/bin/choir_lint/choir_lint.exe! grep -rEn "WorkerNoHandoffDecision::Prod|worker_no_handoff_prodded_at|_prod_text" src/! grep -rEn "@exec\.|choir/src/exec" src/runtime/