Add reproducible Epoch AI frontier training compute (@fig-ai-compute-growth) and single-run pretraining energy (@fig-frontier-training-energy) figures to Volume II, Chapter 15, paired with builder-reported anchors at declared measurement boundaries, deterministic CSV extraction and manifest receipts, and structured provenance enforcement across book CSV series and figure cells.
check structure --scope number-offset requires a chapter's number-offset
to equal its NN_ folder number minus one. Two renumberings left stale
offsets that printed the wrong chapter number, and nothing caught it.
Branch commits skipped hooks; the full suite at the merge tip found these.
- Bib: drop duplicate epochai2026benchmarks from the merge; rename
villalobos2022will to villalobos2024will to match its year; re-record
ledger hashes for 24 entries whose content is unchanged (tidy reformat)
- Checks: scope cross-chapter-callout-ref to vol1 (vol2-4 carry 113 legacy
refs); add Whetstone to heading proper nouns; lego-dead-code skips
render output
- Units: computed sizes in decimal units, hardware capacities through
fmt_memory_capacity (ch6, ch11, ch14, ch16)
- Prose: abbreviation first-use expansions after content moves, footnote
marker placement, two footnote fixes, margin caption, bracketed source
citations, index main, orphan and duplicate equation labels, dead
LEGO exports
- Auto-fixers: Black on hidden cells, whitespace, blank lines, tables,
bibtex tidy, canonical spellings
Auto-fixer output (Black, blank lines, list spacing, table prettify)
plus fixes for heading case, orphan equation labels, footnote
placement and lead-ins, dead LEGO exports, abbreviation first use,
above/below, quote punctuation, binary units in prose (vol3 ch08 now
uses decimal units for computed sizes), and the Tensor Core index key.
- Ch7 Purpose agrees with the body; Ch4 hand-off matches Ch5's opening
- tau_delay model sentence (Ch2) excludes delta_da; Ch14 T_sigma no longer
labeled measured; Ch16 base not called high-speed; Ch13 class naming no
longer collides with ISO 10218-1 Class I/II
- First-use glosses: edge NPU, ROS 2/DDS, CAN FD, PCIe, EtherCAT, delta-phi sign
- Tightened Ch8 radar/iToF, Ch9 voxel-hash footnote, Ch12 coinage; Ch6 column
and latch examples separated; J_eff related to J_ref (Ch11)
- Appendices: H&P reading names the cited book; proper nouns capitalized in
headings (heading_rules allow-list extended); d_safe and t_start match chapters
- Em dashes removed; CAN FD spelling unified; voice pass on campaign-added prose
- ch17 answers ch01's opening question and returns to its opening scene
- Six principles in part order, each on the Fleet Stack; practices vs principles explicit
- Appendix A becomes a complete single-machine recap (roofline, memory hierarchy,
training memory per parameter, transformer arithmetic); probability recap in E
- Appendix corrections (batching stability, MTBF direction, goodput mapping)
- Glossary pruned of unused terms; core vol2 terms added and aligned with body
- Chapters now point to the appendix sections where students need them
- Heading rules: treat "Fleet Law" as a proper name
- Frontmatter: Clarify prerequisite background for ML systems students crossing into physical AI systems; frame physical AI as an architectural discipline uniting unprivileged statistical proposals with deterministic safety enforcers.
- Chapters 01-10, 12-15, 17: Pedagogically refactor section-by-section with progressive disclosure; ground foundation models as unprivileged proposal engines bounded by memory bandwidth ( \le B/M$); replace pop-science and roboticist metaphors with formal systems invariants (eBPF-like actuator firewalls, privilege rings, single-writer fieldbus mutexes, and causal intervention masking); preserve all mathematical bounds, Roofline derivations, and equations.
- Backmatter (Appendices): Connect control theory, real-time embedded systems, and non-smooth contact mechanics to optimization and ML systems concepts (Lyapunov functions as continuous loss functions; directional derivatives / JVPs along system drift; KKT complementarity for rigid contact; discrete Poisson exposure walls; Fisher-Tippett-Gnedenko and POT extreme value theory; reconciliation of classical SPA vs. foundation models).
- Each chapter cites the Reader Guide once for its illustrative numbers;
every LEGO LOAD line states its evidence category
- Per-sentence caveats that only repeated a category removed; overclaims
and flourishes resolved in the same paragraphs
- Retired vocabulary replaced (dual-brain, referee, four-tier, System 1/2,
nervous system as a tier name); architecture pointers now target the
machine-model section
- Dactyl, NHTSA, and Challenger war stories checked against primary sources
- Patch/attention arithmetic and decoder internals moved to the ML
appendix, leaving pointers
All three fired in contexts book-prose.md exempts, so they reported defects
that were not defects.
unit-spacing and binary-units skipped only fenced code blocks, leaving inline
math, inline code spans, and pipe-table cells in scope. Both now mask those
spans before matching, via a shared _mask_prose_line helper that preserves
offsets so reported context stays accurate. On Volume III this drops
binary-units 354 -> 33 and unit-spacing 20 -> 3.
unit-spacing also had no notion of a part number, so the capacity inside
"NVIDIA A100-SXM4-80GB" read as a missing space. Tokens whose digit-letter run
is a proper noun are now declared in cli/data/unit_token_allowlist.txt,
following the footnote_caps_allowlist.txt pattern: accelerator SKUs and
model-size shorthand. That takes unit-spacing to 1, which is a genuine
"sub-100ms" in 08_virtualization. Real measurements do not belong in the
allowlist; the fix for those is the space.
currency scans SVG and HTML for visible labels but read raw lines, so a
generated margin figure's "<!-- $ USD -->" comment was reported as a
reader-facing currency defect. Markup comments, including multi-line ones, are
now stripped before matching. That takes currency 4 -> 3; the remaining three
are genuine USD in Volume III prose.
Adds binder/tests/test_unit_scoping.py pinning both the exemptions and the
genuine detections, so the masking cannot quietly regress.
- Vol II: close the margin note wrapping the storage-compute figure,
move the bandwidth figure out of its callout, and separate the NPU
figure from the preceding footnote so all three cross-references
resolve; widen Table 11.3 so it stays inside the page trim.
- Landing pages: hide the download card, star counter, and podcast from
EPUB output and point the cover and podcast at shared/assets.
- Vol I/II frontmatter image paths, table column widths, Vol III
equation labels, Vol IV lint fixes and SVG newline repairs, and
regenerated volume bibliographies.
- Bibliography integrity scan ignores math spans; currency check skips
render caches; Prentice Hall joins the canonical publisher list.
- Unprefixed chapter URLs publish redirect stubs to numbered pages.
- Remove stray test files, duplicate quiz files, unused cover options,
generated figure lists, and outdated review scripts; drop generator
metadata from quiz files.
- Repoint documentation at current chapter paths and deduplicate
pre-commit file patterns.
The toolchain folder is now binder/, and the root ./binder symlink is gone.
The command is ./binder/binder: a plain path to the script, with no link and
no install step. Every invocation moved with it: pre-commit entries, workflow
steps, the VS Code extension's command palette, help text, and docs.
- bindery/ paths and bindery.* imports, including the chapter code cells
that import binder.tools.figures, now name binder/.
- Binder (mybinder.org) reads its configuration from a root binder/ folder
and refuses to build when binder/ and .binder/ both exist. .binder/postBuild
and .binder/requirements.txt move into binder/, so the TinyTorch "Launch
Binder" buttons keep working; binder/README.md records which file names the
toolchain must not use there.
- contributors/projects.json still pointed the book's contributor record at
publishing/; it now names binder/, where that .all-contributorsrc lives.
- The margin-figure reader-link audit report linked its 222 figures through
the retired quarto/ tree; the links now resolve under books/.
The hooks reformatted hidden Python cells and trimmed whitespace in the
Volume II chapters whose figure imports this rename touches.
Checks: ./binder/binder check cli passes (contract and canonical hooks),
binder.tools.figures imports, and every workflow YAML file parses.
binder test suite, excluding the four modules that cannot import mlsysim
through the root symlink (fixed separately): 7 failed, 346 passed.
The GitHub repository variables BOOK_ROOT, BOOK_TOOLS, BOOK_DEPS, and
BOOK_DOCKER still name the retired book/ layout and must change when this
reaches origin.