roster-v2 canonical socket_name accepts empty string — tmux socket-boundary isolation validation gap #854
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
roster-v2 canonical
socket_nameaccepts empty string — tmux socket-boundary isolation validation gap3-source primary-verified @ main
11d281845376eb5910a74403300956d8edcc93a8(builder lanems-m3002-build+ MS-LEAD + homelab W-jarvis, independent primary-source reads all concordant).Defects —
packages/mosaic/src/fleet/roster-v2.tssocket_name: { type: 'string', pattern: '^[A-Za-z0-9_.-]*$' }— uses*(zero-or-more) with nominLength. The siblingholder_sessionL177 correctly uses+.TMUX_SOCKET_IDENTIFIER = /^[A-Za-z0-9_.-]*$/uses*vsTMUX_IDENTIFIERL277/^[A-Za-z0-9_.-]+$/(+). An empty string passes;requiredTmuxSocket(L478–486) trims then accepts""."...is required and must be a string."vs the non-empty wording at L465.The asymmetry with the adjacent
holder_session/TMUX_IDENTIFIER(both+) confirms this is an unintentional gap, not a deliberate design choice.Fix spec
*→+on L276 (TMUX_SOCKET_IDENTIFIER).minLength: 1to the schemasocket_nameon L176.Security
Socket-boundary / session-isolation surface: an empty
socket_namecan collapse to a default tmux socket, creating a cross-session boundary risk. This is validation-hardening on a config-supplied canonical field (severity ~medium; not an active exploit).Merge gate for the fix: independent CODE review (author ≠ builder) + OPUS SECREV (isolation-boundary surface — SECREV tier NOT downgradable) + exact-head CI green + named-executor merge clearance.
Discovered-by
FCM-M3-002 acceptance test (
packages/mosaic/src/fleet/fleet-reconciler.acceptance.spec.ts). The test is CORRECT — do NOT weaken it. The test asserts an empty canonical roster-v2socket_namemust be rejected; production currently does not.Scheduling
Prod-fix lane is PARKED for the Opus window (Opus quota-blocked until 2026-07-23; SECREV tier not downgradable). At Jul-23: one bounded lane — builder authors the
roster-v2.tsfix + red-first regression → independent CODE → OPUS SECREV → exact-head CI green → named-executor merge → then the FCM-M3-002 test refresh rides green on top.Blocks: FCM-M3-002 (#758 sub-gate). Cross-ref #758.
Supersedes #794 (allow-empty proposal, provenance PR#793) — contract reversed on socket-boundary security grounds.
#794 was closed superseded-by-#854 with its title/body/PR#793 provenance retained unchanged. #794 (Low) proposed accepting a literal-empty
socket_name; the 3-source analysis @ main11d2818established the socket-boundary/isolation impact (empty→default-socket collapse→cross-session risk), reversing the contract to reject-empty (medium/security). Bidirectional audit trail established.