Repository navigation
Phase 2 numbers: exact int64 and IEEE doubles (#1758) - #1776
InauguralPhysicist wants to merge 198 commits into
Conversation
Round 0 of #1758 (exact int64 kind and IEEE doubles): the design a blind critic reviews before round 1 builds. No src/ change. - tools/phase2_inventory.py classifies every numeric site in src/*.c and src/*.h (comments and literals stripped) into one of the ten categories and writes docs/design/phase2-inventory.txt: examined=1773 classified=1773 unclassified=0. Two derived checks keep "unclassified" live: a new double-returning payload accessor, or a VAL_NUM in an unrecognized position, is unclassified. It also derives the builtin registration table (311 names; equal to `eigenscript --api --json` both ways) and checks the design doc's classification table against the 229 numeric builtins, both directions, with closed class and loss tokens. - docs/design/phase2-numbers.md chooses Alt 1R: VAL_INT beside a renamed VAL_FLOAT, with the ambiguous accessors deleted, so 1,488 of 1,773 sites stop compiling until visited. A shared-tag subtype (Lua's TValue shape) or a double shadow leaves 445 type tests and 484 checked reads compiling with a widened or lossy meaning, and three JIT emitters that would misread a boxed int. Also: the JIT guard table (every consuming guard bails on 0xFFFA; four producer emitters must change), the N12/SMI NaN-space argument, the builtin table (39 LOSS rows), the semantics-to-sites map, the round 1/2 plan, the check/plant/Lua-diff tool designs, and six open questions left to the owner. - tests/phase2/MAP.md maps N1-N14, N4b, (A), (B), T1 and O1-O4 to 78 tag-failing rows, 5 controls and 2 oracle gates. Measured prototype (standalone C, callgrind Ir/op): today's double ADD 38; float-first SMI arm 40 on floats, 44 on ints (shifted add); boxing every int 77. The interpreter spends 685 Ir per counter-loop iteration and the JIT 402, so int loops bailing in round 1 cost up to ~1.7x until round 5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…red compile count (#1758) Design round 2 of #1758, after the blind critic's FAIL on round 0. Still no src/ change. - The third numeric evaluator, vm_leaf_accessor_exec (vm.c:1856; scanner chunk.c:1072, #366), is in the inventory (dispatcher arms, an executor matrix that requires the leaf scanner and evaluator to admit the same opcodes), in design §4.5 and §7 with every arm, and gets a gate: a `trace` tier in phase2_check.sh (EIGS_TRACE switches the leaf off) that is the leaf-on/leaf-off differential over every row. - Every meaning change coincides with a token change (§2.7): int literals get new appended opcodes (OP_INT_ZERO/ONE/CONST); OP_NUM_ZERO/ONE keep their float meaning in all three executors; slot_as_double is deleted in R1.1; buffer_read_byte and finite_num_to_byte are deleted with Q1. - The compile count is re-measured with clang's `unavailable` attribute in a scratch copy under server-db, release and freestanding: 1,416 of 1,798 sites stop compiling, 44 sit inside deleted definitions, and each of the 338 others is classified with its reason. - Slot classifiers are derived (D1 forced; 43 D2/D3 entries each carry a reviewed disposition the inventory checks both ways), and raw union-member reads are vocabulary, so the critic's e_blind_member plant now fails the run. Inventory plants A-R all turn red. - The canonical form is corrected: the lifts box on purpose, so equality compares by value whenever a box is involved; plant 1's check is the C slot test. - The builtin table follows the decided Q1 (16 rows move to int-requiring, ppu_render_frame added) and gains the #1762 LOSS rows (store_put, db_execute, db_query_json); §11 records Q1-Q6 as decided, and parks Q7 (out-of-range continuous parameters) and Q8 (NaN order). - tests/phase2/MAP.md gains 35 shaped rows (leaf, function JIT, OSR) with tier witnesses read from EIGS_JIT_HOT/STATS/STOPS, covering all 20 numeric JIT and leaf arms, and the record-twice tape rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…, landed-round filter (#1758) Design round 3 of #1758, after the round-2 critic's FAIL. Still no src/ change. - The osr witness proves the loop body ran natively: every OSR row is a `loop while true:` whose only exit is a return right after the claimed ops, and the witness requires the OSR record to reach the return sentinel (oadv == len). Every witness kind (leaf, leaf-gen, fn, fn-stop, osr, osr-stop) was calibrated on main against a negative plant: the honest row holds, the plant is VACUOUS. The critic's osr plant (0 native INDEX_SET calls under gdb) passed the round-2 rule and fails the new one. The two truthiness controls now end on the int call. - R1.2 is behaviour-preserving: the builtin readers and producers are a named bridge that R1.6 deletes, so every builtin behaviour change lands with a token change; a per-builtin behaviour table gates R1.6. The first int value appears at R1.3 (make_int is introduced there; an int-source check guards R1.1-R1.2), and every int consumer is converted in that commit. - `phase2_check.sh --through <commit>` checks a round against exactly its landed rows; R1.1, R1.2 and R2.1 are mechanical rounds with named gates. - The observer's boxed-int path is mapped (observer_slot_update's number arm) and routed at R1.3, with a MAP row for an int of 2^47 and up. - buffer_read_num is renamed in R1.6 (index reads in gather/scatter_add and byte reads such as buf_from_pcm16le are re-decided); the compile count is re-measured under the Makefile's exact flags and attributed per commit: 1,488 of 1,798 sites stop compiling (R1.1 223, R1.2 464, R1.3 11, R1.6 743, R2.2 47); the 257 others are classified. - Q7 and Q8 are folded in as decided: a validated q7 column in the builtin table, a geometry reader that clips the whole shape, IEEE totalOrder for sorting and NaN propagation through min/max. Inventory plants A-T all red. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…lassifier decided (#1758) Round R1.1 of docs/design/phase2-numbers.md section 8: the SMI exists as an encoding, every slot reader decided what an int does there, and nothing in the runtime produces an int yet, so no program behaves differently. - value_slot.h: TAG_SMI (0xFFFA) and the SMI range; slot_is_smi, slot_smi_val (bit-47 sign extension without a right shift), slot_from_int (an SMI in range; the VAL_INT box arm is unwired until R1.3), slot_f64_value (floats only; replaces vm.c's slot_as_double), slot_int_value. Tokens: slot_is_num -> slot_is_f64, SLOT_NUM_RAW -> SLOT_F64_RAW, slot_from_num -> slot_from_f64; slot_is_numeric and slot_as_double deleted. slot_as_double's 15 calls now read through slot_f64_value: the arithmetic, compare, negation and bitwise arms send an int to their slow path or type error (R1.3 gives them int semantics), and the leaf evaluator's INDEX_GET and ADD/SUB/MUL arms bail. - Refusals: eigs_slot_refuse (a broken caller contract) in eigs_slot_ref, obs_slot_observable, slot_type_name, slot_truthy, slot_to_value, vm_slot_lift, write_slot, and slot_as_ptr under ASan or -DEIGS_SLOT_CHECKED. The readers that turned an unknown tag into null or `<unknown>` now refuse it. - eigs_int_unwired: the arms whose int answer needs the int Value kind or tape v7 (slot_to_value, the one SMI boxer; slot_type; slot_view; write_slot; slot_from_int's box arm). R1.3 deletes it, so each one stops compiling in the commit that makes ints reachable. - Final int arms where R1.1 can write them: truthiness (not 0), the type name "num", the bridge readers (an int converts to its double until R1.6), list_get_ref/dict_value_get_ref (NULL for a number), the observer's numeric channel (obs_slot_num: an int as its exact double until round 3), the store encoder and the SIGUSR1 dump (exact digits), dispatch keys and slice bounds (the int, range-checked into a C int); the four return-to-C conversions now share slot_bridge_unwrap's int arm. - tools/phase2_inventory.py: the renamed vocabulary; every D1, D2 and D3 slot classifier now needs a reviewed disposition row (98 in the design doc's table, with a fifth disposition, `unwired`); --slot-population prints the C slot test's population (33 entries). - tools/num_read_check.sh and its allowlist follow SLOT_F64_RAW. Gates (this commit): make -> 29 units, 0 compiler warnings; make jit-smoke -> "JIT smoke: all cases passed."; make embed-smoke -> "embed_smoke: OK"; tools/phase2_inventory.py -> "slot classifiers: D1=56 D2=19 D3=23 T=67 dispositions=98 missing=0 stale=0", "phase2-inventory: PASS"; tools/num_read_check.sh -> "num-read: PASS". Behaviour unchanged, measured on this source (the three R1.1 commits leave src/ as this one does): - the full release suite, env -u XAUTHORITY DISPLAY=:99 make test: "RESULTS: 4268/4268 passed, 0 failed, 9 skipped" (the skips: extensions not built, ASan-only checks, an archived bench asset, no ouroboros checkout beside the tree); - tools/phase2_corpus_diff.sh against main 0740af0, every .eigs under tests/: "corpus-diff: examined=441 same=433 same_under_replay=6 nondet=2 diff=0 new=14 deleted=0 crash_both=0 timeout_both=1" (new = the calibration fixtures; the timeout is _runaway_guard_selftest.eigs on both binaries). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
tests/phase2/slot_layer.c (design 2.5) includes the single-file
amalgamation, so the static slot classifiers are reachable, and drives them
with hand-built SMI slots (the literal tag, never slot_from_int):
- Part A: every entry of `tools/phase2_inventory.py --slot-population`
(every slot classifier whose first parameter is an EigsSlot, 33 today)
with the SMI boundary values 0, 1, -1, 2^47-1, -2^47. An entry returns the
int's answer or aborts through a named refusal; an abort runs in a forked
child and its FATAL line must name the expected reader.
- Part B: the predicates and the deciding readers against a double, the
canonical NaN, -0.0, null, both bools, an SMI, a heap pointer, the three
reserved tags and the sentinel.
- Part C, plant 1's named check: slot_from_int over the boundary values must
give the SMI bits (inside the range) or refuse (outside it, until R1.3).
tests/phase2/slot_layer.sh builds it (make phase2-slot-test; release CFLAGS
plus -DEIGS_SLOT_CHECKED, or ASan) and compares the entries it examined with
the derived population both ways. Suite section [0fk] runs it in the
variant the suite binary is.
tools/phase2_plants.sh (design 9.3) holds the plants that have landed:
plant 1 (slot_from_int tags an int that fits as a heap pointer), killed by
its named check and shown transverse (the same plant with that one
assertion deleted passes).
Results on this tree:
- bash tests/phase2/slot_layer.sh release:
slot-layer-test: examined=33 smi_values=5 calls=165 tag_rows=156 from_int_rows=11 failures=0
slot-layer-population: derived=33 examined=33 entries=33 missing=0 extra=0 test_rc=0
slot-layer: PASS
- the ASan/UBSan build (make PHASE2_SLOT_VARIANT=asan phase2-slot-test,
run with ASAN_OPTIONS=detect_leaks=1): the same four lines, rc 0, no
sanitizer report.
- suite section [0fk] in the full release suite: the same lines, PASS
(297 s on the 4 GB box, most of it the -O2 compile of the amalgamation).
- bash tools/phase2_plants.sh:
red: slot-layer-test: FAIL slot_from_int(0): bits 0xfffb000000000000 (tag 0xfffb), want the SMI 0xfffa000000000000
plant 1: KILLED transverse=TRANSVERSE
plants=1 killed=1 survived=0 broken=0 transverse=1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…ck and its calibration (#1758) tools/phase2_check.sh (design 9.2; the work is in tools/phase2_check.py): - the MAP's rows, controls and gates; `--through Rk` selects what has landed by Rk (R1.1 < R1.2 < ... < R2.6 < R3), and a mechanical round (R1.1, R1.2, R2.1) runs its gates instead of failing on zero rows: the token gate (the tokens a landed round deleted occur in no code line), the int-source check (before R1.3 nothing outside the canonicalizing writers calls slot_from_int or make_int, and make_int does not exist), the C slot test, and the corpus differential against --baseline; - four tiers (off, default, osr, trace = the leaf differential), the verdicts tag_fail / branch_pass / vacuous / TIMEOUT / SIGNAL, and the tier witnesses exactly as design 9.1 defines them, the osr rule being oadv == len (the return sentinel); - plan checks: every item has a row, every numeric JIT-emitter and leaf arm is exercised by an L/F/O row of its role, every round has rows or gates. tools/phase2_corpus_diff.sh: the behaviour differential of a mechanical round. A file whose baseline disagrees with itself is adjudicated by replaying the baseline's tape on both binaries. Calibration, `phase2_check.sh --calibrate --build-plants <v0.46.0> <branch>` on tests/phase2/calib/ (each fixture ends in `5.5 & 1`, which raises on the branch and truncates on the tag): calibration: cases=27 as-expected=27 unexpected=0 including: honest rows tag_fail=7 branch_pass=7 in every tier with 6/6 witnesses holding (osr fill oadv=123 len=123 oent=37; osr-stop g oent=33 oadv=20, ADD); the tag passed as both binaries -> branch_pass=0; a corrupted .out, an empty rows directory, a MAP id with no file and a file with no MAP id each fail by name; each witness kind's negative plant (and the fn row called 10 times) -> vacuous=1, named; a build whose leaf scanner returns early -> vacuous; a build whose leaf MUL adds 1 -> the trace tier alone passes; the int-source plant (slot_from_int(count) in trace.c) fails naming its caller; a reintroduced slot_is_num fails the token gate. bash tools/phase2_check.sh --through R1.1 --baseline <main 0740af0> <v0.46.0> <branch>: tier=default examined=0 rows tag_fail=0 branch_pass=0 vacuous=0 (all four tiers alike) controls=0 both_pass=0 witnessed=0 mapped=0 gates=0 through=R1.1 tokens: rounds<=R1.1 tokens=5 files=89 hits=0 int-source: files=64 slot_from_int_defs=1 make_int_defs=0 calls=0 outside_writers=0 slot-layer: PASS corpus-diff: examined=441 same=433 same_under_replay=6 nondet=2 diff=0 new=14 deleted=0 crash_both=0 timeout_both=1 phase2-check: PASS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Merging this PR will degrade performance by 50.08%1 warning
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing |
… build; #1775's warnings (#1758) The R1.1 critic found that NUM_CMP, INT_BINOP_R, NEG and BNOT met an SMI with the type error naming `num`, which a `try` turned into a wrong value (`r is xs[0] < 6` with an SMI 5 gave false). Each now refuses through eigs_int_unwired, so R1.3, which deletes that token, cannot compile until each has its int arm. All four are tied to R1.3, bitwise included: R1.3's int literals reach `&` at once (tests/bench_dmg_shape.eigs:21), and design section 8 gives bitwise exact int64 operands at R1.3. The design's rows for the four arms change from guarded to unwired. The dynamic half of the int-source check: built with -DEIGS_SMI_TRAP (`make smi-trap`), every slot predicate and accessor aborts on an SMI and slot_from_int aborts on any call, so a producer that writes the tag bits itself dies at its first reader. #1775: builtin_tensor_gather ends in an explicit return, and the bitwise, compare, equality and index locals are initialised where they are declared. The amalgamation compiles with no warning at -O0 and -O1 (it had 1 and 7 on main 0740af0). The slot test now builds at -O0 with -Wall -Wextra (ASan's flavour at -O1), and its runner fails on any build warning. tools/phase2_inventory.py passes re.split's maxsplit by keyword: the positional form is a DeprecationWarning on Python 3.13. Closes #1775 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…riant (#1758) The C slot test: - Part B, the tag matrix, now runs every one of the 33 population entries against all twelve slot kinds (a double, the canonical NaN, -0.0, null, both bools, an SMI, a heap pointer, the three reserved tags and the sentinel), each with its expected value, refusal or raise; before, only the six predicates and seven deciding readers saw more than an SMI. - Part D drives the operator arms through the VM: a host builtin writes an SMI into a list, and each refusing operator must abort naming its arm, plain and inside a try, while the float control computes the value. - A child expected to abort is made non-dumpable, so a crash reporter on the core pipe (apport here) is not run for each one: 224 s became 0.4 s. Its runner reads each tool on its own channel: the population scan and the test each have a grammar, and a line outside it or any stderr is a FAIL that prints the line (the critic's largest gap: Python 3.13's DeprecationWarning on the scan's stderr was read as two classifiers). The scan runs under python3 -W error; a build warning fails (#1775). [0ff] and [0fk] find the variant the suite binary is (asan or asan-server in the CI ASan shards) through one shared predicate, tests/suite_variant.sh, which asks the Makefile whether that variant builds with ASan; both ran their release flavour in the shards (#1783). tests/section_weights.txt is refreshed from the ASan shard logs of run 38652383231 (head 6fe6f0a) plus [0fk]'s measured 53.33 s, so the planner no longer assumes 0.5 s for it (#1784). test_system.eigs draws random_int 300 times against its bounds: one draw let a lo+1..hi+1 random_int pass five times in six (the critic's plant D). Closes #1783 Closes #1784 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…er self-tests (#1758) The corpus differential (tools/phase2_corpus_diff.sh), after the critic's plants B and D passed it: - each binary runs each file twice; a file is deterministic when the baseline's two runs agree, and then any branch run that differs is a DIFF (a branch wrong on alternate runs read NONDET before); - randomness runs live: the runtime has no seed flag or variable, so an LD_PRELOAD shim pins the clock^pid self-seed to one constant and passes small explicit seeds through (test_numerics and test_optimize are now compared live); two pinned draws must agree or the run fails; - a tape is the last resort, for files whose baseline disagrees with itself even pinned (timings, threads); each is listed as REPLAYED, since a builtin's own behaviour is invisible there; - no blanket memory cap: only gfx/ui/audio files run under ulimit -v (handles_full.eigs varied only because of the old cap); - a restricted run (the calibration's file list) prints RESTRICTED and exits 3, never PASS. The int-source check fails on TAG_SMI or the SMI bit pattern anywhere outside its value_slot.h definitions (the critic's P3 and P5), and the mechanical gates of R1.1/R1.2 add `smi-trap`: the corpus differential against a `make smi-trap` build (P4, an int made inside an allowed writer). phase2_check.py's tool() keeps a gate's stderr apart and fails on it; the hot-table and bytecode readers accept only their own shapes, and the bytecode dump is read from stderr alone; the checker runs under -W error. The calibration and the plants run when their checkers change, as tools/selftests.txt rows (docs/PRINCIPLES.md 5), never per suite or CI run: `phase2_check.py --selftest` builds v0.46.0 and four planted binaries and adds the differential's plants A, B (both phases) and D and the int-source plants P1-P5, static and dynamic; `phase2_plants.sh` adds the arm-refusal, stderr-noise, stdout-noise and #1775 return-type plants. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…al's stderr (#1758) The calibration's P4 case (a smi-trap build with a planted int producer) showed the corpus differential writing bash's own report of a run killed by SIGABRT ("line N: PID Aborted ...") to its stderr, which the gates now refuse. A brace group's 2>/dev/null takes that report; each run's own stderr still goes to its file and is compared. The self-test rows take bounds from the dev-box measurements (calibration 662 s, plants 446 s) and pin the calibration's 42 cases. The design doc records that the calibration and the plants run as self-test rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Brings in #1769, #1777 (the observer oracle's floor as a required CI check), #1770, #1786 and #1785 (the on-demand full main lane). One conflict, tools/selftests.txt: both sides appended rows at the end of the registry. Resolved by keeping both: main's observer_oracle/plants.py row, then this branch's two #1758 Phase 2 rows with their comment. `tools/selftests.sh --changed origin/main --list` accepts the merged file (enrolment 46/46). The Makefile merged cleanly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…ath cost (#1758) The first fix round silenced -Wmaybe-uninitialized by initialising `_ad`/`_bd` (5 sites) and the index `i` (4 sites) where they are declared, in vm_run_ex's hot arms and the JIT index helpers. The second R1.1 critic measured the cost against R1.1 (9ce8e0b) with callgrind: +2.07% Ir on the DMG 500K canary and +4.17% on a JIT-off float loop, and reverting only the initialisers restored R1.1's counts. The initialisers are gone. The two readers that fill those locals write their out-parameter on every path instead, so the extra store is on the cold path: slot_f64_value writes 0.0 when it answers 0, and vm_index_is_int writes the truncation before its round-trip test (no caller reads it when the answer is 0). The amalgamation compiles with no warning at -O0 and -O1 (-Wall -Wextra), and the release build at -O2 has none. The C slot test's slot_f64_value rows now expect the written 0.0 where they expected the out-parameter untouched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…ff (#1758) tests/suite_program_env.txt was the policy the suite and jit_diff.sh read (#1395), but the suite still spelled five programs' conditions inline: four EIGS_STRICT=0 runs (test_coalesce_legacy, test_audio, test_gfx_text, test_gfx_argtypes, the last two with the SDL dummy drivers) and one SDL_VIDEODRIVER=dummy run (test_ui_containment_gfx). They are rows now, and those sites run through suite_program_run, so the table is the one source. tools/replay_diff.sh ran every corpus program in default strict mode; it now applies the same conditions, as jit_diff.sh does. tests/suite_program_env.sh: the conditions are checked against a whitelist of forms (EIGS_STRICT=0, SDL_VIDEODRIVER=dummy, SDL_AUDIODRIVER=dummy), and a word outside it is refused by name; suite_program_check validates without running. jit_diff.sh runs every arm through suite_program_run instead of its own copy of the case, and its completion pin and tests/test_jit_diff_env.sh's population follow the table (10 -> 15 programs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
… seed pin (#1758) The second R1.1 critic: the corpus differential (and with it the smi-trap gate) started every file in default strict mode. 14 fail-soft numeric-boundary files died at an early strict raise on both binaries and were counted `same`, about 394 asserts never ran, and two planted defects passed the whole oracle (C: buffer equality reading raw elements, which the suite's [42c] catches; B2: an int whose tag bits are spelled from SLOT_QNAN_MASK). The class was already closed in jit_diff.sh (#1395). - Each file runs under its conditions from the suite's loader (tests/suite_program_env.sh), read from the branch tree. - jit_diff's rule: a file with conditions must complete (rc 0) on both baseline runs, or it is INCOMPLETE, never compared, and the run fails. - tests/phase2/corpus_nonzero.txt declares, with code and reason, the 32 files whose baseline exits nonzero standalone (deliberate errors, fixtures of other hosts, capabilities the release build lacks, the runaway guard's fixture). An undeclared nonzero exit is UNDECLARED-NONZERO and a row whose file exits otherwise is STALE; both fail the run, so a file that loses its conditions is red. The ledger's grammar is a whitelist: a malformed row is refused by name. Every declared file is listed (SAME-NONZERO) with its code. - A timeout or crash all four runs agree on is counted as timeout_both or crash_both, no longer also as same (the old comment claimed this). - The seed pin: the drand48 self-seed is recognised exactly (the shim records each thread's last CLOCK_MONOTONIC reading; a seed equal to tv_sec ^ tv_nsec ^ getpid() of it is pinned, whatever its value), where the first fix round pinned seeds >= 2^20 and let 5 of 3,000 self-seeds through; 3,000 of 3,000 are pinned now. Every srand call (main's srand(time(NULL)), behind audio_noise's rand()) is pinned. random_hex's /dev/urandom stays unpinned by design; the shim marks the runs that open it and those files are listed as UNPINNED with their verdicts. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…ew plants (#1758) Nothing ran tools/phase2_inventory.py's verdict, so a slot classifier with no reviewed disposition row passed `phase2_check.sh --through R1.1`, and the committed docs/design/phase2-inventory.txt had gone stale (it still showed the four refusing arms as `guarded` and 98 dispositions). - phase2_inventory.py --check writes nothing and fails when the committed file differs from the generated text; the file is regenerated. - phase2_check runs two gates in every mode: the token gate (which the design already said ran in every mode, but ran only in the mechanical rounds) and the inventory gate (`--check` under -W error; PASS only for rc 0, no stderr and a last line `phase2-inventory: PASS`). - The calibration adds: plants C and B2 (built from HEAD, the second on the smi-trap build), each of which must make the differential name a conditioned file DIFF; a removed policy row (UNDECLARED-NONZERO); a ledger row for a completing file (STALE); a conditioned file that does not complete (INCOMPLETE); the unplanted branch with conditioned files (all same); and the inventory gate on an unchanged copy, a stale committed copy, and the critic's `vm.c:critic_new_reader`. - The design doc's claims about the seed pin, #1775's fix, the token gate and the differential are corrected. Closes #1804 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…lse (#1758) Supersedes 176b3d6's mechanism, which callgrind refuted. Writing the out-parameter in the readers cost what the initialisers did: against R1.1 (9ce8e0b), the JIT-off float loop measured +3.84% with slot_f64_value writing 0.0 on its failure path (+4.50% writing the slot's bits instead) and +0.44% with vm_index_is_int writing on both paths alone. The float loop executes neither failure path: any of these changed vm_run_ex's generated code, not its executed stores. Both readers are back to R1.1's form. The initialisation stays at exactly the three declarations GCC flags at -O1 (INT_BINOP_R's _ad/_bd, the `i` of CASE(INDEX_SET) and of jit_helper_index_set), with a comment at each. Callgrind Ir against R1.1, same inputs as the critic's: JIT-off float loop 364,223,332 -> 364,223,042 (-0.0001%) float loop, JIT on 172,204,323 -> 172,204,413 (+0.0001%) DMG 500K canary 1,191,977,525 (mean of 3) -> 1,191,026,282 (-0.080%) The amalgamation compiles with no warning at -O0 and -O1 (-Wall -Wextra), and the release build at -O2 has none. The C slot test's slot_f64_value rows expect the untouched out-parameter again; the inventory is regenerated for the moved lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
…1758) With #1775's initialisers back to the three sites GCC flags in release, the smi-trap variant printed four -Wmaybe-uninitialized warnings in vm_run_ex's compare arms: the trap's noreturn refusal inside every slot predicate defeats GCC's flow analysis there (`_ad` is read only after both reads succeeded). The variant builds with -Wno-maybe-uninitialized; release compiles the same source with the warning on and has none. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
With its run conditions applied, test_audio.eigs reaches the capture test, and a real capture device delivers samples or not by timing: on some runs the file prints a SKIP line. The baseline's two runs agreed, so the file was taken as deterministic, and one branch run that differed was reported as a DIFF (the smi-trap differential of a full run under Python 3.12, a false red: rc 0 on both sides). Every run now uses SDL_AUDIODRIVER=dummy, like the display is Xvfb: six baseline runs of test_audio are identical, and it compares live (`same`), where it was replay-adjudicated before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.6d-D1 and R1.6z-D1. Six MAP rows red on base in off/default/osr/trace, strict 0/1; public getter C gate red on raw NaN/payload/inf bit round trips. Cold critic added iterator backedge and dynamic integer-index coverage; get_at exact diagnostic messages pinned. No frozen branch expectation amended. Release build rc=0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.6d-D1/N13: all eight VM index/iter/JIT/leaf data reads use get_at semantics. Speculative leaf refuses to raise without a callee frame. VM MAP rows green in off/default/osr/trace, strict 0/1; exact kind/message/line. Float producers/metadata retain kind; no ownership change. Release build rc=0 warnings=0. Docs and legacy indexed-read expectations move with behavior. Reviewed amendment under R1.6d-D1 point 3 / N13 and R1.6 plan rule 4: NG32 and NG35 assert a value refusal with unchanged flags. NG35 gather still copies the cell; its final [0] is the ruled scalar read. The nonfinite exact-output fixture changes its two sticky INVALID outputs from true to false because those legacy indexed reads no longer normalize NaN. Base/tip isolation receipts prove the cause; strict NaN keeps its first diagnostic and INVALID. Numeric flags 33/33; full release suite 4606/4606, failures=0, skipped=10, sections=304, rc0; embed-smoke rc0; completed strict differential rc0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF Legacy strict-math buffer-index expectations updated in this same file-group commit; strict math gate rc=0.
R1.6z-D1: raw stored-double element equality, NaN unequal to itself, signed zeros equal, no errors or math flags. Runtime/compiler/task/tape float producers retain kinds. Six MAP rows green across four tiers, strict 0/1; exact diagnostic contract. Release build rc=0 warnings=0; executed docs updated with behavior and ruling/prior-art reasoning. Reviewed amendment under R1.6z-D1 point 1 / N11 and R1.6 plan rule 4: NG38/NG39 assert false for NaN buffer equality and unchanged math flags, replacing the legacy INVALID-write expectations in this same behavior commit. Numeric flags 33/33; full release suite 4606/4606, failures=0, skipped=10, sections=304, rc0; embed-smoke rc0; completed strict differential rc0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Three float boxes use the exact same make_float pool/guard. slot_view reads its already-proven float through slot_f64_value, preserving raw payload behavior for direct-C facades. No ownership or numeric-kind change. Bridge definitions remain solely for later fixture/final deletion groups. Release build rc=0 warnings=0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.6z-D1: getter preserves canonical/payload NaN, infinities and negative zero; valid reads never raise or change flags. Wrong-type/OOB behavior unchanged. Public header and embedding guide document contract. C getter gate checks=36 failures=0; release build rc=0 warnings=0. Reviewed amendment under R1.6 plan rule 4, R1.6z-D1 point 2 / N11: the complete C/embed getter sweep found one legacy pin at embed_smoke.c:673 (stored INFINITY == EIGS_NUM_MAX). Replace it with memcmp against the stored double, no pending error, and unchanged seeded math flags. No other old NaN/inf getter pin found. Acceptance: release build 1/1 rc0; embed-smoke 1/1 rc0; embed-smoke-asan 1/1 rc0 with detect_leaks=1; old-assertion plant 1/1 killed at rc2, exactly one FAIL, then source restored. Original C getter gate 36/36 unchanged. No frozen expectation or runtime change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Explicit double producers/readers retain float kind; make_float_permanent preserves no-state fixtures. Retire the three old bridge classifier entries (their raw-NaN behavior is intentionally not reinterpreted as a finite data-reader expectation). Final typed readers keep their independent matrix. Release build and container slot C test rc=0. Final deletion follows in its own commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
All 21 transitional tokens absent without aliases. Production and C-fixture meter measured zero before final removal (actual compiler diagnostics archived). Delete obsolete definitions, seven already-dead marked helpers and the matrix formatter whose last callers were removed in group6. Retired vocabulary is required absent. Remove five obsolete classifier dispositions; review embed smoke bool-slot classifier. Normal build warnings=0; num-read and slot-layer green; six MAP rows green in four tiers, strict 0/1. Declare R1.6z landed. Frozen branch files unchanged. Reviewed legacy store pin: old clamped-index assertion is red on candidate, then updated under the pre-registered N13/R1.6d-D1 boundary; raw non-finite store round trip uses N11 IEEE buffer equality. Focused store gate green in interpreter/JIT-enabled and strict 0/1 (four runs). No frozen expectation change. Preserve the legacy store assertion tally with assert_eq: Tests=184 Pass=184 Fail=0 in all four interpreter/JIT-enabled strict-mode runs. Reviewed gate-pin amendment (brief lesson 6): builtin_exec_capture and builtin_tensor_load differ only by retired constructor spelling inside comments. Executable C and whole-argument helper closures are unchanged. Repin exactly those two exempt body/source hashes and record the reason. Each repinned check was independently planted red once (rc1, exactly its named source/helper error), then restored byte-for-byte; shape contract 268 candidates / 139 guarded / 129 exempt / 0 errors. Full release suite 4606/4606, failures=0, skipped=10, sections=304, rc0; completed strict differential rc0. No gate logic, runtime, frozen row or D2 change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.6z-D2 (#1758 comment 6385903088). Raw SGD NaN through list/dict/nested/cyclic self-comparison and membership; finite cycle and 40-level shared DAG controls. Strict 0/1. Before fix: RED 4/4 tiers (off/default/OSR/trace), each program exits 0 with wrong answers; existing d8a9d2c runtime unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.6z-D2 (#1758 comment 6385903088), No silent wrong answers. Iterative borrowed-pointer walk with a visited hash set; buffers visited once, cycles terminate. Distinct-container pairwise traversal/depth cap unchanged; R2.2 extension documented. D2 MAP green 4/4 tiers, strict 0/1, finite 40-level shared DAG, nested/cyclic NaN, membership and flags. make: 0 warnings. Deleted-token comment removed. Reviewed amendment: refresh the generated numeric inventory after line shifts; move the existing buffer-identity calibration match to the new block (the original identity plant proves it red). Independent critic found stale normalization prose in README/SPEC; reconcile it with D1/D2 and indexing/iteration. Runtime and preregistered fixture unchanged. Reviewed gate-population amendment: the whole final Phase 2 check exposed a MAP reference written as a command span rather than a path. Name the existing getter C fixture and reader script explicitly; preserve the command arguments separately. The real getter passed 36/36 checks; all program tiers, token/inventory and other C gates were green. This changes no expectation, runtime or test executable. Full train receipts are invalidated and rerun. Mechanical continuation amendment: regenerate the numeric inventory after the reviewed embed getter pin removes EIGS_NUM_MAX and shifts its later source anchors. No inventory-generator, runtime or D2 fixture change. Reviewed continuation 4 cost amendment, original brief lesson10 / #1939: all 11 OVER rows profiled against make-built main dde78c5 and pre-R1.6z 2ba66cc in three serial arms. Raw per-function Ir accounts for final numeric readers, finite buffer-data boundaries and VM code-generation changes; constructor alias removal is accounted separately. Tighten all 11 STALE rows; recover_round remains R5. Independent critic reviewed raw profiles, formulas, CI exception and scope. Cost stage: workloads=15 rows=30 over_declared_max=0 stale_declarations=0 PASS, rc0; CI bench gate rc0, 9/9 declarations applied. All 22 changed rows are within 3% of allowed Ir; local margins and prior CI inference are recorded in declarations and evidence. No executable, frozen expectation or other source changes. bench/conservative_observed_loop.eigs jit: max 27.2->26.5, local delta=26.09493323%, margin=0.40506677pp. R1.6z measured against pre-round2ba66cc8: old Ir=100175815, tip Ir=99685893, net -489922 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -9999 Ir (vm_run_ex -9999 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +99 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +107 Ir; every function delta preserved) bench/conservative_observed_loop.eigs off: max 22.7->22.1, local delta=21.85575982%, margin=0.24424018pp. R1.6z measured against pre-round2ba66cc8: old Ir=116230547, tip Ir=115630461, net -600086 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -119999 Ir (vm_run_ex -119999 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual -65 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions -57 Ir; every function delta preserved) bench/conservative_unobserved_loop.eigs jit: max 33.9->33.1, local delta=32.83859521%, margin=0.26140479pp. R1.6z measured against pre-round2ba66cc8: old Ir=83937756, tip Ir=83452788, net -484968 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -4998 Ir (vm_run_ex -4998 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +52 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +60 Ir; every function delta preserved) bench/conservative_unobserved_loop.eigs off: max 27.2->26.5, local delta=26.29338019%, margin=0.20661981pp. R1.6z measured against pre-round2ba66cc8: old Ir=100157519, tip Ir=99617487, net -540032 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -59998 Ir (vm_run_ex -59998 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual -12 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions -4 Ir; every function delta preserved) bench/observed_loop.eigs jit: max 48.2->47.1, local delta=46.85956630%, margin=0.24043370pp. R1.6z measured against pre-round2ba66cc8: old Ir=63796565, tip Ir=63311655, net -484910 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -5001 Ir (vm_run_ex -5001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +113 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +121 Ir; every function delta preserved) bench/observed_loop.eigs off: max 33.8->33.2, local delta=32.91914844%, margin=0.28085156pp. R1.6z measured against pre-round2ba66cc8: old Ir=82326014, tip Ir=81785998, net -540016 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -60001 Ir (vm_run_ex -60001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +7 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +15 Ir; every function delta preserved) bench/scalar_loop.eigs jit: max 89.3->88.1, local delta=87.89544429%, margin=0.20455571pp. R1.6z measured against pre-round2ba66cc8: old Ir=60675645, tip Ir=60315786, net -359859 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -40001 Ir (vm_run_ex -40001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -320022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +164 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +172 Ir; every function delta preserved) bench/scalar_loop.eigs off: max 43.7->43, local delta=42.70394338%, margin=0.29605662pp. R1.6z measured against pre-round2ba66cc8: old Ir=65641792, tip Ir=65281914, net -359878 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -40001 Ir (vm_run_ex -40001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -320022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +145 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +153 Ir; every function delta preserved) bench/unobserved_armed_loop.eigs off: max 9.0->9.4, local delta=9.10122491%, margin=0.29877509pp. R1.6z measured against pre-round2ba66cc8: old Ir=929245584, tip Ir=930445331, net +1199747 Ir; shared VM dispatch/helper code-generation effect of bridge retirement +1200001 Ir (vm_run_ex +1200001 Ir); other-function residual -254 Ir (other runtime functions -13 Ir; external string/number-formatting/startup functions -241 Ir; every function delta preserved) bench/unobserved_loop.eigs jit: max 48.2->47.1, local delta=46.85050059%, margin=0.24949941pp. R1.6z measured against pre-round2ba66cc8: old Ir=63804716, tip Ir=63319820, net -484896 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -5001 Ir (vm_run_ex -5001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +127 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +135 Ir; every function delta preserved) bench/unobserved_loop.eigs off: max 33.8->33.2, local delta=32.91480511%, margin=0.28519489pp. R1.6z measured against pre-round2ba66cc8: old Ir=82334123, tip Ir=81794226, net -539897 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -60001 Ir (vm_run_ex -60001 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -480022 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); other-function residual +126 Ir (other runtime functions -8 Ir; external string/number-formatting/startup functions +134 Ir; every function delta preserved) tests/bench_buf_mix.eigs jit: max 312.9->321.8, local delta=321.59468680%, margin=0.20531320pp. R1.6z measured against pre-round2ba66cc8: old Ir=3111202023, tip Ir=3178233059, net +67031036 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +48951663 Ir (eigs_float_arg +18524210 Ir, eigs_number_arg +38810652 Ir, eigs_num_arg_slow -8383199 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +15876000 Ir (buffer_read_f64 +21168000 Ir, jit_helper_index_get -5292000 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +2203008 Ir (vm_run_ex +2203008 Ir); constructor alias retirement -2 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +362 Ir (other runtime functions -27 Ir; external string/number-formatting/startup functions +389 Ir; every function delta preserved) tests/bench_buf_mix.eigs off: max 98.7->103, local delta=102.70259655%, margin=0.29740345pp. R1.6z measured against pre-round2ba66cc8: old Ir=3127852086, tip Ir=3194883016, net +67030930 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +48951663 Ir (eigs_float_arg +18524210 Ir, eigs_number_arg +38810652 Ir, eigs_num_arg_slow -8383199 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +15876000 Ir (buffer_read_f64 +21168000 Ir, jit_helper_index_get -5292000 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +2203008 Ir (vm_run_ex +2203008 Ir); constructor alias retirement -2 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +256 Ir (other runtime functions -27 Ir; external string/number-formatting/startup functions +283 Ir; every function delta preserved) tests/bench_buf_resample.eigs jit: max 202.1->207.4, local delta=207.17516274%, margin=0.22483726pp. R1.6z measured against pre-round2ba66cc8: old Ir=14578356573, tip Ir=14840872110, net +262515537 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +207811659 Ir (eigs_float_arg +126290530 Ir, eigs_number_arg +216479136 Ir, eigs_num_arg_slow -134958007 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +43200018 Ir (buffer_read_f64 +57600024 Ir, jit_helper_index_get -14400006 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +11503643 Ir (vm_run_ex +11503643 Ir); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +212 Ir (other runtime functions -26 Ir; external string/number-formatting/startup functions +238 Ir; every function delta preserved) tests/bench_buf_resample.eigs off: max 70.7->73.7, local delta=73.49685726%, margin=0.20314274pp. R1.6z measured against pre-round2ba66cc8: old Ir=14621999324, tip Ir=14884514976, net +262515652 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +207811659 Ir (eigs_float_arg +126290530 Ir, eigs_number_arg +216479136 Ir, eigs_num_arg_slow -134958007 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +43200018 Ir (buffer_read_f64 +57600024 Ir, jit_helper_index_get -14400006 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +11503643 Ir (vm_run_ex +11503643 Ir); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +327 Ir (other runtime functions -26 Ir; external string/number-formatting/startup functions +353 Ir; every function delta preserved) tests/bench_dmg_shape.eigs jit: max 230.1->231.1, local delta=230.89514065%, margin=0.20485935pp. R1.6z measured against pre-round2ba66cc8: old Ir=4215433176, tip Ir=4229812330, net +14379154 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +196608 Ir (eigs_float_arg +655360 Ir, eigs_number_arg +786432 Ir, eigs_num_arg_slow -1245184 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +9000000 Ir (buffer_read_f64 +12000000 Ir, jit_helper_index_get -3000000 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +5187517 Ir (vm_run_ex +5187517 Ir); constructor alias retirement -4 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); other-function residual -4967 Ir (other runtime functions -103 Ir; external string/number-formatting/startup functions -4864 Ir; every function delta preserved) tests/bench_dmg_shape.eigs off: max 76.7->77.3, local delta=77.01532116%, margin=0.28467884pp. R1.6z measured against pre-round2ba66cc8: old Ir=4197227719, tip Ir=4211611742, net +14384023 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +196608 Ir (eigs_float_arg +655360 Ir, eigs_number_arg +786432 Ir, eigs_num_arg_slow -1245184 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +9000000 Ir (buffer_read_f64 +12000000 Ir, jit_helper_index_get -3000000 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +5187517 Ir (vm_run_ex +5187517 Ir); constructor alias retirement -4 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); other-function residual -98 Ir (other runtime functions -59 Ir; external string/number-formatting/startup functions -39 Ir; every function delta preserved) tests/bench_idxset.eigs jit: max 457.5->459.2, local delta=458.93432994%, margin=0.26567006pp. R1.6z measured against pre-round2ba66cc8: old Ir=534010570, tip Ir=535405691, net +1395121 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +300000 Ir (eigs_float_arg +1000000 Ir, eigs_number_arg +1200000 Ir, eigs_num_arg_slow -1900000 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +18 Ir (buffer_read_f64 +24 Ir, jit_helper_index_get -6 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +1100000 Ir (vm_run_ex +1100000 Ir); constructor alias retirement -4 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); other-function residual -4893 Ir (other runtime functions -55 Ir; external string/number-formatting/startup functions -4838 Ir; every function delta preserved) tests/bench_idxset.eigs off: max 127.8->128.5, local delta=128.26360227%, margin=0.23639773pp. R1.6z measured against pre-round2ba66cc8: old Ir=534004479, tip Ir=535404391, net +1399912 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +300000 Ir (eigs_float_arg +1000000 Ir, eigs_number_arg +1200000 Ir, eigs_num_arg_slow -1900000 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +18 Ir (buffer_read_f64 +24 Ir, jit_helper_index_get -6 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +1100000 Ir (vm_run_ex +1100000 Ir); constructor alias retirement -4 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); other-function residual -102 Ir (other runtime functions -13 Ir; external string/number-formatting/startup functions -89 Ir; every function delta preserved) tests/bench_pcm_codec.eigs jit: max 376.8->383.8, local delta=383.52384573%, margin=0.27615427pp. R1.6z measured against pre-round2ba66cc8: old Ir=39023891158, tip Ir=39585491642, net +561600484 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +468002880 Ir (eigs_float_arg +280809600 Ir, eigs_number_arg +483611520 Ir, eigs_num_arg_slow -296418240 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +86400018 Ir (buffer_read_f64 +115200024 Ir, jit_helper_index_get -28800006 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +7197108 Ir (vm_run_ex +7197108 Ir); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +473 Ir (other runtime functions -39 Ir; external string/number-formatting/startup functions +512 Ir; every function delta preserved) tests/bench_pcm_codec.eigs off: max 98.5->101.4, local delta=101.13250999%, margin=0.26749001pp. R1.6z measured against pre-round2ba66cc8: old Ir=39206179064, tip Ir=39767779547, net +561600483 Ir; final numeric-reader migration at VM buffer stores/mixed arithmetic +468002880 Ir (eigs_float_arg +280809600 Ir, eigs_number_arg +483611520 Ir, eigs_num_arg_slow -296418240 Ir); VM index/iteration/leaf helper migration including R1.6d-D1 finite-data boundary on buffers +86400018 Ir (buffer_read_f64 +115200024 Ir, jit_helper_index_get -28800006 Ir); shared VM dispatch/helper code-generation effect of bridge retirement +7197108 Ir (vm_run_ex +7197108 Ir); IEEE/structural-equality dispatch change +5 Ir (values_equal_impl +5 Ir); other-function residual +472 Ir (other runtime functions -39 Ir; external string/number-formatting/startup functions +511 Ir; every function delta preserved) tests/bench_perf.eigs off: max 19.2->18.8, local delta=18.55142783%, margin=0.24857217pp. R1.6z measured against pre-round2ba66cc8: old Ir=349488837, tip Ir=348433201, net -1055636 Ir; shared VM dispatch/helper code-generation effect of bridge retirement -220005 Ir (vm_run_ex -220005 Ir); runtime/container bridge-retirement TU code-generation/inlining consequence in list_append -816088 Ir (source body unchanged; measured old/tip assembly drops three saved registers and stack adjustment, eight executed prologue/epilogue instructions per ordinary append); constructor alias retirement -20 Ir (make_num/make_float combined, avoiding a symbol-rename false cost); other-function residual -19523 Ir (other runtime functions -213 Ir; external string/number-formatting/startup functions -19310 Ir; every function delta preserved) Final acceptance counts: precheck: selftests: enrolment 46/46; product-triggered rows 9 (bound <= 60s each); 7 self-tests selected; selftests: 7 passed, 0 failed; total 1180.26s; precheck: 19 passed, 0 failed, 0 skipped in 1237s phase2-builtins-all-profiles: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-check: phase2-check: PASS phase2-ci: phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11; phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS; phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0; phase2-ci: PASS (through=R1.6z) lib-diff: phase2-lib-diff: range=[-3, 110] modules=78 importable=66 functions=889 via_reexport=95 no_params=24 calls=281423 examined=281423 unexamined=0 both_ok=124575 both_raise=156668 improved=0; phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11; phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS full-release-make-test: RESULTS: 4606/4606 passed, 0 failed, 10 skipped extensions-suite: RESULTS: 4849/4849 passed, 0 failed, 5 skipped corpus-adjudication: Corpus adjudicated: 10 differences traced to R1.6z behavior/registration; sole expected runaway timeout; no other crash/timeout. replay-diff: replay_diff: OK (267 programs record+replay; 27 at the documented boundary; 0 nondeterministic; 1 ledgered) jit-diff: jit_diff: OBS examined=772 denied=13; jit_diff: OK (267 programs x {jit, osr} vs the interpreter; suite-env completed=16; OBS examined=772 denied=13; 32 arms adjudicated; 2 ledgered) cost-measure: phase2-cost: workloads=15 rows=30 over_declared_max=0 stale_declarations=0 PASS D2: red 4/4 tiers on d8a9d2c; green 4/4 tiers on release and ASan, strict 0/1. Three D2 plants killed (identity rc1, missing visited set rc124 at 30s, top-level-only rc1). Shared DAG true in 0.0072–0.0117 seconds. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
|
R1.6z LANDED on phase2-numbers: What the round did:
Gates (final fingerprint
Cost: 11 rows re-declared and 11 tightened, each attributed per component by Cachegrind. For example, Legacy pins re-stated to the ruled behaviour, each in the group commit that changed it:
Closing #1919 (all five boxes) and #1920 (R1.6z-D1 is implemented, with both pre-registrations green). Next: sync #8 (main |
All required gates complete Exact parents: db34946 + 3d8a14b Resolved all nine conflicts; preserve Phase2 numeric kinds and validation ordering. Main tree locking, shared argument guards, replay helper, bool wording and release cut retained. Two Phase2 enrolment declarations integrate the new lock tools (Fixes #1968). amalgamation-clang: actual rc=0; amalgamation-clang-a2.log amalgamation-gcc: actual rc=0; amalgamation-gcc-a2.log baseline-checkout: actual rc=0; baseline-checkout-a1.log baseline-clone: actual rc=0; baseline-clone-a1.log baseline-release-build: actual rc=0; baseline-release-build-a2.log build-server-db: actual rc=0; build-server-db-a3.log build-server: actual rc=0; build-server-a2.log build-zlib: actual rc=0; build-zlib-a3.log builtin-doc-examples: actual rc=1; builtin-doc-examples-a1.log candidate-release-build: actual rc=0; candidate-release-build-a4.log checkpoint-docs-phase2-and-bool-wording: actual rc=0; checkpoint-docs-phase2-and-bool-wording-a1.log checkpoint-docs-union-complete: actual rc=0; checkpoint-docs-union-complete-a1.log checkpoint-enrolment-integration: actual rc=0; checkpoint-enrolment-integration-a1.log checkpoint-final-source: actual rc=0; checkpoint-final-source-a1.log checkpoint-http-guards-and-int-results: actual rc=0; checkpoint-http-guards-and-int-results-a1.log checkpoint-inventory: actual rc=0; checkpoint-inventory-a1.log checkpoint-makefile-union: actual rc=0; checkpoint-makefile-union-a1.log checkpoint-replay-helpers-and-readers: actual rc=0; checkpoint-replay-helpers-and-readers-a1.log checkpoint-selftests-layout: actual rc=0; checkpoint-selftests-layout-a1.log checkpoint-selftests-union: actual rc=0; checkpoint-selftests-union-a1.log checkpoint-shape-conflicts-phase2-start: actual rc=0; checkpoint-shape-conflicts-phase2-start-a1.log checkpoint-shape-reviewed: actual rc=0; checkpoint-shape-reviewed-a1.log ci-bench-regression: actual rc=0; ci-bench-regression-a1.log corpus-adjudication: actual rc=0; corpus-adjudication-a2.log corpus-diff: actual rc=1; corpus-diff-a2.log cost-measure: actual rc=0; cost-measure-a1.log diffs-release-select: actual rc=0; diffs-release-select-a2.log doc-examples: actual rc=0; doc-examples-a1.log docs-claims-selftest: actual rc=0; docs-claims-selftest-a2.log docs-claims: actual rc=0; docs-claims-a1.log embed-smoke-asan-server: actual rc=0; embed-smoke-asan-server-a1.log embed-smoke-asan: actual rc=0; embed-smoke-asan-a1.log embed-smoke-gfx: actual rc=0; embed-smoke-gfx-a1.log embed-smoke: actual rc=0; embed-smoke-a1.log enrolment-declaration-plant: actual rc=1; enrolment-declaration-plant-a1.log enrolment-declaration-restored: actual rc=0; enrolment-declaration-restored-a1.log enrolment-integration-selftest: actual rc=0; enrolment-integration-selftest-a1.log enrolment-integration: actual rc=0; enrolment-integration-a1.log enrolment-selftest: actual rc=0; enrolment-selftest-a2.log extensions-server-select: actual rc=0; extensions-server-select-a1.log extensions-suite: actual rc=0; extensions-suite-a1.log final-inventory: actual rc=0; final-inventory-a1.log final-shape: actual rc=0; final-shape-a1.log final-source-evidence: actual rc=0; final-source-evidence-a1.log final-whitespace: actual rc=0; final-whitespace-a1.log focus-release-restore: actual rc=0; focus-release-restore-a3.log focus-server-select: actual rc=0; focus-server-select-a3.log full-release-make-test: actual rc=0; full-release-make-test-a1.log full-release-select: actual rc=0; full-release-select-a1.log gcc-release-O0: actual rc=0; gcc-release-O0-a2.log gcc-release-O1: actual rc=0; gcc-release-O1-a2.log gcc-release-O2: actual rc=0; gcc-release-O2-a2.log http-hs00: actual rc=0; http-hs00-a1.log inventory-check: actual rc=0; inventory-check-a1.log inventory-refresh: actual rc=0; inventory-refresh-a1.log jit-diff: actual rc=0; jit-diff-a2.log lib-diff: actual rc=0; lib-diff-a1.log main-after-build: actual rc=0; main-after-build-a1.log main-after-checkout: actual rc=0; main-after-checkout-a1.log main-after-clone: actual rc=0; main-after-clone-a1.log main-after-record-bench_dmg_shape: actual rc=0; main-after-record-bench_dmg_shape-a1.log main-after-record-bench_idxset: actual rc=0; main-after-record-bench_idxset-a1.log main-after-record-bench_perf: actual rc=0; main-after-record-bench_perf-a1.log main-after-record-trace_mt_replay_workers: actual rc=0; main-after-record-trace_mt_replay_workers-a1.log main-after-replay-bench_dmg_shape: actual rc=0; main-after-replay-bench_dmg_shape-a1.log main-after-replay-bench_idxset: actual rc=0; main-after-replay-bench_idxset-a1.log main-after-replay-bench_perf: actual rc=0; main-after-replay-bench_perf-a1.log main-after-replay-trace_mt_replay_workers: actual rc=0; main-after-replay-trace_mt_replay_workers-a1.log main-before-build: actual rc=0; main-before-build-a1.log main-before-checkout: actual rc=0; main-before-checkout-a1.log main-before-clone: actual rc=0; main-before-clone-a1.log main-before-record-bench_dmg_shape: actual rc=0; main-before-record-bench_dmg_shape-a1.log main-before-record-bench_idxset: actual rc=0; main-before-record-bench_idxset-a1.log main-before-record-bench_perf: actual rc=0; main-before-record-bench_perf-a1.log main-before-record-trace_mt_replay_workers: actual rc=0; main-before-record-trace_mt_replay_workers-a1.log main-before-replay-bench_dmg_shape: actual rc=0; main-before-replay-bench_dmg_shape-a1.log main-before-replay-bench_idxset: actual rc=0; main-before-replay-bench_idxset-a1.log main-before-replay-bench_perf: actual rc=0; main-before-replay-bench_perf-a1.log main-before-replay-trace_mt_replay_workers: actual rc=0; main-before-replay-trace_mt_replay_workers-a1.log main-before-to-main-after-diagnostic-runtime-retag-bench_dmg_shape: actual rc=0; main-before-to-main-after-diagnostic-runtime-retag-bench_dmg_shape-a1.log main-before-to-main-after-diagnostic-runtime-retag-bench_idxset: actual rc=0; main-before-to-main-after-diagnostic-runtime-retag-bench_idxset-a1.log main-before-to-main-after-diagnostic-runtime-retag-bench_perf: actual rc=0; main-before-to-main-after-diagnostic-runtime-retag-bench_perf-a1.log main-before-to-main-after-diagnostic-runtime-retag-trace_mt_replay_workers: actual rc=0; main-before-to-main-after-diagnostic-runtime-retag-trace_mt_replay_workers-a1.log main-before-vs-main-after-cross-replay-bench_dmg_shape: actual rc=3; main-before-vs-main-after-cross-replay-bench_dmg_shape-a1.log main-before-vs-main-after-cross-replay-bench_idxset: actual rc=3; main-before-vs-main-after-cross-replay-bench_idxset-a1.log main-before-vs-main-after-cross-replay-bench_perf: actual rc=3; main-before-vs-main-after-cross-replay-bench_perf-a1.log main-before-vs-main-after-cross-replay-trace_mt_replay_workers: actual rc=3; main-before-vs-main-after-cross-replay-trace_mt_replay_workers-a1.log main-before-vs-main-after-header-only-bench_dmg_shape: actual rc=3; main-before-vs-main-after-header-only-bench_dmg_shape-a1.log main-before-vs-main-after-header-only-bench_idxset: actual rc=3; main-before-vs-main-after-header-only-bench_idxset-a1.log main-before-vs-main-after-header-only-bench_perf: actual rc=3; main-before-vs-main-after-header-only-bench_perf-a1.log main-before-vs-main-after-header-only-trace_mt_replay_workers: actual rc=3; main-before-vs-main-after-header-only-trace_mt_replay_workers-a1.log make-lock-selftest: actual rc=0; make-lock-selftest-a2.log merged-record-bench_dmg_shape: actual rc=0; merged-record-bench_dmg_shape-a1.log merged-record-bench_idxset: actual rc=0; merged-record-bench_idxset-a1.log merged-record-bench_perf: actual rc=0; merged-record-bench_perf-a1.log merged-record-trace_mt_replay_workers: actual rc=0; merged-record-trace_mt_replay_workers-a1.log merged-replay-bench_dmg_shape: actual rc=0; merged-replay-bench_dmg_shape-a1.log merged-replay-bench_idxset: actual rc=0; merged-replay-bench_idxset-a1.log merged-replay-bench_perf: actual rc=0; merged-replay-bench_perf-a1.log merged-replay-trace_mt_replay_workers: actual rc=0; merged-replay-trace_mt_replay_workers-a1.log patch-reconstruction-apply: actual rc=0; patch-reconstruction-apply-a1.log patch-reconstruction-check: actual rc=0; patch-reconstruction-check-a1.log phase2-base-record-bench_dmg_shape: actual rc=0; phase2-base-record-bench_dmg_shape-a1.log phase2-base-record-bench_idxset: actual rc=0; phase2-base-record-bench_idxset-a1.log phase2-base-record-bench_perf: actual rc=0; phase2-base-record-bench_perf-a1.log phase2-base-record-trace_mt_replay_workers: actual rc=0; phase2-base-record-trace_mt_replay_workers-a1.log phase2-base-replay-bench_dmg_shape: actual rc=0; phase2-base-replay-bench_dmg_shape-a1.log phase2-base-replay-bench_idxset: actual rc=0; phase2-base-replay-bench_idxset-a1.log phase2-base-replay-bench_perf: actual rc=0; phase2-base-replay-bench_perf-a1.log phase2-base-replay-trace_mt_replay_workers: actual rc=0; phase2-base-replay-trace_mt_replay_workers-a1.log phase2-base-to-merged-diagnostic-runtime-retag-bench_dmg_shape: actual rc=0; phase2-base-to-merged-diagnostic-runtime-retag-bench_dmg_shape-a1.log phase2-base-to-merged-diagnostic-runtime-retag-bench_idxset: actual rc=0; phase2-base-to-merged-diagnostic-runtime-retag-bench_idxset-a1.log phase2-base-to-merged-diagnostic-runtime-retag-bench_perf: actual rc=0; phase2-base-to-merged-diagnostic-runtime-retag-bench_perf-a1.log phase2-base-to-merged-diagnostic-runtime-retag-trace_mt_replay_workers: actual rc=0; phase2-base-to-merged-diagnostic-runtime-retag-trace_mt_replay_workers-a1.log phase2-base-vs-merged-cross-replay-bench_dmg_shape: actual rc=3; phase2-base-vs-merged-cross-replay-bench_dmg_shape-a1.log phase2-base-vs-merged-cross-replay-bench_idxset: actual rc=3; phase2-base-vs-merged-cross-replay-bench_idxset-a1.log phase2-base-vs-merged-cross-replay-bench_perf: actual rc=3; phase2-base-vs-merged-cross-replay-bench_perf-a1.log phase2-base-vs-merged-cross-replay-trace_mt_replay_workers: actual rc=3; phase2-base-vs-merged-cross-replay-trace_mt_replay_workers-a1.log phase2-base-vs-merged-header-only-bench_dmg_shape: actual rc=3; phase2-base-vs-merged-header-only-bench_dmg_shape-a1.log phase2-base-vs-merged-header-only-bench_idxset: actual rc=3; phase2-base-vs-merged-header-only-bench_idxset-a1.log phase2-base-vs-merged-header-only-bench_perf: actual rc=3; phase2-base-vs-merged-header-only-bench_perf-a1.log phase2-base-vs-merged-header-only-trace_mt_replay_workers: actual rc=3; phase2-base-vs-merged-header-only-trace_mt_replay_workers-a1.log phase2-blocked-driver: actual rc=2; phase2-blocked-driver-a1.log phase2-builtins-all-profiles: actual rc=0; phase2-builtins-all-profiles-a1.log phase2-builtins-primary-server-db: actual rc=0; phase2-builtins-primary-server-db-a1.log phase2-builtins-primary-server: actual rc=0; phase2-builtins-primary-server-a1.log phase2-builtins-primary-zlib: actual rc=0; phase2-builtins-primary-zlib-a1.log phase2-check: actual rc=0; phase2-check-a1.log phase2-ci: actual rc=0; phase2-ci-a1.log phase2-select-release: actual rc=0; phase2-select-release-a1.log postgres-create: actual rc=0; postgres-create-a1.log postgres-db-exists: actual rc=0; postgres-db-exists-a2.log postgres-init: actual rc=0; postgres-init-a1.log postgres-prepare-for-tests: actual rc=0; postgres-prepare-for-tests-a1.log postgres-prepare: actual rc=0; postgres-prepare-a1.log postgres-start: actual rc=0; postgres-start-a1.log postgres-status: actual rc=0; postgres-status-a2.log postgres-witness: actual rc=0; postgres-witness-a2.log replay-diff: actual rc=0; replay-diff-a2.log selftests-registry: actual rc=0; selftests-registry-a1.log shape-before: actual rc=1; shape-before-a1.log shape-final: actual rc=0; shape-final-a1.log shape-live-plant: actual rc=1; shape-live-plant-a1.log shape-repinned: actual rc=0; shape-repinned-a1.log shape-restored: actual rc=0; shape-restored-a1.log tape-kinds: actual rc=0; tape-kinds-a1.log tests-release-restore: actual rc=0; tests-release-restore-a1.log trace-header-record: actual rc=0; trace-header-record-a2.log trace-header-replay: actual rc=0; trace-header-replay-a2.log verification-clone: actual rc=0; verification-clone-a1.log Actual gate counts: amalgamation-clang: Results: 7 passed, 0 failed amalgamation-gcc: Results: 7 passed, 0 failed cost-measure: phase2-cost: source=codspeed.yml workloads=15 tiers=2 undeclared_max=+0.3% declarations=30 stale_below_max=0.5 logs=/tmp/phase2-cost-_pj3jx63 cost-measure: phase2-cost: workloads=15 rows=30 over_declared_max=0 stale_declarations=0 PASS doc-examples: Doc populations pinned: 12 of 12 row(s) applied doc-examples: Doc examples: 238 checked, 238 passed, 0 failed, 5 skipped, 0 unreadable fence(s) docs-claims-selftest: SELFTEST: control: PASS docs-claims-selftest: SELFTEST: path: PASS docs-claims-selftest: SELFTEST: flag: PASS docs-claims-selftest: SELFTEST: target: PASS docs-claims-selftest: SELFTEST: name: PASS docs-claims-selftest: SELFTEST: contract-name: PASS docs-claims-selftest: SELFTEST: count: PASS docs-claims-selftest: SELFTEST: stale-concurrency: PASS docs-claims-selftest: SELFTEST: bool-result: PASS docs-claims-selftest: SELFTEST: strict-intro: PASS docs-claims-selftest: SELFTEST: strict-later-gfx: PASS docs-claims-selftest: SELFTEST: strict-audio: PASS docs-claims-selftest: SELFTEST: strict-core-row: PASS docs-claims-selftest: SELFTEST: strict-audio-short: PASS docs-claims-selftest: SELFTEST: strict-section-missing: PASS docs-claims-selftest: SELFTEST: strict-gfx-section-missing: PASS docs-claims-selftest: SELFTEST: strict-explicit-setting: PASS docs-claims-selftest: SELFTEST: enrolment: PASS docs-claims-selftest: SELFTEST: declared-set: PASS docs-claims-selftest: SELFTEST: 19 case(s) run, 19 passed, 0 failed docs-claims: BOOL RESULT WORDING: 32 constructor-derived bool builtin(s), 64 documented row/hover entrie(s), 0 hit(s) enrolment-selftest: checks=7 extensions-suite: examined=303 extensions-suite: PASS: test-enrolment: examined=129 enrolled=128 exempt=1; tools examined=76 enrolled=56 exempt=20 extensions-suite: RESULTS: 4850/4850 passed, 0 failed, 5 skipped final-inventory: examined=2120 classified=2120 unclassified=0 final-shape: SHAPE_CONTRACT: candidates=268 guarded=139 exempt=129 errors=0 full-release-make-test: examined=303 full-release-make-test: PASS: test-enrolment: examined=129 enrolled=128 exempt=1; tools examined=76 enrolled=56 exempt=20 full-release-make-test: RESULTS: 4606/4606 passed, 0 failed, 10 skipped http-hs00: HTTP_SERVER: 46 passed, 0 failed jit-diff: jit_diff: OBS examined=772 denied=13 jit-diff: jit_diff: OK (267 programs x {jit, osr} vs the interpreter; suite-env completed=16; OBS examined=772 denied=13; 32 arms adjudicated; 2 ledgered) lib-diff: phase2-lib-diff: range=[-3, 110] modules=78 importable=66 functions=889 via_reexport=95 no_params=24 calls=281423 examined=281423 unexamined=0 both_ok=124575 both_raise=156668 improved=0 lib-diff: phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11 lib-diff: phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS make-lock-selftest: make-lock selftest: 8/8 passed phase2-builtins-all-profiles: examined=310 section6=310 inventory=310 rowmeta=310 cases=312 phase2-builtins-all-profiles: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-builtins-primary-server-db: examined=310 section6=310 inventory=310 rowmeta=310 cases=312 phase2-builtins-primary-server-db: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-builtins-primary-server: examined=310 section6=310 inventory=310 rowmeta=310 cases=312 phase2-builtins-primary-server: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-builtins-primary-zlib: examined=310 section6=310 inventory=310 rowmeta=310 cases=312 phase2-builtins-primary-zlib: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-check: examined=2120 classified=2120 unclassified=0 phase2-check: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-check: phase2-check: PASS phase2-ci: phase2-ci: through=R1.6z (the complete declared prefix of MAP rounds) phase2-ci: examined=2120 classified=2120 unclassified=0 phase2-ci: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-ci: phase2-check: PASS phase2-ci: phase2-lib-diff: range=[-3, 110] modules=78 importable=66 functions=889 via_reexport=95 no_params=24 calls=281423 examined=281423 unexamined=0 both_ok=124575 both_raise=156668 improved=0 phase2-ci: phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11 phase2-ci: phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS phase2-ci: examined=310 section6=310 inventory=310 rowmeta=310 cases=312 phase2-ci: phase2-builtins: PASS rows=310 landed=R1.6b,R1.6c,R1.6d,R1.6e,R1.6f,R1.6g,R1.6z migrated=310 unchanged=0 phase2-ci: phase2-readers: PASS variant=release checks=4389 phase2-ci: phase2-readers: PASS variant=asan checks=4389 phase2-ci: phase2-ci: PASS (through=R1.6z) replay-diff: replay_diff: OK (267 programs record+replay; 27 at the documented boundary; 0 nondeterministic; 1 ledgered) shape-final: SHAPE_CONTRACT: candidates=268 guarded=139 exempt=129 errors=0 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
| if (av != bv) return 0; | ||
| /* R1.6z-D1: total IEEE equality on stored doubles. No | ||
| * scalar boundary, normalization, error or math-flag write. */ | ||
| if (!(a->data.buffer.data[i] == b->data.buffer.data[i])) return 0; |
|
Sync #8 landed and is GREEN:
Next: R1.7 (N6, float text). |
R1.7-D3/D4: 43/43 CHANGE tier observations red on b6f9db3; 8/8 invariant observations green. D1 direct literal already prints Python repr on the actual base (15..17 writer), so D3 general rule classifies it invariant. T1 includes0.1. Direct constant-pool probe base:8 checks,3 failures; DB:11 passed,3 failed,14 declared. Invariant wrong-output plant red; fresh critic7/7 controls and51/51 independent tier classification. No runtime source or frozen expectation changes. Continuation 6, R1.7-D7 (#1758, N6): change ctl.N8.refuse-mod's observable from print r (legacy 0 vs N6 0.0) to print (r == 0), true on both. The hot f, float operands, MOD body, warm-up and fn-stop f MOD witness are unchanged. MAP.md records D7. Derived all-18-control sweep: the only other float-output controls are leaf-float 2.25 and osr-float 150.5, already byte-stable under N6; no other stale control pin. D7 narrow checkpoint proofs (all requested commands rc=0): tier=off examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=default examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=osr examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=trace examined=105 rows tag_fail=105 branch_pass=105 vacuous=0 tag_timeout=0 tag_signal=0 controls=18 both_pass=18 witnessed=31 mapped=113 gates=8 through=R1.7 controls_witnessed=13 controls_vacuous=0 invariants=2 branch_pass=2 phase2-check: PASS RESULTS: 2/2 passed, 0 failed, 0 skipped Corpus attribution: 55 observed row explanations; 0 require judgment. Full evidence retained. Corpus adjudicated: 55 differences traced to R1.7 behavior/registration; sole expected runaway timeout; no other crash/timeout. Evidence: continue6-checks.json; sweep: continue6-sweep.json/.md; six clean-apply clones and verified extracted bundle: continue6-checkpoint-proof.json. Full train pending; not launched in continuation 6. Source fingerprint: ba0bd12bbd1a933ddf8540411388e5b4f1a78211cd78014d64f12a45923a859f Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Python repr actual C oracle42579/42579 patterns;54 pinned cases1038checks green; independent critic4202/4202 extra boundary cases. D2:7 frozen probes,6 amendments,16floatpayloads; live base/tip kind witnesses and11negative checker controls green. All238 doc examples green;34 observed output blocks and legacy MAP/suite text pins move with N6. Fixed-decimal format.fmt_num preserves3.14. Shared-writer census beforeedit; shape closure reviewed and planted; freestanding exact writer oracle green. Cost explicit --n6-text comparator has6positive/15negativecontrols; corpus remains exact. First full release inventory red is retained; final full train follows all runtime groups. Reviewed amendment (continuation 2, #1758): preserve the changelog entry on one line, prefix it with "- ", and retain its final newline. D2 is a one-time frozen-text proof; list the checker as local-only and remove its existing recurring phase2 dispatch. The frozen bar continues to SHA-pin the accepted amendments; future amendments need a new ruling. Requested checks in the checkpoint bank (all rc=0): PASS: test-enrolment: examined=129 enrolled=128 exempt=1; tools examined=77 enrolled=56 exempt=21 changelog: examined 99 changed path(s) against b6f9db3; 1 fragment(s) added; cut=0 checks=7 Only these three checks ran; the orchestrator owns train.py. Source fingerprint: 32340700adaf48890a9884b2e61acee2336b7be2677ab6f5e6f9bcfdbcfb5e55 Continuation 3 calibration repair (#1758, N6): float ADD 1.5+2.5 prints 4.0; change only cal.fnstop-cat-plant.out from 4 to 4.0. The stale output failed all four tiers before the unchanged fn-stop ADD witness could run. Real row check before: vacuous=0, named=false, branch_pass=0/4; after: vacuous=1 in each tier, named=true, branch_pass=4/4. Native RETURN remains the deliberate wrong witness; the calibration still requires (1, True). No check or witness weakened. Requested public selftest rows in /tmp/es-r17-checkpoints, actual rc=0: make-lock selftest: 8/8 passed calibration: cases=54 as-expected=54 unexpected=0 All six clean-apply/tree/manifest checkpoint proofs and refreshed bundle extraction recorded in continue3-checkpoint-proof.json. The post-check amendment changes commit metadata only; tested trees are identical. Source fingerprint: 596b197d7775d094297d85265323f5ee14b8c8df73d76287843f612fa3c97152 Continuation 4, R1.7-D5 (#1758): json_build/json_encode close in R1.7; their and str changes_vs_pre derive yes (exactly five builtins.tsv cells). R1.7 closures reuse D2 source-bound kinds and check_pair on every pre/branch line; earlier A2 closures still require pre==branch. Declare R1.7 landed and check its closures against branch independently of their R1.6 group. No probe or expectation changed. Mandatory STOP: only the first tools/phase2_builtins.sh invocation ran, with release primary, matched extension binaries and PostgreSQL. The metadata/closure phase examined=310 section6=310 inventory=310 rowmeta=310 cases=312; guarded=217 yes=199 closed_in=18 pending_profile=0 vacuous=0; closure-r17 cases=2 floats=4; ran=312 requested=312 empty_or_hookless=62 hook_runs=14 pending_profile=0. Actual live gate rc=2 with 62 additional .branch output differences (empty_or_hookless=62), including acos 0 -> 0.0, add buffer 2 -> 2.0 and num integral floats. These are outside D5. No other frozen expectation was amended. Remaining three primary profiles and both planned public-entry plants were NOT RUN because the ruling says any other flag is a STOP. No precheck, suite, broad gate or final train launched. Receipts: continue4-checks.json. Six fresh clean-apply checkpoint trees and refreshed bundle extraction: continue4-checkpoint-proof.json. This commit is a checkpoint-only candidate, not green acceptance. Final acceptance remains pending. Source fingerprint: 78f076b25442a0577801ec1859f62dd6fb58c1cda2820c23f34203978ca4bb9d Continuation 5, R1.7-D6 (#1758), supersedes the historical D5 STOP above. Derive the union from the public gate's own four-profile transcripts: each profile examined 312 cases and found the same 62 new differences; cumulative D2/D6 population=68. Remove NAMES; prove every line, same double bits, integer spelling, all non-number bytes. 205 float tokens; source-bound kinds run on pre-N6 and all four tips; numeric-looking input strings have source-bound str witnesses and stay byte-identical. Frozen programs unchanged. All 68 cumulative amendments are SHA-pinned under D6, historical numeric rulings retained. Metadata: 33 derived changes_vs_pre cells; no additional already-closed rows among the new 62, so the two D5 R1.7 closures remain. D5 A2 scope retained. Public gate now checks every amended row with the shared D2 comparator, including unclosed rows. Flush parent stdout before launching the probe child so expanded SHA records cannot splice the runner summary; final profile logs each have one complete anchored ran= line. Actual public gate results: four profiles rc=0; each examined=310 section6=310 inventory=310 rowmeta=310 cases=312; guard guarded=217 yes=199 closed_in=18 pending_profile=0 vacuous=0; closure-r17 cases=2 floats=4; ran=312 requested=312 empty_or_hookless=0 hook_runs=14 pending_profile=0; phase2-builtins PASS rows=310 migrated=310 unchanged=0. Three isolated public-entry plants each actual rc=1 and only the named failure: json_build.pre a->z rejected as non-float text; abs.pre integer->float (derived flag synced) rejected by A2; acos.branch 0.0->1.0 (accepted SHA synced) rejected as changed double bits. Checker calibration positive=1 rejected=11 PASS. Receipts: continue5-population.json, continue5-amendment-proof.json, continue5-checks.json. Six fresh clean-apply trees and verified/extracted bundle: continue5-checkpoint-proof.json. This is checkpoint acceptance for D6; the complete final train remains pending and was NOT RUN. Source fingerprint: cdb82bb25958a59b981dd5c5d20d2f09bb2a6a7b68b6f356fef515b1f3408beb Continuation 6, R1.7-D7 (#1758, N6): explicitly attribute two retained corpus process-exit changes to this group's own expectation migration (historical abd76f98). test_boxed_int_containers.eigs: base Error line 13 ASSERT FAIL: sort exact order, module line 102; moved float spellings 140737488355328.0 and 9007199254740992.0. test_json_hard.eigs: base Error line 417 ASSERT FAIL: JH97 json_build renders huge values compactly; moved expectation {"v": 1230000000000000.0}. Each retained base arm exits 1, each tip arm exits 0. corpus-attribution-reviewed.json records the D7 authority, exact assertions, baseline diagnostics, original expectation diff and evidence hashes; the existing reviewed-attribution hook produces corpus-attribution-extra.json. General automatic refusal of process-exit changes is untouched. D7 narrow checkpoint proofs (all requested commands rc=0): tier=off examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=default examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=osr examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=trace examined=105 rows tag_fail=105 branch_pass=105 vacuous=0 tag_timeout=0 tag_signal=0 controls=18 both_pass=18 witnessed=31 mapped=113 gates=8 through=R1.7 controls_witnessed=13 controls_vacuous=0 invariants=2 branch_pass=2 phase2-check: PASS RESULTS: 2/2 passed, 0 failed, 0 skipped Corpus attribution: 55 observed row explanations; 0 require judgment. Full evidence retained. Corpus adjudicated: 55 differences traced to R1.7 behavior/registration; sole expected runaway timeout; no other crash/timeout. Evidence: continue6-checks.json; sweep: continue6-sweep.json/.md; six clean-apply clones and verified extracted bundle: continue6-checkpoint-proof.json. Full train pending; not launched in continuation 6. Source fingerprint: ba0bd12bbd1a933ddf8540411388e5b4f1a78211cd78014d64f12a45923a859f Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
N14/#1762 routes all finite record scalar/slot/buffer and DB float parameters through N6; exact int64 digits through eigs_int_text. N14 MAP8/8 tier checks green; DB14 passed,0 failed(14 declared); release/DB builds0 warnings. N13 nonfinite policies unchanged. Continuation 6, R1.7-D7 (#1758, N6/N14): [0fc] pins the db harness's own 14 passed, 0 failed (14 declared), accounting for this group's seven added numeric rows. The slot-layer store encoder matrix expects f64 -0.0 -> s:-0.0, replacing old s:0. Derived C-source/population/matrix sweep found no additional stale pins; existing num_text, const_dedup_bits, native_fn, sandbox-key and slot tape/operator expectations already agree. D7 narrow checkpoint proofs (all requested commands rc=0): tier=off examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=default examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=osr examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0 tier=trace examined=105 rows tag_fail=105 branch_pass=105 vacuous=0 tag_timeout=0 tag_signal=0 controls=18 both_pass=18 witnessed=31 mapped=113 gates=8 through=R1.7 controls_witnessed=13 controls_vacuous=0 invariants=2 branch_pass=2 phase2-check: PASS RESULTS: 2/2 passed, 0 failed, 0 skipped Corpus attribution: 55 observed row explanations; 0 require judgment. Full evidence retained. Corpus adjudicated: 55 differences traced to R1.7 behavior/registration; sole expected runaway timeout; no other crash/timeout. Evidence: continue6-checks.json; sweep: continue6-sweep.json/.md; six clean-apply clones and verified extracted bundle: continue6-checkpoint-proof.json. Full train pending; not launched in continuation 6. Source fingerprint: ba0bd12bbd1a933ddf8540411388e5b4f1a78211cd78014d64f12a45923a859f Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
T1 keeps the existing tape version and kind markers; shortest shared text for scalar,buffer and observer config records. T1 twice-float3/3 tiers green; each records twice and strictly replays identical output. Release0 warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
R1.7-D4 preserves signed-zero constant keys in hash and equality. Direct probe8/8 checks green;13 R1.7 programs51/51 tier observations green. Dedup-by-value plant belongs to final plant train. Release0 warnings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
Record D2 seven-probe/six-amendment boundary, D3 measured two invariants and11change rows, D4 direct constant-pool witness; all51 final MAP tier observations green. N6 shortest writer and N14/T1 sites covered by actual C/ASan/freestanding/fulltrain gates. Corpus retains full raw/comparer evidence without changing counts or normalizing differences;12 ownership/capture helpercontrols green. Cost comparison remains byte-strict by default; N6 opt-in calibrated6positive/15negativecontrols. Consumer candidate-call census16repos recorded. Final acceptance counts appended after complete train. Continuation 3 gate maintenance: apply main PR #1970's exact comment and unset EIGS_TREE_LOCK_HELD after ROOT in tools/make_lock_check.sh. Entire script blob matches #1970: c0afa51. Train #2 under make inherited the recursive-lock bypass and failed case 1, 0/8 cases passed. The selftest now clears it; case 3 still sets it explicitly. Requested public selftest rows in /tmp/es-r17-checkpoints, actual rc=0: make-lock selftest: 8/8 passed calibration: cases=54 as-expected=54 unexpected=0 All six clean-apply/tree/manifest checkpoint proofs and refreshed bundle extraction recorded in continue3-checkpoint-proof.json. The post-check amendment changes commit metadata only; tested trees are identical. Source fingerprint: 596b197d7775d094297d85265323f5ee14b8c8df73d76287843f612fa3c97152 Final acceptance counts: phase2-check: tier=off examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0; tier=default examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0; tier=osr examined=111 rows tag_fail=111 branch_pass=111 vacuous=0 tag_timeout=0 tag_signal=0; tier=trace examined=105 rows tag_fail=105 branch_pass=105 vacuous=0 tag_timeout=0 tag_signal=0; phase2-check: PASS phase2-ci: phase2-check: PASS; phase2-lib-diff: range=[-3, 110] modules=78 importable=66 functions=889 via_reexport=95 no_params=24 calls=281423 examined=281423 unexamined=0 both_ok=124575 both_raise=156668 improved=0; phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11; phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS; phase2-ci: PASS (through=R1.7) full-release-make-test: RESULTS: 4606/4606 passed, 0 failed, 10 skipped extensions-suite: RESULTS: 4850/4850 passed, 0 failed, 5 skipped lib-diff: phase2-lib-diff: range=[-3, 110] modules=78 importable=66 functions=889 via_reexport=95 no_params=24 calls=281423 examined=281423 unexamined=0 both_ok=124575 both_raise=156668 improved=0; phase2-lib-diff: N4 source_functions=28 exported_functions=19 calls=4631 both_ok=2500 changed_functions=11; phase2-lib-diff: listed_functions=13 undeclared=0 stale=0 PASS corpus-adjudication: Corpus adjudicated: 54 differences traced to R1.7 behavior/registration; sole expected runaway timeout; no other crash/timeout. replay-diff: replay_diff: OK (267 programs record+replay; 27 at the documented boundary; 0 nondeterministic; 1 ledgered) jit-diff: jit_diff: OBS examined=783 denied=13; jit_diff: OK (267 programs x {jit, osr} vs the interpreter; suite-env completed=16; OBS examined=783 denied=13; 32 arms adjudicated; 2 ledgered) cost-measure: phase2-cost: source=codspeed.yml workloads=15 tiers=2 undeclared_max=+0.3% declarations=30 stale_below_max=0.5 logs=/tmp/phase2-cost-rul4mqfr; phase2-cost: output_compare=n6-text (exact values/bits, exact integer digits, Python repr); phase2-cost: n6-text workload=tests/bench_idxset.eigs tier=jit changed_tokens=1; phase2-cost: n6-text workload=tests/bench_idxset.eigs tier=off changed_tokens=1; phase2-cost: workloads=15 rows=30 over_declared_max=0 stale_declarations=0 PASS Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF
|
R1.7 pushed:
The full lane failed (run 40271709027, 18/26). It found five CI-only failures; the local train does not run these lanes:
A fix-forward round is running (Sol). Sync #9, the merge of main dffac84, is prepared and waits for this lane to go green. |
N6 float-kind text only: D2/D6 check_pair proved 19 changed lines / 21 float tokens across seven programs; binary64 bits, runtime kinds before/after and every other byte match. Source-bound probes preserve the original program output. Observer corpus red: 7 match, 7 diverge (rc=1); green: 14 match, 0 diverge (rc=0). Evidence: r1-7-ff/corpus-proof.json.
N6: both workers sum 3000 taped random=0.5 draws, so their exact 1500 results are floats and print 1500.0. Preserve the exact two-worker byte check and all race/rc checks. Actual local gate red rc=1 at the replay row, green rc=0; built with make tsan and every invocation uses setarch -R. See r1-7-ff/tsan-before-a1.log and tsan-after-a1.log for counts. Actual TSan gate counts: before 61 passed / 1 failed (rc=1); after 62 passed / 0 failed (rc=0). Literal-match correction: use grep -F so the N6 decimal points are literal bytes. The previous regex accepts a=1500x0 b=1500y0 (rc=0); corrected command accepts the exact output and rejects wildcard, wrong-value and old-kind controls (positive=1 / rejected=3). Actual make tsan + full setarch -R gate on final source: 62 passed / 0 failed, rc=0.
N6: uint64 significand (20 digits), e, signed int32 exponent (11 bytes), NUL require up to 33 bytes by the format types; use 40. The reported CI warning is at -O1; this machine GCC 13.3 runs the unmodified CI script at rc=0 (7/0), so local baseline warning reproduction is unavailable. cc alone in a fresh directory at -O0, -O1 and -O2 now yields zero warnings, 8 passed / 0 failed (rc=0). The script now checks all three levels with -Wall -Wextra; runtime number text is unchanged. Continuation 1 precheck fix: Prefix this commit's one-line changelog fragment with "- " so the fragment parser recognizes it. Reproduced the original docs-claims and changelog checks at rc=1. On the corrected final source, PRECHECK_BASE=20f9d86c21276ddc8d1a1ebf027f8756360afd68 make precheck: 19 passed / 0 failed / 0 skipped, rc=0; docs-claims: OK — PATHS 285, FLAGS 47, MAKE TARGETS 52, NAMES 527, DOC ENROLMENT 12, rc=0; changelog: examined 24 changed path(s) against 20f9d86; 2 fragment(s) added; cut=0, rc=0. Actual logs and source-bound receipts: continuation1-precheck, continuation1-docs-after, continuation1-changelog-after in r1-7-ff/.
Orchestrator sort ruling / principle Determinism is a guarantee with a stated boundary: sort and sort_by are stable. Replace list_sort libc qsort with a stable bottom-up merge, borrowing scratch slots without reference changes. sort_by already has an original-index tie-break; retain it. Document both contracts in BUILTINS, SPEC, COMPARISON, README and llms. New 257-element tests check mixed boxed-int/float ties, signed zero, strings, sort_by record identities, input mutation and key-call count. Actual regression suite: 10 passed / 0 failed; boxed containers: 10 checks. Forced quicksort without the stable merge fails sort and the original boxed order; removing sort_by tiebreak fails its record-order checks; restoring the real merge and tiebreak passes under that same forced quicksort. Freestanding runtime linked with actual mini-libc qsort passes, with equal qsort/eigs_qsort symbol addresses; mini-libc differential green. Counts and rc in r1-7-ff receipts. Refresh the generated LSP builtin description from the stable-sort comment (bash tools/gen_lsp_builtin_index.sh rc=0, regeneration is idempotent). This is the only generated-header delta; inventory counts remain unchanged. Continuation 1 precheck fix: Begin the SPEC sort sentence with "`sort` sorts" so the preceding output ending in 15 is not parsed as a builtin count; preserve both stable-order guarantees. The suggested "The builtin" still fails because the detector permits two intervening words after the number. Prefix this commit's one-line changelog fragment with "- ". Reproduced the original docs-claims and changelog checks at rc=1. On the corrected final source, PRECHECK_BASE=20f9d86c21276ddc8d1a1ebf027f8756360afd68 make precheck: 19 passed / 0 failed / 0 skipped, rc=0; docs-claims: OK — PATHS 285, FLAGS 47, MAKE TARGETS 52, NAMES 527, DOC ENROLMENT 12, rc=0; changelog: examined 24 changed path(s) against 20f9d86; 2 fragment(s) added; cut=0, rc=0. Actual logs and source-bound receipts: continuation1-precheck, continuation1-docs-after, continuation1-changelog-after in r1-7-ff/.
N6: when returns an integral float and prints 11.0. Parse printed indices/counts using exact Decimal value, requiring finite integral values; no float rounding, truncation or tolerance. All runtime values retain check_value binary64/NaN/signed-zero checks; labels, tier witnesses and floor are unchanged. Actual parser calibration: complete positive transcript accepted; 6 wrong/fractional/nonfinite/malformed count plants rejected; exact int64 and value/sign controls green. Actual CI lane before rc=1 (issue1891_row63), after rc=0 (all floor verdicts checked, 0 lost). Actual oracle lane: floor 1872 verdicts checked / 0 lost, rc=0. Count calibration: 1 complete positive transcript, 6 rejected counter plants, 5 exact representation controls and 3 value/sign controls, rc=0.
|
R1.7 COMPLETE: The fix-forward (5 commits on top of 20f9d86) closed the five CI-only failures of the first lane:
The local final train was green: precheck, Next: sync #9 (main dffac84, 9 commits including #1962's re-pin of every row, #1969's FP-environment boundary, #1903-#1905's binder analysis, #1908's E006 and #1907's fragment gate), then R1.8. |
Integration branch for #1758, Phase 2 numbers: an exact int64 kind beside IEEE 754 doubles, while keeping the observer and deterministic replay. This is a draft; it lands when every round is done and the #1758 Done-when holds.
The plan is
docs/design/phase2-numbers.md. Two blind critics reviewed it over three design rounds. Rounds://and floor%;Landed on this branch so far:
docs/design/phase2-numbers.md; a 1,798-site inventory checked bytools/phase2_inventory.py;tests/phase2/MAP.md, with tier-witnessed rows per round.0xFFFAand its API exist; nothing produces an SMI yet.slot_is_num,SLOT_NUM_RAWandslot_from_numare renamed, andslot_is_numericandslot_as_doubleare deleted, so every old reader stopped compiling until given an explicit int decision.[0fk]),tools/phase2_check.sh --through <round>, the int-source check, and a corpus differential against main.Related: #1763 and #1774 (float-to-int casts that silently misbehave on large values, which N5 covers); ouroboros#301 (the AOT runtime follows the renames at its EIGS_REF bump).
Closes #1758
🤖 Generated with Claude Code
https://claude.ai/code/session_01KC99CmwatKssQYggkBCgwF