Fix extract_doe_region.py SLOT_FMT drift; regenerate report with real data
Build / build-amd64-iso (push) Canceled after 0s
Build / build-aarch64-iso (push) Canceled after 0s
Build / build-riscv64-img (push) Canceled after 0s

FABRIC-3.md §XXXV.15. §XXXV.12 added an explicit _align_pad field to
doe_trial_slot_t to fix a struct-alignment bug, but never updated the
Python extractor's SLOT_FMT/SLOT_CRC_SPAN to match -- every field after
isa was read from the wrong byte offset, so slot_crc read wrong bytes
entirely and every legitimate record (including the real, live
campaign's own first two clean trials) was flagged as CRC-corrupt.
Fixed; SLOT_SIZE assertion tightened from <= to == to catch this drift
immediately next time.

Regenerated multiuser_doe_report.pdf against the real campaign's actual
first two trials: run=0 (cfg=0, nw=2, uniform, fail=0) and run=1 (cfg=5,
nw=8, heterogeneous, fail=0), both fleet_conserved=1 at exactly Q48.16
1.0. Real report, real data, first time this has happened for this
campaign. disk/artemis.img itself and the live campaign's log directory
are deliberately left uncommitted -- still being written by the running
campaign.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
This commit is contained in:
Robert Allan James
2026-09-17 23:28:50 -04:00
co-authored by Claude Sonnet 5
parent 553ca9163d
commit 9aebbb224b
15 changed files with 244 additions and 44 deletions
+14
View File
@@ -5855,3 +5855,17 @@ That is the natural mechanism a real fix would hook, not something to build from
with the workflow") -- find and log these live, keep the campaign running, don't stop to fix
each one as found. Real feature, real gap, deliberately deferred.
### XXXV.15 -- Extractor bug: SLOT_FMT never updated after §XXXV.12's alignment fix
Found checking the real, live campaign's first two trials against the console log. Both slots
read back as "CRC mismatch" in `extract_doe_region.py` even though the kernel-side write path
was correct and the console log showed clean trials. Root cause: §XXXV.12's struct-alignment fix
added an explicit `_align_pad` `uint32_t` field to `doe_trial_slot_t` (`doe_region.h`), but
`extract_doe_region.py`'s `SLOT_FMT`/`SLOT_CRC_SPAN` were never updated to match -- every field
after `isa` was being read from the wrong byte offset, so `slot_crc` itself was read from the
wrong bytes entirely. Fixed (`SLOT_FMT = "<QQIIIIIII8sIQ"`, `assert SLOT_SIZE == DOE_SLOT_SIZE`
tightened from `<=` to catch exactly this kind of drift next time). Re-extracted the real
campaign's first two trials correctly: `run=0 cfg=0 rep=14 nw=2 mode=uniform fail=0`,
`run=1 cfg=5 rep=8 nw=8 mode=heterogeneous fail=0`, both `fleet_conserved=1`,
`fleet_k_q48=65536` (exactly Q48.16 1.0) -- clean so far.