CFA lessons vs medical lessons
What is different in how we teach, how we write, and how the pipeline produces and checks a lesson.
Prepared 19 Sep 2026 · CFA v3 lesson generator on branch feat/cfa-lesson-v3, app renderer merged to dev (PR #1910) · 2027 CFA curriculum on staging
The one-line version
Medical lessons are a single-call narrative shaped by Bloom's taxonomy and clinical storytelling, checked for shape (sections, word counts, mnemonics). CFA lessons are contract-driven study units keyed to the official Learning Outcome Statements (LOS), written from a sealed source pack, with numbers computed in code, practice generated inside the lesson, and every draft pushed through static, structural, teaching and item-level review gates before it can be published.
1. Teaching methodology
| Medical (NEET-PG, USMLE…) | CFA v3 | |
|---|---|---|
| Unit of teaching | A topic or chapter, written as one long page (6–8 A4 pages). | Our existing subject → topic → chapter hierarchy. In the 2027 seed each chapter maps to exactly one official Learning Outcome Statement (LOS), so a chapter lesson teaches one LOS (10–20 minutes). A topic lesson is an overview that links to its chapters, not a second long read. |
| Organising principle | Bloom's taxonomy: six sections from Remember → Synthesize, each opened with a clinical vignette, plus a High-Yield Summary. | The exam's own outline: the LOS text is the H2, the verb in the LOS (describe, calculate, contrast…) sets what the unit must let the learner do. |
| Exam framing | Implicit. "Why this matters clinically." | Explicit and mandatory: On the exam: line per unit, "How the exam tests this module" section per topic, trap callouts (Common error) and a Changed condition section that flips one input to test understanding. |
| Level register | One register for all exams. | Per level: L1 vocabulary and intuition, L2 case and model choice (item sets), L3 mandate and command-responsive answers (constructed response with minimum and teaching answers). |
| Numbers | Facts and reference ranges from the model's memory. | Worked examples bind to fixtures whose values are compiled in code. The writer may only use numbers the fixture produces; the reviewer's numeric claims are recomputed by an arithmetic checker. |
| Practice | Not in the lesson. Exercises are pulled from the question bank by exam tag afterwards. | Generated inside the lesson as JSON in eight formats (MCQ, yes/no, fill-blank, ordered response, cloze dropdown, matrix grid, item set, constructed response), graded in the app with rationales. |
| Tools of the trade | Mnemonics, clinical pearls, red flags. | BA II Plus keystroke tables, formula glossaries, revision snapshot (≤150 words) as a separable fast-revision layer. |
| Subject nuance | Per-subject table of Bloom emphasis and image/table counts. | Per-subject-family config: allowed practice formats, Mermaid chart types, register lines, calculator use, derived from forum research on what candidates value per subject. |
2. Writing
| Medical | CFA v3 | |
|---|---|---|
| Source of truth | Model knowledge; prompt asks for guideline-based content. | A hash-sealed source pack (official 2027 outlines, provider samples) with coverage requirements per LOS. Source-packet language leaking into learner prose is a major finding. |
| Structure enforcement | Prompt instructs H2 sections and word targets; validator scores section presence and variance. | Fixed template with named headings (LOS H2 → On the exam → teaching → Worked example → Changed condition → Common error → Calculator → Go deeper → Check yourself → Revision snapshot). Missing or renamed headings are major findings. |
| Length | Target total word count with tolerance per section. | Word budget per unit from the LOS count; overrun beyond 15% is major. Chapter lessons land near 1,000 words, topic overviews near 2,500. |
| Maths | Plain text or occasional LaTeX. | LaTeX inline and display, symbols defined before use, renderer profile pinned (aligned environments, Greek), a static guard for the display-math heading collision. |
| Diagrams | Mermaid rendered to images on the server; retrieved clinical images via the vision agent. | Mermaid validated on the server with the same version the app renders (11.12.1), type allowlist per subject family, size caps, then rendered live in the app. Deterministic SVG figures from fixture data instead of generated art. |
| Tone | Textbook narrative with emojis and pearls. | Tutor register per level, no emojis, tables limited to three columns, no raw HTML, markdown linted (remark) before review. |
3. Pipeline
- Optimised for speed: one generation call, temperature 0.7.
- No reviewer model, no numeric verification, no source grounding.
- Validation scores shape, not correctness.
- Two model families: Luna for planning, writing and teaching review; Jev (TypeSafe AI) for cheap probabilistic structural and item checks.
- Every gate has a bounded repair with the exact error; failures are checkpointed and resumable.
- Per lesson: plan, fixtures, practice, calculators, static findings, Jev scores, review, arithmetic, raw outputs and hashes.
What this bought us (benchmark of 20 topics + 40 chapters)
Counts come from a scan of artifacts/cfa-benchmark/cfa-v3-bench60-final. 36 lessons are published to staging (app and web) for review; 24 remain to be regenerated once OpenAI credits are restored.
What a CFA chapter lesson looks like
## Calculate and interpret the price of a fixed-rate bond ← LOS text, verbatim **On the exam:** expect a 3-option calculation with a changed coupon or yield… <teaching prose, symbols defined, LaTeX> ### Worked example: 10-year 4% bond at 3% ← numbers from a compiled fixture ### Changed condition ← one input flips, what changes ### Common error: discounting with the annual rate on a semiannual bond ### Calculator ← BA II Plus keystrokes table ### Check yourself ← practice JSON, graded in app ## Revision snapshot ← ≤150 words, the fast layer
App side
- New
cfa-practiceandcfa-calculatorblocks rendered as interactive widgets: pick, order, drag, fill, matrix, item sets, constructed response with minimum and teaching answers. - Mermaid pinned to the server's validator version; display-math normaliser; answer keys never render as text.
- Tolerant parsing: a bad item degrades to a card, it never takes the lesson down.
- Live audit viewer for the team (
pnpm cfa:viewer) with accept / changes / reject per lesson, Jev questions on hover, CSV export.
Next
- Regenerate the remaining 24 benchmark lessons, publish the compare report (v2 vs v3).
- Tune the teaching reviewer rubric to the new contract so its verdicts reflect learner value, not template reporting.
- Link the generated practice items to the question bank once it exists; reuse the same block schema.
- Fold the reusable parts (LOS-style outline keys, sealed sources, in-lesson practice, gate evidence) back into the medical generator.