On PR events, github.ref_name resolves to the merge ref (e.g.
"1159/merge") which doesn't exist on raw.githubusercontent.com,
causing a 404. Use github.head_ref (the actual source branch)
for PRs, falling back to ref_name for push events.
Also adds -f flag to curl so HTTP errors fail immediately with
a clear message instead of silently saving the 404 HTML page.
- Default test_type: quick → all (run full validation by default)
- Default os: linux → all (test both platforms by default)
- Rename 'release' → 'user-journey' to match CLI --user-journey flag
- Fix 'standard' to correctly stop at stage 5 (was running user-journey)
- Reorder options to show defaults first in dropdown
- Change Validate (Dev) icon from 💯 to ✅ for Book and TinyTorch
- Change Update PDFs icon from 📄 to 📑 (bookmark tabs)
- Fix workflow_run references to match exact workflow names
This makes it easier to visually distinguish between Validate and
Publish operations in the GitHub Actions UI.
Bug Fix:
- Export failures now return early in module complete, preventing
progress from being updated when export fails. This fixes the issue
where students could start Module 02 even though tensor.py was
never exported.
New --user-journey test:
- Simulates exact student flow: module start --no-jupyter → module complete
- Runs milestones at natural unlock checkpoints (not all at end)
- Milestone checkpoints: after modules 03, 08, 09, 13, 19
- Explicit step-by-step output for easy CI debugging
New --no-jupyter flag:
- Added to 'tito module start' for CI/testing
- Creates notebook but skips opening Jupyter
Ref: https://github.com/harvard-edge/cs249r_book/discussions/1147
Add separator and action-specific emojis to make it easier to visually
distinguish between workflow types (Build/Publish/Validate) at a glance.
Pattern: Category emoji + Name · Action emoji + Action
- 🔨 Build
- 📤 Publish
- 🔍 Validate
- 🐳 Container
- 🧹 Cleanup
- 🔗 Link Check
- ❤️ Health Check
Windows Server 2025 (windows-latest) has path length issues causing
"Could not find a part of the path D:\a" errors during job setup.
Windows Server 2022 is more stable.
- CI now runs both Linux and Windows by default (matrix)
- Updated install.sh to detect Windows venv path (Scripts/ vs bin/)
- Added Windows installation instructions to getting-started.md
- Updated troubleshooting guide with Git Bash guidance
- Windows uses Git Bash for cross-platform bash script compatibility
Subprocess pipes on Windows use cp1252 by default which fails
when reading UTF-8 output. PYTHONUTF8=1 forces Python to use
UTF-8 for all I/O operations.
Windows uses cp1252 encoding by default which doesn't support
emoji characters. Setting PYTHONIOENCODING=utf-8 fixes the
UnicodeEncodeError when Rich prints the banner with emojis.
- Add 'os' input parameter (linux/windows/all)
- Default to Linux for all automatic triggers
- Manual dispatch can select Windows for experimental testing
- Stages 1-5 now support OS matrix
- Stages 6-7 remain Linux-only (release/fresh-install)
This enables progressive Windows testing to identify compatibility
issues before committing to full Windows support.
Fork PRs have branches that don't exist in harvard-edge/cs249r_book,
so the install script URL is invalid. Skip Fresh Install for fork PRs
and run it only for:
- Direct pushes to dev/main
- PRs from branches within the same repo