Replay a past CICM sitting · 20 SAQs in two halves of 10
Pick a sitting
After SAQ 10 you'll see a Break screen. Resume the second half today, or save and finish later.
Readiness drill
Drill SAQs from your weakest sections
Total: 150 min
Weaknesses · Tap to deselect
5 of 5 weaknesses included
Today's sessions
Welcome to Iatrogenic
Sign in to access your study dashboard.
or use email
Welcome
Let's build your study plan.
Tell us your exam date and we'll schedule spaced repetition to peak right when you sit.
🧠How it works: cards resurface just before you'd forget them — so revision compounds instead of cramming. The plan paces this to your exam.
Cards and answers are LLM-generated from a fixed source corpus, then automatically checked and human-reviewed.
That date is less than 12 weeks away — are you re-sitting?
Pick a date in the future so we can build a schedule.
Next sitting pre-filled — change if needed.
Everything's editable later in Settings.
Your starting point
Where do you want to start?
We'll bring this section to the front of your plan. You still cover the whole syllabus — this just decides what comes first.
Stay on track
Gentle nudges, your way.
Spaced repetition only works if you come back. Pick what's useful — all editable later. We'll ask for permission when you start your first session.
Enable reminders
Turn the whole set on or off.
Daily study nudge
A reminder at your study time.
End-of-day recap
What you did + tomorrow's load.
Streak save
Heads-up before you lose a streak.
Sets when your daily reminder fires.
Session settings
——streak—d0/10000
Nemesis
Rapid Recall
SAQ Block
Pharmacopoeia
Axioms
More cards
Today's Routine
Loading history…
Loading planner…
Loading recall library…
Loading SAQ library…
Loading drug library…
CICM Knowledge Map
17 / 17 mapped
Learning Spine
17 topic sections A → Q — prerequisite order flows top to bottom. All 17 sections are mapped to their prerequisite graph; cross-section integration links are still being built out.
Showing path to selected topic
Legend
Mastery (border)
Mastered
Developing
Needs work
Not started
No cards yet — our gap
Node state
Ready to start (sky ring glow)
High-yield fill heatmap
High (coral fill)
Medium (amber fill)
Low (teal fill)
Edges
Prerequisite →
Co-requisite (mutual)
Cross-section (sky dashed)
CICM Knowledge Map — Nodes and Prerequisites
Code
Name
Section
Cards
Mastery
Prerequisites
Unlocks
High-yield tier
Exam frequency
Topic
Loading…
Type at least 2 characters
Reset account to a fresh start?
This returns your account to a brand-new state and restarts onboarding from the beginning.
Will be permanently deleted
All card ratings, grade history, and FSRS card states
All study sessions, statistics, badges, and streaks
FSRS calibrated weights and targets (revert to defaults)
Your entire planner — phases, day plans, Gantt assignments, snapshots, calendar links
Saved searches, smart decks, and custom collections
Onboarding answers — exam date, block, study hours, sitting
Preferences and notification settings (revert to defaults)
Push notification registration (you'll re-enable per device)
Will NOT be affected
Your account login, email, and access level
The library and all card content
Card flag reports you've submitted
This cannot be undone. There is no restore window. You will be sent through onboarding again.
Content pipeline
Generation & verification pipeline
How cards and model answers are produced
Recall cards and SAQ model answers are generated by large language models, constrained to a fixed corpus, then passed through automated checks and human review. This page documents the inputs, each transformation, the checks applied, and the points where the process is known to be incomplete or fallible.
Generation uses Claude models (Opus for synthesis, Sonnet/Haiku for narrower steps). LLM output is probabilistic and can be wrong. The stages below constrain the input, detect classes of error, and gate publication — they reduce error rate; they do not guarantee correctness.
Provenance, the exact checks, and known coverage gaps are listed below and recorded per-card in the database. Every published item can be traced to its sources and to the outcome of each check that touched it.
Stage 0 · Inputs
Source corpus
The corpus is fixed and named. The open web is not a source; Deranged Physiology and Jenny's Jam Jar are used only where they map to a syllabus node.
8
Reference texts
Power & Kam 4e · Pappano 11e · West 11e · Nunn & Lumb 9e · Guyton & Hall 15e · Vander's 8e · Sasada · Ellis 9e. Read at page level from PDF.
480
Past-paper SAQs
CICM written papers, 2014–2025 (12 sittings).
504
Examiner reports
Official CICM commentary plus historical pass rate — one per SAQ in scope.
668 / 260
DP / JJJ pages
Cached text from Deranged Physiology (668) and Jenny's Jam Jar (260).
A–Q
Syllabus map
Node-level coverage targets and per-line verification anchors.
The actual pipelines
Generation path, phase by phase
Two skills produce content: cicm-recall-builder (v1.3, 11 phases) and cicm-saq-builder (phases 0–5). These are the real phases as implemented. Each node lists its actor — the Claude model, a deterministic script, or a human. Expand any node for detail.
The plan slice for the in-scope nodes is read (with a SHA-256 of the plan file), and the last five journal entries' "what failed" / "heuristic adjustments" are loaded as guardrails. Opus checks every node has a verification anchor and derives a per-node synth target (gap + 2 slack, or audit-only).
2LLM stepInventory snapshotExisting cards in scope pulled to drive gap targets + dedup.Haiku · Supabase
A read-only query pulls every existing card whose primary or tag node code is in scope. Drift between the plan's expected card counts and the live database is flagged.
Per node, anchors resolve to PDF pages; text is extracted with a verbatim anchor quote. A Sonnet validator then enforces a hard gate: anchor verbatim-substring present, ≥2 distinct-noun overlap per source, and chapter-title topical fit. Off-topic and axis-mismatched sources are removed; thin packs are expanded or the node halts. Phase 4 cannot start while any pack is unvalidated.
pass → synthesisfail → expand / re-anchor / halt
4LLM stepCard synthesisCards written from the validated pack only. Write-tool-locked. Unverified.Claude Opus
An Opus subagent (Write-only; packs pre-loaded inline, no file access) drafts cards to the per-node target and the card schema, given the 14 hard rules and journal anti-patterns. Output is unverified. A reference-leak prescan re-spawns any card that baked a citation into the answer body.
4.5DeterministicCanonical formatting10 richtext rules; numerics/units preserved (multiset check).Node script · no model
A deterministic script applies ten formatting rules in locked order (sub/superscript Unicode, sentence-per-line, list/table conversion, bold unit numerics). A fact-preservation guard asserts the numeric+unit and bold-span multisets are unchanged and sentence count non-decreasing; on guard failure the card is left as-is and routed to human review. Zero token cost; no model can introduce content here.
Per card: the anchor must be a verbatim substring of the cited page, the answer must share ≥2 distinct nouns with that page, word cap ≤150, see-also + prerequisites/orphan-justification present, and a claim-strength drift scan (no superlative/exhaustivity upgrade beyond the source). Failures route to the low-confidence queue.
pass → dedupfail → low-confidence queue
6LLM stepDedup decisionNew vs existing scored on 4 axes → replace / skip / human-merge.Sonnet judge
Candidate duplicates (Jaccard ≥0.4 on lemmatised 3-grams) are scored on source coverage, atomicity, exam relevance and richtext quality. New wins ≥3 axes → replace (old archived); old wins → skip; tie or low confidence → human-merge queue.
7LLM stepPharma-deferral routingDrug-primary cards split off to the pharmacopoeia pipeline.Sonnet
Cards whose primary testable object is a drug (or matching the drug-taxonomy patterns) are removed from the publish stream and queued for the drug-card pipeline. Cards that merely mention a drug are kept and flagged.
For cards citing two or more Tier-A sources, the claim is checked against each. Direction/sign/magnitude contradictions are recorded in metadata.disputed[]. These remain in the publish stream — the disagreement queue is informational for later human resolution.
Four queue files are written and the skill durably pauses. A clinician approves, rejects, or fixes each queued item before publication resumes. Nothing in a queue is published without a decision.
An id↔source_id map is rebuilt from the database, the approved set is POSTed, and replaced cards are archived (status archived, never deleted). A Haiku re-reads the written rows and a Sonnet re-verifies a 10% sample (min 5, max 25) against their anchors.
The run's counts, token usage, concrete failures, source-corpus gaps and proposed heuristic adjustments are appended to the rolling journal — the self-improvement substrate the next run reads at phase 1.
0OrchestratorScope resolution + state initSAQ rows resolved; stage id, mode, budget set.no model
The scope (year range, single paper, section, or all) is resolved to a concrete list of SAQ rows from the database, and run state is initialised with the pipeline version.
Hard gates: planner version ≥2, every axiom slug resolves, ≥80% of rows have a pass rate, and a single smoke row is run end-to-end through phases 2→4 to catch contract drift before the full batch.
Per SAQ, the node's anchors resolve to textbook pages (read with verbatim anchors), and the examiner report, pass rate, cached DP/JJJ text and axiom definition are assembled into one pack.
Mirrors the recall validator: verbatim anchors, ≥2-noun overlap per source, chapter topical fit, DP/JJJ relevance. Off-topic sources removed; 100% of packs must pass or synthesis is blocked. No manual patching.
The SAQ prompt is parsed into the discrete sub-tasks an examiner marks, each tagged with an expected structural form (prose / table / mechanism-chain) and mark weight, plus a pass-rate band and word budget — so synthesis covers every mark.
2.5LLM stepKey-miss miningExaminer report mined for the specific errors candidates make.Sonnet ×N
For SAQs with an examiner report, the specific omissions and errors the examiners flagged are extracted as "examiner-miss" seeds, so the synthesised answer pre-empts them.
3LLM stepAnswer synthesis≤400-word sub-task-structured answer from pack. Unverified.Claude Opus
An Opus subagent (Write-only) writes a ≤400-word answer structured by the sub-tasks, from the validated pack, examiner misses and axiom definition, given the 20 hard rules verbatim. Output is unverified.
3.5OrchestratorHollow-examiner routingSAQs with no examiner report flagged for extra human review.no model
SAQs whose examiner report is empty cannot be key-miss mined; they are synthesised from textbook + axiom only and tagged for extra scrutiny at the human gate.
4Automated gateVerification — 20 hard + 10 softFailures classified repair-eligible vs needs re-synth.Sonnet ×N
The full rule set runs (listed in the next section): anchor verbatim, sub-task coverage, word cap, no inline citations, no invented mnemonics, claim-strength drift, orphan numerics, and more. Each failure is classified repair-eligible (mechanical) or needs re-synth (content wrong).
4.5LLM stepRepair (light)Mechanical fixes for repair-eligible failures; max 1 cycle.Claude Opus
Repair-eligible failures (word cap, markdown contract, invented mnemonic, richtext gates…) get a minimal targeted fix and re-run through verification. Content-level failures (sub-task coverage, claim-strength drift, citation fabrication) instead go back to full re-synthesis. Persistent failures route to the human gate.
Atomic "leaf seeds" are extracted from each verified answer for later recall-card use. Queue files (low-confidence, hollow-examiner, disagreements) pause for human approval; on resume the answers are written (PATCH content_items + UPSERT saq_metadata) with an id↔source_id map built first, and a 10% post-publish re-verification sample.
Loop: a verification failure returns the item to synthesis (re-draft) or a constrained repair pass — nothing publishes until it passes or a human clears it. Model routing follows cost vs consequence: Opus for synthesis/repair, Sonnet for judgement-bearing checks and dedup, Haiku for extraction, deterministic scripts where exactness is possible.
Verification · the rule set
Every rule a draft must pass
The SAQ truth gate runs 20 hard rules (any failure blocks) and 10 soft signals (warnings that become hard after 3 unchanged runs). The recall pipeline runs an equivalent set. Each hard rule is tagged by what a failure triggers: a mechanical repair, or a full re-synth because the content itself is wrong.
Mechanism matters: anchor-substring, word-cap, schema, markdown-contract and reference-leak checks are deterministic (exact). Topical fit, claim-strength drift and sub-task coverage are LLM judgements (Claude Sonnet) and carry the same fallibility as generation — they reduce, not eliminate, the relevant error.
H1Word cap (≤400 SAQ / ≤150 recall)repair
H2Structural patterns populated & validrepair
H3See-also is metadata-only, not in the bodyrepair
H4Related-drugs ↔ related-content parityrepair
H5Sub-task coverage — every markable part answeredre-synth
H15Claim-strength drift — no upgrade vs sourcere-synth
H16Orphan numerics — every value needs contextrepair
H17Richtext gates — table / list / bold numericsrepair
H18DP/JJJ provenance URL present when usedrepair
H19Paragraph/figure ref not fabricatedrepair
H20Paper number ∈ {1, 2}repair
10 soft signals (warnings → hard after 3 unchanged runs)
S1Sentence-per-line richtext
S2Pass-rate band ↔ verbosity match
S3Examiner-miss callout present (low-pass SAQs)
S4Axiom cross-link when axiom in scope
S5See-also recall-card suggestions present
S6Drug cross-link when a drug is mentioned
S7Diagram-expected SAQs flagged
S8Table used where a comparison is present
S9Numbered list for a sequential mechanism
S10Pearl candidate surfaced
Example
A published card and its anchor
A live recall card (node D2i) beside the source line stored against it.
Mechanism · D2i
What ion movement repolarises the ventricular myocyte (phase 3)?
L-type Ca²⁺ channels close + delayed rectifier K⁺ currents open:
I_Kr (rapid) — blocked by class III antiarrhythmics → QT prolongation
I_Ks (slow)
I_K1 (inward rectifier) — drives final repolarisation
Membrane returns toward −90 mV resting potential.
Stored anchor
pappano-cv-11e · ch 2 · p 24
“The inwardly rectified K⁺ current (iK1) contributes substantially to the later repolarization phase… At least four outward K⁺ currents (Ito, IKr, IKs, and IK1)…”
The anchor is verified as an exact substring of the cited page (deterministic). This establishes that the source was read and quoted — it does not independently verify that each derived bullet is entailed by the source.
Production database · June 2026
Library state
Counts of published items, read from the production database.
4,895
recall cards
927
drug cards
474
SAQ model answers
38
equations / axioms
2014–25
SAQ paper years (12 sittings)
69.5%
syllabus lines with a verified anchor
Honest accounting
Known limitations
≈6% of recall cards (309) carry an explicit trust label rather than a verified verbatim citation. Many predate the current schema or are faithfully paraphrased rather than quoted. Rather than hide this, every such card carries an explicit trust label shown in its references panel — see the tiers below.
Each unanchored card states why. 72 are expert-asserted (no single authoritative citation; content stands on expert assertion), 195 are coverage-gap (a corpus-wide search found no establishing source — flagged for the coverage planner), 42 are anchor-unverified (a candidate anchor failed exact-substring verification and was withheld rather than written). The references panel shows the label, never a fabricated citation.
~4,570 recall cards carry a re-sourced citation, in two tiers. A separate pass searched the cached source corpus for cards lacking a citation and attached a verbatim quote: value-verified (~1,090) — a cached passage contains the card's actual figure/value (deterministically confirmed against the source text); topic-sourced (~3,470, labelled resourced-verified) — the source demonstrably covers the subject but the exact figure was not matched in the attached quote (LLM-judged, weaker). Both are flagged in provenance; neither is as strong as a card originally written from its source.
Every recall, SAQ and drug card has had an independent factual-correctness audit. Each was checked against current clinical knowledge (not just against its source) by two independent models (Claude Opus + Fable); where both flagged the same error a third model confirmed it before a deterministic, fully-reversible fix was applied. This card-vs-truth pass catches errors even in cards faithfully drawn from an imperfect source, and to date has corrected ~90 factual errors and filled ~26 incomplete answers. It is still LLM-based and does not replace expert sign-off.
~30% of syllabus lines have no verified anchor. Anchor coverage is 69.5% and incomplete.
SAQ answers are not schema-uniform: 173 are at the current v5.0 schema; the remaining 301 are at earlier schemas.
Verification is partly LLM-based and cannot detect a claim that is faithfully drawn from a source that is itself wrong, ambiguous, or out of date.
Human review does not re-derive every item. It gates flagged and sampled content and accepts/rejects proposed changes; it is not a full independent re-check of all ~6,334 items.
Source editions are fixed. Cards are not automatically re-synthesised when a newer edition or guideline supersedes the cited source.
Per-item record
Provenance & audit trail
Each item stores its sources and the outcome of every check and review that touched it. Stored shape (abbreviated):