This commit introduces the following fixes to the Marimo labs architecture:
1. Interactive Testing: Updates test_widget.py to dynamically extract, simulate clicks, and verify the interactive states hidden behind mo.stop() to ensure execution pipelines don't crash.
2. Ledger Continuity: Fixes an issue in 4 Volume 2 labs where the ledger.save() was mistakenly passed a string key (e.g. 'v2_05') instead of an integer.
3. WASM Relative Pathing: Modifies tools/build_site.sh to duplicate built Pyodide wheel assets into vol1/wheels and vol2/wheels to satisfy Pyodide's worker.js relative path resolution, which was causing the labs to hang at startup on GitHub Pages with BadZipFile errors.
Complete lab curriculum rebuild:
- 16 Vol1 + 16 Vol2 labs (33,368 lines across 32 files)
- Each lab has 4-5 pedagogically grounded parts + synthesis
- Parts proposed by agents reading actual chapter QMD files
- Ed-tech review identified and fixed: redundancies, time overruns, mlsysim gaps
- V2-03 + V2-06 merged into "Communication at Scale"
- 17 old/superseded files deleted (pre-merger, pre-renumber)
Structural fixes applied:
- V1-01 Part C replaced (Silent Decay -> Triad Across Targets)
- V1-03 grounded in mlsysim (Engine.solve for OOM, Engine.sweep for configs)
- V1-09 Part C replaced (Curriculum Learning -> Preprocessing Tax)
- V1-13 Part E dropped (redundant with Lab 10)
- V1-15 Part C dropped (TCO not fairness-specific), refocused
- V2-12 model extraction dropped, restructured around privacy cost
- V2-16 capstone cut to 4 parts, Design Ledger fallbacks added
- All 15-min parts trimmed to 12 min
Test infrastructure added:
- labs/tests/ with 3-level pytest suite (static, engine, widget)
- CI workflow updated with pytest stages
- pytest added to labs/requirements.txt