← 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.

ProgramDriver Development — Phase 1: C Programming
Session#38
ResultMilestone Test: final test 12/25 (48%) fail → retest 10/12 (83%) — PASS
ProgressPhase 1: 257/257 (100%, Milestone Test PASSED) · Total goal: 49.5%

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, and free_all for a linked list, function-only. delete_node was reused directly from last session's drill — correct on the first pass. insert took 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 of malloc'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-pointer caught directly. search and free_all each needed one small fix. Final implementation passed a full test suite clean under -Wall -Wextra and 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 -fwrapv and 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 into int before 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.

← 15 Jul 202618 Jul 2026 →

Notes from readers

Comments — via GitHub