Clause
← All documentation

Validation

Current baseline

Latest recorded gates on the Windows x64 development host (clang-cl and LLVM SDK 23.1.2, /MT, _ITERATOR_DEBUG_LEVEL=0); later steps record theirs in .agents/00-finished.md:

CheckResult
Fresh combined Debug CTest (2026-10-14)299/300 passed; the failure is the known codegen_measurements IR size bound; codegen_resource_cli is disabled
check-quality-all (same run)Clean; Lizard CCN 10
Opt-in OTP audit tests (2026-10-14, pin d199a49a01a2, oracle OTP 29.1.1)17/17
regenerate.py --corpus all --check (same)19/19 corpora reproduce

Running the gate

From an x64 Visual Studio developer shell with C:\Program Files\LLVM\bin on PATH (automatic SDK selection reuses thirdparty/):

cmake --preset debug --fresh -DBUILD_TESTING=ON -G Ninja -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl
cmake --build build/debug
ctest --preset debug-fast                  # during development
ctest --preset debug -j 16                 # full mode, at feature completion
cmake --build build/debug --target check-quality      # changed files, one unit per header
cmake --build build/debug --target check-quality-all  # whole tree

Linux

The same gate runs on Linux with the pinned LLVM 23.1.2 Linux SDK as host compiler (CC/CXX from its bin/), the system libstdc++, Ninja and CMake 3.28 or newer. Boost 1.90 and toml++ 3.4.0 come from installed packages or are extracted into thirdparty/ (boost_1_90_0/, tomlplusplus-3.4.0/); only Windows downloads them. The release archive's ld.lld links ICU 70 (Ubuntu 22.04) and its lldb links Python 3.14; on hosts without them linking_lto needs ICU 70 on LD_LIBRARY_PATH, and linking_debugger uses GDB.

cmake --preset debug --fresh -G Ninja -DBUILD_TESTING=ON
cmake --build build/debug
ctest --preset debug -j 16

check-quality (Lizard, clang-tidy) runs on the Windows development host only; other hosts build and run the tests (it was clean on Linux once, see history).

Other targets

32-bit and ARM targets are checked without a compiler built for them (no LLVM SDK exists for those hosts):

Fixtures and provenance

Test design

Behavior is tested through the real CLI, emitted objects, linked native consumers and OTP goldens. Focused unit tests remain only where source cannot reach the state, each with its purpose stated in the test:

Filesystem capability cases (links, case aliases) report per-case skips; they never stand in for a whole-test pass.

Platform and sanitizer status

Benchmarks

Manual performance comparison with Erlang/OTP. It is never part of CTest, the commit gate or check-quality, and only it needs a host Erlang/OTP; results are host-specific evidence, not gate results.

make-benchmark.bat                         # Windows; set JOBS=N to cap parallel builds
make-benchmark.bat --repeat 9 --only bench_gc,bench_msg
make-benchmark.bat --cpus all                 # unpinned set; default --cpus performance
make-benchmark.bat --baseline HEAD           # performance work: HEAD vs the working tree
make benchmark BENCH_ARGS="--repeat 9"         # other hosts

History

Condensed from the former per-step records (originals in Git history up to commit 2777c98). Unless noted: Windows x64, LLVM 23.1.2, pin 21776803ecd1, oracle OTP 29.1.1 / ERTS 17.1. Test counts are full CTest passes with zero skips.

