CFA lessons on Oncourse

What a lesson looks like section by section, what each section is for, the candidate evidence behind it, and how the pipeline makes sure every lesson actually has it.

19 Sep 2026 · 36 v3 lessons live on staging (app and web) · generator on API branch feat/cfa-lesson-v3, renderer merged to app dev (PR #1910) · 2027 curriculum · screenshots are real Oncourse staging captures

The ideaChapter lesson anatomyTopic lesson anatomyLevel III answersSubject playbooksHow it is producedVersus medical lessonsProviders: what we took, what we avoidedNumbersWhat to decide

The idea

A CFA lesson is the shortest path from one official Learning Outcome Statement to independent exam performance: teach the LOS, show the number, flip one condition, name the trap, give the keystrokes, test it with exam-format items, and leave a one-screen recap.

Candidates told us, across roughly 250 forum threads, that they do not want more content. They want compression without information loss: one LOS per unit, 10 to 20 minutes, one worked example, immediate practice with a reason for every wrong option, calculator steps, and a summary layer they can revise from. Every praised provider tags by LOS; none of our 50 earlier drafts did. That research is the spec.

Full research: product research · presentation features (33 sources) · subject teaching guidelines · contract: api/docs/cfa/v3-contract.md

Chapter lesson anatomy

Shown on a Level I Fixed Income chapter, Bond price from yield-to-maturity between coupon dates. Every chapter lesson follows the same order; headings are fixed so the app can collapse and the reviewer can check them.

LOS heading and On the exam line
The H2 is the official LOS sentence; the first line says what the exam does with it.

1LOS heading and "On the exam"

  • What we do The heading is the LOS text verbatim, sentence case. Directly under it, one line: On the exam: what question shape to expect, what is usually given, what is usually asked.
  • Why Candidates rank LOS mapping across explanation, formula, example and question as a top wish, and left the CFA Institute's own platform when it dropped LOS labels. The most common reason for picking Schweser or Mark Meldrum over the curriculum is that they say what matters for the exam. Our earlier drafts: 0 of 50 referenced an LOS, 4 of 30 framed the exam.
  • Borrowed from Schweser module openers and LOS numbering; Mark Meldrum's "weight and typical question form" habit.
  • Guard los_heading_mismatch is a major static finding; Jev checks exam_framing_present per unit.
Teaching prose with typeset formulas
Symbols are defined before they are used; formulas are typeset, not pasted.

2Teaching in the level's register

  • What we do Plain-language explanation of the mechanism, then the formula with every variable named, its intuition, and the direction of change. Level I reads like a tutor building vocabulary; Level II argues model choice from a case; Level III speaks in mandates and client language.
  • Why "Explained formula system: variables, intuition, direction of change" is a recurring ask. Thin notes are punished hardest at L2 and L3 ("states conclusions without scaffolding", "omits the one-line nuance that gets tested"), so we did not cut depth to hit a word count; we moved derivations behind a Go deeper heading instead.
  • Borrowed from IFT's variable glossaries and intuition-first explanations; the curriculum's precise wording for Ethics and edge cases.
  • Guard Word budget per unit from the LOS count (over 15% is major); markdown lint for unbalanced math, heading jumps, wide tables; renderer profile pinned so what passes on the server renders in the app.
Worked example
Every number in the example comes from a fixture compiled in code.

3Worked example, fixture-bound

  • What we do One example per unit with named inputs, the calculation walked step by step, and the interpretation of the result. The planner declares the inputs and expressions; code computes the values; the writer may only use those values.
  • Why Curriculum blue-box examples are the most-praised teaching device at every level. But every provider we studied has been caught with arithmetic errors, so the model is not trusted with numbers.
  • Borrowed from CFAI blue-box examples; UWorld's "show the calculation, then interpret it" pattern.
  • Guard Fixture compile before writing; the teaching reviewer must quote numeric claims verbatim and an arithmetic checker recomputes them.
Changed condition
One input flips; the learner predicts the direction before reading the answer.

4Changed condition

  • What we do Take the worked example and change one thing: yield up, coupon down, a different day count. State what moves, which way, and why.
  • Why Exam questions rarely repeat the example; they perturb it. Candidates describe "direction of change" as the part of a formula they most need and least get. It is also the cheapest attempt-first mechanic we can ship without a reveal widget.
  • Borrowed from Mark Meldrum's "now what if" habit; Schweser's comparison tables.
  • Guard Required heading; Jev template_order_followed.
Common error callout
The trap the exam sets on this LOS, and the tell that exposes it.

5Common error

  • What we do A named trap per unit: the wrong rate, the wrong sign, the wrong base. What the wrong answer looks like, why it is tempting, how to spot it.
  • Why UWorld is praised precisely because it explains why each wrong option is wrong; MM narrates traps. 25 of 30 earlier drafts had some near-miss text, but not as a findable section a learner can revise from.
  • Borrowed from UWorld rationales; MM trap narration.
  • Guard Jev trap_callout_present; reviewer rubric item.
Calculator keystroke table
BA II Plus keystrokes with the expected display at each step.

6Calculator

  • What we do For any calculation the exam expects on a BA II Plus (TVM, bonds, NPV/IRR, statistics), a Keys / Display table bound to the same fixture as the worked example. Emitted as a machine-checkable block, rendered as a compact table.
  • Why "BA II Plus keystrokes beside each applicable example" is a standing request; IFT and Schweser do it, we did it in 0 of 30 drafts. Calculator fluency is a frequent reason candidates cite for running out of time.
  • Borrowed from IFT and Schweser keystroke boxes.
  • Guard cfa-calculator schema; the final display must match the compiled fixture value; invalid blocks are dropped, not published.
Mermaid diagram rendered in the app
From a Level II Alternatives chapter. Diagrams that do work, not decoration.

7Diagrams and figures

  • What we do Mermaid diagrams for flows, decisions and relationships, with the chart types allowed per subject family (flowcharts everywhere; timelines, quadrant and pie charts only where they carry meaning). Timelines and payoff figures are drawn deterministically from fixture data as SVG.
  • Why Explicit demand for visuals is thinner than for practice and formulas, and it is for visuals that do calculation work: cash-flow timelines, payoff diagrams, fee waterfalls. Decorative art was the main thing to remove.
  • Borrowed from The curriculum's timelines; MM's whiteboard payoff diagrams.
  • Guard Mermaid parsed on the server with the exact version the app renders (11.12.1), type allowlist, size cap (8 nodes, 4-word labels). This closed the "valid on server, broken in app" class of bugs.
Practice widget before answering
Before: exam-format items inside the lesson.

8Check yourself

  • What we do Practice generated with the lesson as structured JSON and rendered as an interactive widget. Eight formats: MCQ, yes/no, fill-in, ordered response, cloze dropdown, matrix grid, item set (L2 vignette with 4 to 6 questions), constructed response (L3). Level I MCQs have three options, like the exam.
  • Why Exam-format practice inside the lesson and a rationale for every wrong option are the top two content wishes. Every Schweser module ends with a quiz; the curriculum has end-of-reading sets; ours had at most a short untyped self-check.
  • Borrowed from Schweser module quizzes; UWorld every-option rationales; the CFA question-type specification (Learn Well / question handoff).
  • Guard cfa-practice/1 schema on both sides; numeric keys must match the fixture; Jev item QA asks whether there is a single defensible key and whether the item tests the stated LOS, and regenerates weak items once. One bad item degrades to a card; it never takes the lesson down.
Practice widget after answering
After: correct or not, why the chosen option works or misses, then the explanation.

8bFeedback

  • What we do On check: the verdict, the rationale for the option the learner picked, the full explanation. Answer keys live in the JSON, never in the prose, so they cannot leak into the reading.
  • Why "Explain every option" is the single feature candidates most credit UWorld for and most miss elsewhere.
  • Guard Grading rules are written once in the contract and implemented identically in API tests and app tests.
Revision snapshot
Under 150 words and one table: the layer you revise from the week before the exam.

9Revision snapshot

  • What we do A one-screen recap: the formula, the direction of change, the trap, the exam angle. Capped at 150 words and one table so it stays a snapshot.
  • Why Every praised provider separates first teaching from fast revision (SchweserNotes vs QuickSheet, IFT notes vs high-yield sheet). Candidates want a two-layer summary; the cap makes this layer usable as a cumulative topic sheet later.
  • Borrowed from Schweser QuickSheet; IFT high-yield.
  • Guard Required heading; Jev revision_snapshot_present; word and table cap is a static finding.

Topic lesson anatomy

Shown on a Level I Derivatives module, Derivative Instrument and Derivative Market Features. A topic lesson is the map of the module, budgeted at 1,500 to 2,500 words; the teaching lives in the chapters.

Why this module matters
Orientation, weight in the exam, where it reappears later.

T1Why this module matters

  • What we do Two or three paragraphs: what the module is for, its exam weight, which later modules depend on it.
  • Why Candidates want prerequisite and "used again in" context and a reason to care before 1,000 words of teaching. It replaces the old 4,500-word topic read that duplicated the chapters.
Learning outcomes with chapter links
Each LOS verbatim, a few sentences of orientation, and a link to its chapter lesson.

T2Learning outcomes

  • What we do The module's LOS list, each in the official wording, with 2 to 4 sentences of orientation and a link to the chapter that teaches it. Chapters not yet written show a pending marker instead of a dead link.
  • Why This is the LOS map candidates use to plan and track; it also gives the app a natural place for LOS-level progress later.
  • Guard LOS text from the 2027 outline; link resolution against usable chapter rows; unresolved links are a lint finding.
How the exam tests this module
Question shapes, what is given, what is asked, where marks are lost.

T3How the exam tests this module

  • What we do The module-level version of "On the exam": typical item shapes, the calculations that recur, the distinctions the exam likes to test.
  • Why The "say what matters for the exam" gap, at the level where candidates decide how much time to spend.
Topic practice
Mixed items across the module's LOS: 3 to 5 MCQs at L1, an item set at L2, a constructed response plus MCQs at L3.

T4Check yourself and snapshot

  • What we do Practice that samples the whole module in the level's exam format, then a revision snapshot for the module.
  • Why L2 candidates want a vignette right after the standalone examples; L3 candidates want command-word drills. The module is the right grain for both.

Level III: two answer keys

Shown on Code of Ethics and Standards of Professional Conduct. This is the clearest "best resource" verdict in the research: Bill Campbell's long teaching answer beside the short scoring answer.

Constructed response before
Command word, points, and one field per thing the grader looks for.
Constructed response after
After check: the minimum full-credit answer (under 40 words) and the teaching answer side by side.

Subject playbooks: exam-specific guidelines per domain

A bond lesson and an Ethics lesson should not be written the same way. We researched how each CFA topic area is actually tested and taught, wrote a playbook per subject family, and encoded it as configuration the planner and validators read. Sources: the CFA Institute list of 17 LOS command words, the 2027 topic outlines and curriculum update, provider practice (Kaplan, Mark Meldrum, IFT, UWorld, Salt), the cognitive-load and retrieval-practice literature, and candidate threads. Full document: subject teaching guidelines.

Rules that apply everywhere

What each subject family gets

FamilyReasoning the exam wantsRegister rule (what the writer must always label)Visual that earns its placeTablesClassic traps we call outPractice shapes
Ethics (I–III)Rule application under ambiguous facts; preventionExact Standard name; required vs recommended vs permitted vs prohibited; disclosure vs consent; violation vs mere riskDecision flowchart: actor → duty → fact → exception → conclusion; optional Standards mind mapHigh: rule / trigger / required action / trapPicking the most restrictive answer; treating disclosure as a cure; importing personal morality; answering for the wrong actor3-option MCQ with fact-pattern distractors, matrix, yes/no + reason, L3 short constructed response
Quantitative Methods (I–II)Procedural calculation; model selectionUnits, frequency, compounding, population vs sample, hypotheses, tail, calculator modeData-drawn distribution or scatter; probability tree; method-selection flowMedium-high: method / assumptions / inputs / outputAnnual vs periodic inputs; variance vs SD; percent vs decimal; wrong tail; statistical vs economic significanceNumeric fill-in, MCQ, ordered steps, L2 item set with data exhibit
Economics (I–II)Model selection; causal chainsCeteris paribus; nominal vs real; short vs long run; FX quote written price/base with directionData-drawn curve chart; transmission flowchart shock → variables → asset effectMedium: shock / first-round / second-round / ambiguityReversed FX quote; movement along vs shift of a curve; treating short-run results as long-runMCQ, item set, ordered transmission chain, matrix
Financial Statement Analysis (I–II)Accounting-rule application; reconciliation; analyst adjustmentEvery example labelled IFRS, US GAAP or "same under both"; reported vs adjusted; period vs point-in-timeStatement exhibit with affected rows; before → adjustment → after bridgeVery high: IFRS / US GAAP / implication; transaction / IS / BS / CFCash flow vs earnings; average vs ending balance; pre- vs after-tax; double-counting an adjustmentStatement-heavy item set, MCQ, numeric fill-in, matrix of statement effects
Corporate Finance (I–II)Incremental decision analysis; governance judgmentProject vs firm; operating vs financing; pre/post-tax; sunk vs opportunity cost; whose objectiveCash-flow timeline; governance decision flowMedium-high: cash flow / time / sign / taxIncluding sunk cost; forgetting working-capital reversal; firm WACC for a different-risk project; value vs EPS accretionMCQ, item set, numeric fill-in, governance matrix
Equities (I–II)Forecast construction; valuation-model selectionEnterprise vs equity value; per-share vs aggregate; trailing vs forward; normalised; scenario assumptionsForecast driver chart; valuation bridge or sensitivity; positioning quadrantHigh: model / inputs / fit / limitation; scenario matrixMixing EV and equity; inconsistent numerator/denominator; double-counting growth; point estimate as certaintyMCQ, company item set, numeric fill-in, model-selection matrix, cloze
Fixed Income (I–II)Cash-flow valuation; curve and spread interpretationClean vs dirty; settlement date; yield convention; compounding; spread and duration definitionsCash-flow timeline; price–yield or curve chart; data-drawn rate treeMedium-high: security / cash-flow rule / risk / measureClean vs dirty; annual vs semiannual; YTM as realised return; spread vs rate duration; ignoring optionalityMCQ, item set, numeric fill-in, ordered valuation steps, security-to-risk matrix
Derivatives and Risk (I–III)Replication; no-arbitrage; strategy selectionLong/short, payer/receiver, underlying, notional, maturity, premium timing, settlement, FX conventionPayoff/profit diagram from data; contract timeline; hedge-selection flowHigh: strategy / objective / payoff / max gain-loss / riskValue vs payoff vs profit; long/short reversal; forgetting premium or carry; futures price vs contract valueMCQ, item set, numeric fill-in, matrix, L3 constructed response
Alternative Investments (I–II)Structure comparison; return calculation; fee and liquidity judgmentGross/net; levered/unlevered; committed/called/invested; appraisal vs market; TWR vs MWRFee or carry waterfall from data; lifecycle timeline; quadrantVery high: structure / liquidity / valuation / fees / risksCommitment vs invested; IRR vs multiple; fee base; stale appraisals; illiquidity mistaken for diversificationMCQ, item set, matrix, numeric fill-in
Portfolio Construction (I–III)Model selection; constrained judgmentObjective vs constraint; risk tolerance vs capacity; benchmark; risk budget; client typeFrontier / CAL / risk-contribution plot; IPS flowHigh: investor / objective / constraint / implicationWillingness vs ability; arithmetic answer that is not implementable; diversification by label; ignoring liquidity and taxMCQ, item set, matrix, L3 constructed response
Asset Allocation (III)Forecast integration; recommendation under constraintsStrategic vs tactical; asset-only vs liability-relative vs goals-based; nominal vs real; model output vs decisionFrontier, surplus-risk or scenario plot; decision flowHigh: approach / objective / constraint / failure modeNominal liabilities with real returns; unstable optimised weights; recommending without citing client factsItem set, constructed response, matrix, scenario ordering
Performance Measurement (III)Reconciliation; attribution; manager evaluationPortfolio vs benchmark; contribution vs attribution; arithmetic vs geometric; gross vs netAttribution bridge; drawdown chartVery high: allocation / selection / interaction; metric / use / flawSign errors; effects that do not reconcile; alpha vs excess return; one strong period read as skillItem set, numeric fill-in, matrix, constructed response
Portfolio Management pathway (III)Strategy construction; implementationMandate language: benchmark, active risk, tracking error, alpha source, capacity, turnover, execution benchmarkRisk/return or tracking-error chart; process flow; trade-cost bridgeHigh: strategy / alpha source / risk / implementationStrategy inconsistent with mandate; Active Share vs tracking error; execution benchmark chosen after the tradeItem set, constructed response, matrix, ordered response
Private Markets pathway (III)Deal-process judgment; underwriting; fund economicsGP/LP; entry/exit; pre/post-money; EV vs equity; seniority; gross/net; committed/investedFee/carry waterfall; deal timeline; capital stackVery high: instrument / control / cash flow / downsideEV/equity confusion; dilution; IRR timing; public-market liquidity assumptions; ignoring downside priorityItem set, constructed response, numeric fill-in, matrix
Private Wealth pathway (III)Client-centred judgment under tax, legal, behavioural and liquidity constraintsGoals, jurisdiction, after-tax wealth, human capital, concentrated position, family governanceGoals timeline; decision tree; balance-sheet waterfallHigh: goal / horizon / priority / instrument / tax effectPre-tax wealth; double-counting human capital; illiquid solution for a near-term goal; missing family dynamicsItem set, constructed response, matrix, timeline ordering

How the playbook reaches the lesson

How it is produced

Two model families and a gate after every model stage. GPT-5.6 Luna plans, writes and reviews teaching; Jev (TypeSafe AI) answers cheap yes/no structural questions per unit and per item. Every gate has one bounded repair with the exact error, and every failure is checkpointed and resumable.

Context: hierarchy row, LOS, subject family, sealed sources Planner Plan schema + fixture compile Writer Static pass: template, budgets, markdown lint, Mermaid parse, fence schemas Jev structural pass Media: SVG figures, calculator tables Teaching review Arithmetic checker Jev item QA → regenerate weak items Evidence bundle → publish to staging

Versus medical lessons

Medical (NEET-PG, USMLE…)CFA v3
UnitOne long page per topic or chapter (6 to 8 A4 pages).One LOS per chapter lesson, about 1,000 words; topic lesson is an overview.
Organising principleBloom's taxonomy, six sections from Remember to Synthesize, clinical vignettes, high-yield summary.The exam's outline: LOS text as heading, LOS verb sets the goal, fixed section order.
Exam framingImplicit.Mandatory per unit and per module; trap callouts; changed condition.
NumbersFrom the model.Compiled from fixtures in code; reviewer claims recomputed.
PracticePulled from the question bank afterwards.Generated with the lesson in eight formats, graded in the app.
SourcesModel knowledge.Hash-sealed source pack with per-LOS coverage requirements.
GenerationOne call (Claude Sonnet 4.5), media in parallel, shape validator.Ten stages, two model families, gates with bounded repair, evidence bundle.
DiagramsMermaid rendered to images on the server; retrieved clinical images.Mermaid validated at the app's pinned version and rendered live; deterministic SVG from data.

Providers: what we took, what we avoided

ProviderPraised forComplained aboutOncourse response
SchweserLOS-numbered modules, module quizzes, QuickSheetToo thin at L2 and L3; omits the tested nuanceTook the module structure, quiz and snapshot; kept full teaching depth with a Go deeper section
Mark MeldrumExplains why, states exam weight, narrates trapsHours of video; watched at 2xTook exam framing and trap callouts into text; no video needed
IFTVariable glossaries, intuition first, calculator boxesFull course too longTook the formula system and keystroke tables
UWorldRationale for every option, visual logicAll depth before it is neededTook every-option rationales in practice; depth stays behind Go deeper
CFAI curriculumBlue-box examples, precise wording, end-of-reading questionsLength; platform lost LOS labels and annotationTook fixture-bound examples and official LOS wording; kept LOS labels everywhere
Bill Campbell / L3 tutorsMinimum answer beside teaching answerNiche, expensiveTook the two-answer-key pattern for every L3 prompt

External resources inform the mechanics; all lesson wording, numbers and questions are original and fixture-bound.

Numbers from the 60-lesson benchmark

~1,000
words per chapter lesson, down from a 3,300 median; topic overviews about 2,500
112
practice items across 44 lessons in all 8 formats; 86 of 93 Jev-checked items have a single defensible key
57 / 59
drafts with exam framing; 49 trap callouts; 58 revision snapshots; 66 fixture-bound worked examples
70
Mermaid diagrams validated at the app's version; 20 calculator tables
36 / 59
drafts through every automated gate (earlier run: 18 of 30). The strict tutor reviewer still requests changes on most; tuning its rubric is the next lever
36
lessons live on staging; 24 to regenerate once model credits are restored

What the team should decide

  1. Length. Chapter lessons now sit near 1,000 words. Is that the right stopping point, or should Go deeper be visible by default for L2 and L3?
  2. Practice count. 3 to 5 items per chapter unit and one module set per topic. Enough for retrieval, or should each chapter carry a mini item set at L2?
  3. Revision layer first? The snapshot is at the end. Should the app offer it as the collapsed default with "expand to full teaching"?
  4. Calculator scope. BA II Plus only. Add an HP 12C toggle now or after learner data?
  5. Reviewer strictness. The tutor reviewer requests changes on most drafts. Publish on automated gates plus spot audit, or hold for a tutor pass?
  6. Free-text grading. Constructed-response prose is self-assessed today. Is that acceptable for launch, or do we want a model grader behind it?

Links: L1 chapter (bond pricing) · L1 chapter (business structures) · L2 chapter (commodities) · L1 topic (derivatives) · L3 topic (ethics) · staging login required.