kind-leaf / kind-bug — lesson rows, the mirror, and both baselines
The motir-ai half of the leaf-kinds family: the migrated kind-leaf and kind-bug limbs become lesson rows, the restated wording reaches SHARED_PLANNING_RULES, and the baselines move with it.
⚠️ OWNERSHIP IS BY SOURCE PACK, NOT BY THE MIRROR'S PACK TAG. The two homes disagree about which pack owns a rule — the claim-vs-pointer gate is gate 2 of core.md in the source and sits under phase-deepen in CORPUS_ORDER. So do not select segments by reading CORPUS_ORDER for 'kind-leaf' and 'kind-bug'. Probe the constant for the restated text of each unit the source card touched, and edit whatever segment carries it, keeping its existing pack tag and position. Two segments to check explicitly: A_BUG_IS_PARENTED_BY_ITS_FINDING_STORY and NO_CRITERION_RESTS_ON_ONE_MECHANISM are tagged kind-bug; PLAN_ALL_SUBTASK_TYPES_AND_COMPOSITION and THE_ESTIMATION_GATE are tagged kind-leaf but their source text may live in kind-story.md and kind-leaf-deepen.md — where it does, that segment belongs to the sibling card that restated it, and the PR body says so rather than editing it here.
Lesson rows and the mirror in one PR. For each migrate row in RESTATEMENT.md's kind-leaf and kind-bug sections, add a BASE_LESSONS row or record a MERGED line naming the covering row's sourceRef. The bug-parenting family is a strong candidate for kinds: ['bug'] on the routing axes; the repo-claim family is not — it fires on every leaf kind and should constrain only phases.
Same two constraints as every lesson card in this story: no new sourceRef may carry a #N above CORPUS_HEAD = 356 (the notes.html corpus is frozen; a post-freeze limb takes a sourceRef with no #N), and title / body / howToApply may name no repository, file, symbol, card key or date. Run pnpm lessons:generate-migration and commit the emitted delta.
Then the mirror: refresh sharedPlanningRules.baseline.txt and read its diff; delete any planningRulePacks.test.ts assertion pinning a migrated phrase, each named against its table row; refresh planningRuleRouting.baseline.txt if a segment title moved; and refresh the register ceiling DOWNWARD so the ratchet tightens rather than preserving the headroom this card creates.
blocked_by the previous link in the motir-ai chain as well as its own source card, because both refresh the same whole-constant length fixture.
Acceptance criteria
- Every migrate row in
RESTATEMENT.md'skind-leafandkind-bugsections has a disposition here: a newBASE_LESSONSrow or a MERGED line with its coveringsourceRefand reason. - The PR body lists the mirror segments this card edited, each with the source unit it carries and the pack tag it kept, plus any segment it deliberately left to a sibling and why.
- No new
sourceRefcarries a#Nabove 356;CORPUS_HEADis unchanged; the totality, uniqueness, generic-rewrite and date guards pass unweakened. pnpm lessons:generate-migrationis run and its delta migration committed; the PR body names the directory and row count.- Every migrated phrase probes to zero in the composed constant, and no segment changes its pack tag or its position in
CORPUS_ORDER. sharedPlanningRules.baseline.txtrefreshed with removed-word and added-word counts reported;registerCeiling.jsonrefreshed with the ceiling FALLING and before/after figures quoted;planningRuleRouting.baseline.txtrefreshed or explicitly reported unaffected.- Every
planningRulePacks.test.tsassertion pinning a migrated phrase is deleted and named against its table row; none is weakened to pass. pnpm typecheck,pnpm format:checkandpnpm testare green.- No file outside
motir-aiis changed.
Context refs
motir-aisrc/llm/planningRulePacks.ts—CORPUS_ORDERand the four candidate segments.motir-aisrc/seed/lessons.base.ts·tests/lessonsBaseSeed.test.ts·scripts/generate-lessons-migration.ts.motir-aitests/planningRuleConservation.test.ts·planningRuleRegister.test.ts·planningRulePacks.test.ts·planningRuleRouting.test.ts, and the threescripts/refresh-*.ts.motir-metaprompts/plan-rules/RESTATEMENT.md·kind-leaf.md·kind-bug.md— read-only inputs.- MOTIR-3310 — the proof card, and the source of the text-probe instruction.