eval-materials-vs-build
Compare a recorded run's app against the original course materials.
Course alignment only. Spec fidelity is /eval-spec-vs-build.
Steps
- Verify cwd is a course folder. Confirm
spec.md,materials/,builds/,evals/exist. Refuse otherwise. - Require a run. If
$ARGUMENTSis empty:
List those runs and ask which one. Never default.ls -1 builds/ 2>/dev/null | grep -E '^run-[0-9]+$' | sort - Validate the run. Confirm
builds/$ARGUMENTS/is a non-empty directory. Refuse otherwise. The report reflects whatever the build folder contains — evaluating an in-progress run is fine; just re-run after the build finishes for a clean score. - Read the inputs.
- Materials: every non-empty file under
materials/notebooks/andmaterials/transcripts/. - Build: walk
builds/$ARGUMENTS/(skip node_modules, .venv, dist, build, .git, and anything matching its own .gitignore).
- Materials: every non-empty file under
- Produce the report at
evals/$ARGUMENTS/materials-vs-build.mdwith sections:- Summary — one-paragraph verdict on course faithfulness.
- Concept coverage — concepts/techniques the materials taught → present / partial / missing in the build, with file references.
- Divergences from the course — what the build did that the materials never covered (this can be fine, but call it out).
- Course concepts skipped — what the course emphasized that the build ignored.
- Score — judgment on a 0–10 scale, with reasoning.
- Report the path written, then hand off. After echoing the report path, tell the user: "Course-alignment report written. The companion eval is /eval-spec-vs-build $ARGUMENTS — different reference, different question (spec fidelity, not course alignment). Say 'go ahead' to run it next, or skip if you've already done it."
Don't
- Don't read
evals/$ARGUMENTS/spec.mdor the top-levelspec.md— that collapses this eval into/eval-spec-vs-build. Different reference, different question. - Don't default a run. List the runs in
builds/and ask the user which one. - Don't penalize the build for not implementing something the materials didn't actually cover — that belongs in the spec eval.