Manifest format¶
The manifest lives at workspace/assignment.txt inside the student
repo (not this repo). The grader's CI consumes it on every push.
Grammar¶
manifest := ( line | comment | blank )*
line := id WS folder ( WS main )?
id := "HW1" | "HW2" | ... | "HW6"
| "Lab1" | ... | "Lab6"
| "Lab7-1" | "Lab7-2"
folder := <relative path inside workspace/>
main := <filename of the *_main.c to compile>
comment := "#" <rest of line>
blank := <whitespace-only>
WS := one or more whitespace
- Blank lines and
#comments are ignored. - Whitespace between tokens is any sequence of spaces or tabs.
- An ID that's not in the valid set causes
CMakeLists.txtto fail at configure time.
Examples¶
Both HW1 rows run independently. The renderer produces an
aggregate HW1.md showing per-folder status. See
Manifest & slots.
Use the third column when the folder contains more than one
*_main.c and you need to disambiguate.
What happens on parse failure¶
tools/select_assignments.py raises a ValueError with the offending
line quoted:
The workflow exits with a non-zero code; the cause is shown in the Actions log.
Authoritative parser¶
The reference implementation is
tools/select_assignments.py::parse_manifest.
Read the module docstring for matrix selection rules, slot derivation,
and the --self-test entry point.