a7665807f3
The external core compile driver now enforces the same host/target pairing matrix as the service compile lane: same-triple compiles keep the native lane, Linux and Windows GNU targets cross-compile from any macOS/Linux/Windows build host over the compiler's zig-cc lane, macOS targets need a macOS build host, and every refused pairing teaches before compiler work starts. The co-emitted contract sidecar is target-independent: a macOS-native, x86_64-windows-gnu, and x86_64-linux-musl compile of one staged tree emit byte-identical documents with identical integer-class decisions, and the COFF and ELF archives declare the same nsc_core_* symbol surface as the Mach-O one. The SDK's fixture graph compiles corewire for the build host, so the battery lanes configure under a cross -Dtarget, and a new stage-cross-e2e step installs the host-fixture, markup, and in-process service pool batteries under <prefix>/e2e for execution on the target machine. scripts/cross-e2e.sh drives the lane end to end: it cross-builds the batteries, the kanban example, and the service fixture app (in-process carrier — the core and service archives linked into one executable, with no defined-symbol overlap between the localized service archive and the core's contract surface) for x86_64-windows-gnu and x86_64-linux-musl, then executes the batteries on the Windows box over ssh and in an amd64 Alpine container. gate.sh runs the lane in either tier when NATIVE_SDK_CROSS=1 is set and skips it otherwise. All three batteries pass on both targets: 29 host-fixture, 10 markup, and 19 in-process pool tests on Windows (the three posix-spawn tests skip there), and 32/10/19 in the musl container. The TypeScript chapter and ts-core skill state the supported build matrix, including the Linux glibc spelling and the unchanged desktop-only scope for mobile.