A track is done when verify.py prints PASS. The deepening pass is the second
stage: the runbook below, run once per track, takes a passing README/NOTES pair to
publishable rigor — cited sources, self-derived figures, and prose that asserts rather
than performs.
The reference implementation is tracks/10-c. Read its
README and NOTES before starting any other track. What follows is the process that
produced them; when this document and 10-c disagree, 10-c is right and this document is
stale.
Read, in order, before touching the track:
00-method.md — the ten questions are fixed. The pass deepens answers;
it never reorders, renames, or adds headings.bench/SPEC.md — the program the track answers to.README.md, NOTES.md, and the logagg source itself. The source is the
ground truth for every technical claim and every diagram.tracks/10-c/README.md and NOTES.md — the exemplar.Extract every load-bearing claim in the track: numbers, historical assertions, "everyone knows" facts, comparative claims about other languages. Attach a citation to each, from the source pyramid, best first:
Rules:
github.com/sqlite/sqlite) and say so.Further reading: block of
three to five whole-topic sources at the end. Citation names the work and the venue,
not just a bare URL, so the reference survives link rot.rfc-editor.org, man7.org, open-std.org drafts, docs.* and
*.dev official docs, GitHub blob/<default-branch> paths. Avoid URL-shortened or
campaign links entirely.Done when: no number and no named claim in the README lacks a source, and every link in the file has been fetched and seen to resolve.
fig/ directory: the
committed .svg files, and a fig/draw.py that regenerates them from
tools/figkit.py. Reference a figure from the Markdown as
. The alt text describes what the figure shows,
for a reader who cannot see it; the caption says what to notice.⋮ shifted the
right-hand border, and the right side of every wide diagram scrolled off a phone
screen. The SVGs scale with the page, and tools/build_site.py inlines them so they
follow the site's light and dark colour tokens. The same files render on GitHub and in
Obsidian through their own <style> block. ASCII stays acceptable for program output
and compiler errors, which are text.pipeline() so that every track's Q2 figure has the same shape
and can be compared stage by stage.fields[], line.buf and
the reason strings where logagg.c puts them; the textbook version with empty
segments was decoration.site/<slug>.html) at desktop width and at
phone width, in light and dark mode.Done when: every figure shows structure the prose cannot carry alone, uses the kit's classes only, and reads correctly in the generated page in both colour schemes.
What "SWE level" means, per question. These are the 10-c patterns generalised — apply the ones that fit the language; a track with no build step does not get a pipeline diagram.
| Q | Deepen with |
|---|---|
| Q1 Origin | The lineage and the constraint that produced it; the standardisation arc (which versions exist and what -std= / edition pins); who pays for it today, named concretely |
| Q2 Build | What a build is in this toolchain — the pipeline, the unit of compilation, the artifact that ships; the dependency manager reality, including what is absent |
| Q3 Types/memory | The "what is a variable" answer; the language's own taxonomy of the unspecified (C: implementation-defined / unspecified / undefined — find the equivalent); a layout or ownership diagram derived from logagg |
| Q4 Abstraction | The unit of abstraction and the idiom that scales it — for C, the vtable struct; name the production-scale pattern, not just the toy |
| Q5 Errors | The full mechanism list, including the escape hatch the language keeps but discourages; the SPEC 1 ordered-reason tie-in; the cross-track comparison row |
| Q6 Concurrency | The primitive plus what it costs; the --shard N dataflow diagram; what the language makes easy to get wrong, stated as a mechanism, not a warning |
| Q7 Idiom | The line-accounting table against sibling tracks; the data-structure diagram; the two or three decisions only this language forced |
| Q8 Failures | Ranked by professional cost, not tutorial frequency; cited industry figures where they exist; the tooling layer — this language's equivalents of sanitizers, race detector, static analysis, fuzzing — because "how it fails" professionally includes "what catches it" |
| Q9 Real code | One real file, correctly linked and correctly described (the 10-c draft linked util.c under the label sqlite3.c — check); why this file, plus a shorter alternative |
| Q10 Transfers | Named, portable ideas — each stated so it could be pasted into another track's Q5/Q6/Q10 verbatim |
Done when: every section's technical claims would survive review by a practitioner of that language.
Hunt this list, in the track's README and anywhere else you touched:
The test that covers all of it: the claim asserts; it does not perform. Keep the dry, opinionated voice — every track has it — and keep NOTES in lab-log voice. Rigor in NOTES means links and diagrams on the bugs, not polish on the prose.
Done when: the hunt list finds nothing, and the file still sounds like a person who ran the thing.
python tools/build_site.py — regenerates cleanly; check the track's generated page
for link rewrites (.md → .html) and diagram alignment.python programming/bench/verify.py — all tracks still PASS. You changed no code;
this is a cheap guard against accidents.git status — commit only the track's README.md/NOTES.md and its generated
site/<slug>.html pages. Anything else in the working tree belongs to someone else's
change; leave it.Done when: the commit contains exactly the track's files and its generated pages, and the working tree's unrelated changes are untouched.
fig/draw.py, checked in the rendered pagebuild_site.py clean; verify.py PASSThe canonical primary sources per track — the pyramid's top two rungs, pre-resolved. Extend as new tracks land.
| Track | Primary sources to start from |
|---|---|
| 10-c (done) | Ritchie's HOPL paper; N1570; comp.lang.c FAQ; CERT C; Levine; pthreads(7); RFC 9923 |
| 20-java8 | JLS (§8 classes, §15.27 lambdas, §17.4 memory model); JSR-133 and JSR-335; OpenJDK source (java.util.ArrayList, ConcurrentHashMap); Java Concurrency in Practice (book) |
| 30-python | Python language reference (datamodel chapter); CPython source (Objects/dictobject.c, Lib/dataclasses.py); PEP 703 (free-threading); docs.python.org glossary for the GIL |
| 40-go | The Go spec; go.dev/ref/mem; Effective Go; the blog classics ("Share Memory by Communicating", "Errors are values", "Defer, Panic, and Recover"); go.dev/doc race-detector page |
| 51-elixir (done) | Valim's design goals; the v1.17 and v1.20 release posts (set-theoretic types); The BEAM Book; HexDocs for GenServer/Supervisor/Task; Discord's scaling write-up; Armstrong's thesis (shared with 50) |
| 50-erlang | erlang.org docs; Armstrong's thesis (Making reliable distributed systems…, free PDF); Learn You Some Erlang |
| 60-cobol | The mainframe-lab repo itself; GnuCOBOL docs; the ANSI standard via summary sources |
| 70-sql | The SQL standard via a draft (e.g. SQL:2016 preliminaries); the database you ran (PostgreSQL docs); Codd's 1970 paper |
| 80-lisp | The HyperSpec (Common Lisp) or R⁷RS (Scheme); SICP; the implementation's own source |
| 12-rust (done) | The book; the Reference; RFC 2094 (NLL), RFC 560 (overflow), RFC 3151 (scoped threads); rustc dev guide; RustBelt (POPL 2018); Rust Atomics and Locks; library/alloc/src/io/read.rs |
| 90-ocaml (done) | A History of OCaml; Leroy, A modular module system (JFP 10(3), 2000); Sivaramakrishnan et al., Retrofitting Effect Handlers onto OCaml (PLDI 2021); the OCaml Manual; stdlib/hashtbl.ml; Real World OCaml |