Files
LithosAnanake/experiments/std79-doe/report-20260912
Robert Allan JamesandClaude Sonnet 5 238ca95b3c
Build / build-amd64-iso (push) Waiting to run
Build / build-aarch64-iso (push) Waiting to run
Build / build-riscv64-img (push) Waiting to run
Add closing note to std79 DoE K report
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EXieurDfDSsDFdnSyusuWo
2026-09-12 14:42:23 -04:00
..

std79-doe LaTeX report: the fleet conservation invariant K

Read report/std79_doe_report.pdf — this supersedes ../analysis-20260912/ (the first, markdown-only pass) as the primary deliverable for this dataset. That first pass was correctly flagged as inadequate: it never captured K (the fleet-wide execution-heat conservation invariant) at all, and presented results as a plain markdown page rather than in this project's established LaTeX report style (see experiments/bare_metal/analysis/report/ for the precedent this follows — same document class, packages, colour palette, light/dark figure pairs, abstract-first structure with headline numbers).

What changed to make this possible

src/starkernel/doe_log.c's per-heartbeat-tick CSV gained two new columns (fleet_k_q48, fleet_conserved — see the file's own header comment for the full 20-column schema), requiring a kernel rebuild and a fresh DoE campaign rerun on all three architectures (../results-20260912-with-k/*-doe-raw.log + *-heartbeat.csv).

Pipeline (same shape as ../analysis-20260912/, extended for K)

  1. correlate_doe.py <raw_log> <out_csv> — per architecture, against ../results-20260912-with-k/{amd64,aarch64,riscv64}-doe-raw.log{amd64,aarch64,riscv64}-correlated.csv (committed, not scratch).
  2. combine.py <in1.csv> [in2.csv ...] <out.csv>combined.csv (775 rows). Decodes fleet_k_q48 to a plain float and derives fleet_conserved from fleet_k_q48 directly (using the same epsilon vm_physics_conserved() uses, capsule_vm_physics.c) rather than trusting the raw fleet_conserved field — that field is doe_log_tick_row()'s very last printed column, with nothing after it in the row to bound a regex match against, so a resumed trial digit can merge into it with zero separator on the wire (confirmed live: raw values like 19223372036854775807 where 0/1 was expected). See the script's own comment for the full explanation.
  3. analysis.R (run from this directory) — computes the K result (trivial: one distinct value, sd = 0, reported directly rather than via a formal test — see the report's own \S5.1 for why), per-cell architecture × identity summaries, and two-way ANOVA for 12 secondary metrics; writes charts/*.svg (light+dark pairs, matching experiments/bare_metal/analysis/analyse_bare_metal.R's theme convention) and tables/*.csv.
  4. SVGs converted to PDF for LaTeX via rsvg-convert into report/figures/.
  5. report/std79_doe_report.tex, hand-authored following experiments/bare_metal/analysis/report/bare_metal_doe_report.tex's structure and conventions; compiled with pdflatex (three passes for cross-references/TOC).

Headline result

K = 1.0000000000 (raw Q48.16 65536) on every one of 775 heartbeat-tick observations, sd(K) = 0, fleet_conserved = 1 on 100% of rows, across all three architectures, nine identities, and three replicates. Zero deviation. See the report for the full discussion, including why this is also a free regression check on the two Stadium subsystem fixes (FABRIC-3.md §XVIXVII) that landed the same week.

Known limitation

Same interleaving-correlation caveat as ../analysis-20260912/: 1 of 27 run_id markers was unrecoverable on 2 of 3 architectures this run (aarch64/riscv64: run_id 1 folded into run_id 0). fleet_k_q48 itself is entirely unaffected by this — it's read directly at each tick regardless of trial attribution, so the K result does not depend on trial labeling being correct at all. See report §2.3/§6.4 for the full explanation.