Deterministic Validation Matrix
May 31, 2026 · View on GitHub
Hosted GitHub Actions now cover the continuous push and nightly packaging edges, while the deeper deterministic target matrix remains available as a local/manual runbook. The same three gameplay flavours remain the expected validation surface: bytecode, native, and reverse-engineered targets.
Hosted lanes
- Push Verification –
.github/workflows/push-verification.ymlruns on every push, fanning out across the module, renderer, UI, client, qcommon, server, and engine host/support parity gates plus Linux/macOS native source builds. It uploads the existing subsystem evidence roots and build outputs with a 14-day retention window. - Nightly Build –
.github/workflows/nightly-build.ymlruns daily at03:17 UTC, resolves shared version metadata up front, builds Linux/macOS native outputs, builds the Windowsv143modern compatibility profile, generates a manifest version likenightly-YYYYMMDD.<run>-g<shortsha>, uploads versioned workflow artifacts for 30 days, and creates or updates a GitHub Release containing the Linux tarball, macOS tarball, Windows zip, release manifest, checksum file, version manifest, and release notes. Each published nightly is explicitly marked as GitHub's Latest release. The package excludes retail pk3 files, retail launcher DLL payloads, reverse clean-room comparison DLLs, and any live-service credentials.
Matrix jobs
- QVM – Run on a Unix-like host, re-validate the legacy toolchain, reuse the clean-room build helper, and drive the deterministic harness suite against the VM output.【F:tests/run_harnesses.py†L24-L112】
- DLL – Run on Windows, provision the Visual Studio 2010 components as needed, verify the
v100toolset, validate the retail-aligned Windows native pipeline, and then execute the shared harness runner.【F:tests/run_harnesses.py†L24-L112】 - Reverse – Run on a Unix-like host, rebuild the clean-room modules via
tools/ci/build-cleanroom.sh, and extend the harness invocation with the reverse build root so the trace harness can diff the clean-room binaries against the expected transcript.【F:tests/run_harnesses.py†L24-L112】 - POSIX native builds – Run on hosted Linux and macOS through
tools/ci/build-posix-native.shto compile the current baseq3 native modules from the realsrc/code/src/gamesource lists and the dedicated-host makefile target into.so/.dylibpackages without launching the game or requiring retail assets.
Artefacts
tests/run_harnesses.py emits deterministic match timelines, HUD hash captures, weapon timing baselines, and text summaries for every target, while the reverse leg adds normalised trace logs and diffs.【F:tests/run_harnesses.py†L27-L116】 These artefacts land underneath artifacts/tests/<suite>/<target>/latest/ when run locally. In particular:
logs/<target>/latest/*.log– Harness summaries for the match, client regression, and trace suites.match_sim/<target>/latest/<slug>/timeline.json– Deterministic bot timelines for each bundled scenario (duel,overtime, andloadouts).match_sim/<target>/latest/index.json– Inventory of published match simulations with metadata (frame counts, seeds, etc.).client_regression/<target>/latest/hud_hashes.json– Stable HUD hashes replayed from the regression snapshots.weapon_timings/<target>/latest/baseline.json– Reload/refire and ammo pickup baselines diffed against HLIL tables.trace/<target>/latest/*– Reverse-only logs and diffs that compare the clean-room output with the expectation.
Re-run the harness locally with the shared entry points:
python tests/run_harnesses.py --target qvm
python tests/run_harnesses.py --target dll
python tests/run_harnesses.py --target re --reverse-build-root build/re/linux
Status reporting
Capture local run logs and artefacts alongside the relevant audit or implementation note when a matrix leg is re-run. With hosted workflows disabled, those checked-in artefacts are now the authoritative validation evidence.