exam-review — mistake and confusion review
Purpose
Clear recorded mistakes/confusions before the exam. Replay only existing records; teach no new chapter and invent no question.
Activation
Use at final review or when the student explicitly asks to replay mistakes/find gaps.
Inputs
study_state.json'smistake_archiveandconfusion_logwhen state exists; otherwise generated 「❌ 错题档案」 and confusion compatibility rows.references/quiz_bank.json, used to fetch each recorded mistake by exact ID.
Workflow
Replay recorded mistakes. Reload state (or
update_progress.py show), fetch each exact bank item, and ask it again. Never add an unrecorded/bank-external question.For
requires_assets=trueormaybe_requires_assets=true, before asking, explaining, hinting, or solving, render every question-sidequestion_context/figure/diagram/tableasset, labelled题面图orQuestion-side asset. Only later may solution/review show答案图/Answer-side asset. A path is not an image. Preserve but never displaystudent_attempt; its physical path is tainted across the complete quiz, teaching, and content-unit layers, including duplicate official-looking declarations. Missing/unreadable or UI-unrenderable prompt assets cause a fail-closed skip;stub/page_referencealso require the original prompt page first. Usescripts/show_question_assets.pyfor every replay and treat a nonzero result as a skip; do not render a raw bank path directly. Seeexam-quizanddocs/file-format.md§4.Update mistakes. Correct replay →
已订正; still wrong → explain from the stored explanation and retain it.Replay confusions. Reload
confusion_log; ask the student to restate what/why/how. Correct restatement →已回顾; vague → explain once and retain待回顾.Persist the open list first. Compile unresolved mistakes plus
待回顾confusions for the final sprint/exam-cheatsheet. Pipe each conclusion/list topython "${CLAUDE_SKILL_DIR}/scripts/notebook.py" --workspace <ws> add-entry --chapter <ch> --type review --id <slug> --title <gist>; same IDs replace and rebuild the index. Then send a digest and language-pack notebook link. If writing fails, say so and give the full list in chat; file-less clients use chat/text breakpoints.Persist row status. If
study_state.jsonis absent and Python works, runupdate_progress.py --workspace <ws> initfirst; only when Python truly cannot run may Markdown rows be changed in place. Write results viaupdate_progress.py set-mistake-status/set-confusion-status, and genuinely new rows viaadd-mistake/add-confusion. A nonzero Python command is a fail-loud error, not permission to hand-edit. Never leave a mastered row stale or overwrite another skill's writes.
Output Contract
- Produce one 「还没拿下的清单」 with current
已订正/已回顾/待回顾statuses, notebook link, and refreshed panel. - Persist conclusions before the digest and persist every status via
update_progress.py set-mistake-status/set-confusion-status. - Student prose is English by default, Simplified Chinese for a Chinese opening, or explicit bilingual blocks.
Language packs
中文→../../locales/zh/skills/exam-review.mdEnglish→../../locales/en/skills/exam-review.md双语→ compose both blockwise, zh then> EN:, underdocs/language-policy.md
Display aliases are normalized to zh, en, or bilingual.
Boundaries
study_state.jsonis the source of truth; mutate rows only viaupdate_progress.py. Mark replay results viaupdate_progress.py set-mistake-status/set-confusion-status;set-checkalone is not a substitute.- Default question scope is mixed. A restricted scope excludes/counts missing
source_type; announce any one-turn override first: 「⚠️ 临时覆盖你的 范围偏好」 /⚠️ Temporarily overriding your <scope> scope preference. Usescripts/select_questions.py. - Share confusion rows with
confusion-tracker; replay only recorded bank items and never erase concurrent writes.