test: bootstrap fixpoint (stage1 == stage2 == stage3 behavioral parity)

Soundness gate for self-hosting (jolt-d0r). stage1 = analyzer built by the Janet
bootstrap; stage2 = analyzer rebuilt by compiling jolt.ir + jolt.analyzer through
stage1 (self-host); stage3 = the same self-rebuild again. A corpus of programs
must produce identical results across all three.

Compared BEHAVIORALLY rather than by emitted code: emitted Janet forms embed live
setter/getter closures (identity varies per compile) and the IR carries
representation-level gensyms and pvec internals, so structural equality fights the
representation. Behavioral parity is the property that actually matters and is
representation-independent.

Also corrects the battery baseline 3920 -> 3919: 3920 was a lucky run; 3919 is the
stable value (the 9 timeout-prone tests can shift the count by one).
This commit is contained in:
Yogthos 2026-06-06 18:27:14 -04:00
parent 3638521e2d
commit e02ccab4c0
2 changed files with 86 additions and 3 deletions

View file

@ -26,9 +26,11 @@
# (sleep 1)))` re-raises the unresolved-`Thread/sleep` error — a documented
# platform gap, not a regression in any previously-working behavior.
# Raised 3913 -> 3916 with the staged-bootstrap kernel tier (ns-restore-on-throw
# + faithful subvec coercion), then 3916 -> 3920 moving juxt/every-pred/some-fn to
# Clojure (the canonical defs are more correct than the prior Janet ones).
(def baseline-pass 3920)
# + faithful subvec coercion), then 3916 -> 3919 moving juxt/every-pred/some-fn to
# Clojure (the canonical defs are more correct than the prior Janet ones). 3919 is
# the stable value; runs can read 3920 when a timeout-prone test (of the 9 that
# can time out) happens to finish, so the floor is set at the consistent 3919.
(def baseline-pass 3919)
# A file is "clean" when it ran with zero failures AND zero errors.
(def baseline-clean-files 45)
# Per-file wall-clock budget (seconds). Normal files finish in well under 1s;