Capstone Ship: Milestones and Verification
How the graded checks map to milestones, and how to verify each one yourself before submitting.
Milestone → graded check
| Milestone | Graded challenge | Proves |
| --- | --- | --- |
| M1 records + balance | capstone core | struct, class invariant, sum |
| M2 categories + rejection | capstone categories | map aggregation, boundary validation |
| M3 report via program() | capstone report | pipeline formatting, capture-based grading |
Verify each milestone yourself
For every milestone, before submitting: write a program() (or temporary main) that exercises the feature and print what you expect. Compare. This is the characterization habit from module 16 applied to your own project — and it is exactly how the platform's tests will see your code.
The honest rules of this capstone
- No solution is provided — the lessons of modules 1–18 are your toolkit; the brief is your contract.
- Edge cases are graded equally with happy paths: empty ledger, rejected record, one-category month.
- Architecture constraints are part of the grade: a Ledger class that validates, free functions for parsing, no raw owning pointers.
- AI assistants: allowed for explaining compiler errors and suggesting test cases (module 14's rules); not allowed to write your Ledger. The graded checks read your structure, not just your output.
After shipping
You will have used every beginner tool under a real requirement: types, classes, containers, algorithms, streams, RAII, and a test-driven loop. C++ Intermediate picks up exactly where this artifact ends: templates and generic design, deeper exception guarantees, build systems beyond one target, and concurrency. The path continues; the fundamentals are yours.