Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-4087To Do

(motir-ai) Retire the limb from the PACK and the SEEDED LESSON — one repo, two channels, and the lesson needs a migration

The product planner is taught the no-lift limb through two independent channels in this repo. Fixing one leaves the other teaching it.

  • The PACKsrc/llm/planningRulePacks.ts, DEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE (phase-lay).
  • The SEEDED GLOBAL LESSONsrc/seed/lessons.base.ts :235–236, which restates it in its own words: "Sometimes no lift is legal: the nearest common level is so high that the edge would say one whole area blocks another because one leaf needs one leaf; the container that would receive the edge is already blocked by the other side, so lifting makes a cycle; or only o[ne child needs it]…"

The lesson arrives by injection, selected by similarity, entirely independently of pack composition. A run that never loads phase-lay can still be told the limb.

⚠️ THE LESSON NEEDS A MIGRATION, NOT A SEED EDIT

run.md's rule for a global lesson is the seed row + a migration. Editing the seed changes what a NEW tenant gets; every existing tenant keeps the row it already has and keeps being taught the limb.

That is the half most likely to be skipped, because the diff looks complete without it and nothing goes red.

⚠️ THIS IS A DELETION, AND THE BASELINE MUST MOVE DELIBERATELY

tests/planningRuleConservation.test.ts exists to prove no rule was re-worded by accident. A deliberate removal has to move it in the same change, with the PR saying why — otherwise the guard either fails opaquely or gets edited as a chore.

Same for the standing ADD, never re-word convention on the corpora: it guards against drift, and this is a correction of a rule that instructs an invalid outcome. Name the exception rather than quietly taking it.

Acceptance criteria

  • grep -a finds no "no lift is legal", "cannot be lifted" or "wire the leaf edge" anywhere in src/. ⚠️ -a is required: plain grep returns nothing on planningRulePacks.ts regardless of content.
  • The pack states the invariant with NO exception — same-level siblings, cross-parent needs LIFTED, and the three former limb cases answered with what to do instead (restructure, fix the cycle, split the container). Removing the escape hatch must not leave the planner with no answer where it used to have one.
  • The seeded lesson is retired by MIGRATION. Asserted on a tenant that already holds the row: after migration it is no longer injected.
  • A NEW tenant never receives it. The seed no longer carries it — both arms, because the seed and the migration fix different populations.
  • The conservation baseline moves in this change, and the PR states that the move is a deliberate deletion rather than drift.
  • The composed-cost delta is stated for every cell that loads phase-lay.

Scope BOUNDARY

  • IN: the pack text, the seed row, the migration, the conservation baseline, the cost delta.
  • OUT: motir-meta's copy — a different planner, its own subtask under this bug. The two corpora are NOT mirrors.
  • OUT: the VALIDATOR. Whether container validity refuses a cross-parent leaf edge is MOTIR-4086's named follow-on, not this card.
  • OUT: the rest of the rule. The chain / fan / same-level shapes are correct and stay.

Context refs

⚠️ Use grep -a or the Read tool on src/llm/*.ts — plain grep is a false negative there.

  • motir-ai src/llm/planningRulePacks.tsDEPENDENCY_GRAPH_IS_THE_BUILD_SEQUENCE.
  • motir-ai src/seed/lessons.base.ts :235–236 — the lesson's own wording of the limb.
  • motir-ai tests/planningRuleConservation.test.ts — the baseline.
  • motir-ai tests/planningRuleRouting.test.ts — the cost harness.
  • motir-meta prompts/run.md — the global-lesson rule (seed row + migration).