Purpose
Stage: standalone · cross-cutting — it belongs to no lifecycle stage and blocks nothing: no merge, no stage and no /orchestrate wave waits on a quiz result, because a self-check stops being honest the moment something gates on it.
comprehension-quiz administers retrieval practice that makes
understanding of code you didn't write honest: about five medium-difficulty questions, one at a time,
the learner's answer graded before the correct answer is revealed, the session recorded as one line in
the learning ledger.
Its stance is Litt's personal rule — the quiz is an honest self-check, never a gate. It is also the sole writer
of the learning ledger;
the ledger it appends is the fact base every progress measure is later derived from — never a scoreboard,
never a stored mastery flag.
When to use / when to skip
Use in one of two entry cases:
- Right after a
literate-explainer artifact — quiz that explainer while it is fresh.
- Standalone, with no fresh explainer in view — the requiz over weak or stale durable concepts
drawn from the learning ledger and learner glossary.
Skip when there is nothing to test: no fresh explainer and no weak/stale durable concepts in the
learner glossary. Say so and stop — do not manufacture questions, and write no ledger line.
| Reach for… |
when you want to… |
not… |
| comprehension-quiz (this) |
test the human — retrieve, grade, record what stuck |
teach it in the first place |
literate-explainer |
teach — emit the explainer artifact the quiz then tests |
quiz it (different interaction grain) |
the review skills (code-review, …) |
judge the diff — is the code correct/safe/fast |
judge the human's understanding |
codebase-research |
feed the design and the plan — goal-blind facts about the code as it is, surveyed at the head of Spec and again at the head of Plan |
teach or test a human |
The boundary is behavioral, not naming: the quiz tests the HUMAN, literate-explainer teaches them,
the review skills judge the DIFF, and codebase-research feeds the DESIGN and the PLAN. Different
subjects, different grain — reach deliberately.
Inputs
- The comprehension workspace for the target repo — resolved by repo key per the
key-derivation rules in
references/comprehension-workspace-format.md.
Create it if absent; an empty ledger is a valid start.
- Case A — fresh explainer in view: its manifest entry (subject +
artifact filename) and the
concepts it taught are the question pool; tie the session to that entry.
- Case B — standalone requiz: the learner glossary (durable concepts) joined against the ledger to
find weak/stale ones per the workspace format's worth-revisiting rule.
Read-only for everything except the ledger. This skill never reads or writes the target repo.
Process — the turn protocol
The honesty is structural, not prose — it lives in this loop, not in a promise to be fair.
Resolve the workspace and pick the case. Compute the repo key, locate (or create) the workspace.
Fresh explainer → quiz its taught concepts, subject = that manifest entry. No fresh explainer → requiz
drawing only durable concepts (learner-glossary terms) whose latest grade is weak/stale, by join.
Nothing to test → say so and stop, writing no ledger line.
Compose ~five medium-difficulty questions up front — reveal none. Target durable concepts plus, in
the fresh-explainer case, the specific change; a requiz targets durable concepts ONLY — never the
ephemeral mechanics of a merged diff. Multiple-choice options must be of comparable
length, so option length never signals the answer. Hold the questions and answers in working
context only — never in a file the learner can open.
Run the turn loop — EXACTLY ONE question per message:
- a. Ask one question. Stop. Wait for the learner's answer — do not ask the next question and
do not reveal anything yet.
- b. Grade the learner's answer FIRST (
pass | partial | fail), state the grade, and only
then reveal the correct answer and why.
- c. Advance to the next question only after the current one is resolved. Repeat until ~five are
done or the learner walks away.
Close the session — append EXACTLY ONE ledger line:
- Finished → outcome
completed, with each asked question's {concept, grade}.
- Walked away mid-quiz → outcome
abandoned, with only the grades earned so far — and never
reveal answers to questions that were never asked.
- The line shape, grade domain, and the
artifact field (present when tied to a manifest entry, omitted
for a requiz) follow the workspace format reference exactly. This is the only write this skill
makes.
Rationalizations
Stop signals disguised as good reasons:
- "I'll list all five questions so the learner can pace themselves." → No. One question per message, graded
before reveal. A visible list lets them peek — it destroys the retrieval the quiz exists to force.
- "I'll show the answer alongside the question so they can self-check." → No. Grade the learner's answer
first, then reveal. Reveal-before-grade is self-deception — the exact thing being prevented.
- "This diff mechanic is worth re-testing next month." → No. A merged diff is stale by Friday; a requiz
tests durable concepts only. Ephemeral detail never enters a requiz.
- "I'll stash the questions and answers in a scratch file / the artifact so I don't lose them." → No.
Answers never touch any file the learner can open; keep them in working context only.
- "They failed three — I'll hold the ledger line until they retry." → No. Record what actually happened,
including abandonment. The ledger is facts, not a scoreboard you curate.
- "The quiz should block the merge until they pass." → No. Honest self-check, never a gate (Litt's
rule) — it blocks nothing.
Red flags
Stop and fix before continuing if any are true:
- More than one question in a single message, or the next question asked before the current one is graded
and resolved.
- The correct answer revealed before the learner's answer is graded.
- Multiple-choice options of visibly unequal length, so length hints the answer.
- Any write to the explainer manifest, the learner glossary, or the target repo — the ledger line (and,
on first-time workspace creation, the idempotent root index append) are this skill's only writes.
- Questions or answers embedded in the teaching artifact or any file the learner can open.
- A requiz question about ephemeral diff mechanics instead of a durable concept.
- The quiz framed as a gate that blocks work.
Verification (ending criteria)
Done when ALL hold:
- Exactly one new line was appended to
ledger.jsonl, and no other surface (manifest, glossary) and
not the target repo were written.
- The session ran one question per turn, each graded before its answer was revealed.
- About five medium-difficulty questions, multiple-choice options of comparable length.
- Outcome matches reality:
completed with every asked question's {concept, grade}, or abandoned with
grades earned so far and no leaked answers to unasked questions.
- A fresh-explainer session carries the
artifact tying it to its manifest entry; a requiz omits artifact
and tests durable concepts only.
- The ledger line's shape and grade domain match the workspace format reference.
Outputs & handoff contract
- Emits: exactly one appended line to the learning ledger (
ledger.jsonl) in the comprehension
workspace — the sole surface this skill writes. Line shape, grade domain (pass | partial |
fail), and the artifact/requiz distinction are fixed by the workspace format reference
(references/comprehension-workspace-format.md); do not restate them here.
- Sole writer: this skill owns the learning ledger and touches nothing else — never the explainer
manifest or learner glossary (those belong to
literate-explainer), never the target repo.
- Downstream consumers — derived by join at read time, never stored: the next
literate-explainer joins ledger × glossary to compute proven-known (background it may skip) and
worth-revisiting (its advisory note); the toolkit owner joins ledger × manifest to derive the
quiz-completion rate (the lead metric gating any future spacing/ZPD work). The join formulas live in
the workspace format reference — see them there, don't restate them.
- Standalone: no lifecycle gate, blocks nothing,
/orchestrate untouched.
1---2name: comprehension-quiz3description: Agent-administered retrieval practice that makes understanding of code you did not write honest — about five medium-difficulty questions asked ONE at a time, the learner's answer graded BEFORE the correct answer is revealed, the session recorded as one line in the learning ledger. Reach for this right after a literate-explainer artifact (quiz that explainer) or standalone with no fresh explainer in view (the requiz over weak or stale durable concepts drawn from the ledger). It is the SOLE writer of the learning ledger; it is an honest self-check, never a gate — it blocks nothing. If you are about to dump every question at once, reveal an answer before grading it, or write a quiz's questions or answers into any file the learner can open, stop and load this.4---56## Purpose78**Stage: standalone · cross-cutting** — it belongs to no lifecycle stage and blocks nothing: no merge, no stage and no `/orchestrate` wave waits on a quiz result, because a self-check stops being honest the moment something gates on it.910`comprehension-quiz` administers retrieval practice that makes11understanding of code you didn't write **honest**: about five medium-difficulty questions, one at a time,12the learner's answer graded *before* the correct answer is revealed, the session recorded as one line in13the **learning ledger**.1415Its stance is Litt's personal rule — the quiz is an *honest self-check, never a gate*. It is also the **sole writer16of the learning ledger**;17the ledger it appends is the fact base every progress measure is later *derived* from — never a scoreboard,18never a stored mastery flag.1920## When to use / when to skip2122**Use** in one of two entry cases:2324- **Right after a `literate-explainer` artifact** — quiz that explainer while it is fresh.25- **Standalone, with no fresh explainer in view** — the **requiz** over weak or stale durable concepts26 drawn from the learning ledger and learner glossary.2728**Skip** when there is nothing to test: no fresh explainer *and* no weak/stale durable concepts in the29learner glossary. Say so and stop — do not manufacture questions, and write no ledger line.3031| Reach for… | when you want to… | not… |32|---|---|---|33| **comprehension-quiz** (this) | **test the human** — retrieve, grade, record what stuck | teach it in the first place |34| `literate-explainer` | **teach** — emit the explainer artifact the quiz then tests | quiz it (different interaction grain) |35| the review skills (`code-review`, …) | **judge the diff** — is the *code* correct/safe/fast | judge the human's understanding |36| `codebase-research` | **feed the design and the plan** — goal-blind facts about the code as it is, surveyed at the head of Spec and again at the head of Plan | teach or test a human |3738The boundary is behavioral, not naming: the **quiz tests the HUMAN**, `literate-explainer` **teaches** them,39the **review skills judge the DIFF**, and `codebase-research` **feeds the DESIGN and the PLAN**. Different40subjects, different grain — reach deliberately.4142## Inputs4344- **The comprehension workspace** for the target repo — resolved by **repo key** per the45 key-derivation rules in `references/comprehension-workspace-format.md`.46 Create it if absent; an empty ledger is a valid start.47- **Case A — fresh explainer in view:** its **manifest entry** (subject + `artifact` filename) and the48 **concepts it taught** are the question pool; tie the session to that entry.49- **Case B — standalone requiz:** the **learner glossary** (durable concepts) joined against the ledger to50 find weak/stale ones per the workspace format's *worth-revisiting* rule.5152Read-only for everything except the ledger. This skill never reads or writes the target repo.5354## Process — the turn protocol5556The honesty is **structural, not prose** — it lives in this loop, not in a promise to be fair.57581. **Resolve the workspace and pick the case.** Compute the repo key, locate (or create) the workspace.59 Fresh explainer → quiz its taught concepts, subject = that manifest entry. No fresh explainer → **requiz**60 drawing **only durable concepts** (learner-glossary terms) whose latest grade is weak/stale, by join.61 Nothing to test → say so and stop, writing no ledger line.62632. **Compose ~five medium-difficulty questions up front — reveal none.** Target durable concepts plus, in64 the fresh-explainer case, the specific change; a **requiz targets durable concepts ONLY — never the65 ephemeral mechanics of a merged diff**. Multiple-choice **options must be of comparable66 length**, so option length never signals the answer. Hold the questions and answers in working67 context only — never in a file the learner can open.68693. **Run the turn loop — EXACTLY ONE question per message**:70 - **a.** Ask **one** question. Stop. **Wait** for the learner's answer — do not ask the next question and71 do not reveal anything yet.72 - **b.** **Grade the learner's answer FIRST** (`pass` | `partial` | `fail`), state the grade, and *only73 then* reveal the correct answer and why.74 - **c.** Advance to the next question **only after** the current one is resolved. Repeat until ~five are75 done or the learner walks away.76774. **Close the session — append EXACTLY ONE ledger line**:78 - Finished → outcome **`completed`**, with each asked question's `{concept, grade}`.79 - Walked away mid-quiz → outcome **`abandoned`**, with only the grades earned **so far** — and **never80 reveal answers to questions that were never asked**.81 - The line shape, grade domain, and the `artifact` field (present when tied to a manifest entry, omitted82 for a requiz) follow the workspace format reference **exactly**. This is the **only write** this skill83 makes.8485## Rationalizations8687Stop signals disguised as good reasons:8889- *"I'll list all five questions so the learner can pace themselves."* → No. One question per message, graded90 before reveal. A visible list lets them peek — it destroys the retrieval the quiz exists to force.91- *"I'll show the answer alongside the question so they can self-check."* → No. Grade the learner's answer92 **first**, then reveal. Reveal-before-grade is self-deception — the exact thing being prevented.93- *"This diff mechanic is worth re-testing next month."* → No. A merged diff is stale by Friday; a requiz94 tests **durable concepts only**. Ephemeral detail never enters a requiz.95- *"I'll stash the questions and answers in a scratch file / the artifact so I don't lose them."* → No.96 Answers never touch any file the learner can open; keep them in working context only.97- *"They failed three — I'll hold the ledger line until they retry."* → No. Record what actually happened,98 including abandonment. The ledger is facts, not a scoreboard you curate.99- *"The quiz should block the merge until they pass."* → No. Honest self-check, **never a gate** (Litt's100 rule) — it blocks nothing.101102## Red flags103104Stop and fix before continuing if any are true:105106- More than one question in a single message, or the next question asked before the current one is graded107 and resolved.108- The correct answer revealed before the learner's answer is graded.109- Multiple-choice options of visibly unequal length, so length hints the answer.110- **Any write to the explainer manifest, the learner glossary, or the target repo** — the ledger line (and,111 on first-time workspace creation, the idempotent root index append) are this skill's only writes.112- Questions or answers embedded in the teaching artifact or **any** file the learner can open.113- A requiz question about ephemeral diff mechanics instead of a durable concept.114- The quiz framed as a gate that blocks work.115116## Verification (ending criteria)117118Done when ALL hold:119120- **Exactly one** new line was appended to `ledger.jsonl`, and **no** other surface (manifest, glossary) and121 **not** the target repo were written.122- The session ran **one question per turn**, each **graded before** its answer was revealed.123- **About five** medium-difficulty questions, multiple-choice options of **comparable length**.124- Outcome matches reality: `completed` with every asked question's `{concept, grade}`, or `abandoned` with125 grades earned so far and **no** leaked answers to unasked questions.126- A fresh-explainer session carries the `artifact` tying it to its manifest entry; a requiz omits `artifact`127 and tests **durable concepts only**.128- The ledger line's shape and grade domain match the workspace format reference.129130## Outputs & handoff contract131132- **Emits:** exactly one appended line to the **learning ledger** (`ledger.jsonl`) in the comprehension133 workspace — the sole surface this skill writes. Line shape, grade domain (`pass` | `partial` |134 `fail`), and the `artifact`/requiz distinction are fixed by the workspace format reference135 (`references/comprehension-workspace-format.md`); **do not restate them here**.136- **Sole writer:** this skill owns the learning ledger and touches nothing else — never the explainer137 manifest or learner glossary (those belong to `literate-explainer`), never the target repo.138- **Downstream consumers — derived by join at read time, never stored:** the next139 `literate-explainer` joins ledger × glossary to compute **proven-known** (background it may skip) and140 **worth-revisiting** (its advisory note); the toolkit owner joins ledger × manifest to derive the141 **quiz-completion rate** (the lead metric gating any future spacing/ZPD work). The join formulas live in142 the workspace format reference — **see them there, don't restate them**.143- **Standalone:** no lifecycle gate, blocks nothing, `/orchestrate` untouched.