You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Umbrella for the psmux 3.3.8 adoption family, in the shape of #288 (which closed when its target-resolution children were done). The children below are separate work tracks with one shared premise: every upstream defect this backend works around is fixed and released — psmux 3.3.8 (66cf613 2026-08-18) is byte-identical to the v3.3.8 tag and to master, all 19 reports filed from this project are closed and released in it, and each workaround premise was re-measured against the installed binary (smoke tables and the F1–F9 proposal).
The one sequencing rule
_LAST_UNSUPPORTED → (3,3,7) (the F1 gate in #658) is the single constant everything hangs on: it refuses 3.3.7 and admits 3.3.8+, and 3.3.8 is the first tag carrying every fix at once — there is no per-workaround floor. Workaround deletions land only behind it (on a 3.3.7 install the pipe-pane -o transport, for one, silently kills run-log capture). F6/F7 in #658 are the exception: correct on both versions, landable any time.
psmux/psmux#580 question — if the new pane-scoped option store ever opens to user @ keys, retiring the @opt_@N substitute channel becomes a follow-up with its own tag gate and live smoke. If the allowlist is declared deliberate, the psmux#321 boundary is double-confirmed and nothing changes.
Permanent boundaries — no child should try to retire these
Per-window user options do not exist in psmux's model (psmux#321); -EncodedCommand stays the window-command transport (quoted command strings still die on 3.3.8, root-caused in the psmux#402 comment); _qualified_window_id stays (a bare @N still routes by caller's server); the #{session_attached} delta probes stay for switch-client -l / detach-client, where rc proves dispatch, not effect.
Open issues that mention psmux but are bmad-loop-side work no psmux tag affects — defects, plus the coverage the family's own claims lean on. Listed so the boundary is a decision, not an omission:
Umbrella for the psmux 3.3.8 adoption family, in the shape of #288 (which closed when its target-resolution children were done). The children below are separate work tracks with one shared premise: every upstream defect this backend works around is fixed and released —
psmux 3.3.8 (66cf613 2026-08-18)is byte-identical to thev3.3.8tag and tomaster, all 19 reports filed from this project are closed and released in it, and each workaround premise was re-measured against the installed binary (smoke tables and the F1–F9 proposal).The one sequencing rule
_LAST_UNSUPPORTED → (3,3,7)(the F1 gate in #658) is the single constant everything hangs on: it refuses 3.3.7 and admits 3.3.8+, and 3.3.8 is the first tag carrying every fix at once — there is no per-workaround floor. Workaround deletions land only behind it (on a 3.3.7 install the pipe-pane-otransport, for one, silently kills run-log capture). F6/F7 in #658 are the exception: correct on both versions, landable any time.Children
select_windowoverride group, the pipe-pane sidecar, the_transportablenarrowing, thekill_session=nameoverride,kill-windowfailure surfacing, and the doc-rot pass. Actionable now. Its merge closes psmux 3.3.8: adopt as installed floor, re-verify the switch-client/select-window paths, and drop the psmux#497 and other workarounds #222.switch_clientverdict-source rework (F8/F9). F8 done: all five items measured green against a real attached client (results) — the console premise is discharged, and the pass was scripted rather than hand-run, so it repeats. F9 implemented in fix(psmux): rebase switch_client's verdict on the exit code it can trust #670; the issue closes on that merge. The pass also produced psmux: current_window_id/current_pane_id answer for the server's active window, not the calling pane #669 and showed F9's premise was understated: the wrong verdict did not just answer False, it fired-land relocated the operator, then read the relocation as success.PSMUX_DATA_DIRas a per-project registry root, seam-wide. Unblocked by the same F1 gate (the installed build honours the variable, measured); stillneeds-designfor the root derivation and the cross-process contract.Not children, but watched from here
-udeletes the key at rc 0, and there is no--end-of-options (3.3.8) psmux/psmux#583 — a-u-shaped option value still deletes the key at rc 0 on 3.3.8, so_transportable'svalue.startswith("-")clause stays after psmux 3.3.8 adoption: bump the floor to (3,3,7) and drop the retired workarounds #658's F4. When a tag ships that fix, its retirement is a small follow-up with its own tag gate.@keys, retiring the@opt_@Nsubstitute channel becomes a follow-up with its own tag gate and live smoke. If the allowlist is declared deliberate, the psmux#321 boundary is double-confirmed and nothing changes.Permanent boundaries — no child should try to retire these
Per-window user options do not exist in psmux's model (psmux#321);
-EncodedCommandstays the window-command transport (quoted command strings still die on 3.3.8, root-caused in the psmux#402 comment);_qualified_window_idstays (a bare@Nstill routes by caller's server); the#{session_attached}delta probes stay forswitch-client -l/detach-client, where rc proves dispatch, not effect.Refs: #288, psmux/psmux#483, psmux/psmux#497, psmux/psmux#482, psmux/psmux#563, psmux/psmux#558, psmux/psmux#545, psmux/psmux#583
Related, deliberately outside the umbrella
Open issues that mention psmux but are bmad-loop-side work no psmux tag affects — defects, plus the coverage the family's own claims lean on. Listed so the boundary is a decision, not an omission:
-Lnamespace idea recorded on psmux 3.3.8: adopt as installed floor, re-verify the switch-client/select-window paths, and drop the psmux#497 and other workarounds #222 (opportunity 2) is one candidate shape for Untagged sessions still have no ownership proof that outlives the run dir (#419 direction 2, now unhomed) #538._display_messageprobes without-t $env:TMUX_PANE, socurrent_window_id/current_pane_id/current_return_targetanswer for the server's active window rather than the calling pane. Surfaced and measured by psmux 3.3.8: attended console pass for the client-movement paths, then rebase switch_client's verdict source #659's attended pass, but no psmux tag moves it: the fix is the leaf pinning its own probe, exactly as_parked_traileralready does. Blast radius is the ctl-window prune's self-exclusion and the return-option read, not the adoption.:-bearing session name goes straight intodisplay-message -t <session>(the Parked-window return target is a bare pane id — unresolvable cross-session on psmux (one server per session) #221 rule the sibling call sites already apply), and the attached-client count is read with a target a foreign server can answer (fix(adapters): give psmux a per-window option channel #315). The second one is why it is listed here rather than parked: psmux 3.3.8: attended console pass for the client-movement paths, then rebase switch_client's verdict source #659's F9 made that count load-bearing in the NONZERO direction, where a borrowed count would vouch for a switch that moved nobody.psmux_backend.py.test_premise_*andtest_adopted_*probe this family added lives intests/test_psmux_live.py, which no CI job runs today — the Linux matrix skips it onsys.platform, and the Windows runner has no psmux on PATH. The adoption's entire evidence base is therefore observed only by hand on a developer box, and psmux 3.3.8: attended console pass for the client-movement paths, then rebase switch_client's verdict source #659's F9 raised the stakes by putting two upstream exit-code premises under the same skipped module. Until this lands, a psmux behaviour drift is a silent green.