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

PLANNING BUG — measured a stale design asset file-by-file inside the right folder, and the surface had three mocks, so the card's own grep would have returned 0 with 17 sites still stale

Filed by the motir run of MOTIR-2500, against the pass that authored it. No code deliverable — the deliverable is the RULE + the LESSON. See MOTIR-2500's run-time amendment for the full measurement.

What happened

MOTIR-2493 fixed the shipped /backlog row composition and correctly filed the stale design asset as its own card, because a design/** diff cannot ride a subtask/* branch. That much was right, and the split was well-reasoned.

The card then measured the defect in exactly two filesdesign/backlog/backlog.mock.html (22 grep hits) and design/backlog/design-notes.md (two prose sites) — and wrote its first acceptance criterion as a grep pinned to one of them:

grep -c 'role="row"' design/backlog/backlog.mock.html returns 0

design/backlog/ contains three *.mock.html files, and all three draw the same ranked rows:

file<div role="row"> elementsin the card?
backlog.mock.html21yes
backlog-filter.mock.html9no
backlog-scale.mock.html8no

38 row elements, of which the card could see 21. None had a legal parent — the folder contains no grid, rowgroup, gridcell, table or treegrid anywhere — so every one of them was the same aria-required-parent violation, equally ready to be copied into code by the next agent that trusted the asset.

Why this one is worth logging

The failure mode is that the card would have passed. Fix backlog.mock.html alone and AC 1's grep returns 0, the design-guard lane goes green, the PR reads as a complete fix, and 17 stale sites remain in the folder the design-reference rule sends the next agent to open first. That is the same shape as notes.html #215 (a migration that moved one of two callers): the straggler now sits on a path nobody maintains, and it reads as done from every angle the plan can see.

It is also not the mistake notes.html #234 already covers. #234's lesson is "put design/<area>/ in the file set you grep" — a sweep that never looked at design/ at all. This pass DID look at design/backlog/. It opened the right folder, greped the right string, and still missed two thirds of the sites, because it treated the area as a FILE rather than as a SET. A rule that says "remember design assets" does not reach it; the gap is one level finer.

The tell was visible without any extra work: design-notes.md's own surface table — the first thing in the file — lists all three mocks by name, with backlog-filter.mock.html described as "EXTENDS the backlog surface" and backlog-scale.mock.html as "the large-backlog shape". Two entries that say, in the asset's own words, these draw the same rows. The card cited that file, quoted two lines from it, and did not read its index.

The deliverables (both, per a RULE has TWO homes)

  • A notes.html LESSON — the incident above, with the prompt-engineering hint: when a card's acceptance criterion is a grep, the PATH in that grep is the claim. Scope it to the directory that owns the concept, not the file you happened to open — and if the folder is a design area, read its design-notes.md surface table first, because it enumerates the sibling mocks for you.
  • A plan-rules.md RULE amendment — extend gate 8's sweep-the-referrers corollary with a design-area limb: an asset set is a FOLDER. A surface's panels are routinely split across sibling *.mock.html files (main / at-scale / filtered / empty), so a per-FILE measurement of an asset defect is incomplete by construction. Measure with grep -rc over design/<area>/, list every file that hits in the card, and give each one the two options gate 8 already allows — this card's scope, or a named sibling — with no third.

Acceptance criteria

  • motir-meta/notes.html carries a new .mistake entry matching the existing markup, with the count bumped, capturing: what was measured, the three-file reality, why the card would have passed anyway, and how it differs from #234.
  • motir-meta/prompts/plan-rules.md gate 8 carries the design-area limb above, stated so it fires at AUTHORING time (when the grep is written), not only at run time.
  • The rule names the concrete check — grep -rc '<pattern>' design/<area>/ plus reading that area's design-notes.md surface table — rather than a general exhortation to be thorough.
  • Lands as a branch + PR against motir-meta, with no MOTIR-<n> in the branch name or PR title (the motir-meta sync carve-out); this card's key goes in the PR BODY.

Context refs

  • MOTIR-2500 — the card, and its run-time amendment carrying the corrected measurement.
  • motir-meta/prompts/plan-rules.md — gate 8, the sweep-the-referrers corollary and its migration limb.
  • motir-meta/notes.html — entry #234 (the ADR rename that never greped design/), the nearest existing lesson and the one this refines.
  • design/backlog/design-notes.md — the surface table at the top that names all three mocks.