* docs: consolidate governance anchors and clean up test registries * refactor(cli): decompose cli into dedicated modules * test: fix broken test baselines and formatting * docs: add domain boundary READMEs for governance anchors * test: update baseline for determination lane * test: fix capability_pass expectation * test: fix CORE_SHOWCASE_SKIP_BUDGET enforcement * chore: cleanup CLI extraction and unreachable code
6.7 KiB
Teaching Order — How to Curriculum CORE
Status: Reference doctrine. Update only when the formation pipeline's gate semantics change.
Last updated: 2026-05-17
Companion docs: formation_pipeline_plan.md, capability_roadmap.md, sessions/SESSION-2026-05-15-capability-gates.md
TL;DR
Teach in prerequisite-topological order, not in pedagogical grade order. The "elementary → college" intuition is correct at the macro level (simple before composed, anchored before novel) and wrong at the literal level (do not start with a 3rd-grade language-arts corpus). Start with the smallest set of CORE-grade primitives the formation pipeline can ratify, then expand the prerequisite DAG outward.
Why order matters in CORE specifically
CORE is not a transformer absorbing a corpus. Three structural reasons force a strict ordering:
formation/ratify.pyG3 checks that every relation'sheadandtailconcepts already exist as mastered or in-scope predecessors. Teach a triple whose endpoints aren't anchored and the gate hard-fails.formation/index.py::MasteredCoursesIndexis built specifically so the next course's P3 (prerequisites) can read prior mastery. The system is curriculum-DAG-aware by construction; there is nowhere to hide an out-of-order triple.- CGA recall is exact algebraic distance, not a fuzzy embedding. A concept's position in the manifold is determined by the relations it participates in. Teaching
gravity ENTAILS massbeforemassandgravityare seeded produces an under-constrained point — the equivalent of writing equations with undefined variables.
A sampling architecture absorbs corpora regardless of order because the loss surface averages everything out. CORE has no loss surface. Order is part of the construction.
The Five-Layer Ordering Rule
Always teach in this order, both globally and re-applied within every new domain:
-
Identity axes and refusal probes. Seeded first so identity is load-bearing before any content lands. As of ADR-0027 the runtime identity manifold is loaded from a swappable pack at
packs/identity/<pack_id>.json; the ship default isdefault_general_v1. Theformation/templates/identity_anchor.pytemplate ratifies new identity packs through the standard formation gates. Canned override probes live information/templates/_common.py::IDENTITY_OVERRIDE_PROBES. Reference:identity_packs.md. Adversarial probes must be defined before the concepts they protect. -
Atomic definitions. Concepts with no internal structure —
is_a,kind_of,instance_ofonly. These are the leaf nodes of the prerequisite DAG. No relation in a step-2 course references a concept defined later in the same course. -
Binary relations between defined concepts.
entails,composes,contrasts,causes,precedes, etc. — exactly the 17 predicates currently in theen_core_cognition_v1pack, applied only to concepts ratified in step 2. -
Composed relations. Chains that reuse step-3 predicates (
A causes B AND B entails C ⇒ A licenses C). These exercisecompose_relationsand the realizer's chain-handling — the work that lifted the discourse_paragraph lane from 68.8% → 100%. -
Domain expansion. Pick one commercial domain and run the full 1→4 progression inside that domain before opening a second domain. Cross-domain triples come last and only after both domains have ratified their own internal DAG.
The failure mode this rule prevents: a triple lands whose tail concept is "scheduled for next week" — ratify.py G3 fails, the course is rejected, and you've wasted the LLM mining cost on a course that can't be promoted.
What "elementary → college" gets right and wrong
Right: Build simple before composed. Anchor before extend. Teach parent_of before grandparent_of, then ancestor_of. Teach red and crimson before red is_a color and crimson is_a red.
Wrong: Don't import a K–12 ELA corpus. Most of that material is generated content (essays, stories, vocabulary lists) — the proposition graphs are mostly implicit, the relations are mostly stylistic, and the ratification gates will reject the bulk of it. CORE doesn't need stories; it needs ratified relations. A 200-triple curated kinship lane gets you further than 200,000 lines of children's literature.
The right "elementary" for CORE is the smallest closed set of primitives that exercises every gate end-to-end. That's the kinship + color + spatial + uncertainty + modal mix already prototyped in evals/identity_divergence/curriculum/teaching.jsonl.
Where the curriculum platform lives today
| Artifact | Path | Role |
|---|---|---|
| Shared 93-event teaching corpus | evals/identity_divergence/curriculum/teaching.jsonl |
Reference curriculum for identity-divergence lane |
| Curriculum generator | scripts/generate_identity_curriculum.py |
Produces teaching events across kinship / color / spatial / logical / uncertainty / modal domains |
| Axis profiles | evals/identity_divergence/axes/{axis_a,axis_b}.yaml |
Precision-first vs Generosity-first identity profiles |
| Lane contract | evals/identity_divergence/contract.md |
What the lane measures, scoring rubric, pass thresholds |
| Lane runner | evals/identity_divergence/runner.py |
Deterministic scorer |
| First course template | formation/templates/definition.py |
"Every relation = definitional edge" Course YAML template |
| Pack-template artifact | packs/common/anchors/trilingual-anchor-template.json |
Trilingual anchor template (separate concern from formation/templates/) |
Known gap (as of 2026-05-17): the identity-divergence curriculum predates the formation pipeline. Its triples currently flow through runner.py, not through Forge → Compose → Ratify → Promote. Routing existing curriculum events through the formation gates is a closing item — see formation_pipeline_plan.md.
Decision rule for "what to teach next"
Before adding any course to the queue, answer:
- Are all
headandtailconcepts in this course already inMasteredCoursesIndexor earlier in this batch? - Does the course's template type exist? (Today: only
definition. Composed-relation, procedural, falsification, and identity-anchor templates are not yet implemented.) - Is at least one identity-override probe present?
- Would
ratify.py's six gates (G1–G6) succeed against this material?
If any answer is no, the course is out of order. Move it later in the queue, or add the missing prerequisite course first.