Files
LithosAnanake/capsules/per-isa-doe.4th
T
Robert Allan JamesandClaude Sonnet 5 2d773ca923 Port DoE trial-summary persistence (doe_region.c) onto the reshuffled branch
Local master had 9 unpushed commits building block-backed DoE persistence on
Artemis's own disk (FABRIC-3.md SXXXV.3/.4/.12, designed and built 2026-09-17,
never pushed) that this branch never inherited after the Tripod/kernel
reshuffle diverged history. Ports the mechanism cleanly onto the current
Hera/Artemis/Hestia shape:

- doe_region.h/.c: growable, CRC-protected trial-summary ring in Artemis's
  top-of-device metadata fence, immediately past log_region.c's own ceiling
  (devblock_from_top 98-102). Same accessor/CRC discipline as log_region.c.
- log_words.c: DOE-PERSIST-TRIAL and DOE-RESUME-COUNT kernel-only FORTH words.
- multiuser-doe.4th: per-ISA tagging (MU-ISA-TAG!) and campaign resume support
  (MU-EXEC-CAMPAIGN now takes a start-idx).
- per-isa-doe.4th (new): RUN-AMD64-CAMPAIGN/RUN-AARCH64-CAMPAIGN/
  RUN-RISCV64-CAMPAIGN entry points, resuming from DOE-RESUME-COUNT.
- extract_doe_region.py (new): host-side reader, CRC-verified, no filesystem
  assumptions -- reads the ring directly off a raw disk image.

Deliberately not ported: the R/LaTeX report-generation pipeline
(analyse_multiuser_doe.R, multiuser_doe_report.tex, build_multiuser_doe_report.sh)
-- not needed to prove persistence works, and unscoped for this pass.

Verified live on all three architectures: clean boot, word_count 530->532,
zero UNKNOWN WORD. amd64 and riscv64 both live-exercised end-to-end (write via
DOE-PERSIST-TRIAL, count via DOE-RESUME-COUNT, clean QEMU exit, then read back
correctly with extract_doe_region.py against the raw disk image -- no host
serial dependency, matching the real bare-metal requirement this campaign is
rehearsing for).

riscv64 finding (not a defect in this port, no fix applied): DOE-PERSIST-TRIAL
failed 3/3 on a first attempt against a fresh disk image with
"virtio_blk: vblk_io timed out". Root cause: disk/artemis.img is a sparse file
(180KB allocated of a 1GB apparent size); the new DOE region (devblock_from_top
98-102) is genuinely virgin territory on a fresh image, and riscv64's slower
TCG emulation missed the existing virtio_blk spin-bound budget (already
documented as fragile, FABRIC-3.md 2026-09-09) on that first cold touch.
Confirmed by isolation: a plain BLOCK/UPDATE at an already-warm LBN succeeded
instantly, the pre-existing LOG-ERROR" (same meta-zone mechanism, an
already-warmed offset range) also succeeded, and a reboot reusing the
now-partially-warmed disk let DOE-PERSIST-TRIAL succeed immediately and
verify correctly on read-back. Pre-existing environmental fragility, not a
logic bug in the ported address computation.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-23 11:01:26 -04:00

29 lines
1.1 KiB
Forth

Block 5117
( per-isa-doe.4th - per-ISA DoE driver. FABRIC-3 SXXXIV.4/ )
( SXXXV.5/.7: 6-cell factorial from multiuser-doe.4th's own )
( MU-EXEC-CAMPAIGN, unchanged. Adds: one fixed seed per ISA, )
( N=3 reps/cell=18 trials/ISA (ratified 2026-09-17, not the )
( N=2 SXXXV.5 recommended). Load multiuser-doe.4th FIRST. )
20260917 CONSTANT AMD64-SEED
20260918 CONSTANT AARCH64-SEED
20260919 CONSTANT RISCV64-SEED
18 CONSTANT PER-ISA-NREPS
Block 5119
( Per-ISA entry points, single word, no args -- run ONE per )
( boot (one-QEMU-at-a-time). Uses MU-ISA-TAG! (multiuser-doe. )
( 4th) -- redefining MU-EMIT-TRIAL-MARKER here never worked, )
( see FABRIC-3.md SXXXV.12 for why. )
: RUN-AMD64-CAMPAIGN ( -- )
S" amd64" MU-ISA-TAG!
AMD64-SEED PER-ISA-NREPS
S" amd64" DOE-RESUME-COUNT MU-EXEC-CAMPAIGN ;
: RUN-AARCH64-CAMPAIGN ( -- )
S" aarch64" MU-ISA-TAG!
AARCH64-SEED PER-ISA-NREPS
S" aarch64" DOE-RESUME-COUNT MU-EXEC-CAMPAIGN ;
: RUN-RISCV64-CAMPAIGN ( -- )
S" riscv64" MU-ISA-TAG!
RISCV64-SEED PER-ISA-NREPS
S" riscv64" DOE-RESUME-COUNT MU-EXEC-CAMPAIGN ;