diff --git a/packages/mosaic/framework/tools/tmux/agent-send.sh b/packages/mosaic/framework/tools/tmux/agent-send.sh index 1d0b9c09..3c16555b 100755 --- a/packages/mosaic/framework/tools/tmux/agent-send.sh +++ b/packages/mosaic/framework/tools/tmux/agent-send.sh @@ -168,7 +168,13 @@ vflag=""; [ "$VERBOSE" = 1 ] && vflag="-v" # (probing '==name' for an already-exact input was a false-negative hit). DST_TARGET="$DST_SESSION" case "$DST_SESSION" in - =*|*:*) ;; + =*) ;; + *:*) + # Compound target (session:win.pane): pin the SESSION component exact + # (=session:win.pane); unpinned, the session part still prefix-matches + # (codex PR #1466: 'agent:0.0' can resolve into 'agent-old'). + DST_TARGET="=${DST_SESSION%%:*}:${DST_SESSION#*:}" + ;; *) DST_TARGET="=$DST_SESSION" ;; esac diff --git a/packages/mosaic/framework/tools/tmux/test-send-message-socket.sh b/packages/mosaic/framework/tools/tmux/test-send-message-socket.sh index 073818b8..0d2ef2fe 100755 --- a/packages/mosaic/framework/tools/tmux/test-send-message-socket.sh +++ b/packages/mosaic/framework/tools/tmux/test-send-message-socket.sh @@ -139,6 +139,20 @@ fi tmux kill-session -t "$PSEUDO" >/dev/null 2>&1 || true rm -f "$A3_ERR" +# Arm A4: compound targets pin the SESSION component exact (codex PR +# #1466): 'TWIN:0.0' must not resolve into the prefix-named session. +PSEUDO2="${TWIN}-old" +tmux new-session -d -s "$PSEUDO2" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i' +A4_ERR=$(mktemp) +a4_rc=0 +env -u MOSAIC_TMUX_SOCKET "$AGENT_SEND" -s "$TWIN:0.0" -m "compound trap" >/dev/null 2>"$A4_ERR" || a4_rc=$? +[ "$a4_rc" -eq 1 ] || fail "compound prefix false-hit: rc=$a4_rc want 1 (stderr: $(cat "$A4_ERR"))" +if tmux capture-pane -t "=$PSEUDO2:0.0" -p 2>/dev/null | grep -qF "compound trap"; then + fail "compound delivery landed in the prefix-named session" +fi +tmux kill-session -t "$PSEUDO2" >/dev/null 2>&1 || true +rm -f "$A4_ERR" + uniq_rc=0 env -u MOSAIC_TMUX_SOCKET "$AGENT_SEND" -s "$TARGET" -m "autoresolved hello" >$UNIQ_OUT 2>$UNIQ_ERR || uniq_rc=$? [ "$uniq_rc" -eq 0 ] || fail "unique auto-resolution: rc=$uniq_rc (stderr: $(cat $UNIQ_ERR))"