git clone <repo-url>
cd Ed4All
python -m venv venv
source venv/bin/activate
pip install -e ".[full]"DART's PDF conversion pipeline uses external tools. These are only needed if you work on DART:
# Tesseract OCR — used for OCR-based PDF text extraction
sudo apt install tesseract-ocr
# poppler-utils — provides pdftotext, pdfinfo, etc.
sudo apt install poppler-utils# All tests
pytest
# Single component
pytest Trainforge/tests/ -v
pytest MCP/tests/ -v
# With coverage
pytest --cov
# Integration tests only
pytest -m integrationLint with ruff:
ruff check .No auto-formatter is enforced. Just pass ruff check.
Use imperative mood in the subject line:
- Good:
Add batch retry logic for Trainforge - Bad:
Added batch retry logic for Trainforge
Reference issues with #N when applicable:
Fix assessment validator crash on empty input (#42)
Keep the subject under 72 characters. Use the body for context if the change isn't obvious.
- Branch from
main. Name your branch descriptively (e.g.,fix/trainforge-bloom-validation). - Make sure all tests pass locally before opening a PR.
- In the PR body, describe what changed and why. Link related issues.
- One approval required to merge. Squash-merge preferred for single-purpose branches.
Ed4All/
├── DART/ # PDF to accessible HTML conversion
├── Courseforge/ # Course content generation and IMSCC packaging
├── Trainforge/ # Assessment generation via RAG training
├── LibV2/ # Course content repository and retrieval engine
├── MCP/ # FastMCP server exposing tool endpoints
├── orchestrator/ # Workflow execution and agent coordination
├── cli/ # CLI entry point (ed4all command)
├── lib/ # Shared libraries, validators, decision capture
├── config/ # Workflow and agent configuration (YAML)
├── schemas/ # JSON schemas for validation
├── state/ # Runtime state and progress tracking
└── ci/ # CI integrity checks
Each component maintains its own CLAUDE.md with component-specific guidance:
DART/CLAUDE.md— conversion pipeline, WCAG requirementsCourseforge/CLAUDE.md— content generation, IMSCC packagingTrainforge/CLAUDE.md— assessment generation, Bloom's alignmentLibV2/CLAUDE.md— repository structure, retrieval engine
The root CLAUDE.md covers the orchestration protocol, MCP tools, workflow definitions, and cross-component coordination.
If your change involves AI-driven decisions (content generation, assessment creation, remediation choices), log decisions to training-captures/ using lib.decision_capture.DecisionCapture. Every decision needs a rationale of at least 20 characters. See CLAUDE.md for the full protocol.
- Create the tool function in the appropriate module under
MCP/tools/. - Register it in
MCP/server.py. - Add tests in
MCP/tests/. - Document the tool in the root
CLAUDE.mdtool reference table.
- Define phases and concurrency limits in
config/workflows.yaml. - Register agents in
config/agents.yaml. - Implement phase handlers in
orchestrator/. - Add validation gates if the workflow produces artifacts that need quality checks.