diff --git a/native/GameCult.Mesh.Quic.Native/README.md b/native/GameCult.Mesh.Quic.Native/README.md index 92041e8d..825595e5 100644 --- a/native/GameCult.Mesh.Quic.Native/README.md +++ b/native/GameCult.Mesh.Quic.Native/README.md @@ -110,11 +110,12 @@ mutation harness that drives the runtime-lifetime scenarios is a Node script and a container that cannot run it cannot check the bridge it just built: docker build -t cultlib-quic-native-dev -f scripts/quic-native-linux-dev.Dockerfile scripts - docker run --rm --security-opt seccomp=unconfined -v "${PWD}:/src" -w /src ` - cultlib-quic-native-dev bash -lc "scripts/build-quic-native.sh && node scripts/mutate-cultmesh.mjs native" + docker run --rm --security-opt seccomp=unconfined -v "${PWD}:/src" -w /src cultlib-quic-native-dev bash -lc "scripts/build-quic-native.sh && node scripts/mutate-cultmesh.mjs native" Both lines are run from the repository root, and the mount is that root wherever -it is: `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. +it is: `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. The second is one line +because the shell it is offered to is not decided here; a continuation would have +to pick one, and a backtick pasted into a POSIX shell is not a continuation. `--security-opt seccomp=unconfined` is load-bearing, not caution. The ThreadSanitizer configuration needs the process's address space where it expects @@ -125,6 +126,13 @@ with "unexpected memory mapping" — a configuration that never starts, which a mutation harness would otherwise read as every mutant being killed. The harness stops with that diagnosis rather than reporting kills it did not earn. +The win32-x64 half of the harness needs the checkout somewhere short — near a +drive root rather than under a deep temporary directory. MSVC builds the bridge +and its scenario runner through MSBuild, whose file tracker gives out on long +paths, and the build then fails for every mutant including the no-op control. +The harness stops on a red control rather than reporting a table of kills, so +the failure is loud, but it names MSBuild and not the path. + Where an artifact was built is part of what it is. The Linux binary is linked against Debian 13's glibc, so a build from anywhere else is a different artifact whatever the file name says. diff --git a/scripts/mutate-cultmesh.mjs b/scripts/mutate-cultmesh.mjs index ac0711b1..b3d12676 100644 --- a/scripts/mutate-cultmesh.mjs +++ b/scripts/mutate-cultmesh.mjs @@ -47,11 +47,15 @@ // dependencies: // // docker build -t cultlib-quic-native-dev -f scripts/quic-native-linux-dev.Dockerfile scripts -// docker run --rm --security-opt seccomp=unconfined -v "${PWD}:/src" -w /src ` -// cultlib-quic-native-dev bash -lc "node scripts/mutate-cultmesh.mjs native" +// docker run --rm --security-opt seccomp=unconfined -v "${PWD}:/src" -w /src cultlib-quic-native-dev bash -lc "node scripts/mutate-cultmesh.mjs native" // // Both from the repository root; the mount is that root wherever it is, as -// `${PWD}` in PowerShell or `$(pwd)` in a POSIX shell. +// `${PWD}` in PowerShell or `$(pwd)` in a POSIX shell. The second is one line +// because a continuation would have to pick one of those shells. +// +// The win32-x64 half wants the checkout somewhere short, near a drive root. MSVC +// builds the bridge through MSBuild, whose file tracker gives out on long paths, +// and a run from a deep temporary directory fails its own no-op control. // // The seccomp flag is required, not cautious: the ThreadSanitizer configuration // is re-executed under `setarch -R`, and Docker's default profile denies the diff --git a/scripts/quic-native-linux-dev.Dockerfile b/scripts/quic-native-linux-dev.Dockerfile index 7c796749..f4b11684 100644 --- a/scripts/quic-native-linux-dev.Dockerfile +++ b/scripts/quic-native-linux-dev.Dockerfile @@ -9,8 +9,10 @@ # runner that mutates it at all. # # docker build -t cultlib-quic-native-dev -f scripts/quic-native-linux-dev.Dockerfile scripts -# docker run --rm --security-opt seccomp=unconfined -v F:\Projects\CultLib:/src -w /src \ -# cultlib-quic-native-dev bash -lc "scripts/build-quic-native.sh && node scripts/mutate-cultmesh.mjs native" +# docker run --rm --security-opt seccomp=unconfined -v "${PWD}:/src" -w /src cultlib-quic-native-dev bash -lc "scripts/build-quic-native.sh && node scripts/mutate-cultmesh.mjs native" +# +# Both from the repository root, and the mount is that root wherever it is: +# `${PWD}` in PowerShell, `$(pwd)` in a POSIX shell. # # `--security-opt seccomp=unconfined` is not optional and not caution. The # ThreadSanitizer configuration needs the process's address space where it