Commit Graph

27 Commits

Author SHA1 Message Date
Vijay Janapa Reddi
672a35335f feat(vscode-ext, tito): make extension a thin client over Tito CLI
The VS Code extension no longer implements any business logic — every
capability (module discovery, path resolution, system info, builds,
tests, clean) lives in Tito CLI commands. The extension is a pure UI
shell that delegates via `python3 -m tito.main`.

Tito CLI additions:
- `module list --json` for machine-readable module discovery
- `module path <num> --notebook|--source|--about` for file resolution
- `system info --json` for environment info
- `dev build html|serve|pdf|paper` wrapping make targets
- `dev clean [all|site]` wrapping make clean
- Banner suppression for --json and module path output

Extension hardening:
- Centralized CLI integration in utils/tito.ts (single TITO_CMD constant,
  callTito, callTitoJson, titoTerminalCommand, isTitoAvailable, log/logError)
- Replaced all silent catch{} blocks with logged errors and user feedback
- Module tree shows error/empty states with actionable Setup/Health buttons
- Info tree shows "Tito CLI unavailable" when CLI is unreachable
- Removed all setTimeout refresh hacks — file watcher on .tito/progress.json
  is the sole refresh mechanism
- Exit code tracking via onDidEndTerminalShellExecution
- Tito availability pre-flight check on activation
- BUILD_OUTPUTS constants for build artifact paths
- Zero execSync calls outside tito.ts, zero hardcoded command strings
2026-02-17 10:08:00 -05:00
Vijay Janapa Reddi
bb5dd7a9f6 fix(export): use nbdev Python API instead of CLI for reliable export
The nbdev_export CLI was not reading settings.ini correctly in CI,
causing exports to silently fail. Using nbdev.export.nb_export()
Python API directly with explicit lib_path ensures exports work
reliably regardless of environment.
2026-01-29 14:28:40 -05:00
Vijay Janapa Reddi
2ec60a6f5c fix(export): use python -m nbdev.export instead of nbdev_export command
The nbdev_export command wasn't in PATH in CI. Using sys.executable
with -m nbdev.export ensures we use the same Python environment that's
running tito, which is more reliable across different environments.

Fixed in:
- tito/commands/dev/export.py (both _export_all_modules and _run_nbdev_export)
- tito/commands/module/workflow.py (_export_notebook)
2026-01-29 14:19:26 -05:00
Vijay Janapa Reddi
2546b54bba fix(export): handle running from tinytorch directory
The directory check was looking for tinytorch/tinytorch/__init__.py
when running from the tinytorch directory (as CI does). Fixed to check
for either repo root or tinytorch project directory structure.
2026-01-29 13:53:22 -05:00
Vijay Janapa Reddi
46d633d3cd fix(ci): show full export error output for debugging
Increased error output from 100 to 500 chars and show both stdout
and stderr to help diagnose CI export failures.
2026-01-29 13:51:58 -05:00
Vijay Janapa Reddi
98c5415a5a fix: skip sync prompt in CI + increase milestone timeout
- Skip "sync to profile" prompt when not in interactive terminal
  (was hanging in CI waiting for input that never comes)
- Increase milestone timeout from 180s to 300s for heavy milestones
  (CNN and Transformer training can take 2-3 minutes on CI)
2026-01-28 11:54:23 -05:00
Vijay Janapa Reddi
a70c724a02 fix: export failure now blocks progress + add user journey test
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
2026-01-28 09:28:15 -05:00
Vijay Janapa Reddi
223ce01d66 fix(tests): skip slow milestone tests in unit test runs
Unit tests now skip @pytest.mark.slow tests to avoid CI timeouts.
Milestone tests explicitly run all tests (including slow ones).

