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

PLANNING BUG — a re-measurement named the card it invalidated, by key, and amended the doc instead of the card

Done
Description

Record + one outstanding obligation. Filed by the motir run MOTIR-2528 of 2026-08-10 that could not build the card it claimed. Lesson: notes.html #251.

The defect

MOTIR-2527's run re-measured the suite, discovered Finding 4 — that the membership gate had been masking a second layer of unbound tenant-table reads — and discharged that discovery in two of the three places it needed to go:

  1. ✅ It wrote the finding into docs/rls-runtime-role-inventory.md, in full, with counts.
  2. ✅ It filed the successor card, MOTIR-2569, for the application-read layer.
  3. ❌ It did not touch the card the finding invalidated. MOTIR-2528 kept its pre-2527 premise, kept acceptance criteria that its own Scope BOUNDARY forbids it from satisfying, and — the load-bearing part — got no blocked_by edge to MOTIR-2569. So it sat status: todo, readiness.ready: true, openBlockers: [], validate_work_itemvalid: true, advisories: [], and was claimed by the next motir run exactly as if the finding had never been made.

The tell was as loud as a tell gets. The doc the same run wrote contains the sentence:

"The claim that flipping TEST_DB_APP_ROLE to the default is blocked only on fixtures (MOTIR-2528) is no longer accurate: it is blocked on the application reads above as well."

The invalidated card is named there by key, adjacent to the words "is no longer accurate". Nothing had to be inferred, searched for, or remembered.

Why no existing gate caught it

This is the sweep-the-referrers corollary (plan-rules.md gate 8) in a domain the rule does not name. Its design limb fires when "authoring a design asset that ALLOCATES elements between cards" — and the discharge it prescribes is exactly right here: grep the artifact you just wrote for every MOTIR-<n> it names, answer GIVES or TAKES for each, update_work_item every TAKES in the SAME pass. But a measurement / research document is not a design asset, so no clause pointed at it, and the run had no reason to re-read its own doc as a source of card edits.

It is also the notes.html #204 family — a dependency recorded in a field nothing acts on. Here the field is worse than relates_to: it is a paragraph in a Markdown file in the repo, which no plan mechanism reads at all.

Fix applied (this run)

  • link_work_items MOTIR-2528 blocked_by MOTIR-2569.
  • transition_status MOTIR-2528Blocked.
  • update_work_item MOTIR-2528 — both bodies amended on the record, with the superseded claims quoted rather than deleted, and the three verified defects stated with their origin/main evidence.
  • storyPoints 8 → 13 (the split marker), estimateMinutes 150 → 600, both flagged provisional.

Outstanding — the one thing this card still owes

MOTIR-2528 must be SPLIT before it is next dispatched, and this card owns that split. It is deliberately not done yet: part of what fails under TEST_DB_APP_ROLE=1 today is application code that MOTIR-2569 will fix, so any partition authored now would size batches against failures that are about to disappear, and would manufacture cards with no work in them. The split is therefore blocked_by MOTIR-2569 by construction, and the edge — not this prose — is what enforces it.

Acceptance criteria

  • Once MOTIR-2569 is done and has re-run the four inventory batches, MOTIR-2528 is split into per-batch sibling cards under MOTIR-653, each ONE repo / ONE PR, each sized under the 1-hour agent-run ceiling, partitioned from the real paths (tests/integration/** 141 files · tests/ root 57 · tests/mcp 26 · tests/boards 21 · tests/jobs 19 · tests/github 17 · tests/ciFleet 13 · tests/projectRepos 12 · tests/ai 11 · long tail) — never from the inventory's batch names, which are vitest filter substrings and include three directories that do not exist.
  • The final TEST_DB_APP_ROLE flip is one named card, blocked_by every batch card.
  • Each new card is sealed under plan-rules.md's per-card gate checklist — gates 1, 4, 14 and 16 in particular.
  • notes.html #251 exists on origin/main and states the generalised rule: a research or measurement artifact that names a work item by key is a source of card edits, exactly as a design asset is.
  • MOTIR-2528 is either archived as superseded by the batch cards, or survives as one of them — decided at split time, not now.

Context refs

  • docs/rls-runtime-role-inventory.md — Finding 4 and the sentence quoted above.
  • plan-rules.md gate 8, design limb — the discharge that is correct here and whose trigger does not reach a measurement doc.
  • MOTIR-2538 — the sibling planning bug about a container that cannot finish its own PR; defect 3 is the same family.