skills/mastery-assessment/SKILL.md
--- name: mastery-assessment description: A closed-book-first probing protocol that assesses how well the learner actually holds a module's claims — asking before telling, probing the gap, detecting misconceptions, then confirming. Tags each probe with a Bloom level, places the learner in a Dreyfus mastery band (unfamiliar/aware/functional/proficient/fluent), scores the session, and schedules the next spaced-repetition surfacing on expanding intervals (1d, 3d, 7d, 16d, 35d) — pulling the next da
npx skillsauth add lyndonkl/claude skills/mastery-assessmentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill checks whether the learner holds a module's claims — not whether they recognize them. Recognition is cheap and treacherous: a learner reads "heritability is a property of a population, not a trait," nods, and feels they know it. Retrieval is the test. This skill asks the learner to produce the claim, the mechanism, and an application from memory before any prompt is shown, then probes exactly where production broke. The retrieval effort is the point, not a side effect — see [[learning-system|LEARNING_SYSTEM.md]] and the desirable-difficulty principle in conventions.md §8.
It composes three skills: [[evaluation-rubrics]] supplies the band descriptors and scoring scale, memory-retrieval-learning supplies the spacing schedule and the case for testing-as-encoding, and socratic-teaching-scaffolds supplies the question ladder used to probe a gap without lecturing the answer back in.
This is an assessment, not a tutoring session. The job is to measure and schedule, not to teach. When a gap is found, probe it once or twice to characterize it, then record it — do not slide into a lecture. The reading loop handles teaching; this loop handles measurement.
pNmM) and its question-bank note in assessments/question-banks/.mastery band and review-due date.assessment-session note for this module, if one exists (for trend and to recall prior misconceptions).Run every probe through four moves, in order. Never collapse them.
A hollow answer (correct words, no mechanism behind them) scores below a struggled answer that reconstructs the mechanism in the learner's own terms. Production over recognition, always.
Tag each probe with the Bloom level it exercises (conventions.md §8). A module assessed only at remember/understand has not been assessed. Push to apply/analyze; a capstone-adjacent module reaches create.
| Bloom level | What the probe demands | Genomics example | |---|---|---| | remember | recall a definition or term | "What does GEBV stand for?" | | understand | restate a claim in own words + mechanism | "Why is heritability a property of a population, not a trait?" | | apply | use the idea on a fresh case | "Selection intensity doubles; what happens to predicted response, holding h² and σ_P fixed?" | | analyze | decompose, compare, find the flaw | "A model's accuracy rose with markers then fell. Decompose the two forces in tension." | | evaluate | judge a claim or a design | "Is it sound to validate genomic prediction by random CV when families are structured? Defend." | | create | design or simulate something new | "Sketch a simulation that would let you see response shrink as the population inbreeds." |
Cover at least three Bloom levels per session, including one at apply or higher. Record which levels were probed in the session note's bloom-levels field.
Place the learner in one band per core claim, then take the module's band as the modal (typical) claim band, noting the spread. Bands are Dreyfus-flavored (conventions.md §8); a module is mastered at proficient+ on its core claims.
| Band | Behavioral signature under closed-book probing | |---|---| | unfamiliar | cannot produce the claim or recognize it when shown | | aware | recognizes the claim when shown; cannot reconstruct it cold | | functional | reconstructs the claim and its mechanism cold, follows the standard steps, but needs prompting on edge cases | | proficient | applies the claim to a fresh case unprompted, connects it to neighboring claims, sees when it breaks | | fluent | reasons with the claim instinctively, teaches it, recognizes its limits and the assumptions it rides on |
Borrow the descriptor-per-level discipline of [[evaluation-rubrics]]: each band is a behavioral descriptor you can match against a transcript, not a vibe. If you cannot point at the move in the answer that earns a band, you have over-rated it.
A wrong answer is data; a structured wrong answer is gold. Watch for the recurring genomics misconceptions and log each one explicitly, because a misconception that survives is what the next review must target.
For each misconception caught, record the claim it attaches to, the exact wrong reasoning the learner produced, and the probe that surfaced it. This goes in the session note and steers the next surfacing.
n/m (e.g. 7/10), and matched to the module band.functional). Behavior wins over arithmetic.proficient+ on its core claims with no live misconception on a core claim.Each evergreen note and module carries a review-due date. Schedule the next surfacing on expanding intervals: 1d → 3d → 7d → 16d → 35d, then continue stretching (~2.2×) for fluent material. The interval expands on success (the spacing effect: a recall that's just hard enough cements the trace) and contracts on a miss.
Per claim, track its position on the ladder:
7d becomes 16d.7d stays 7d.3d (or 1d if it was a core claim at an early rung). Pulling the date earlier is the whole point: missed material must come back fast.Worked example. The claim "response to selection scales with additive variance, not total genetic variance" sits at the 7d rung, last reviewed today, 2026-05-30.
16d → review-due: 2026-06-15, band nudges toward proficient.7d → review-due: 2026-06-06, band holds at functional, misconception "additive vs total variance" logged.3d → review-due: 2026-06-02, band drops to aware, misconception logged as the target of the next session.Set the module's review-due to the earliest review-due among its core claims, so the soonest-failing claim pulls the whole module back.
This skill never writes to the vault autonomously (conventions.md §10). It proposes two artifacts and waits for go-ahead.
1. An assessment-session note at assessments/log/pNmM-assessment-YYYY-MM-DD.md, frontmatter exactly per conventions.md §6:
---
type: assessment-session
module: p2m3
date: 2026-05-30
bloom-levels: [understand, apply, analyze]
mastery-band: functional
score: "7/10"
next-review: 2026-06-06
tags: [assessment]
---
Body: a per-claim table (claim link [[slug|Title]] · Bloom level · score · band · the gap) using the piped link form (conventions.md §3), a misconceptions section quoting the learner's own wrong reasoning, the verdict on advancement, and the per-claim schedule moves.
2. A proposed review-due (and, where it changed, mastery) update on each evergreen note touched — shown as a diff per note, never applied without approval. Format the proposal so the learner can accept the whole batch or cherry-pick.
End the session with one retrieval the learner should attempt unaided before the next surfacing — the weakest core claim, posed as a cold question, not a summary of how they did. Leaving the loop open on an effortful question is itself spaced encoding.
testing
Cluster a conference's event records into a small set of coarse themes with finer sub-clusters, an explicit outlier bucket, and soft (multi-membership) affinities — using the hybrid embed-then-label pipeline (embed abstracts, reduce, density-cluster, then LLM-label the clusters) when embedding libraries are available, and an LLM-reasoned hierarchical fallback when they are not. Embeddings do the grouping; the LLM only names the groups. Conference-agnostic. Use when turning structured event records into a navigable theme map for preference elicitation and scheduling, when you need 6-8 reasonable themes rather than 20 muddy ones, or when overlapping talks must belong to more than one theme. Trigger keywords - theme clustering, cluster talks, embed then label, soft membership, outlier talks, conference themes, topic map.
development
Build a personal conference schedule as a constraint-optimization problem — hard constraints (no time overlap, room-to-room travel time, capacity/registration, the attendee's own must-attends and blackouts) plus a user-owned weighted objective trading interest against breadth, pacing (maximize contiguous free time), and serendipity. Surfaces unbreakable conflicts (two high-value overlapping talks the model cannot rank) as decisions for the human rather than silently picking, and reports what each choice traded away. Conference-agnostic. Use to turn a preference profile plus a theme map into a day-by-day plan, to resolve overlapping sessions, or to balance a packed vs paced schedule. Trigger keywords - schedule optimization, conference schedule, constraint optimization, overlapping talks, contiguous free time, conflict surfacing, packed vs paced.
development
Parse a heterogeneous conference program (markdown, HTML, PDF-derived text, or JSON) into normalized event records with per-field confidence scores and independent classification axes (topic, depth, format, prerequisites, recorded, capacity). Detects the program's format before extracting, treats every inferred field as uncertain (present vs inferred vs missing), and flags thin or missing abstracts so downstream enrichment can target them. Conference-agnostic. Use when ingesting a conference or event schedule into a structured store, normalizing a talk/session list, or extracting per-session metadata with calibrated confidence. Trigger keywords - program ingestion, parse schedule, session extraction, event records, conference program, talk metadata, per-field confidence.
development
Build a personalized preference profile from a small number of well-chosen, cluster-grounded questions instead of a long survey. Represents the person's interests as an uncertainty region over the theme map, picks the single highest-information-gain choice-based question (contrasting real talks from different clusters), balances exploiting known interests against exploring uncertain ones, deliberately injects outlier probes to fight selection bias, and stops as soon as the schedule would be stable. Also elicits the user-owned objective weights and hard constraints. Interactive — runs where it can actually ask the person. Conference-agnostic. Use to turn a theme map into a preference profile, to decide what to ask a conference attendee, or to elicit scheduling priorities. Trigger keywords - preference elicitation, ask few questions, information gain, choice-based questions, selection bias probe, objective weights, attendee preferences.