AutomaticGrader¶
Automated checker for SE 423 (UIUC) homework and lab firmware. Compiles
student code written for the TI C2000 (TMS320F28379D LaunchPad) against
Linux stubs, drives the patched main() cooperatively from a single
thread, and grades the submission by inspecting simulated peripheral
register state plus captured serial_printf output.
Designed to slot into a course CI/CD pipeline as a reusable GitHub Actions workflow so submissions are graded automatically before they reach Gradescope.
Where to start¶
-
Run it locally
Install dependencies, build for one assignment, run the grader on a reference fixture.
-
Add a new checker
Step-by-step from a fresh assignment spec to a passing
hw{N}.cppwith a green CI run. -
Understand the architecture
Three-layer model, cooperative main-loop driver, capture pipeline, and the four-phase check pattern.
-
Wire it into a course repo
Reusable workflow setup, manifest format, duplicate-id submissions, and per-folder report traceability.
What the grader does, in one diagram¶
flowchart LR
Spec["HW#123;N#125;.tex<br>Lab#123;N#125;.txt"]
Student["Student firmware<br>workspace/<folder>"]
Patcher["patch_student_source.py"]
Driver["Cooperative<br>main-loop driver"]
Checker["hw#123;N#125;.cpp /<br>lab#123;N#125;.cpp"]
Stubs["TI peripheral<br>stubs + capture"]
Report["Markdown +<br>JSON report"]
Spec -.authoritative.-> Checker
Student --> Patcher --> Driver
Driver <--> Stubs
Checker <--> Stubs
Checker --> Report
classDef src fill:#dbeafe,stroke:#2563eb
classDef harness fill:#fef3c7,stroke:#d97706
classDef out fill:#dcfce7,stroke:#16a34a
class Spec,Student src
class Patcher,Driver,Stubs,Checker harness
class Report out
Authority hierarchy¶
- Spec is absolute. Every checker assertion must trace to a quoted
sentence in
context/homeworks/HW{N}.texorcontext/lab/Lab{N}.txt. - Where the spec is ambiguous, tag the assertion
[ambiguous]in the assignment roadmap and pick the most common interpretation. - Reference solutions are non-authoritative. They inform stub design and serve as one positive-test fixture. Where they deviate from the spec, the spec wins and the reference is allowed to fail.
Repository status¶
The full per-assignment implementation matrix lives in the
CLAUDE.md
file and the roadmap files under
progress/.
Skim those when planning a new checker — they encode the validation
matrix (mutation testing, snapshot hygiene, regression) you'll be held
to.