This ensures:
- Unit tests run quickly (~43s instead of timing out)
- Milestone tests still validate full milestone execution
- CI passes stages 1-5 reliably
2026-01-24 19:31:02 -05:00
Vijay Janapa Reddi
e19be54703 debug(tests): show import errors in CI output for debugging 2026-01-23 17:15:52 -05:00
Vijay Janapa Reddi
918f72e6a2 fix(tests): add PYTHONPATH to pytest subprocess for CI imports
The _run_pytest method was missing PYTHONPATH in the subprocess
environment, causing tinytorch imports to fail in CI where the
package isn't installed system-wide.
2026-01-23 17:11:21 -05:00
Vijay Janapa Reddi
c4c64ebc9a fix(ci): use dev export --all for package builds instead of module complete
- _build_package now uses 'tito dev export --all' which properly:
  1. Converts src/*.py to modules/*.ipynb (jupytext)
  2. Exports to tinytorch/core/ (nbdev_export)

- Fixes issue where 'module complete --all' didn't iterate through modules
- Added CI streaming output for better visibility during builds
- Each CI stage that needs the package will build it independently
2026-01-23 15:00:34 -05:00
Vijay Janapa Reddi
a44e76131b fix(ci): inline tests must export notebooks before module complete
The inline tests were calling 'module complete' directly, but the notebook
doesn't exist until 'dev export' creates it from src/.

Now the flow is:
1. tito dev export <module>  - Creates notebook from src/
2. tito module complete <module> - Runs tests and exports to core/

This matches the proper progressive build workflow.
2026-01-23 14:55:15 -05:00
Vijay Janapa Reddi
03417e2101 fix(ci): use 'module complete --all' to fully build package before tests
The previous approach used 'dev export --all' which only exports notebooks
but doesn't run inline tests or copy code to tinytorch/core/.

Now uses 'module complete --all' which:
1. Exports notebooks from src/ to modules/
2. Runs inline tests in each module
3. Copies tested code to tinytorch/core/

This ensures 'from tinytorch import Tensor' works in unit tests.
2026-01-23 14:52:09 -05:00
Vijay Janapa Reddi
e7fc890842 fix(ci): proper exit codes and error counting in test output
Critical fixes:
1. bin/tito now uses sys.exit(main()) to propagate exit codes
   - Previously the exit code was discarded, causing CI to pass even on failures

2. Collection errors are now counted and displayed
   - 'ERROR tests/...' lines (collection failures) are now tracked
   - Summary shows 'X errors, Y failed, Z passed' for clarity

Without these fixes, CI stages could show green even when tests failed.
2026-01-23 14:51:26 -05:00
Vijay Janapa Reddi
840eae5178 feat(ci): add verbose streaming output for all pytest-based tests
In CI mode, all test types (unit, CLI, integration, E2E, milestone) now show:
- Header with test type and path
- Per-test progress as they run (✓ PASSED / ✗ FAILED)
- Summary footer with counts

This makes CI logs much more informative - you can see exactly which tests
are running and their status in real-time.
2026-01-23 14:40:26 -05:00
Vijay Janapa Reddi
e1880011ff feat(ci): add verbose per-module output for inline tests
In CI mode, inline tests now show:
- Header with total module count
- Per-module progress: [1/20] Module 01: tensor... ✓ PASSED
- Error details if a module fails
- Summary footer with result

This makes CI logs much more informative for debugging.
2026-01-23 14:21:17 -05:00
Vijay Janapa Reddi
71b754037a feat: apply stashed improvements after merge
Key improvements from local development:
- conftest.py: Add package export validation before tests run
- preflight.py: Stricter Tensor import check (fail if None)
- 06_autograd.py: Set requires_grad manually in tests (progressive disclosure)
- 08_training.py, 09_convolutions.py: Add enable_autograd() calls
- install.sh: Environment variable overrides for testing
- nbdev.py: Fix import path for DevExportCommand

Also syncs CI/publish workflows from origin/dev
2026-01-23 13:31:27 -05:00
Vijay Janapa Reddi
a8d6f1de55 refactor(cli): update dev command group for new test infrastructure
- Remove validate subcommand import and handler
- Update help text to show all new test flags
- Update DevTestCommand usage in __init__.py
2026-01-23 13:17:37 -05:00
Vijay Janapa Reddi
12af47b635 feat(cli): add unified tito dev test command
Introduces a comprehensive testing command with explicit test type flags:
- --inline: Progressive inline tests from src/ (nbgrader tests)
- --unit: Pytest unit tests
- --cli: CLI command tests
- --integration: Cross-module tests
- --e2e: End-to-end user journey tests
- --milestone: Historical milestone tests
- --all: Run all test types (except release)
- --release: Full destructive release validation
- --module N: Test specific module

Default behavior runs unit tests only.

This consolidates validate, provides clear test hierarchy, and
matches PyTorch's explicit, predictable interface philosophy.
2026-01-23 13:17:30 -05:00
Vijay Janapa Reddi
0ce0703c67 refactor(cli): remove standalone validate command
The validate command functionality has been consolidated into
`tito dev test --release` for a unified testing interface.

This follows the PyTorch philosophy: one clear way to do things.
2026-01-23 13:17:22 -05:00
Vijay Janapa Reddi
dbad2637e3 fix(docs): standardize Perceptron year to 1958
- Rename milestone directory from 01_1957_perceptron to 01_1958_perceptron
- Update all references to use 1958 (publication year) for consistency
  with academic citation format (rosenblatt1958perceptron)
- Changes affect: READMEs, docs, tests, milestone tracker

Rationale: Using 1958 aligns with the publication year and standard
academic citations, while 1957 was the development year.

Cherry-picked from: 28ca41582 (feature/tito-dev-validate)
2026-01-17 12:15:49 -05:00
Vijay Janapa Reddi
48498d1589 feat(tito): Add 'tito dev validate' command for release validation
- Cherry-picked ValidateCommand from feature/tito-dev-validate branch
- Simulates complete student journey through curriculum
- Runs export + complete cycle for all modules (01-20)
- Executes all milestones after module validation
- Supports --ci mode for CI/CD integration
- Options: --module, --skip-milestones, --stop-on-fail
- Provides detailed pass/fail reporting with timing

This enables release validation without full branch merge conflicts.
2026-01-17 12:06:27 -05:00
Vijay Janapa Reddi
fd7c0f5e2f fix(tinytorch): tito module complete no longer overwrites student notebooks
- Create tito dev export for developers (rebuilds src→notebook→package)
- Fix tito module complete to only export notebook→package (preserves student work)
- Remove deprecated tito src command
- Add module name normalization to dev export (supports 01 shorthand)
2026-01-14 12:51:02 -05:00
Vijay Janapa Reddi
853eb03ee8 style: apply consistent whitespace and formatting across codebase 2025-12-13 14:05:34 -05:00
Vijay Janapa Reddi
0c80ee116d fix: use bin/tito wrapper for CI preflight checks
- Remove pip install -e . requirement from CI workflow
- Add bin/tito wrapper script that sets PYTHONPATH and cwd
- Update preflight.py to use bin/tito instead of python -m tito.main
- Fix milestone command name (singular not plural)
- Use vars.TINYTORCH_ROOT with fallback to 'tinytorch'
2025-12-12 07:50:04 -08:00
Vijay Janapa Reddi
d1d2b1f4f7 fix(preflight): make tinytorch/ package dir optional in CI
The tinytorch/ package directory is generated via 'tito export' and
gitignored, so it won't exist in fresh CI clones. Changed from FAIL
to WARN since this is expected behavior in CI.
2025-12-09 21:46:44 -08:00
Vijay Janapa Reddi
c602f97364 feat: integrate TinyTorch into MLSysBook repository
TinyTorch educational deep learning framework now lives at tinytorch/

Structure:
- tinytorch/src/         - Source modules (single source of truth)
- tinytorch/tito/        - CLI tool
- tinytorch/tests/       - Test suite
- tinytorch/site/        - Jupyter Book website
- tinytorch/milestones/  - Historical ML implementations
- tinytorch/datasets/    - Educational datasets (tinydigits, tinytalks)
- tinytorch/assignments/ - NBGrader assignments
- tinytorch/instructor/  - Teaching materials

Workflows (with tinytorch- prefix):
- tinytorch-ci.yml           - CI/CD pipeline
- tinytorch-publish-dev.yml  - Dev site deployment
- tinytorch-publish-live.yml - Live site deployment
- tinytorch-build-pdf.yml    - PDF generation
- tinytorch-release-check.yml - Release validation

Repository Variables added:
- TINYTORCH_ROOT  = tinytorch
- TINYTORCH_SRC   = tinytorch/src
- TINYTORCH_SITE  = tinytorch/site
- TINYTORCH_TESTS = tinytorch/tests

All workflows use \${{ vars.TINYTORCH_* }} for path configuration.

Note: tinytorch/site/_static/favicon.svg kept as SVG (valid for favicons)
2025-12-05 19:23:18 -08:00