← back to Dw Domain Fleet
deploy-fleet: RSYNC_EXTRA_EXCLUDES, so one agent's approved deploy can't ship another's held work (TK-11463)
6a1fcbbbe10a64b4fedcc0d600fad9d52aa2b19f · 2026-09-11 12:28:11 -0700 · Steve Abrams
This rsync ships the WORKING TREE, not HEAD. On a repo several agents share, that
means any uncommitted in-flight file rides along silently under whoever's approval
happens to fire first. Concretely: TK-11463's approved deploy of caaf32b would have
pushed shared/render.js at ff3315d7 — TK-11470's sort candidate, which that ticket
explicitly holds ('production adoption/deployment remains gated').
--exclude also exempts a path from --delete, so prod simply keeps its current copy.
Verify by checksum that prod's copy is the one you want kept before excluding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5t2AhAGwcTJDdHdmfpr8Z
Files touched
M scripts/deploy-fleet.sh
Diff
commit 6a1fcbbbe10a64b4fedcc0d600fad9d52aa2b19f
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri Sep 11 12:28:11 2026 -0700
deploy-fleet: RSYNC_EXTRA_EXCLUDES, so one agent's approved deploy can't ship another's held work (TK-11463)
This rsync ships the WORKING TREE, not HEAD. On a repo several agents share, that
means any uncommitted in-flight file rides along silently under whoever's approval
happens to fire first. Concretely: TK-11463's approved deploy of caaf32b would have
pushed shared/render.js at ff3315d7 — TK-11470's sort candidate, which that ticket
explicitly holds ('production adoption/deployment remains gated').
--exclude also exempts a path from --delete, so prod simply keeps its current copy.
Verify by checksum that prod's copy is the one you want kept before excluding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01S5t2AhAGwcTJDdHdmfpr8Z
---
scripts/deploy-fleet.sh | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/scripts/deploy-fleet.sh b/scripts/deploy-fleet.sh
index 754520b..b8add1d 100755
--- a/scripts/deploy-fleet.sh
+++ b/scripts/deploy-fleet.sh
@@ -9,8 +9,18 @@ LOCAL="$(cd "$(dirname "$0")/.." && pwd)"
echo "==> rsync $LOCAL -> $HOST:$REMOTE"
ssh "$HOST" "mkdir -p $REMOTE"
+# RSYNC_EXTRA_EXCLUDES (space-separated paths) — this rsync ships the WORKING TREE,
+# not HEAD, so any other agent's uncommitted in-flight file rides along silently. That
+# matters on a shared repo: TK-11463's approved deploy would otherwise have pushed
+# TK-11470's shared/render.js candidate, which that ticket explicitly holds as
+# "production adoption/deployment remains gated". Excluding a path leaves whatever prod
+# already has untouched (--exclude also exempts it from --delete). Verify with a
+# checksum that prod's copy is the one you want KEPT before excluding it.
+EXTRA=()
+for x in ${RSYNC_EXTRA_EXCLUDES:-}; do EXTRA+=(--exclude "$x"); echo " (excluding $x — prod keeps its current copy)"; done
rsync -az --delete \
--exclude node_modules --exclude .git --exclude 'logs/*' --exclude '.env*' \
+ "${EXTRA[@]+"${EXTRA[@]}"}" \
"$LOCAL/" "$HOST:$REMOTE/"
echo "==> install deps + pm2 start"
← caaf32b pull-catalog: flatten to the SELLABLE variant, not blindly v
·
back to Dw Domain Fleet
·
fix(catalog): sort dropdown was dead on all 8 funnel sites — b4b8158 →