FABRIC-3.md §XXXV.12: closes two real gaps found by walking the disk-to- PDF pipeline end to end. (1) doe_trial_slot_t had no integrity check of its own -- 64 slots share one devblock via a read-modify-write, so a crash mid-write to any slot could silently corrupt its siblings with nothing to catch it. Added an 8-byte CRC (same discipline the control header already had), computed/verified the same way. (2) The campaign itself had no crash-resume -- a reboot always restarted the whole 18-trial loop from index 0 even with good persisted data already on disk. Since the trial matrix is fully deterministic from (seed, n-reps), resuming needs no persisted "which trials ran" state, just a count: DOE-RESUME-COUNT (new kernel primitive, same pattern as DOE-PERSIST-TRIAL) walks the ring counting CRC-valid records for a given ISA; MU-EXEC-CAMPAIGN's signature changes to accept a start-idx and seeds MU-RUN-ID/the DO loop from it. Each RUN-*-CAMPAIGN entry word now calls DOE-RESUME-COUNT before launching. Both block-namespace-checked to fit existing headroom before committing to the design -- no new blocks needed. Real bug caught by the build, not shipped: an implicit compiler-inserted alignment byte before slot_crc silently broke the hand-computed trailing pad size (doe_trial_slot_size_check failed to compile). Fixed with an explicit alignment field, matching log_slot_t's own zero-implicit- padding discipline. extract_doe_region.py now verifies both CRCs with the REAL CRC-64/XZ algorithm from block_subsystem.c's compute_crc64() (ported and verified bit-for-bit against a native C reference this session), replacing §XXXV.11's incorrect guessed implementation. Verified: clean compile on all 3 ISAs (amd64/aarch64/riscv64 -- amd64 verified via isolated build only, not boot, since the real per-ISA campaign is currently live on the only QEMU instance this project's own rule allows), both capsules pass mkcapsule --lint, CRC64 bit-exact via native reference. Live boot-verification explicitly deferred until that campaign finishes or is interrupted -- not claimed as tested when it wasn't. Found (not missed) a real compatibility consequence: the running campaign's data is in the old pre-CRC format, so it reads as "corrupt" under the new extractor and DOE-RESUME-COUNT will resume it from 0, not mid-campaign -- no data loss, cheap redundant re-run of ~1-2 trials. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BWpNjdwPtFLuVLaAq44L9K
78 lines
2.0 KiB
Plaintext
78 lines
2.0 KiB
Plaintext
# build artifacts
|
|
/build/
|
|
target/
|
|
out/
|
|
# Formal documentation build output — PDFs are committed artifacts
|
|
# LaTeX intermediates are excluded; PDFs are tracked with git add -f
|
|
docs/formal/build/**
|
|
!docs/formal/build/**/*.pdf
|
|
# Doxygen generated output (PDF artifact committed separately)
|
|
docs/formal/doxygen/
|
|
docs/api/
|
|
|
|
# IDE crap
|
|
.idea/
|
|
.vscode/
|
|
*.iml
|
|
|
|
# generated headers
|
|
include/version.h
|
|
|
|
# bundles / archives
|
|
*.bundle
|
|
*.tar
|
|
*.tar.gz
|
|
*.zip
|
|
|
|
# experiment scratch outputs ONLY (keep raw CSVs!)
|
|
experiments/**/results/tmp/
|
|
experiments/**/results/cache/
|
|
experiments/**/results/*.log
|
|
|
|
# OS junk
|
|
.DS_Store
|
|
Thumbs.db
|
|
qemu.log
|
|
|
|
# Framebuffer/Console screendumps — throwaway local verification images,
|
|
# never meant to be committed (Captain Bob, 2026-08-07)
|
|
fb/
|
|
|
|
# Serial acceptance logs and session directories are audit artifacts — tracked in git
|
|
# logs/ and logs2/ are intentionally NOT ignored
|
|
# EXCEPTION: ECW-trace sessions generate 500-638MB logs that exceed GitHub's 100MB
|
|
# limit. Those specific sessions are excluded here.
|
|
logs/20260625-183218/
|
|
logs/20260625-183958/
|
|
logs/20260625-184714/
|
|
logs/20260625-190541/
|
|
|
|
# Retired data directories (replaced by experiments/bare_metal/)
|
|
doe/
|
|
csv/
|
|
|
|
# Kconfig — vendored tool build products (tools/kconfig/README.md) and
|
|
# generated per-arch config output (lives under build/, already ignored
|
|
# above, but a stray root-level .config from manual testing is also caught)
|
|
tools/kconfig/conf
|
|
tools/kconfig/mconf
|
|
tools/kconfig/qconf
|
|
tools/kconfig/*.o
|
|
tools/kconfig/lxdialog/*.o
|
|
tools/kconfig/parser.tab.c
|
|
tools/kconfig/parser.tab.h
|
|
tools/kconfig/lexer.lex.c
|
|
tools/kconfig/qconf-moc.cc
|
|
tools/kconfig/*-cflags.mk
|
|
tools/kconfig/.mconf.*
|
|
tools/kconfig/.qconf.*
|
|
/.config
|
|
/.config.old
|
|
|
|
# mkcapsule --resolve claim registry (FABRIC-3.md SXXIV) — pure derived
|
|
# state, auto-created/regenerated, never a source of truth. Its sibling
|
|
# tools/capsule-reserved.txt (human-authored) and tools/patches/ (decision
|
|
# record) are NOT ignored — those are tracked deliberately.
|
|
/tools/capsule-claims.txt
|
|
__pycache__/
|