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-3179Done

(motir-meta) The design gate's NON-SELF limb — `(b) the type: design subtask` may not resolve to the card under test (`plan-rules/kind-leaf.md`)

Repo — motir-meta. ONE PR. targetRepo IS motir-meta, so this PR is the card's deliverable: carry MOTIR-<n> in the branch (docs/MOTIR-<n>-<slug>) and the PR title, per run.md's PR-title ↔ status-sync rule as narrowed 2026-08-10. The mirror half is the (motir-ai) card blocked_by this one; the DETECTOR half is the (motir-core) card, independent of both.

The prose half of planning bug MOTIR-3158, filed by motir run MOTIR-3158, 2026-08-19.

The gap

plan-rules/kind-leaf.md's PLANNING-TIME DESIGN GATE (no exceptions) — verified on origin/main 6948fac, the bullet opening at kind-leaf.md:108 — reads:

"Every UI-touching subtask you plan — type: code as much as type: design — MUST be linked, at PLAN time, to BOTH (a) the original design asset … and (b) the type: design subtask that produced (or will produce) it."

On a card that draws its own design, (b) resolves to the card itself. Read literally the requirement is met; read for its purpose it is inverted — the drawing and the files written to match it arrive in one pull request, approved by one click, which is Principle #13 (design before code, within every Story) exactly backwards.

That is not a hypothetical reading. MOTIR-3154 was sealed as a childless leaf with criterion 1 a design/ai-planning/ three-file amendment and criteria 4–5 the UI built against it; readiness.ready was true, validate_work_item valid: true, and claim_next_ready would have handed it out. Half of that drawing re-opened a decision Story MOTIR-1775 had made deliberately and in writing.

The rule was read and agreed with. The card's own gate-9 disposition said the correct shape out loud — "the re-shape is acceptance criterion 1 … and it is this card's first child, with the code criteria behind it" — and the card had no children. What was missing was not the rule; it was any reading of it that excludes the card under test.

The edit

ONE limb, appended to the design-gate bullet in plan-rules/kind-leaf.md (do not open a new section — this belongs where the gate is stated, so the two cannot be read apart):

  • (b) MAY NOT RESOLVE TO THE CARD ITSELF. When a rule names ANOTHER card as a prerequisite, the check is that the other card is other. A gate whose requirement can be satisfied by the card under test is not a gate.
  • And run the criterion-by-criterion sweep on the DESIGN axis, not only the repo axis. Gate 1 already says go criterion by criterion and name the repo each one is discharged in; two repos in that column is a split. Point the same method at design and name what each criterion PRODUCES: if one column says a design asset (a design/<area>/ path, a *.mock.html, a design-notes.md, a .pen, a three-file set) and another says a rendered surface, the design criterion is a CHILD, not a criterion — and the code criteria are blocked_by it.
  • Cross-reference the sibling limb already in this file — "a card that declares its own split in prose has not split — THE SENTENCE IS THE SPLIT INSTRUCTION" (kind-leaf.md:41) — because this is that failure landing on the design axis rather than the repo axis, and a reader who has met one should be sent to the other.

Follow the pack's existing form exactly: the limb takes a > **Warrant:** line naming MOTIR-3154 · 2026-08-19 · a childless leaf whose criterion 1 drew the design its criteria 4–5 built against · ×1 and a > → [fixtures/kind-leaf.md#…] pointer, with the matching fixture section added to prompts/plan-rules/fixtures/kind-leaf.md (three warrants there today, at kind-leaf.md:43/59/71, each with a fixture anchor).

Do NOT restate the detector. The (motir-core) sibling mechanizes this composition as a likely-self-blocking-design advisory; run.md's own guard-#4 block warns that "writing prose to duplicate a check that already runs is the exact inversion notes.html #219 records." This limb states the RULE — that (b) must be another card — and says the product reports the composition; it does not describe the algorithm.

run.md needs NO edit, verified. MOTIR-3158 carried a criterion asking guard #4 to read the new advisory at dispatch time. MOTIR-2878's W1 merged as ab9dac8 and already did that generically — "THE FAMILY LIST IS NOT THE TEST — the QUESTION is… An entry whose family you do not recognise is disposed of on that question and named in the report — never skipped for being off a list." Adding a fourth name to that list would work against the paragraph's own instruction. Recorded here so the next reader does not re-derive the edit.

Acceptance criteria

  1. prompts/plan-rules/kind-leaf.md's design-gate bullet carries the NON-SELF limb: (b) may not resolve to the card under test, stated as a rule and not as a description of the detector.
  2. The same limb carries the DESIGN-axis criterion sweep — name what each criterion PRODUCES; a design-asset column plus a rendered-surface column means the design criterion is a child.
  3. The limb carries a > **Warrant:** line and a > → [fixtures/kind-leaf.md#…] pointer in the pack's existing form, and the matching section exists in prompts/plan-rules/fixtures/kind-leaf.md.
  4. The limb cross-references the prose-split-not-performed rule already in this file, naming it as the same failure on a different axis.
  5. run.md is NOT edited, and this card's body says why.
  6. git grep -n 'may not resolve to the card' prompts/plan-rules/kind-leaf.md returns the limb — the one-command check that the edit landed where it was scoped.

Context refs

  • MOTIR-3158 — the planning-bug record, with the full evidence and the advisory-vs-blocking decision.
  • MOTIR-3154 — the instance. Its body has since been re-scoped; notes.html #329 is the durable account.
  • prompts/plan-rules/kind-leaf.md :41 (prose-split-not-performed) and :108 (the design gate) — both read on origin/main 6948fac.
  • prompts/plan-rules/fixtures/kind-leaf.md — the three existing fixture sections to match.
  • prompts/plan-rules/core.md gate 1 — the criterion-by-criterion method this limb points at a second axis; gate 5 (design linked) — the checklist line this limb qualifies.
  • MOTIR-2878 (done, ab9dac8) — W1, which is why run.md needs no edit.