Commit graph

3 commits

Author SHA1 Message Date
d4ca5f99dc Clarify background/foreground behavior in app.sh start output
Users now see explicit messages about whether Jupyter runs in
background or foreground, what happens when the terminal closes,
and how to stop the server.
2026-04-16 09:28:10 +02:00
a16f99e2ed Harden Jupyter lifecycle and enhance E2E browser UX tests
app.sh: full Jupyter env isolation (CONFIG_DIR, DATA_DIR, RUNTIME_DIR,
IPYTHONDIR), auto port allocation, foreground mode, restart command,
graceful stop (SIGTERM → wait → SIGKILL), orphan detection, stale
runtime JSON cleanup, reset-state command.

test_browser_ux.py: add TestNavigationClickThrough (click Plan A link,
verify target opens; click forward-link in Plan D), TestWidgetInteraction
(run all cells, verify output areas, click quiz Submit and verify feedback),
TestProgressPersistence (kernel API session, progress file schema validation).

.gitignore: add Jupyter isolation directories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 21:20:34 +02:00
29caba3a1a Add professional toolchain: mypy strict, CI pipeline, Playwright UX tests, pedagogy validation
Infrastructure:
- Configure mypy strict mode in pyproject.toml; fix all 53 type errors across 8 source files
- Add .pre-commit-config.yaml (ruff, mypy, nbstripout, trailing whitespace)
- Add .github/workflows/ci.yml: lint + type check, unit tests (Python 3.11/3.12), notebook execution
- Add scripts/app.sh consumer lifecycle manager (bootstrap, start, stop, status, validate, logs, reset)

Testing:
- Add tests/test_browser_ux.py: Playwright end-to-end UX tests covering JupyterLab launch,
  notebook rendering, navigation links, widget rendering, and full consumer walkthrough
- Add tests/test_pedagogy.py: 130 pedagogical structure tests validating prose quality
  (word counts, markdown ratio), section structure, assessment density and variety,
  Bloom's taxonomy coverage, checkpoint presence, tracker integration, key insight
  callouts, and cross-plan concept consistency

Quality:
- Fix ruff E741 (ambiguous variable name) across all builder scripts
- Add Key Insight callouts to plan_a/01_encoded_magic_state.ipynb
- Add pytest 'browser' marker for selective UX test runs
- Expand .gitignore with .logs/ and build artifacts

319 tests pass, 85% coverage, mypy strict clean, ruff clean.
2026-04-15 20:00:19 +02:00