gpt_read() stopped at max used entries (16 for the identity code, 4 in the mint): a disk whose StarshipOS partitions came after the first max read as having none, and the entries after max were never range-checked. Now every entry is checked and every used one counted; a good table with more used entries than max is GPT_MANY (the first max in parts), and the identity code says "GPT: a USB drive has more than 16 partitions -- not used". Other callers treat anything but GPT_OK as before. Tested first, seen to fail: qemu_session.py gpt_many -- a data stick with its two partitions as entries 17 and 18 after 16 others, and the same with an entry 19 past the usable range: both "not this system's stick" before (silently cut, entry 19 never checked; logs/20261112-162236). After: "more than 16 partitions" and "a damaged partition table" (logs/20261112-162921). Regressions: gpt_bad_entries, gpt_foreign PASS. gpt_zuse FAILS, on a stale expectation unrelated to this change -- an identity-only GPT drive with no system stick has been held silently as a possible real Zuse since #92 Task 4; its log is kept here. The gpt_many images are made before the boot: a first version made them after, failed in sgdisk and left its QEMU running, stopped by hand (logs/20261112-162003). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017RzZgrf7V7Zk2iczBXDRbm
scripts/
Utility scripts for building, profiling, DoE experiments, and documentation.
DoE / experiment scripts
| Script | Purpose |
|---|---|
run_doe.sh |
Run a standard DoE experiment |
run_factorial_doe.sh |
2^7 factorial DoE |
run_factorial_doe_with_heartbeat.sh |
Factorial DoE with heartbeat metrics |
run_nested_doe.sh |
Nested DoE design |
run_ablation_study.sh |
Physics loop ablation |
run_optimization_doe.sh |
Optimization-focused DoE |
run_quick_doe_test.sh |
Quick smoke-check DoE (1 rep) |
extract_doe.sh |
Extract CSV rows from QEMU serial logs |
Build / profile scripts
| Script | Purpose |
|---|---|
perf-profile.sh |
Linux perf profiling harness |
perf-profile_control.sh |
Control run for perf comparison |
rundisk.sh |
Boot a disk image in QEMU |
qemu_screenshot.sh |
Capture QEMU serial output |
Phase 8 / identity testing scripts
| Script | Purpose |
|---|---|
bleach_zuse_img.sh |
Reset disk/zuse.img back to pristine/unminted (blank) state, for repeatable first-boot mint-flow testing |
FORTH capsule scripts
| Script | Purpose |
|---|---|
4th-apply-init.sh |
Apply init.4th patches to capsule set |
4th-update-init.sh |
Update init.4th across capsule variants |
Documentation scripts
| Script | Purpose |
|---|---|
asciidoc-to-latex.sh |
Convert AsciiDoc to LaTeX |
convert-markdown-to-asciidoc.sh |
Markdown → AsciiDoc |
doxygen-xml-to-asciidoc.py |
Doxygen XML → AsciiDoc |
generate-doxygen-appendix.sh |
Build Doxygen API appendix |
build_patent_structure.sh |
Scaffold patent document structure |
setup-ide-integration.sh |
Configure IDE integration |
analyze_heartbeat_stability.R |
R analysis of heartbeat stability data |
analyze_opp2_regression.py |
Python regression analysis |
gen_pe_reloc.py |
PE relocation table generator (see also tools/) |
remove_loop_conditionals.sh |
Remove loop conditional guards |
See also
experiments/bare_metal/README.md— DoE protocols- Project root