What
Both parked-trailer replay paths — the POSIX trailer in src/bmad_loop/adapters/tmux_base.py (_parked_trailer, switch-client -t "$ret" || switch-client -l) and the pwsh override in src/bmad_loop/adapters/psmux_backend.py — use a nonzero exit code to trigger the switch-client -l fallback. The Python side (BaseTmuxBackend.switch_client) does the same.
Per psmux/psmux#483 (upstream-final), psmux builds without the #483 fix exit 0 as a no-op when switch-client gets an unresolvable window/pane target. On those builds the fallback is structurally unreachable: the client silently stays parked in the ctl window with no feedback. #225 made the recorded target session-qualified, which resolves correctly on fixed psmux releases — but on pre-fix releases the rc-0 no-op ceiling remains, and the knowledge currently lives only in a CHANGELOG entry.
Suggested follow-ups
- Version gate: the psmux support gate (
_LAST_UNSUPPORTED in psmux_backend.py) currently guards only the PID-kill bug. Once the psmux release carrying the #483 fix is known, bump it (or add a dedicated check) so affected builds are refused or warned about instead of silently misbehaving.
- Ceiling comment: a one-line note next to the pwsh trailer (and/or
switch_client) — "pre-#483-fix psmux exits 0 on an unresolvable target, so the -l fallback cannot fire there" — keeps the limitation next to the code that has it.
Surfaced by a silent-failure audit during review of #225; documented there but unenforced in code.
What
Both parked-trailer replay paths — the POSIX trailer in
src/bmad_loop/adapters/tmux_base.py(_parked_trailer,switch-client -t "$ret" || switch-client -l) and the pwsh override insrc/bmad_loop/adapters/psmux_backend.py— use a nonzero exit code to trigger theswitch-client -lfallback. The Python side (BaseTmuxBackend.switch_client) does the same.Per psmux/psmux#483 (upstream-final), psmux builds without the #483 fix exit 0 as a no-op when
switch-clientgets an unresolvable window/pane target. On those builds the fallback is structurally unreachable: the client silently stays parked in the ctl window with no feedback. #225 made the recorded target session-qualified, which resolves correctly on fixed psmux releases — but on pre-fix releases the rc-0 no-op ceiling remains, and the knowledge currently lives only in a CHANGELOG entry.Suggested follow-ups
_LAST_UNSUPPORTEDinpsmux_backend.py) currently guards only the PID-kill bug. Once the psmux release carrying the #483 fix is known, bump it (or add a dedicated check) so affected builds are refused or warned about instead of silently misbehaving.switch_client) — "pre-#483-fix psmux exits 0 on an unresolvable target, so the-lfallback cannot fire there" — keeps the limitation next to the code that has it.Surfaced by a silent-failure audit during review of #225; documented there but unenforced in code.