std79 exerciser campaign: 27/27 legs clean, two real D. bugs found (FABRIC-3.md §XII.4)
Build / build-amd64-iso (push) Waiting to run
Build / build-aarch64-iso (push) Waiting to run
Build / build-riscv64-img (push) Waiting to run

Completed the FORTH-79 standard-dictionary cross-ISA exerciser campaign: all
9 identities (zuse, rajames/bob, 00-06) x all 3 architectures (amd64,
aarch64, riscv64), 27 legs total. No crashes, no heap corruption across the
full run -- real-world validation that the WIREBIND use-after-free fix
(commit 9142dda, FABRIC-3.md SXIII) holds under genuine multi-cycle load,
not just the synthetic repro used to verify it.

Cross-identity parity is perfect: 0 diffs across all 9 identities on each
architecture. Two real bugs found in double-precision (D.) output, reported
per this project's standing rule (report, don't fix without being asked):

- M* on a negative operand -> D. reports DOUBLE-OVERFLOW, universally
  across all three architectures (engine-level bug, not arch-specific).
- D+ on two negative doubles -> D. reports DOUBLE-OVERFLOW on aarch64
  only; amd64 and riscv64 both correctly print -2. cell_t width confirmed
  64-bit on all three (ruled out as the cause); exact mechanism still open.

Also fixed a test-harness timing issue (run_identities.sh): the retry
budget for USE-after-attach was too tight for boots with several live VMs
already accumulated, causing false "FAILED to USE" verdicts on identities
that actually succeeded a few seconds later. Widened the budget and
switched to smaller per-boot batches (2-3 identities) as the reliable
pattern for this shape of campaign.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EXieurDfDSsDFdnSyusuWo
This commit is contained in:
Robert Allan James
2026-09-10 23:13:13 -04:00
co-authored by Claude Sonnet 5
parent 9142dda2d6
commit cc81edf00a
44 changed files with 85536 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
# FORTH-79 Standard-Dictionary Cross-ISA Exerciser
`std79-exerciser.fth` is a 24-case, FORTH-79-standard-words-only program (no kernel-specific
extensions) covering `/MOD`, negate/abs boundary values, `RSHIFT`/`LSHIFT` on negatives,
`M*`/`M/MOD` mixed precision, `*/`/`*/MOD`, `S>D`/`D+`/`DNEGATE` double-cell ops, `MIN`/`MAX`/
`WITHIN`/`AND`/`OR`/`XOR`. It is not a capsule — feed it as raw text to a running REPL (serial
console, e.g. via `socat - UNIX-CONNECT:<serial_sock> < std79-exerciser.fth`), not through `EXEC`.
Written to test whether the same FORTH-79 word set behaves identically across every minted
identity (`zuse`, `rajames`/`bob`, `00``06`) and every supported architecture (amd64, aarch64,
riscv64) — see FABRIC-3.md §XII/§XII.4 for the full campaign writeup, including the two real
`D.`/double-precision bugs this found (one universal across all three architectures, one
aarch64-specific), and the WIREBIND heap-corruption bug (§XIII) found and fixed along the way
while getting the campaign's automation working reliably.
`results-20260910/` holds the raw captured output for all 27 (identity × architecture)
combinations from that campaign — `<arch>-<identity>.txt`. Cross-identity parity within each
architecture is perfect (0 diffs across all 9 identities, all three architectures).