Skip to content

tooling: ci-windows-preflight stops shipping the Mac baseline build to the node - #26

Merged
BlinkingSun merged 1 commit into
mainfrom
fix/win-preflight-baseline-cache
Oct 21, 2026
Merged

BlinkingSun merged 1 commit into
mainfrom
fix/win-preflight-baseline-cache

Conversation

@BlinkingSun

Copy link
Copy Markdown
Owner

Tooling only. No engine, test or CMake change.

Problem

scripts/ci-windows-preflight.sh ships the working tree to the Windows node with tar. Its tests/ entry list pruned tests/gates/baseline/.build and .worktree-*, but find … -prune -o -print also prints every directory (tests, tests/gates, tests/gates/baseline, …). tar recursed into each one and re-added both trees.

The node-side cleanup then removed a synced .build only if its CMakeCache.txt contained /Users/. That holds for a checkout under the home folder, but not for a worktree elsewhere (e.g. /private/tmp/…, which CMake records as /tmp/…).

Measured while validating #25 (5861814): the Mac cache reached the node, so build_baseline.sh failed. G0.1 went XFAIL ("baseline cannot be built") on every fixture, and G0.3 fell back off its 187ead0 twin to the candidate's own off-path run. It then failed on cross_bores (force-sew exit 2 != off-path exit 0). macOS and Linux were 105/105 on the same sha, and a rerun from a never-built worktree was 105/105 on Windows.

Change

  • tests/ is listed as files and symlinks only (-type f -o -type l), so tar has no directory to recurse into. tar creates parent directories on extract, and git tracks no empty ones.
  • The node removes repo/tests/gates/baseline/.build whenever it exists. repo/ is recreated every run, so anything there came from the Mac.

Linux is unaffected: its preflight syncs with rsync and anchored excludes.

Verification

  • Offline, on a tree carrying both artifacts: the old list archives 80 baseline paths, the new one 0, and every git ls-files tests path is still present.
  • On the Windows node, with the failing condition reproduced: a Mac-built baseline .build (cache recorded under /tmp/…) was planted in this branch's worktree and the fixed preflight run from it. Result: no cleanup line fired (nothing was shipped), 0 baseline-build errors, gates_full passed, 104/104.
  • macOS fresh-clone gate on 9a7c980 (scripts-only class).

🤖 Generated with Claude Code

https://claude.ai/code/session_01UTMvXaSuW29sDT7knjDitW

…o the node

The tests/ entry list pruned tests/gates/baseline/.build and .worktree-* but
still printed every directory, and tar recursed into tests/, tests/gates/ and
tests/gates/baseline/, re-adding both trees. The node cleanup then removed the
synced .build only when its CMakeCache contained '/Users/', which a worktree
outside /Users (a /private/tmp scratchpad) does not. Result, measured on
5861814: G0.1 XFAIL "baseline cannot be built" on every fixture, and G0.3 fell
back off its 187ead0 twin to the own off-path run and failed on cross_bores
(force-sew exit 2 != off-path exit 0), while macOS and Linux passed 105/105.

- tests/ is listed as files and symlinks only, so tar has no directory to
  recurse into. On a tree carrying both artifacts the archive drops from 80
  baseline paths to 0, with every tracked test file still present.
- The node removes repo/tests/gates/baseline/.build whenever it exists:
  repo/ is recreated every run, so anything there came from the Mac.

Linux is unaffected (rsync with anchored excludes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UTMvXaSuW29sDT7knjDitW
@BlinkingSun
BlinkingSun merged commit a245151 into main Oct 21, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant