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-3174

Planning bug: a card's "Read and deliberately LEFT" section states a COMPLETENESS claim ("every other literal was read") that a re-run falsifies — a false absence the next card inherits

Done
Description

Type · planning defect (a false completeness claim in a card body) · Found in · motir run MOTIR-3171, 2026-08-19, at guard #4's verify-the-claim step, against origin/main @ 3ac12626. The run was NOT blocked — the card's scope, sizing, repo pin, criteria and edges were all correct, and it shipped. What is wrong is one paragraph, and the paragraph is the kind a later reader trusts.

⚠️ The LESSON half is already written — this card is the RULES half only. The filing run wrote notes.html #334 in the same pass (motir-meta PR #272), because a planning bug owes both the card and the lesson and neither substitutes for the other. So the deliverable here is the plan-rules/ change and nothing else; do not re-write the notes entry.

The claim, and what falsifies it

MOTIR-3171 carries a section headed "Read and deliberately LEFT — not oversights", opening:

Every other /dashboard literal under app/ was read, and each stays:

It then names nine sites. One command over the tree the claim is about:

$ git grep -n "'/dashboard'\|\"/dashboard\"\|href=\"/dashboard" -- app components lib packages | wc -l
30

Two gaps, of different kinds:

  1. Scope. The claim is bounded to app/, and components/onboarding/DiscoveryOnboarding.tsx:47 holds a third /dashboard home constant — under a comment reading "the app's default authed landing (the sign-in/sign-up callback target)", which both credential flows falsify (sign-in/page.tsx:78, sign-up/page.tsx:80 both default to /home). Filed as MOTIR-3173.
  2. Coverage inside the stated scope. Within app/ the section enumerates 9 hits of ~25. Unnamed: the backHref="/dashboard" NoAccessState fallbacks on items, items/archived, boards, filters, roadmap, plans and planning, plus settings/organization/page.tsx:61 and members/page.tsx:55. Every one of them IS covered by the card's stated reasoning (refusal states labelled "Back to projects", not the back affordance) — so the disposition was right and only the enumeration was partial. That is what makes the sentence hard to catch: it is wrong in a way that changes no decision the card made.

Why it is worth a RULE and not only a lesson

notes.html #283 is the general form: a confirmable-looking absence is the expensive failure mode, because an absence is the one finding that licenses building something — or, here, licenses NOT looking. "Every other literal was read" reads as a discharged sweep, so the next card touching this concept has a documented reason to skip re-running it, and the third stale constant survives another cycle. It has now survived three (MOTIR-2921MOTIR-3171MOTIR-3173).

notes.html #300 already carries the positive rule this instance breaks — enumerate by destination, read each hit in place, and record the ones you leave — and MOTIR-3171 followed its FIRST half (it did enumerate by destination, and it did read the hits it named in place). What #300 does not say, and what this instance adds, is that the RECORD of a sweep is itself a claim with a scope, and the scope has to be stated or the record over-promises. "Every other literal under app/" is a different sentence from "the nine sites this card judged, listed below", and only the second is true.

That is a standing "in situation X, do Y" check on every sweep a planner records — three occurrences and a mechanism, not one incident — which is what promotes it from the LESSON tier (notes.html, done) to the RULES tier (plan-rules/, this card). See plan-rules/CORPUS-MAINTENANCE.md § RULES vs LESSONS.

Acceptance criteria

  1. motir-meta/prompts/plan-rules/op-replan.md's sweep-the-referrers corollary carries a limb on the RECORD half: a card that enumerates what it deliberately left must state the exact search that produced the list (the command and its paths), or phrase the list as the sites this card judged rather than every site. A completeness claim in a card body is a claim the next reader will not re-derive.
  2. The limb names its own trigger in grep-able form — the quantifiers (every, all, each, the only, none) that make a prose sentence a set-claim — and this instance as its fixture, citing notes.html #334 rather than restating it.
  3. plan-rules/ASSIGNMENT.md / MANIFEST.md are updated if and only if the new limb changes what those files route or attribute; if neither does, say so on the card rather than editing them.
  4. Ordering: every criterion reads on this card's own diff, pre-merge. Nothing blocks it — prompts/plan-rules/op-replan.md is on motir-meta's origin/main today, and neither MOTIR-3171 nor MOTIR-3173 (both motir-core) touches it. notes.html #334 is already merged or in review as PR #272, so criterion 2's citation target exists independently of this card.

Context refs

  • MOTIR-3171 § Read and deliberately LEFT — the claim, and the run's correcting comment on it · MOTIR-3173 — the defect it missed
  • motir-meta/prompts/plan-rules/op-replan.md (the sweep-the-referrers corollary) · motir-meta/prompts/plan-rules/CORPUS-MAINTENANCE.md § RULES vs LESSONS
  • motir-meta/notes.html #334 (this instance, written), #283 (a false absence), #300 (enumerate by destination, read each hit in place)