You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(build): verify staging by content, and route the last in-place copy through it
Windows CI caught two things the Linux-only self-checks structurally could not.
1. `rule runtime_alias` was a SECOND `Copy-Item -Force`. PE has no soname
symlink, so an alias is a copy of a freshly built DLL — the same hazard as
BMI staging (a program still running from a previous `mcpp run` holds the old
one). Its Windows branch now goes through `$mcpp stage` too; POSIX keeps
`ln -s`, where the symlink is semantics and not merely how the file is
written. The 'no Copy-Item anywhere' assertion is a no-op on Linux, which is
why only the Windows job could find this.
2. Size-only equivalence was unsound for exactly those DLL payloads: PE section
padding makes 'genuinely rebuilt, identical size' ordinary, so a stale DLL
could survive in the build dir. Content comparison is unconditionally
correct — a destination equal to the source needs no write — and it only runs
when ninja has already decided the edge is dirty. It is now the default;
`--verify size` / MCPP_STAGE_VERIFY=size stays for callers that know the
source is fingerprint-scoped, and an unrecognized value falls back to the
SAFE mode rather than the fast one.
Also from CI: a read-only destination is replaceable on POSIX (rename rewrites
the directory entry) but not on Windows, so that test now asserts both outcomes
per platform instead of one; the e2e scripts unescape ninja node names (a
Windows drive letter arrives as `C$:/Users/...`) and use BSD `stat -f` when GNU
`stat -c` is absent (macOS).
0 commit comments