Add proper equation labels ({#eq-...}) and prose references (@eq-...)
to 138 equations across 15 Volume 1 chapters following the gold-standard
pattern from serving.qmd.
Key changes:
- Label all display math equations with {#eq-kebab-case-name}
- Add @eq-name references in prose before each equation
- Equations include: Iron Law, Amdahl's Law, Roofline Model,
activation functions, backpropagation, attention mechanisms,
queuing theory, quantization, and system throughput formulas
Also includes:
- PDF formatting improvements (newpage directives for Vol 2)
- LaTeX header updates for chapter styling
- Pre-commit config and validation script updates
* Restructure: Move book content to book/ subdirectory
- Move quarto/ → book/quarto/
- Move cli/ → book/cli/
- Move docker/ → book/docker/
- Move socratiQ/ → book/socratiQ/
- Move tools/ → book/tools/
- Move scripts/ → book/scripts/
- Move config/ → book/config/
- Move docs/ → book/docs/
- Move binder → book/binder
Git history fully preserved for all moved files.
Part of repository restructuring to support MLSysBook + TinyTorch.
Pre-commit hooks bypassed for this commit as paths need updating.
* Update pre-commit hooks for book/ subdirectory
- Update all quarto/ paths to book/quarto/
- Update all tools/ paths to book/tools/
- Update config/linting to book/config/linting
- Update project structure checks
Pre-commit hooks will now work with new directory structure.
* Update .gitignore for book/ subdirectory structure
- Update quarto/ paths to book/quarto/
- Update assets/ paths to book/quarto/assets/
- Maintain all existing ignore patterns
* Update GitHub workflows for book/ subdirectory
- Update all quarto/ paths to book/quarto/
- Update cli/ paths to book/cli/
- Update tools/ paths to book/tools/
- Update docker/ paths to book/docker/
- Update config/ paths to book/config/
- Maintain all workflow functionality
* Update CLI config to support book/ subdirectory
- Check for book/quarto/ path first
- Fall back to quarto/ for backward compatibility
- Maintain full CLI functionality
* Create new root and book READMEs for dual structure
- Add comprehensive root README explaining both projects
- Create book-specific README with quick start guide
- Document repository structure and navigation
- Prepare for TinyTorch integration
Removes tools/scripts/build/ directory containing:
- README.md
- generate_stats.py
- standardize_sources.sh
These scripts appear to have been deprecated or relocated as part of
repository reorganization. The clean.sh script has been moved to
tools/setup/clean.sh.
Updates the development preview banner to display build timestamps in
Eastern Time (EST/EDT) instead of UTC for easier readability. The
timestamp automatically adjusts for daylight saving time using the
America/New_York timezone. Fallback to UTC if timezone handling fails.
- Create validate_epub.py utility for EPUB validation
- Integrates official epubcheck validator when available
- Custom checks for CSS variables and XML comment violations
- Detects common XHTML errors (unclosed tags, unescaped characters)
- Validates EPUB structure (mimetype, container.xml, OPF)
- Supports --quick flag to skip epubcheck for faster validation
- Provides detailed error reporting with file paths and line numbers
Remove obsolete files that should not be tracked:
- 3 diagram PDF cache files (auto-generated by Quarto)
- 4 empty footnote_catalog.json files
All removed files are build artifacts or empty placeholders
that provide no ongoing value.
Deletes the backup file that contains a list of scripts.
This action streamlines the repository and avoids potential
confusion or conflicts arising from outdated file lists.
Replaced external check-json hook with custom validator using Python's
built-in json module (json.load). Created validate_json.py wrapper to
handle multiple files.
Benefits:
- No external dependencies
- Uses Python's standard library json parser
- Same validation logic as the build system
- Fast and reliable (0.16s for all JSON files)
- Add generate_alt_text.py script for automated image alt-text generation
- Add README_ALT_TEXT.md with detailed usage instructions
- Add QUICK_START_ALT_TEXT.md for quick reference
- Uses Google Gemini API to generate descriptive alt-text for figures
Related to accessibility improvements for image descriptions.
Work in progress - requires GitHub issue tracking.
Addresses #1034
Fixed 47 instances across 20 quiz files where MCQ answer explanations
incorrectly referenced the correct option as one of the incorrect options.
Changes:
1. Fixed all quiz JSON files with incorrect option references
- Fixed patterns like 'Options A, C, and D' when A is correct
- Fixed patterns like 'Option C is incorrect' when C is correct
- Fixed patterns like 'Option A describes...' when A is correct
2. Created fix_mcq_answer_explanations.py script
- Automatically detects and fixes incorrect option references
- Handles plural and singular patterns
- Can be run on all quiz files or specific files
3. Enhanced quizzes.py with validation and opt-in redistribution
- Added validate_mcq_option_references() function
- Validation runs during quiz generation to catch LLM errors
- MCQ redistribution now requires --redistribute-mcq flag (opt-in)
- Prevents bug from being reintroduced during answer shuffling
All 445 MCQ questions validated across 35 quiz files.
Add two complementary spell checking tools for content validation:
- check_tikz_spelling.py: Extracts and validates all visible text from
TikZ diagrams including node labels, inline annotations, custom pics,
foreach loops, legends, and comments. Uses pattern-based matching for
common typos with optional aspell integration.
- check_prose_spelling.py: Intelligently parses QMD structure to check
only actual prose content while excluding YAML frontmatter, code blocks,
TikZ diagrams, inline code, math expressions, and URLs. Uses aspell with
comprehensive ignore list of 500+ technical terms and acronyms.
Both tools provide detailed output with file paths, line numbers, and
context for identified spelling errors. The TikZ checker found and enabled
fixing of typos like 'gatewey', 'poihnts', and 'Intellignet' across the
codebase.
GitHub release UI already displays the title, so including it in the
markdown body creates visual redundancy. Updated generator to start
directly with description paragraph followed by Key Highlights section.
All existing releases (v0.1.0 through v0.4.1) have been updated to
follow this cleaner format.
PROBLEM:
- Generator was searching for specific commit messages ('Built site for gh-pages')
- Workflow changed message format to '🚀 Deploy release from commit...'
- This caused it to miss recent October publishes and look back to August
SOLUTION:
- ANY commit to gh-pages branch = publication
- Removed message filtering entirely
- Now uses: git log -n 1 origin/gh-pages (simple and reliable)
RESULT:
- Correctly finds Oct 20, 2025 as last publish (was finding Aug 6)
- Tracks 150 commits since last publish (not 1,491)
- Works regardless of commit message format changes
Replace 'str | None' with 'Optional[str]' in validate_citations.py
for compatibility with Python 3.9 and earlier versions used in
pre-commit environments.
Completely rewrites release notes generation to parse and use actual changelog data:
BEFORE:
- Returned hardcoded generic text regardless of changelog content
- Had misleading fallback that ignored real changes
- No categorization or analysis
AFTER:
- Parses changelog sections (frontmatter, chapters, labs, appendix)
- Categorizes changes (content, infrastructure, bug fixes)
- Extracts specific items with chapter names and details
- Generates statistics from actual data (61 updates, 29 chapters, etc)
- Fails explicitly if changelog missing (no misleading fallbacks)
- Validates output quality (must be > 100 chars)
Release notes now accurately reflect what actually changed rather than
returning generic marketing text. Critical for proper release documentation.
Addresses script organization and maintainability:
- Merged generate_release_notes.py and release_notes.py into changelog-releasenotes.py
- Removed deprecated change_log.py (superseded by changelog-releasenotes.py)
- Added diagram-*.pdf to .gitignore (Quarto auto-generated cache files)
This consolidation simplifies the release workflow and eliminates duplicate code.
Corrects answer redistribution logic in multiple-choice questions to properly update all references to the answer options being swapped, avoiding double-swapping issues.
Addresses an issue where answer text wasn't correctly updated when MCQ answer options were redistributed. It ensures references to option letters (A, B, C, D) are updated in both "The correct answer is X" and "Option X" contexts within the answer text.
Adds beautifulsoup4 and requests libraries to the list of
dependencies needed for the genai scripts. These libraries are
required for enhanced functionality in the scripts.
Implements a script to detect self-referential or circular section
references within Quarto files. This helps identify potential writing
issues where a section refers to itself, its parent, or its child.
- Enhanced AI prompt to filter out internal infrastructure changes
- Focus on educational improvements that benefit readers and instructors
- Skip entries with only section IDs, formatting, or build system changes
- Prioritize content additions, learning enhancements, and clarity improvements
- Updated changelog with user-focused descriptions since August 6th
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Add missing citations to chapter bib files:
- carlini2021extracting to privacy_security.bib
- koomey2011web to frontiers.bib
- quinonero2009dataset to robust_ai.bib
Enhance citation validation script:
- Strip trailing punctuation (.,;:) from citation keys
- Filter out DOI-style citations (e.g., @10.1109/...)
- Prevent false positives from citations like [@key.]
These changes fix all reported citation validation failures while
improving the validation script to handle edge cases better.
Add comprehensive documentation for the new citation validation script
and pre-commit hook, including usage examples, troubleshooting, and
integration details.
Add new pre-commit hook to validate that all @key citations in .qmd
files have corresponding entries in their .bib files. This catches
missing bibliography entries before they cause Quarto build failures.
Features:
- Validates citations against bibliography files
- Filters out cross-reference labels (fig-, tbl-, sec-, etc.)
- Provides clear error messages with missing citation keys
- Only checks files being committed (not entire codebase)
- Runs in quiet mode to reduce noise
New script: tools/scripts/content/validate_citations.py
Updated: .pre-commit-config.yaml with validate-citations hook
Fix path traversal from 3 to 4 parent directories to correctly locate
workspace root when script is at tools/scripts/content/format_tables.py.
This fixes the pre-commit hook error where it was looking for files at
/tools/quarto/contents instead of /quarto/contents.
Created check_list_formatting.py to enforce proper markdown list formatting:
- Detects bullet lists without preceding blank lines
- Auto-fixes issues with --fix flag
- Supports --check mode for CI/CD validation
- Can process single files or directories recursively
- Comprehensive documentation in README_LIST_FORMATTING.md
This tool ensures markdown renders correctly across all parsers
(Quarto, GitHub, etc.) by requiring empty lines before bullet lists.
Tool location: tools/scripts/utilities/check_list_formatting.py
Updates the AI Engineering definition and corrects a typo.
Updates broken cross-references to deployment paradigms.
Standardizes the format of bibtex entries.
Refactors a table in the robust AI section.
- Add fixed position Netlify badge to bottom-right of HTML version
- Badge is small (30px), clickable, and links to netlify.com
- Only visible in HTML format, not PDF/EPUB
- Addresses Netlify hosting requirement for visible badge on main page
- Parse multiple header rows (lines before separator)
- Format all header rows with bold markers
- Calculate widths across all header rows
- Validate all header rows for bolding
- Fixes formatting for 6 tables with multiline headers
- Update documentation to reflect multiline support
- Move conclusion chapter learning objectives to callout format matching other chapters
- Position learning objectives before Overview section for consistency
- Remove footnotes from workflow chapter Purpose section to keep it clean
- Update footnote agent guidelines to never add footnotes to Purpose sections
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Section ID Updates:
- Updated section identifiers across multiple chapters for consistency
- Modified section references in conclusion, introduction, ai_for_good, efficient_ai, hw_acceleration, benchmarking, and ml_systems chapters
- Fixed broken Bitter Lesson reference in efficient_ai chapter
Quiz Updates:
- Updated quiz section references in emerging_topics_quizzes.json, frontiers_quizzes.json, and ml_systems_quizzes.json to match new section IDs
New Utilities:
- Added format_tables.py: Python utility for formatting Quarto markdown tables
- Added test_format_tables.py: Test suite for table formatting utility
These changes maintain cross-reference consistency after recent chapter reorganization.
Script fixes:
- Fix year header detection to handle both '## 2025' and '## 2025 Updates' formats
- Fix labs organization to work with AI-generated summaries
- Add AI artifact cleanup to remove 'Let me know...' phrases
- Improve lab grouping logic for AI mode
Changelog updates:
- Generate comprehensive changelog with AI summaries for all changes since Aug 6
- 61 files updated: 6 frontmatter, 29 chapters, 26 labs
- Clean, professional AI-generated descriptions without artifacts
- Update changelog scripts to use correct 'quarto/contents/**/*.qmd' path
- Fix quarto config paths from 'book/config/' to 'quarto/config/'
- Update link-check workflow with correct content paths
- Resolves issue where scripts found 0 changes instead of 330+ commits
- Uncomment all chapters in PDF config for complete book builds
- Add format_python_in_qmd.py script for code formatting
- Remove temporary working files (notes, footnote catalog)
- Update changelog (no new content changes since last publish)
- Updated CLI build commands to use proper --to=format syntax instead of --to format
- Fixed in build_full(), build_chapters(), and build_html_only() methods
- Updated BUILD.md documentation to reflect correct syntax
- Updated manage_captions.py error message with correct syntax
This ensures compatibility with quarto's expected command-line argument format.
Adds a script to automatically find and remove bold formatting that appears in the middle of paragraphs within .qmd files.
The script skips footnotes, captions, and lines starting with bold text to avoid unintended modifications. It performs a dry run first to display potential changes before applying them.