framework tools/tmux: B1 round 3 — env default is local-only; mktemp test artifacts
ci/woodpecker/pr/ci Pipeline was canceled
ci/woodpecker/pr/ci Pipeline was canceled
- MOSAIC_TMUX_SOCKET no longer leaks into remote sends (-L on a remote host would target the wrong server; codex blocker). - Socket-test outputs moved from fixed /tmp paths to mktemp artifacts cleaned by the trap (parallel-safe; codex should-fix).
This commit is contained in:
@@ -163,7 +163,10 @@ vflag=""; [ "$VERBOSE" = 1 ] && vflag="-v"
|
|||||||
# default-socket twin; rc 0 reported honest delivery to the wrong pane).
|
# default-socket twin; rc 0 reported honest delivery to the wrong pane).
|
||||||
# Socket discovery scans tmux's own socket dir, ${TMUX_TMPDIR:-/tmp}/tmux-UID
|
# Socket discovery scans tmux's own socket dir, ${TMUX_TMPDIR:-/tmp}/tmux-UID
|
||||||
# (codex PR #1466: TMPDIR is not where tmux keeps -L sockets).
|
# (codex PR #1466: TMPDIR is not where tmux keeps -L sockets).
|
||||||
if [ -z "$SOCKET_NAME" ] && [ -n "${MOSAIC_TMUX_SOCKET:-}" ]; then
|
# MOSAIC_TMUX_SOCKET is LOCAL-host state (launcher-exported): it must not
|
||||||
|
# leak into remote sends, where -L would target a socket on the remote
|
||||||
|
# host (codex PR #1466).
|
||||||
|
if [ -z "$SOCKET_NAME" ] && [ -z "$SSH_TARGET" ] && [ -n "${MOSAIC_TMUX_SOCKET:-}" ]; then
|
||||||
SOCKET_NAME="$MOSAIC_TMUX_SOCKET"
|
SOCKET_NAME="$MOSAIC_TMUX_SOCKET"
|
||||||
fi
|
fi
|
||||||
if [ -z "$SOCKET_NAME" ] && [ -z "$SSH_TARGET" ]; then
|
if [ -z "$SOCKET_NAME" ] && [ -z "$SSH_TARGET" ]; then
|
||||||
|
|||||||
@@ -8,8 +8,15 @@ SOCKET="mosaic-test-$RANDOM-$$"
|
|||||||
TARGET="target-$RANDOM"
|
TARGET="target-$RANDOM"
|
||||||
DEFAULT_TARGET="default-target-$RANDOM"
|
DEFAULT_TARGET="default-target-$RANDOM"
|
||||||
TMPDIR=$(mktemp -d)
|
TMPDIR=$(mktemp -d)
|
||||||
|
ART_OUT=$(mktemp)
|
||||||
|
AMB_OUT=$(mktemp)
|
||||||
|
AMB_ERR=$(mktemp)
|
||||||
|
A2_OUT=$(mktemp)
|
||||||
|
A2_ERR=$(mktemp)
|
||||||
|
UNIQ_OUT=$(mktemp)
|
||||||
|
UNIQ_ERR=$(mktemp)
|
||||||
TWIN="twin-$RANDOM-$$"
|
TWIN="twin-$RANDOM-$$"
|
||||||
trap 'tmux -L "$SOCKET" kill-server >/dev/null 2>&1 || true; tmux kill-session -t "$DEFAULT_TARGET" >/dev/null 2>&1 || true; tmux kill-session -t "$TWIN" >/dev/null 2>&1 || true; rm -rf "$TMPDIR"' EXIT
|
trap 'tmux -L "$SOCKET" kill-server >/dev/null 2>&1 || true; tmux kill-session -t "$DEFAULT_TARGET" >/dev/null 2>&1 || true; tmux kill-session -t "$TWIN" >/dev/null 2>&1 || true; rm -rf "$TMPDIR" $ART_OUT $AMB_OUT $AMB_ERR $A2_OUT $A2_ERR $UNIQ_OUT $UNIQ_ERR' EXIT
|
||||||
|
|
||||||
fail() {
|
fail() {
|
||||||
echo "FAIL: $*" >&2
|
echo "FAIL: $*" >&2
|
||||||
@@ -88,10 +95,10 @@ done
|
|||||||
tmux -L "$SOCKET" new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
tmux -L "$SOCKET" new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
||||||
tmux new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
tmux new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
||||||
amb_rc=0
|
amb_rc=0
|
||||||
env -u MOSAIC_TMUX_SOCKET "$AGENT_SEND" -s "$TWIN" -m "must refuse" >/tmp/amb.out 2>/tmp/amb.err || amb_rc=$?
|
env -u MOSAIC_TMUX_SOCKET "$AGENT_SEND" -s "$TWIN" -m "must refuse" >$AMB_OUT 2>$AMB_ERR || amb_rc=$?
|
||||||
[ "$amb_rc" -eq 4 ] || fail "ambiguity refusal: rc=$amb_rc want 4 (stderr: $(cat /tmp/amb.err))"
|
[ "$amb_rc" -eq 4 ] || fail "ambiguity refusal: rc=$amb_rc want 4 (stderr: $(cat $AMB_ERR))"
|
||||||
grep -q "multiple sockets" /tmp/amb.err || fail "ambiguity refusal message missing socket list"
|
grep -q "multiple sockets" $AMB_ERR || fail "ambiguity refusal message missing socket list"
|
||||||
grep -qF "$SOCKET" /tmp/amb.err || fail "ambiguity refusal message does not name the test socket"
|
grep -qF "$SOCKET" $AMB_ERR || fail "ambiguity refusal message does not name the test socket"
|
||||||
tmux kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
tmux kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
||||||
tmux -L "$SOCKET" kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
tmux -L "$SOCKET" kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
@@ -100,8 +107,8 @@ tmux -L "$SOCKET" kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
|||||||
tmux -L "$SOCKET" new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
tmux -L "$SOCKET" new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
||||||
tmux new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
tmux new-session -d -s "$TWIN" -c "$TMPDIR" 'PS1="❯ " exec bash --noprofile --norc -i'
|
||||||
a2_rc=0
|
a2_rc=0
|
||||||
MOSAIC_TMUX_SOCKET="$SOCKET" "$AGENT_SEND" -s "$TWIN" -m "env disambiguated" >/tmp/a2.out 2>/tmp/a2.err || a2_rc=$?
|
MOSAIC_TMUX_SOCKET="$SOCKET" "$AGENT_SEND" -s "$TWIN" -m "env disambiguated" >$A2_OUT 2>$A2_ERR || a2_rc=$?
|
||||||
[ "$a2_rc" -eq 0 ] || fail "env disambiguation: rc=$a2_rc (stderr: $(cat /tmp/a2.err))"
|
[ "$a2_rc" -eq 0 ] || fail "env disambiguation: rc=$a2_rc (stderr: $(cat $A2_ERR))"
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
a2_pane="$(tmux -L "$SOCKET" capture-pane -t "=$TWIN:0.0" -p)" || fail "cannot capture twin (arm A2)"
|
a2_pane="$(tmux -L "$SOCKET" capture-pane -t "=$TWIN:0.0" -p)" || fail "cannot capture twin (arm A2)"
|
||||||
grep -qF "env disambiguated" <<<"$a2_pane" || fail "env disambiguation did not deliver on the named socket"
|
grep -qF "env disambiguated" <<<"$a2_pane" || fail "env disambiguation did not deliver on the named socket"
|
||||||
@@ -115,8 +122,8 @@ tmux -L "$SOCKET" kill-session -t "$TWIN" >/dev/null 2>&1 || true
|
|||||||
# Arm B: session unique to ONE socket, no -L -> auto-resolve to that socket
|
# Arm B: session unique to ONE socket, no -L -> auto-resolve to that socket
|
||||||
# and deliver there.
|
# and deliver there.
|
||||||
uniq_rc=0
|
uniq_rc=0
|
||||||
env -u MOSAIC_TMUX_SOCKET "$AGENT_SEND" -s "$TARGET" -m "autoresolved hello" >/tmp/uniq.out 2>/tmp/uniq.err || uniq_rc=$?
|
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 /tmp/uniq.err))"
|
[ "$uniq_rc" -eq 0 ] || fail "unique auto-resolution: rc=$uniq_rc (stderr: $(cat $UNIQ_ERR))"
|
||||||
sleep 0.2
|
sleep 0.2
|
||||||
auto_pane="$(capture_named)" || fail "could not capture named socket pane (arm B)"
|
auto_pane="$(capture_named)" || fail "could not capture named socket pane (arm B)"
|
||||||
grep -qF "autoresolved hello" <<<"$auto_pane" || fail "auto-resolution did not deliver to the named-socket pane"
|
grep -qF "autoresolved hello" <<<"$auto_pane" || fail "auto-resolution did not deliver to the named-socket pane"
|
||||||
|
|||||||
Reference in New Issue
Block a user