Follow-up to #222, carrying its F8/F9 half per the closure proposal. The grammar half of every item below is already green on psmux 3.3.8 (66cf613) (smoke tables, §2/§8); what is unproven is only the client-movement half, because a detached probe registers no client (#{session_attached} stayed 0 through a backgrounded psmux attach). This needs a human at a real console on Windows 11, with the #658 floor bump in place.
F8 — the attended pass (blocks F9)
F9 — switch_client's same-session residue (needs F8's measurements first)
With psmux#483 live, a same-session move is real but produces zero #{session_attached} delta, so TerminalMultiplexer.switch_client returns False deterministically — tui/launch.py then records ATTENDED for a client that did leave, and a later --repeat cycle calls input() in a window nobody is viewing.
Proposed shape, to confirm against F8's measurements before writing it: at ≥3.3.8 take switch-client -t's exit code as the verdict (meaningful in the failure direction since psmux#483/#555/#558; it is what the parked trailer already does), and keep the #{session_attached} delta probe for -l and detach-client, where rc still proves dispatch, not effect (test_premise_client_verbs_exit_zero_with_no_client_to_move is green on 3.3.8).
Out of scope
The headless removals and doc pass — #658. If the psmux/psmux#580 question opens the pane store to user @ keys in a future tag, retiring the @opt_@N substitute becomes a separate follow-up with its own tag gate, not part of this issue.
Follow-up to #222, carrying its F8/F9 half per the closure proposal. The grammar half of every item below is already green on
psmux 3.3.8 (66cf613)(smoke tables, §2/§8); what is unproven is only the client-movement half, because a detached probe registers no client (#{session_attached}stayed 0 through a backgroundedpsmux attach). This needs a human at a real console on Windows 11, with the #658 floor bump in place.F8 — the attended pass (blocks F9)
switch-client -t %Nsame-session lands on the originating pane, through our parked-window trailer end-to-endswitch-client -lfallback actually returns the clientswitch-client -lacross psmux's per-session servers: does "last session" survive the server hop? (3.3.8 made-lper-client and rc-1-on-no-last-session — psmux#566 — but cross-server movement was never live-verified)switch-client -t =bmad-loop-ctl:<win>lands on that window, not the session's active oneF9 — switch_client's same-session residue (needs F8's measurements first)
With psmux#483 live, a same-session move is real but produces zero
#{session_attached}delta, soTerminalMultiplexer.switch_clientreturnsFalsedeterministically —tui/launch.pythen recordsATTENDEDfor a client that did leave, and a later--repeatcycle callsinput()in a window nobody is viewing.Proposed shape, to confirm against F8's measurements before writing it: at ≥3.3.8 take
switch-client -t's exit code as the verdict (meaningful in the failure direction since psmux#483/#555/#558; it is what the parked trailer already does), and keep the#{session_attached}delta probe for-landdetach-client, where rc still proves dispatch, not effect (test_premise_client_verbs_exit_zero_with_no_client_to_moveis green on 3.3.8).Out of scope
The headless removals and doc pass — #658. If the psmux/psmux#580 question opens the pane store to user
@keys in a future tag, retiring the@opt_@Nsubstitute becomes a separate follow-up with its own tag gate, not part of this issue.