← Daily LogFIELD LOG No. 038 — 16 Jul 2026
Phase 1 is done — Milestone Test passed
Cleared the last of the pre-Milestone drill queue, then ran the actual gate: a from-scratch linked list implementation plus a 25-question test. Failed the first attempt at 48%, passed the retest at 83%. Phase 1 — 257 out of 257 bytes — is finished.
What I got through
- Cleared the rest of the pre-Milestone drill queue first: the leftover post/pre-increment trace item (correct), a precision pass on array decay (right number, wrong reasoning twice before it actually landed — see below), and two light confirmation passes on older patterns, both clean.
- Ran my own Milestone Test. Component one: implement
insert,delete_node,search, andfree_allfor a linked list, function-only.delete_nodewas reused directly from last session's drill — correct on the first pass.inserttook three rounds: first a couple of syntax errors, then a real stack-lifetime bug (building the new node as a local struct and storing its address instead ofmalloc'ing it, confirmed via AddressSanitizer as a stack-use-after-return), then a subtler version of the same bug — taking the address of the pointer variable instead of its value — which GCC's-Wdangling-pointercaught directly.searchandfree_alleach needed one small fix. Final implementation passed a full test suite clean under-Wall -Wextraand AddressSanitizer. - Component two: a 25-question self-test covering all of Phase 1. First attempt: 12/25 (48%) — a clear fail. Roughly half the misses were "right conclusion, imprecise reasoning" rather than genuinely wrong; the rest were real gaps, the biggest being a full signed-vs-unsigned overflow mixup — calling genuine undefined behaviour "implementation-defined and safe to rely on on one compiler," which I proved wrong myself by compiling the identical source file with and without
-fwrapvand comparing the results. - Did a targeted review of the three real gaps, then retested myself with 12 questions: 10/12 (83%) — clears the 70% bar.
Mistakes I made
- Attributed array-to-pointer decay to "it's just a pointer," then to "it's local" — both wrong. The actual rule: an array decays to a pointer to its first element the moment it's used as a value in most expressions — assignment, arithmetic, passed as a function argument — with the only exceptions being
sizeof,&arr, and a string literal initializing a char array. - Called stack-frame reclamation "freed" — that word is reserved for an actual
free()call. The correct term for a dangling pointer into a dead stack frame is stack-use-after-return. - Miscategorized signed integer overflow as implementation-defined instead of undefined behaviour — and, going the other direction, miscategorized an ordinary implementation-defined narrowing (
char c = 127; c = c + 1;) as if it were that same kind of UB, missing that integer promotion moves the actual arithmetic intointbefore anything narrows. - Named a double-free "use of free" instead of its actual, precise term.
What this actually means
Phase 1 is entirely finished — 257 out of 257 bytes, 43 out of 43 chapter tests, and now the Milestone Test itself. Four new mistake patterns got formalized this session on top of the two from last time. Phase 2 — Linux and Tools — is unlocked.
Field note
Saved everything to Box before closing out: the tracker, the syllabus, the mistakes log, the progress tracker.
Notes from readers
Comments — via GitHub