How the Curriculum Is Made
The lessons on this site are AI-authored through a multi-pass pipeline behind a quality gate — so the curriculum can stay current without a human writing every word, while still reading like an edited course. This page shows exactly how that works, and how fresh each lesson is.
The multi-pass pipeline
Each lesson is built by the same repeatable pipeline (in roadmap-kg/kg/ground_content.py). Every stage names the real mechanism it uses, so the description is verifiable rather than marketing.
Research
A retrieval index is built over the real sources for the topic — existing lessons plus code and specs. Code is split function/class-aware (CodeSplitter); prose stays on a sentence splitter. Embeddings are content-keyed and cached (IngestionPipeline + IngestionCache), so re-runs that only touch prompts don't re-embed.
Retrieve
For each section, a fusion retriever (Reciprocal Rank Fusion over a dense FastEmbed retriever plus a BM25 keyword retriever, with LLM-generated query variants) pulls the most relevant chunks, then a cross-encoder reranker keeps the best. Keyword recall catches exact mechanism terms the embedder misses.
Outline & Draft
The draft is produced as typed structured output (llm.structured_predict), so an explanation ladder (Gist → More → Deep) comes out as one coherent progression rather than three disconnected queries. System-design sections decompose into mechanism / trade-off / failure-mode sub-questions (SubQuestionQueryEngine), each retrieved and answered, then synthesized.
Review
Every generated body is scored against its retrieved context by a FaithfulnessEvaluator — the check is whether the claims are actually supported by the sources, not just whether the prose reads well.
Revise
An ungrounded body is regenerated once with a stricter ask. Deterministic re-runs (fixed splitters, cached embeddings, seeded retrieval) mean the same inputs reproduce the same output.
Quality gate
Before an audio-derived artifact publishes, the mechanical gate (kg.audio_gate) must pass — a hard set of structural and readability checks summarized below. A human reviews and approves before a lesson goes live.
What the quality gate enforces
The mechanical gate (kg.audio_gate, a faithful port of the original Rust gate) runs before a lesson’s audio-derived artifacts publish. Hard checks block publish; advisory checks flag but never block. The prose lessons themselves are gated by the faithfulness check in step 4 — claims must be supported by the retrieved sources. Thresholds are grounded in readability research (Flesch 1948; Fang 1966; DuBay 2004), cited in the gate source.
structural integrity
Chapter durations, start offsets, total duration and the stitched full-script must all reconcile (duration-mismatch, start-secs, total-duration, full-script-integrity).
minimum length
No chapter under 40 words (chapter-too-short); at least ~400 words total, so a gate-passing unit is substantive, not a stub.
readability floor
Flesch Reading Ease ≥ 50 (FLESCH_MIN) — the plain-English boundary; spoken material can't drop into the 'difficult' band a reader could re-read.
sentence ceiling
No sentence over 30 words (PACING_MAX_SENTENCE_WORDS) — a hard breath/comprehension ceiling for listening.
spoken numbers
Numbers under ten are spelled out, not left as glyphs (spoken-small-digits), because a listener parses the word, not the numeral.
acronym first use
A non-allowlisted acronym must be expanded on first use (acronym-first-use) — unexpanded acronyms are a comprehension failure by ear.
title length
Chapter titles capped at five words, so section headings stay scannable and speakable.
easy-listening
Fang's Easy Listening Formula (syllables − words > 20) flags a lone short-but-dense sentence.
spoken-symbol
Percent / currency / operator glyphs and fractions are flagged with a spelled-out suggestion.
sentence variety
Uniform sentence length (low coefficient of variation) reads as monotone and flattens synthesized prosody.
AI tells & polarity
Advisory checks for generic 'AI voice', over-negative framing, and comma-spliced spoken lists.
What is and isn’t AI-generated
Being explicit about the boundary is part of the trust model. Fully autonomous publishing is deliberately out of scope — a human stays in the loop.
AI-generated
Human / not generated
Why the tutor withholds answers
The AI tutor on every lesson gives hints and grades your attempt; it will not simply hand you the answer. That is a deliberate constraint, not a limitation. In a randomized trial with roughly a thousand high school students (Bastani et al., 2025), a plain ChatGPT-style tutor raised practice scores 48% — and then scored those same students 17% below the no-AI control on a later exam taken without it. Students used it as a crutch and did not notice the loss. A guardrailed tutor — hints instead of solutions, plus an author-supplied correct answer and a list of common mistakes so it cannot give wrong feedback — reached 127% on practice with the negative exam effect gone.
The move a concept gets is chosen from your mastery state, and a withholding move is checked for answer leakage before it reaches you — lib/tutor-policy.ts (chooseMove, leaksAnswer) and the intent ladder in rag_service/chat_tutor.py. Where a canonical answer exists, it is given to the model to judge against and explicitly withheld from the reply.
The trial only found the harm by testing with access removed, so this site does the same: /today re-checks a topic you studied with AI help at least a day later, with the chat and explain tools disabled, and reports the gap between your assisted and unassisted score.
Lesson freshness
Every lesson, grouped by phase, with its word count, reading time and last-updated date. Dates are the git commit date of each lesson’s source file — an honest content-history signal, not a maintained field. Median lesson is 5,388 words.
Derived deterministically by node data/curriculum/build-stats.mjs.
#4 · transformer-architecture
#6 · model-architectures
#8 · inference-optimization
#10 · prompt-engineering-fundamentals
#13 · structured-output
#14 · function-calling
#16 · prompt-optimization
#17 · prompt-caching
#18 · adversarial-prompting
#22 · vector-databases
#24 · chunking-strategies
#29 · agent-architectures
#30 · multi-agent-systems
#32 · agent-orchestration
#33 · agent-harnesses
#36 · agent-debugging
#101 · reflexion-self-improving-agents
#103 · lats-tree-search-agents
#104 · supervisor-multi-agent-lab
#105 · tree-of-thoughts-agents
#110 · agent-persistence-and-hitl
#111 · agent-benchmarking
#39 · context-window-management
#40 · memory-architectures
#41 · dynamic-context-assembly
#42 · context-compression
#49 · langmem-vectorize-memory
#43 · langchain-fundamentals
#44 · langchain-tools-retrievers
#46 · langgraph-human-in-the-loop
#47 · langgraph-multi-agent
#48 · langgraph-d1-checkpointing
#50 · langgraph-streaming-observability
#51 · langgraph-deployment
#52 · langgraph-red-teaming
#53 · eval-fundamentals
#54 · benchmark-design
#56 · human-evaluation
#57 · eval-frameworks-comparison
#58 · deepeval-synthesizer
#59 · agent-evaluation
#61 · guardrails-filtering
#62 · hallucination-mitigation
#66 · interpretability
#68 · online-evaluation
#71 · cost-optimization
#77 · conversational-ai
#78 · vision-language-models
#72 · scaling-load-balancing
#74 · production-patterns
#95 · postgresql-joins
#96 · foreign-keys
#81 · fine-tuning-fundamentals
#84 · dataset-curation
#85 · continual-learning
#86 · distillation-compression
#98 · public-speaking
#112 · landing-an-ai-engineering-role
Freshness colors: green updated Jun 2026 or later · amber mid-May 2026 · gray earlier or unknown.