exam-audit — workspace health check (read-only)
SkillDocs & knowledgeRead-only check of whether a generated exam-prep workspace is healthy, reporting issues without making any modifications by default. Verifies .ingest source material versions, content units, takeover queue and derived artifact integrity, as well as consistency of the wiki, question bank, visual evid
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the exam-audit — workspace health check (read-only) skill
What this skill tells your AI
The instructions your AI receives, as published by zekainie/universal-examprep-skill in full/skills/exam-audit/SKILL.md and read by ahel’s review.
Purpose
Inspect a prep workspace built by exam-ingest and report health issues. This is a read-only inspector. Do NOT fix anything by default; only fix after the user explicitly grants permission. Emit a concrete issue report; never silently modify or delete files.
Activation
Activate when the user suspects the workspace is broken (missing chapters, ungradable quiz items, inconsistent progress), or when the user wants a pre-review health check before studying. Do not activate to build, teach, or grade.
Inputs
references/wiki/— chapter knowledge files (chN_*.md).references/quiz_bank.json— quiz items.references/teaching_examples.json— optional parallel teaching inventory; examples may remain here even when they are deliberately excluded from the gradable bank.references/teaching_baseline.json— append-only retention baseline for new workspaces; it must never shrink on re-ingest and must not be hand-edited.references/figure_page_index.json/references/image_question_index.json— regenerable three-sided visual coverage evidence (wiki / prompt / answer)..ingest/source_manifest.json— source-root-relative paths, source hashes, media types, and parse status..ingest/base_content_units.jsonl/content_units.jsonl— deterministic extraction baseline and the compiled view after replaying validated patches..ingest/base_chapter_phase_mappings.jsonl/chapter_phase_mappings.jsonl— explicit chapter-to-study-phase identity..ingest/review_queue.jsonl/review_patches.jsonl— typed issue lifecycle and append-only evidence-bound patch ledger..ingest/build_manifest.json/unbound_review.json— source root, page-quality accounting, input/derived hashes, and issues not yet bound to one source record.ingest_report.json— import counts, current-snapshot statistics, missing-answer alerts, and the legacy retention fallback.study_plan.md— phase plan with chapter anchors.study_state.json— the structured progress state (the SINGLE SOURCE OF TRUTH when present:phase_checklist,mistake_archive,confusion_log).study_progress.md— a GENERATED VIEW of the state (rendered phase checkpoints and recorded wrong-question IDs); stale/hand-edited when it drifts fromstudy_state.json.
Workflow
Inspect read-only. Open and parse files; never write, rename, or delete. Check each item below and record every failure as a concrete issue (file path + what is wrong).
- Structure. For each phase listed in
study_plan.md, confirm a matchingreferences/wiki/chN_*.mdfile exists. Flag orphan chapters (wiki files no phase references) and broken links (phases pointing to absent chapters). - Quiz bank. For each item in
references/quiz_bank.json: confirmtypeis one of the six allowed types (choice / subjective / diagram / fill_blank / true_false / code); confirmchoiceitems carryoptions; treat missingkeywordson subjective items as a grading-quality warning. An item without an answer must declareanswer_status: unknown; in a structured workspace it also remains a blocking review issue until an evidence-backed official answer, an explicitly labeled AI answer, or an unrecoverable terminal decision is recorded. - Provenance honesty. Flag any AI-generated answer presented as the teacher's standard answer (missing the ⚠️ marker). Flag any AI-supplement wiki passage that should carry 🟡 but does not.
- Plan/progress consistency. When
study_state.jsonexists, treat it as the source of truth: confirmstudy_progress.mdis a faithful render of it (flag drift / stale hand-edits where the md disagrees with the state), and check the state'sphase_checklistphases map tostudy_plan.md. When nostudy_state.jsonexists, auditstudy_progress.mddirectly. Either way, confirm each rendered phase-checkpoint line maps to a phase instudy_plan.mdand every wrong-question ID exists inreferences/quiz_bank.json. Note: the template anchor<!-- PHASE_CHECKLIST -->is replaced byscripts/ingest.pyat generation time and is absent from a correct finished workspace — do NOT report its absence as a problem. - Teaching-example retention. Prefer
references/teaching_baseline.json; validate its schema, exact per-chapter mapping, append-only policy, and require every baseline ID to have a same-chapter current snapshot inreferences/teaching_examples.json. Presence of the same ID inreferences/quiz_bank.jsonis diagnostic overlap only and never substitutes for that teaching snapshot. Only old workspaces without the baseline file may fall back toingest_report.json.teaching_example_ids. It is valid for an ungradable worked example to be absent from the bank if the teaching layer retains it; disappearance from the current teaching layer is a blocking retention gap even when a quiz item survives. Validate the current teaching manifest's IDs, chapter/phase tags, source pages, answer source, and asset paths. Read it per chapter in tutoring; do not treat the whole manifest as a new answer source. - Three-sided visual completeness. Inspect each denominator separately:
figure_page_index.json.wiki_visual_coveragefor detected material pages embedded in wiki,image_question_index.json.prompt_suspectsfor missing prompt context, andanswer_suspectsfor missing answer context. A zero on one side is never evidence that the other two are complete. Require matchingintegritysnapshots and re-hash their declared quiz, teaching, wiki, and asset inputs; stale or missing freshness evidence blocks a new-manifest phase from being complete. Flag NUL/control-byte warnings and missing/capped pages. State that this is deterministic recall coverage, not semantic proof that every meaningful figure was found. - Structured ingestion integrity. When
.ingest/exists, strictly load every source, unit, mapping, issue, patch, unbound entry, and build-manifest section. Re-hash current source bytes; source drift invalidates patches and derived indexes. Require onepage_anchorfor every accounted page, including blank/scanned pages. Require blocking issues inpending/claimed/validated/blockedto keep readiness blocked; applied/resolved/superseded issues must agree with the ledger and compiled outputs, while unrecoverable issues remain visible warnings. Verify build-manifest hashes for the wiki, bank, retrieval index, visual/teaching manifests, and structured facts. - Evidence-gated phase completion. In a structured workspace, a checked phase must carry valid
phase_evidenceplus a currently validatednotebook/chNN.guide.jsonwithprofile=full; the typed validator owns the de-duplicated teaching-example + gradable-bank denominator and source-reference checks. Under standingvisual, also requirecapabilities.artifact_ready.status=ready, matching receipt hashes, and accepted all-page QA before completion. Underchat, the typed manifest is still required but PDF is not.verifiedneeds at least two distinct handled bank items and at least onepassed;preferences.no_questions=truecaps the phase atcovered_unverified. A language change makes the old manifest/artifact stale until relocalized and, for visual output, rerendered and re-QA'd. Legacy workspaces without.ingest/remain compatible but must be reported as lacking the structured completeness gate. - Path safety. Flag traversal, symlink escapes, and absolute paths in fields that are defined as workspace-relative.
.ingest/build_manifest.json.source_rootis intentionally an absolute materials-root binding and is not itself an error; report it only when missing, unreadable, moved, or inconsistent with source records.
Run python <package-root>/scripts/validate_workspace.py <workspace> --json as the canonical static check and include its readiness in the report. ok=true means structurally runnable (no validation errors); it does not erase warnings or mean content-complete.
Output Contract
Emit a single issue list. Each entry contains: 【级别(阻断/警告/提示)】 (severity: blocker / warning / notice) + 【位置文件】 (file path) + 【现象】 (concrete symptom) + 【建议修法】 (suggested fix). End with exactly one readiness verdict: ready (no errors or warnings), usable_with_gaps (no errors, but warnings/incomplete evidence remain), or blocked (one or more errors). Never translate ok=true into ready without checking warnings.
Do NOT auto-fix. After reporting, fix item-by-item only if the user grants permission, or hand the workspace back to exam-ingest for rebuild.
Preserve these provenance labels VERBATIM when quoting them in findings: 🟢 来自资料 / 🟡 AI补充,可能与你老师讲的不完全一致 / ⚠️ AI生成答案,非老师/教材提供.
Student-facing output defaults to English (Simplified Chinese if the student opened in Chinese); the persisted study_state.json.language code (zh/en/bilingual) switches it per exam-cram's dispatch rule with single-language purity.
Language packs
This skill produces no student-facing template; its report is agent-composed in the student's language. There are no locales/zh/skills/exam-audit.md or locales/en/skills/exam-audit.md pack files — compose the issue report directly in the language given by study_state.json.language:
中文→ Simplified Chinese, using the zh canonical wording in../../docs/language-policy.mdEnglish→ English, using the EN canonical vocabulary in../../docs/language-policy.md双语→ compose zh-first with a> EN:mirror line per block (rules in../../docs/language-policy.md) Display aliases such as中文,English, and双语are normalized byupdate_progress.py; route persisted state onzh,en, orbilingual. Unset language → the merged first-ask decides it; default English unless the student opened in Chinese.
Boundaries
- Zero modifications and zero deletions by default — this is an inspection, not construction.
- Do not infer the teacher's intent; report only objective inconsistencies and leave the judgment to the student.
Signals
- GitHub stars
- 282
- Forks
- 16
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
exam-audit- Source
- github.com/zekainie/universal-examprep-skill