Source: Exercise Quality Control Audit
Date: 2026-04-10
Historical scope: The original audit covered the first 43 exercises in
content/ (ch01–ch11) across the public repo
(VHCosta/c-systems-lab-exercises) and the paid bundle (exports/paid/).
Current state (2026-04-16): canonical content/ now includes the settled
Chapter 1 ex1_4 shape and the live total is 48 exercises across all
downstream mirrors.
Findings
Issue 1 — Solutions leaked into public repo (RESOLVED)
8 exercises in the public repo (VHCosta/c-systems-lab-exercises) contained full reference solutions instead of starter stubs. Several were explicitly labelled “solution” in their file headers.
Affected exercises:
ch02/ex2_1— labelled “solution / verification” in headerch02/ex2_3— labelled “solution” in headerch03/ex3_3— fully implemented pointer arithmeticch05/ex5_1—_Static_assertanswers baked inch05/ex5_4— full bit field register implementationch06/ex6_2— full_Genericimplementationch06/ex6_3— full platform detection (no student work required anyway, but solution file used)ch07/ex7_3— full fork/fd sharing implementation with three-table diagram
Root cause: The export.sh paid-tier path was copy-overwriting starter stubs with solution files at the same path. When the public export was pushed, solution files were accidentally included.
Resolution:
- Correct starter stubs confirmed in
content/chNN/exN_M/starter/for all 8 affected exercises. export.shpaid path fixed: solutions now go tosolutions/subdir, not flat override.- Public repo git history rewritten as orphan branch (single clean commit) to purge solution history.
- Force-pushed to both
mainandmasteronVHCosta/c-systems-lab-exercises.
Issue 2 — ch01 exercise numbering gap (RESOLVED)
content/ch01/ contained ex1_1, ex1_2, ex1_4 — no ex1_3. The exercise count (43) matched the plan, confirming ex1_3 was intentionally cut at some point, but the gap in numbering was a scar from that edit.
Resolution:
content/ch01/ex1_4/renamed tocontent/ch01/ex1_3/meta.jsonupdated:"exercise": 4→"exercise": 3prompt.mdupdated: “Exercise 1.4” → “Exercise 1.3”- Public repo updated and pushed (normal commit, no history rewrite needed)
Issue 3 — export.sh paid bundle structure (RESOLVED)
The paid bundle was structurally identical to the public bundle — no solutions/ subfolder, making it unclear to buyers that they received solutions.
Resolution: export.sh paid path now produces:
chNN/exN_M/
prompt.md
meta.json
*.c / *.h starter stubs
solutions/ reference solution
*.c / *.h
extended/ (where applicable)
Zip step added at end of both export modes: csl-exercises-{version}.zip (public) / csl-solutions-{version}.zip (paid).
Structural Audit — Original 43-Exercise Audit
The original 43-exercise audit passed structural checks:
| Check | Result |
|---|---|
prompt.md present | 43/43 ✅ |
meta.json present | 43/43 ✅ |
starter/ present | 43/43 ✅ |
solution/ present | 43/43 ✅ |
| Starter has TODO markers | 42/43 ✅ |
The one exercise without TODO markers is ch04/ex4_3 — a deliberate bug-hunt exercise. The student’s task is to find and fix three /* BUG: */-annotated memory errors (overflow, use-after-free, leak). No TODO stubs are appropriate for this format.
Compilation Validation
At audit time, scripts/validate.sh had previously been confirmed at
43/43 PASS in a Linux environment. That audit host could not re-run the
compiler checks locally.
Current verification status:
llc-course/scripts/validate.sh: pass across the live 48-exercise tree with one intentional non-C skip (ch01/ex1_3)llc-course/scripts/check-content-sync.sh: 48 exercises alignedllc-companion-pdf/tests/run_all.sh: 48/48 PASS
PDF Spot-Check (2026-04-11)
All 3 PDF tiers built and spot-checked after cover redesign:
| Tier | File | Pages |
|---|---|---|
| Base | companion.pdf | 142 pp |
| Solutions | companion-solutions.pdf | 207 pp |
| Complete | companion-complete.pdf | 217 pp |
Cover redesigned to match Gumroad cover aesthetic: Space Grotesk Bold, dark background (#0D0D0F), amber accent (#e8b84b), grid lines, pill badges. Static SpaceGrotesk-Bold.ttf added to pdf/fonts/ (variable font not supported by Typst).
Status After Audit
- Public repo: clean, stubs only, correct numbering — live at
VHCosta/c-systems-lab-exercises - Paid export script: correct structure, produces zip
- Historical audit result: first 43 exercises were clean, gap-free, and solution-safe after repair
- Product live on Gumroad at
vhcosta.gumroad.com/l/c-systems-lab - Current canonical tree: 48 exercises (ch01–ch12), all mirrors aligned