MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-3690

Planning bug: a diagnosed defect was recorded ONLY inside another card's body — "this paragraph is currently the only record" — and then ran unnoticed for 23 days

Done
Description

Found while running MOTIR-3606, which is the card that had to be filed 23 days late because of this.

The defect

A run diagnosed a real product defect completely and correctly, named both viable fixes, wrote it into the body of the card it was working on, and did not file it. The paragraph says so in its own words.

Quoted verbatim from MOTIR-2045's descriptionMd, written 2026-08-04:

⚠️ OPEN, UNFILED CONSEQUENCE. system.daily-health-check runs retryPolicy: 'none', so it now fails and dead-letters on every daily tick, with a message directing the operator to suspect a garbage-collected mirror — the wrong cause. Before this card it was silently not_applicable (green). A fix belongs in the probe: either an authenticated path for registry.fly.io (the token is already in the environment) or a fourth verdict for "this registry cannot be probed anonymously", so a private-by-design mirror stops reading as a refusal. No bug card was filed for it — deferred by decision on 2026-08-04 so MOTIR-1963 was not gated on a code change unrelated to whether indexing works. This paragraph is currently the only record of the defect.

That card also carries the measurement — the Basic-vs-Bearer table, and the nonexistent-repo control proving the verdict carries no information — in a section titled Recorded deviation.

What it cost

system.daily-health-check dead-lettered at 09:00 every day from 2026-08-04 to 2026-08-26, 23 consecutive days. It was found by accident on 2026-08-26, when MOTIR-3475's cutover reproduced the failure on the new engine and someone read the row. The whole job-substrate migration (MOTIR-3463, MOTIR-3475) ran with its liveness detector face-down.

The fix that shipped on MOTIR-3606 is the first of the two options that paragraph named, unchanged. Nothing was learned in 23 days that was not already written down on day one.

Why the deferral itself was defensible and the outcome still wrong

The decision not to gate MOTIR-1963 on an unrelated code change was correct — that is exactly what filing a card instead of fixing in place is FOR. What went wrong is that the deferral produced prose instead of a card. The two look identical at the moment of writing (both are a paragraph you type) and are opposite in kind: a card is in a ready set, is searchable, has a status, and can be picked up by anyone; a paragraph inside a done card's body is read by whoever opens that card, which after it goes done is nobody.

The tell is grep-able and is in the text itself: a card body containing "no bug card was filed", "unfiled", "this paragraph is currently the only record", "deferred by decision", or "OPEN" as a heading. Each of those is a run announcing that it has created an untracked obligation. plan-rules/core.md's a deferral is a card rule already covers the shape; what it does not do is fire on a motir run writing a deviation into a card it is completing.

Acceptance criteria

  • run.md states that a RECORDED DEVIATION naming an open defect is a bug to FILE, not a paragraph — and that the discriminator is whether the text describes something that will still be true after this card is done. A run already files bugs directly (log-bug.md); this is the one class it was writing into prose instead.
  • The rule names the tell in the words a run actually writes: "no card was filed", "unfiled", "the only record", "deferred by decision".
  • It says explicitly that deferring the FIX is right and deferring the CARD is not — otherwise it reads as a ban on deferral, which would push the next run to absorb an unrelated code change into a manual card, and the deferral on MOTIR-2045 was correct.
  • The fixture is cited by key and date, with the 23-day cost, so a later reader can weigh the rule against what it prevented.
  • A LESSON is written to the store for the same takeaway, scoped by the strip-the-identifiers test.

Context refs

  • MOTIR-2045 — the card whose body carries the whole diagnosis and the sentence admitting it was never filed.
  • MOTIR-3606 — the card that eventually filed it, 23 days later, and shipped option one of the two the paragraph named.
  • MOTIR-2030 — added the indexer preflight as a twin of the GHCR one without accounting for the mirror's auth scheme; the origin of the defect itself.
  • motir-meta/prompts/run.md — the build/serve rules; plan-rules/core.md's a deferral is a card.