Type: chore (record card — the correction is applied by the time this is filed) · Parent: MOTIR-1465 (the planner-bug home) · Filed about: Story MOTIR-2649 / Subtask MOTIR-2651 · Product defect it produced: MOTIR-2761.
MOTIR-2649 had to decide the SCOPE of a brand-new landing surface. It decided workspace-wide (cross-project), and argued it from a four-row table of external precedent — Jira "Your work", Linear Inbox, Plane Home, GitHub's 2026 home dashboard. The argument is careful, sourced, even cites a live Atlassian ticket. It is also answering the wrong question.
In all of those products the surface it cites sits ABOVE the project selector in the navigation. Its scope is cross-project because its placement is cross-project — the two are one decision, not two. Motir took the scope and left the placement to a different card, and MOTIR-2654 then put Home first in the project tier of the rail (SidebarNav.tsx:218, inside if (hasProject), above Dashboard / Issues / Ready / Boards / Backlog — every one of which resolves an active project), directly under the org › workspace › project switcher the shell renders on every authed page.
The shipped result: the project switcher does nothing on the page sign-in lands you on, and tests/e2e/home.spec.ts:229 asserts that as the contract.
The evidence was inside the plan's own output the whole time. MOTIR-2654 could not place the surface without inventing a second, duplicate Home nav row for the no-project state (SidebarNav.tsx:346-365), with a comment explaining that Home is exempt from the tier it was put in. And MOTIR-2653 could not render a row without reading a different workflow per project just to label its own statuses (app/(authed)/home/page.tsx:69-80). Two special cases, both authored without comment, both of them the surface paying rent on a boundary it should not have crossed. Neither fired a gate, because no gate reads a card's workarounds as evidence about its premise.
This is the first occurrence of the class, so per plan-rules/CORPUS-MAINTENANCE.md it is captured as a LESSON (notes.html), not a RULES-tier change — which is also why this card has no SHARED_PLANNING_RULES mirror sibling ([[planning-rule-has-two-homes]] applies to rules, and no rule is being added). If the class recurs, the rule limb belongs in plan-rules/phase-skeleton.md beside the precondition-verification rule, and it will then owe two homes.
getActiveProject() at the page, projectId narrowing in homeService; the repositories already take projectIds), the tests to invert, and the two open decisions the fix owes Yue (the no-project state, and whether a cross-project "my work" survives at a different nav tier).done and shipped; the correction is a new fix card, not an archive-and-recreate.notes.html entry, on a docs/ branch + PR per the motir-meta convention.motir-meta/notes.html carries a new .mistake entry for this class — what the plan missed, the lesson, and the prompt-hint — with the entry count bumped to match.SidebarNav.tsx, and the two workarounds (the duplicate nav row, the per-project workflow read) as the observable tell.plan-rules/ and therefore names no SHARED_PLANNING_RULES mirror.todo → in_progress → in_review → done) — a motir-meta PR carries no MOTIR id, so no status sync flips it.motir-core: app/(authed)/_components/SidebarNav.tsx (both Home rows) · app/(authed)/_components/ProjectTier.tsx · app/(authed)/home/page.tsx · lib/services/homeService.ts · tests/e2e/home.spec.ts:229motir-meta: notes.html · prompts/plan-rules/CORPUS-MAINTENANCE.md (LESSON vs RULE) · prompts/plan-rules/phase-skeleton.md (where a rule limb would go on recurrence)