Repository navigation
[M1-DET-04] Bit-exactness CI: per-tick hash baselines, hello --expect, detcheck matrix - #41
Merged
Merged
Conversation
…, detcheck matrix Activate laige-detcheck with the real M1-SAMPLE-01 scenario (roadmap M1-DET-04): - Committed per-tick hash-stream baselines in samples/hello/baselines/, one per SimMath backend, generated from the reference build (canonical Debug g++): fixed_point_16_16 + float_pinned_32, 301 lines each (docs/benchmarks/determinism-matrix.md, baselines README). - hello --expect BASELINE: the scenario-side equivalent of laige-replay --expect (the scenario binary carries the check — a game log cannot be replayed by laige-replay; ADR 0002). Same 0/1/2 contract and report formats (hello::BaselineCheck, O(1) per tick; separate TU to keep hello.cpp inside the PRD 9.4 budget: 99 lines). - hello-fp32 build variant: the same game source on float_pinned_32 (the LAIGE_HELLO_BACKEND macros — one op surface, two backends). - CI: every P0 OS job's ctest now asserts per-tick identity against the baselines on both backends (hello_baseline_fpx/fp32) plus the failure fixtures (first divergence, stream length, malformed line, missing file); the merge detcheck job builds four configurations (Debug g++, Debug clang++, Debug+ASan clang++, Release g++) and runs the two-configuration pairs (g++ vs clang++; Debug+ASan vs Release, both backends) via --run-a/--run-b + --compare-combined, after a reference-baseline sanity check; the PR detcheck job runs the both-backend baseline comparison (tooling cadence, label-independent). - Verification: 82/82 ctest on all six local trees (canonical g++, clang++, Release, ASan, TSan, shared); all four detcheck pairs OK (ticks=301); byte-identical clang vs g++ streams (both backends); perturbation proof (kVelocity 1->2 in MovePlayer fails with 'hash mismatch at tick 1 (first divergence)', revert restores exit 0); include/determinism lints OK. - Docs: determinism-matrix report (AGENTS 12 metadata, ARCH-010 scope, fp32_pinned per-platform support list, regeneration policy), detcheck.md baseline-comparison section + CI status, hello README, building.md rows, determinism.md cross-target, roadmap board + log. Roadmap: M1-DET-04 checked; M1 board 18/25.
…m report CI (pull request) run 35238175154: Linux x64 g++/clang++/ASan/TSan all green (82/82 ctest including the six hello_baseline_* tests), the detcheck tooling job green (synthetic self-check + both-backend baseline comparison). macOS/Windows run on the merge (ci.yml).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Activates
laige-detcheckwith the real M1-SAMPLE-01 scenario (roadmap M1-DET-04):samples/hello/baselines/, one per SimMath backend (fixed_point_16_16,float_pinned_32), 301 lines each, generated from the reference build (canonical Debug g++). Regeneration policy: deliberate documented scenario/config/engine-hash changes only, always re-verified cross-compiler, recorded in the report.hello --expect BASELINE— the scenario-side equivalent oflaige-replay --expect(the scenario binary carries the check because a game log cannot be replayed bylaige-replay; ADR 0002 replay identity). Same contract: 0 match / 1 first-divergence report / 2 baseline read/contract error. O(1) per tick; kept inhello-baseline.cppsohello.cppstays at 99 code lines (PRD 9.4 budget).hello-fp32build variant — the same game source onfloat_pinned_32(theLAIGE_HELLO_BACKENDmacros; one op surface, two backends, ADR 0002).hello_baseline_fpx/hello_baseline_fp32) plus the failure fixtures (first divergence, stream length, malformed line, missing file);detcheckjob builds four configurations (Debug g++, Debug clang++, Debug+ASan clang++, Release g++) and runs the two-configuration pairs — pair A: g++ vs clang++ Debug; pair B: Debug+ASan vs Release — both backends, via--run-a/--run-b+--compare-combined, after a reference-baseline sanity check;detcheckjob runs the both-backend baseline comparison (tooling cadence, label-independent).docs/benchmarks/determinism-matrix.md(AGENTS 12 metadata, ARCH-010 scope statement, thefloat_pinned_32per-platform support list generated from matrix results — a desynced pair is declared unsupported, never re-baselined; regeneration policy).Verification
cteston all six local trees: canonical Debug g++, clang++ Debug, Release g++, Debug+ASan (clang++), Debug+TSan, shared.ticks=301); byte-identical clang++ vs g++ streams (both backends).kVelocity1 to 2 in the scratch systemMovePlayermakeshello --expectexit 1 withhash mismatch at tick 1 (first divergence); the revert restores exit 0.tools/laige-include-lintandtools/laige-determinism-lintOK; zero warnings (NFR-8.10,-Wall -Werrorin every tree).Open until the first merge: the merge
detcheckjob and the macOS/Windows P0 baseline checks land with this PR's merge; the support-list rows marked pending in the report convert to matrix results (or, for a desyncedfloat_pinned_32pair, to an unsupported declaration per ADR 0002).Roadmap: M1-DET-04 checked, board 18/25.