When about to use a target-language lemma not yet in the vocab map, register it with an initial SM-2 state.
Steps:
vocab/<lang>/<lemma>.md already exists (the main loop may pass
you an already_known set to skip this check).vocab.introduce(lemma, lang, gloss, example) where gloss is a short
base-language definition and example is the exact sentence you will use
it in. This creates the vocab file with SM-2 initial state.kc_type and topics explicitly. The decision rubric:
caballo, mesa) → kc_type: factser, tener) → kc_type: skillgrammar/ (rules with rationale) → use the
grammar.introduce tool instead, which defaults kc_type: principletopics is an optional string[] enabling per-topic mastery aggregation.
Use lowercase snake_case: ["copula"], ["ser_estar", "verbs"]. Tag
liberally — the report rolls items up to topics for cleaner diagnostics.