- Curated idiom whitelist for the course's data-methods track
- Per-snippet AST check that all calls are in-idiom
- Out-of-idiom requests trigger the explain-first refusal path
CodeCaster — the first hundred lines of code.
A coding assistant aimed at social-science students learning to program for data analysis. CodeCaster scaffolds the first hundred lines they'll ever write — explaining each one, refusing to ship code the student can't read — and grows out of the way as the student grows in.
What problem this solves.
Students who pick up programming for the first time inside a research methods course rarely get the tooling that fits them. General-purpose AI coding assistants will happily emit a hundred-line script the student cannot read, and the most popular learning platforms drill syntax in isolation from the data the student actually has.
Group 09 built for that student specifically. CodeCaster is a coding assistant that refuses to ship code the student cannot read — every line is explainable on hover, every snippet anchored to a concept tag from the course, every output written to be reproduced by hand at least once before automation takes over.
The system, end to end.
Each request goes through a constrained generator that writes code in a deliberately small idiom — a curated subset of Pandas, Matplotlib, and stdlib chosen for what the course actually teaches. Each emitted line is annotated with a concept tag ("DataFrame indexing," "groupby aggregation") and a one-sentence explanation; the UI surfaces those annotations on hover so the student can read the code as they receive it.
The refusal posture is the second design choice. When the student's request implies code patterns they have not yet seen, the system refuses to ship the snippet silently — it explains the concept first and offers to walk through it, then emits the code only after the student opts in. The product trades short-term convenience for the kind of literacy the course is actually trying to build.
What it's built on.
| Constrained generator | Curated idiom whitelist for the course's data-methods track |
|---|---|
| Concept tagging | Each generated line annotated with a concept tag |
| Runtime | Pyodide in-browser execution, no server round-trip |
| Teacher view | Per-student concept-tag coverage report |
- Each generated line annotated with a concept tag
- Hover-to-reveal one-sentence explanation in the UI
- Tags reconcile to the course's syllabus week-by-week
- Pyodide in-browser execution, no server round-trip
- Per-cell isolation with reset-to-checkpoint
- CSV / Parquet uploads stay client-side for privacy
- Per-student concept-tag coverage report
- Refusal-event log for advising the next office hour
- Curriculum sync — extend the idiom, the tool follows
What the team shipped.
What sets this capstone apart.
The idiom is the curriculum.
CodeCaster does not write "good Python." It writes the subset of Python the course teaches. The model is constrained to the idiom on purpose; the student's vocabulary grows when the course expands the idiom, not when the model decides to.
Hover for the why.
Every line in every snippet is tagged with the concept it draws on and a one-sentence explanation. Reading the code is the lesson; writing the code is the homework.
New concepts arrive by consent.
When a request needs a concept the student hasn't seen, the system pauses, explains, and asks. The student decides when their vocabulary grows. The model does not surprise them with a pattern they can't defend in office hours.
How this project landed.
Education-tools projects fail when they confuse "helpful" with "correct." The proposal began with the more flattering framing — a powerful assistant for novice coders — and the first review pushed the team to the harder one: an assistant whose value is what it refuses to do.
The reframe held. CodeCaster's refusal posture is its whole product, and the team defended it in the adversarial week against the obvious complaint ("why won't it just answer?") with the right answer ("because the answer would not teach the student"). The capstone is a small, principled, mature tool.