diff --git a/infra/build-server/remote-run.sh b/infra/build-server/remote-run.sh
index 772174f73..24cb40c5e 100755
--- a/infra/build-server/remote-run.sh
+++ b/infra/build-server/remote-run.sh
@@ -54,7 +54,10 @@ _slots_env="${IGNEUM_BUILD_SLOTS_DIR:-}"; _log_env="${IGNEUM_BUILD_LOG_DIR:-}"
# What the clean spares beyond target dirs and stamps: a lane's scratch. The fixed prefixes, plus every glob in the mirror-local
# file `.igneum-scratch-spare` (one per line, # comments; the file itself is spared). spare_args
fills SPARE_ARGS with
# the `-e ` arguments; it is never empty (the fixed list), so bash 3.2's unbound-empty-array rule cannot bite the self-test.
-SPARE_FIXED=('attack-*' 'scratch-*' 'target-attack-*' '.build-remote.log' '.igneum-scratch-spare')
+# vendor/ is spared (8 Oct 2026, the enforced lane's read on build-9): the vendor repos (vendor/igneum-node, vendor/igneum-node-exec)
+# are separate repositories, untracked in the main mirror and checked out by their own bs_push_and_checkout only when the run's
+# crate is under vendor, so a main-repo crate run on the same worktree took the whole node tree and its target with it
+SPARE_FIXED=('attack-*' 'scratch-*' 'target-attack-*' '.build-remote.log' '.igneum-scratch-spare' 'vendor')
spare_args() {
local p
SPARE_ARGS=()