Twinned from https://github.com/cfsh/ninefold/issues/644 by tools/beads/import_github.py's reconcile pass.
Suggestions from ninefold-reviewer's review of #638. Advisory — #638 is CONVERGED and neither item blocks it. #642 was the previous round and is closed; all three of its items were folded into aeaaf06, verified in the diff.
1. supervisor() short-circuits to SUP_UNKNOWN when panes is None, so both cron carve-outs stop firing
tmux_panes() returns None when tmux list-panes -a exits non-zero — no server running, tmux not installed, no socket. supervisor() then returns Supervisor(SUP_UNKNOWN) *before* walking any ancestry, so CRON_COMMS is never consulted and no session can be classified SUP_CRON at all. Three consequences, all in the degraded mode where the tool should be more conservative rather than less:
audit()'s unclaimed sweep tests sups[agent.pid].kind == SUP_CRON, so the exemption added for #642.1 cannot fire — every in-flight review in its per-invocation ~/.ninefold-reviewer/worktrees/ path is UNREGISTERED drift again, which is exactly the finding-nobody-can-action that fix removed._judge_supervisors returns after the single TMUX-BLIND note, so the CRON-SESSION note that would have explained those rows is absent too. The reader gets drift with no counterweight._judge_row's co-tenancy exemption (hands_on = [a for a in occupants if sups[a.pid].kind != SUP_CRON]) is un-gated the same way, so two concurrent reviews dispatched into one clone read as DOUBLE-BOOKED — "they share a branch, a scratchpad and a tracked-prs.txt" — which is the documented-correct shape, not drift.Cron detection does not actually need tmux: the ancestry walk only needs ppid_of. Walking with an empty pane map when the listing failed, while still suppressing the pane-name claim and the NO-TMUX/EMPTY-TMUX findings, would keep TMUX-BLIND's honesty and restore both carve-outs.
Untested today in either direction: run_audit's panes=None default maps to {}, so no case reaches audit() with a real None except test_tmux_being_unlistable_claims_nothing_about_panes — and that fixture's board row claims the only agent, so UNREGISTERED never gets a chance to fire.
2. tools/office/README.md documents only half the cron carve-out
The gotcha *"A session with no tmux is not automatically orphaned"* still says only that cron sessions "are reported as a NOTE that says not to kill them". Since aeaaf06 they are also exempt from UNREGISTERED, and the CRON-SESSION note text in the code now names both facts ("no tmux pane, and no board row expected either"). One sentence in the README, so the doc and the note agree.
None.
No comments.