Source: Exercise Quality Control Audit
Date: 2026-04-10
Scope: All 43 exercises in content/ (ch01–ch11) across public repo (VHCosta/c-systems-lab-exercises) and paid bundle (exports/paid/)
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 — All 43 Exercises
All 43 exercises pass 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
scripts/validate.sh was previously confirmed at 43/43 PASS in a Linux environment. Validation could not be re-run during this audit (no gcc on the Windows host). Re-run on Linux/WSL to re-confirm after the ex1_4→ex1_3 rename.
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
- Content tree: 43 exercises, no gaps, no leaked solutions
- Product live on Gumroad at
vhcosta.gumroad.com/l/c-systems-lab validate.shwas 43/43 PASS pre-rename; re-run on Linux/WSL to confirm post ex1_4→ex1_3