# Milestone Write-up — M: > Copy this file per milestone (e.g. `MILESTONE-M3.md`) and fill it in. The > flavor line below is required **every** milestone, not just the first. ## Flavor (contacts book | gradebook | expense tracker) — same flavor for every milestone ## AI used (none | Tier 2) — see `AGENTS.md` for what Tier 2 permits ## What I built Which common-interface functions are now implemented, in my own words (e.g. "`list_append`/`list_find`/`list_remove` over a singly linked list, with `list_free` walking and freeing every node and record"). Name the files. ## Verification evidence Paste the output of the gates for this milestone — and the CI report link from Forgejo Actions: ```text make make test make sanitize # ASan/UBSan (M5+) make valgrind # 0 bytes lost (M5) ``` ## Pre-tool prediction Before running the tool/CI: what did you predict would happen, and which test did you expect to fail? (If nothing failed — say what made you confident.) ## Student-authored challenge case A test or scenario **you** wrote that the starter didn't cover (e.g. remove the head node, a 10k-record list, empty fields in save/load). What does it check and why does it matter? ## Novel transfer A new use of what you built this milestone — apply the linked list / buffer / store to a different domain (e.g. "if the record were a todo item instead of a contact…") and sketch how your code would change. ## Reflection What broke, what you learned, what you'd do differently next milestone.