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-4170To Do

Planning bug: a card told a second repository to MIRROR a mechanism the first repository retired nineteen hours later — "mirror X" is a claim about another repo's current shape, and nothing re-checks it

Found while running MOTIR-4112 under motir run MOTIR-3877, 2026-09-02. The correction is already applied — the lane shipped without the retired half, and the card is amended on the record. This is the telemetry.

What happened, with the clock

momentevent
2026-09-01T19:40:19ZMOTIR-4112 authored. It asks for "an acceptance-video workflow mirroring motir-core's .github/workflows/acceptance-video.yml and its .github/actions/upload-acceptance-video composite, publishing through POST /api/work-items/{id}/acceptance-evidence with an upload token", and lists both by path under Context refs.
2026-09-02T14:20:55Zmotir-core bb56e595a (#2517, MOTIR-4096) DELETES both, plus scripts/upload-acceptance-video.mjs, the job's id-token: write grant and its MOTIR_UPLOAD_TOKEN reference.
2026-09-02T16:0xThe run reaches the card, ls finds neither file, and git log --diff-filter=D dates the deletion.

Nineteen hours between the card and the deletion; two hours between the deletion and the run.

Why building it anyway would have been worse than a wasted hour

docs/decisions/acceptance-video.md's amendment of 2026-09-02 does not merely relocate the uploader. It decides "CI NO LONGER UPLOADS THE RECORDING. THE AGENT PUBLISHES IT, over the Motir MCP surface", and retires the credential with the mechanism, on the stated ground that "a credential with no consumer is one nobody thinks about when deciding whether to rotate it."

So a faithful execution of the card would have created a MOTIR_UPLOAD_TOKEN in a second repository the day after it was deleted from the first — a live credential, in a repository whose CI deploys the public website, existing only to feed a mechanism the product had just decided against. And it would have read as diligence: the card asked for it by path.

The same amendment names the precedent that settles it: nextjs-prisma-vercel-starter carries its own copy of the lane and the Action, and MOTIR-4097 follows there — the disposition for a repository that would carry the copy is RETIRE, not mirror.

The takeaway, which is not "the card was stale"

Staleness is the symptom. The defect is a class of instruction that is a claim about another repository's CURRENT shape, and that nothing re-checks:

"mirror X" · "the same shape as Y" · "copy the pattern in Z" · "as <repo> does it"

A card citing a FILE in its own repository is checked by the compiler, the test suite and the reviewer's diff. A card citing a file in ANOTHER repository is checked by nobody: the referenced repository moves on its own schedule, no guard spans the pair, and the advisory channel cannot see across a repository boundary either — validate_work_item returned no advisory at all for MOTIR-4112, because subsumption keys on a merged pull request touching this card's paths, and the pull request that falsified this card touched paths in a different repository.

And the cost is asymmetric. A stale reference to something that still EXISTS is caught the moment it is opened. A reference to something that has been DELETED is caught immediately too — an ls fails. The dangerous middle case is the one here: the artefact is gone and a reasonable agent could rebuild it from the description, so the card is executable and wrong.

Acceptance criteria

  • motir-meta's plan-rules/ carries the corollary, placed with the existing cross-repository rules rather than as a new pack: an instruction to MIRROR, COPY or FOLLOW a named artefact in another repository is a claim about that repository's current shape — the running agent verifies the artefact still exists AND that no decision record has superseded it, before building to it; when it has gone, the disposition is the deciding record's, not a rebuild.
  • The rule names the cheap check that would have caught it: git log --diff-filter=D -- <the named path> in the cited repository, and a read of the decision record the card also cites.
  • It records why no automated channel covers this: the prior-art advisory keys on merged pull requests touching THIS card's paths, so it is structurally blind across a repository boundary.
  • This card is cited as the fixture.

Context refs

  • motir-core bb56e595a — the deletion, and docs/decisions/acceptance-video.md's amendment of 2026-09-02 that decides it
  • motir-marketing/playwright.config.ts — where the corrected disposition is written down, on branch parent/MOTIR-3877-public-project-pages
  • motir-meta/prompts/run.md — the done design blocker that merged AFTER the card rule, which is this shape one repository narrower and is where the corollary belongs beside
  • motir-meta/prompts/plan-rules/core.md — the cross-repository gates