DateMilestoneTestsQuality unitsNotes
2026-09-19Parser phase VI (macOS arm64, OTP 29.1 751f87b7, oracle 29.0.5)46full344/344 productions witnessed; 10-file corpus
2026-09-20Projects (macOS arm64)64fullDebug, compiler-only, ASan+UBSan
2026-09-28Test migration to CLI workflows; Windows gate repair75fullparser_hardening stack overflow fixed with an 8 MiB stack; Lizard + clang-tidy clean
2026-09-29Compiler milestone steps 1–46103182Compiler-only 80, runtime-only 16, runtime ASan 16
2026-10-01 – 10-03PG1–PG20 pattern/guard plan104–131189–258ABI revisions 2–4; PG15a made goldens OTP-free (audits opt-in, 131 → 118 tests); closed at 19 corpora, 67,634 values, 1,969 seeded outcomes
2026-10-03OTP source audit125258Copied OTP files replaced by local fragments; 60-token window comparison against 4,150 OTP Erlang and 1,190 C/C++ files found no overlap besides a generated integer tuple
2026-10-03Plan 11 step 1 baseline (commit b1a471f, pin 21776803ecd1, Lizard 1.24.0, clang-tidy 22.1.8)125 (122 fast)258Full 729 s serial, 85 s -j 16; 14/14 audits; 19/19 corpora; foreign O0/O2 objects inspected for 7 targets
2026-10-03Steps 2, 4: program fixtures, term printing126–128265Six OTP program goldens; 9,542 ~w/display goldens
2026-10-04Steps 8, 8I: executable runner, classic heap (phases B, C closed)138–144272–276Full -j 16 235–370 s
2026-10-04 – 10-05Steps 9–20: case, if, raises, catch, try, stack traces, maybe (phase D closed), recursion, frames and tail calls146–158277–278Fast and affected full-mode tests per step; full -j 16 155/155 in 259 s at phase D
2026-10-06Steps 21–28: comprehensions (phase E closed), roots and collection, memory and term limits (27A–27E), graph copies159–166278–281Full -j 12 105–275 s; step 27 removed default memory caps
2026-10-07Steps 29–35: records, native records (ABI 6), funs (ABI 7), closures, named funs, dynamic calls (ABI 8)167–177283–290Full -j 12 119–152 s
2026-10-09Step 63 Linux x86-64 (WSL2 Ubuntu 25.04, glibc 2.41, LLVM 23.1.2 SDK clang, libstdc++ 14, GDB 16.2)235338Full CTest 235/235 in 161 s; Lizard and clang-tidy clean on Linux (7 analyzer reports in Boost headers ignored); Windows gate 235/235 with headers checked
2026-10-09Step 64 32-bit: Windows x86 (WoW64, clang-cl) and Linux i386 (Debian 13 chroot, clang 19)42 + 65 goldens—Runtime/ABI tests 42/42 natively on both; cross.py goldens 65/65 on both (integer_limit 64-bit-only runs skipped)
2026-10-09Step 65 Linux arm64 and armhf (Debian 13 sysroots, qemu-user 9.2)42 + 65 goldens—Runtime/ABI tests 42/42 each; goldens 64/65 each (port_spawn enoent: qemu posix_spawn gap), run limit 900 s
2026-10-10Step 67 ASan + UBSan + LeakSanitizer (Linux x86-64)235—No sanitizer report; four injected host-refusal tests outside ASan's scope; CLAUSE_TEST_TIMEOUT_SCALE=10
2026-10-10Step 68 ThreadSanitizer (Linux x86-64)233—One lock-order inversion fixed (Executor::clear); then no report in full CTest and 15 concurrency tests x5
2026-10-10Steps 65A–65C: behaviours, module_info/0,1, imports234–236 fast342–344Lint and executable goldens reproduce under OTP 29.1.1
2026-10-11Steps 73A–73G parse transforms242/243 fast—Known codegen_resource_cli failure, since disabled
2026-10-12Steps 62D1–62E build directory and caches263/264allFull CTest, known codegen_resource_cli failure; check-quality-all clean
2026-10-13Steps 58U–58W inference cache278/279allFull CTest, known codegen_measurements failure; check-quality-all clean
2026-10-14Step 41S prim_eval and the luerl rerun (H3 closed)299/300allSee current baseline
2026-10-17Plan 20 OPTM.2 (one-word Term, persistent terms in place and reclaimed) and OPTM.3 (unchecked accessors)330/332allFull CTest: known codegen_measurements failure, and library_freshness (host OTP) still expects the not_implemented stub bodies that b0e62a38 replaced; check-quality-all clean
2026-10-19Plan 21 LIB10F ThreadSanitizer (Linux x86-64): ETS and digraph goldens, runtime_concurrency10—No report; ets_portions on one worker showed a delete freed in two portions, fixed by costing a freed object as a walked one

PG = pattern/guard plan step; plan 11 step records are archived in .agents/00-finished.md.