A record card. The defect is in the PLAN, not in the product; it was corrected in the 2026-08-11 re-plan of MOTIR-2588 and this card exists so the corpus keeps the lesson.
MOTIR-2588 (2026-08-10) asserted, in its body and in its verification recipe, that lib/api/v1/projects/schema.ts publishes avatarIcon and avatarColor:
"it reaches further than a settings field usually does: 36 files name it, including …
lib/api/v1/projects/schema.ts, the versioned public API" "GET /api/v1/projects/{key}still returnsavatarIconandavatarColor(the window has not closed)"
Its decision child MOTIR-2589 then built an entire question on it — "what does a versioned API do when a published field stops meaning anything?" — with three costed options (keep and deprecate; keep and null; mint /api/v2), a recommendation, a quoted obligation from docs/decisions/public-api-conventions.md, an instruction to name when the window closes and who closes it, and a required follow-up card to drop the columns after that window.
On origin/main, that file names those two fields exactly once, inside the comment block headed "What is deliberately NOT here, and why":
"
avatarIcon/avatarColor— keys into Motir's own preset registry (lib/projects/avatar.ts). They are meaningless to a client that is not rendering Motir's UI, and publishing them would make that registry's key space public API."
projectSchema carries key, name, accessLevel, archived. Nothing else. git show origin/main:lib/api/v1/projects/schema.ts | grep -n avatar returns the comment and nothing more.
So there was no promise, no deprecation channel, no window, and no post-window migration — and the column drop, which had been deferred to that imaginary window, is simply a card in the story (MOTIR-2680).
The claim was produced by the standard discharge for a referrer sweep — grep -rl avatarIcon over the repo — and lib/api/v1/projects/schema.ts is a genuine hit. A file-level grep cannot distinguish a field that is published from a field a comment explains is not published, and the second reads as the first when only the filename survives into the card. The file's own name (api/v1/.../schema.ts) then supplies a confident interpretation the reader never had to check.
That makes this a specific instance of the claim-vs-pointer gate in plan-rules/phase-deepen.md, in an unusual direction: the context ref was a genuine POINTER, and the CLAIM was assembled from the pointer's path rather than from its contents. The existing rule fires on an annotation that explains a file's contents; here nothing was annotated — the inference lived in the story's prose, one section away.
The cheap discharge, and it is the one the rule already prescribes: a grep that reaches a schema file is not evidence about a schema until the SYMBOL is read. grep -l locates; only opening the match decides. One command settled this after the fact and would have settled it before.
The cost had it not been caught: an ADR recording a deprecation obligation Motir never had, a window with a date and an owner, a follow-up migration card sitting for the length of that window, and — the expensive half — a false precedent, because the next person to remove a project field would have found a written example saying that internal columns are covered by the public-API stability promise.
No product change. The story and its decision card were re-authored on 2026-08-11: the question is recorded as withdrawn in MOTIR-2589's acceptance criteria (the ADR must state that the fields were never published, quoting the schema comment), and MOTIR-2680 drops the columns inside the story. This card closes when the corresponding notes.html lesson is recorded in motir-meta.
A second, smaller inaccuracy from the same sweep, recorded here rather than as its own card: the story listed the command palette among the render sites of ProjectAvatar. AppCommandPalette.tsx imports no avatar component; the three app-command-palette-* test files name avatarIcon only inside ProjectDTO fixtures. Same shape — a file-level grep hit read as a render site.
lib/api/v1/projects/schema.ts — the comment block and projectSchema.docs/decisions/public-api-conventions.md §8 — the obligation that was invoked and does not apply.motir-meta/prompts/plan-rules/phase-deepen.md — the claim-vs-pointer gate and its asserted-absence limb.