Skip to content

moooon

Motir

Vibe your whole project. Bring an idea — Motir's three AI layers plan it, track it, and ship it, end to end. You're looking at Motir, built in Motir.

  • Vibe Project
  • Open Source
  • AI Agent
  • AI Loop
1
requests
0
upvotes
145
planned
1,361
shipped

Motir · Work items

MOTIR-4130Done

(motir-core) design/shell's rail assets draw 2 of the 6 rows the shipped bottom nav renders — Git, Legal, Job runs and Security are absent at all three widths

⚠️ AMENDED ON THE RECORD 2026-09-02 by motir run MOTIR-4130, which halted at guard #4 without writing to disk. Three things changed: the shipped-row enumeration was falsified and re-measured (three rows → six), the Settings clause was inverted and is withdrawn, and the toolchain question is answered. The card is Blocked on MOTIR-3909 — an edge its own dispositions section denied. The as-authored text is quoted verbatim in MOTIR-4163; this body is the corrected one. Sizing re-run against the true scope: 3 pts / 45 min → 5 pts / 70 min.

Found by motir run MOTIR-3909 while drawing MOTIR-4006's unconfigured rail arm (2026-09-01).

The measurement — RE-MEASURED 2026-09-02 at origin/main cd236496d, and identical at the card's own base 5fb216b21

Command: git show <ref>:'app/(authed)/_components/SidebarNav.tsx', reading the sections.push({ id: 'bottom' … }) block in declaration order. The rail's default (project) surface is two sections — primary and bottom; this card is about bottom.

#rowiconhrefrendered
1SettingsSettingsproject settings, else the settings homeconditional — showSettingsDoor
2SecurityShieldCheck/settings/workspace/securityconditional — workspaceTierRevealed
3Job runsListChecks/settings/workspace/jobsalways
4GitGitBranch/settings/workspace/githubalways
5DocsBookOpen/docsalways
6LegalScale/legalalways — changing, see below

⚠️ The original table claimed THREE rows (Git · Docs · Legal). That was a correct count of the wrong set — an inventory of rows whose provenance the author had in hand, not a reading of the section. All six were present at 5fb216b21, so this is not drift: the enumeration was wrong when written. Filed as MOTIR-4163.

⚠️ The Settings clause was INVERTED and is WITHDRAWN. The original read "a Settings row is drawn that the shipped bottom section does not carry in that position". Settings is the first entry of the shipped bottom section — so the assets drawing it are correct about that row, and the open question the card posed (whether a Settings row belongs in that section at all) has a settled answer: yes, first. Do not delete it.

What design/shell/ actually draws — re-counted 2026-09-02 over the .pen sources

Command: parse each .pen as JSON, walk to the Nav Section Bottom frame (Drawer Nav Bottom in the drawer), and list its children.

assetbottom-section rows drawnSettingsSecurityJob runsGitDocsLegal
desktop.pen2 — Nav Item Settings, Nav Item Docs0000
desktop-collapsed.pen2 icon-only — settings, book-open0000
mobile-drawer.pen2 — Nav Settings, Nav Docs0000

So the gap is FOUR undrawn rows, not twoSecurity, Job runs, Git, Legal — consistently at all three widths. Neither conditional row (Settings, Security) has its absent arm drawn anywhere either.

⚠️ BLOCKED — the Legal row is being changed by an OPEN pull request

MOTIR-3909 is in_review on open PR moooon-B-V/motir-core#2513, which edits SidebarNav.tsx and makes row 6 conditional:

-      { icon: <Scale />, label: t('nav.legal'), href: '/legal' },
+      ...(legalIndexUrl
+        ? [{ icon: <Scale />, label: t('nav.legal'), href: legalIndexUrl }]
+        : []),

There is no correct arm available before that merges, which is why this is an edge and not a caveat:

  • draw the row unconditional at /legal ⇒ the asset is stale within days — this card's own defect, reproduced on day one;
  • draw both arms ⇒ building against an unmerged branch, which the run rules forbid;
  • omit it ⇒ fails the criterion this card is named after.

Resume condition: MOTIR-3909 done. Then the Legal row is drawn in two arms (configured → the manifest URL; unconfigured → absent), and this card supersedes design/auth/legal-agreement.mock.html panel 14 as the source for them, exactly as the Boundary always intended.

The toolchain question — ✅ ANSWERED 2026-09-02: the .pen route is CLOSED, use *.mock.html

Evidence, at cd236496d: no .pen renderer or exporter exists anywhere in the repository. The only files naming .pen are guards (tests/design-three-file-set.test.ts, tests/design-asset-addresses.test.ts), CLAUDE.md, and scripts/plan-seed/ data — none of which render. package.json has no Pencil dependency and no design-export script. The one renderer present is scripts/render-design-mock.mjs, which renders *.mock.html.png. This matches design/auth/design-notes.md's divergence-ledger row 1 independently.

So the fix shape is settled before the work starts: port the rail's bottom section to a *.mock.html under design/shell/, built from the real shipped components/ui/Sidebar.tsx primitive, rendered to a same-basename .png. Do not edit the three .pen sources — their .pngs cannot be regenerated, and a source edit nobody can render is a second divergence.

Boundary

  • It does not redesign the rail. The rows exist and ship; this is about the asset agreeing with them.
  • It does not touch design/auth/legal-agreement.mock.html. MOTIR-4006's panel 14 stands until this card lands. The ONE design/auth/ edit in scope is the planning flag (AC 6).
  • It does not change any shipped component. No .tsx is edited.
  • It does not delete the Settings row from the assets — see the withdrawn clause above.

Acceptance criteria

  • The six-row table above is re-confirmed at this card's own base (which will be after MOTIR-3909 merges, so the Legal row's two arms are then part of the measurement) and the command quoted in the PR body.
  • Every row the shipped bottom section renders is drawn by whichever design/shell/ asset owns that section, at all three widths (desktop, collapsed, mobile drawer) — six rows, with the two conditional rows (Settings, Security) and the now-conditional Legal row drawn in both arms, present and absent.
  • The toolchain answer above is restated in one line in the PR body with its evidence. (Settled 2026-09-02; the builder confirms it still holds rather than re-deriving it.)
  • design/shell/design-notes.md records which source wins for the rail's bottom section — the new *.mock.html over the three .pens — in the form design/auth/design-notes.md's divergence ledger already uses.
  • No .pen is edited; the PR body states that its .png could not be regenerated and that the *.mock.html supersedes it for this element.
  • design/auth/design-notes.md's planning flag 1 is updated to point at the outcome — including that its "two rows short" count was four.
  • The new *.mock.html has a same-basename .png (the three-file-set guard).
  • vitest --config vitest.design.config.ts is green.

Context refs

  • motir-core/app/(authed)/_components/SidebarNav.tsx — the id: 'bottom' section and its six rows
  • motir-core/components/ui/Sidebar.tsx — the row primitive the mock must compose from
  • motir-core/design/shell/desktop.pen · desktop-collapsed.pen · mobile-drawer.pen — the stale, un-re-exportable sources
  • motir-core/scripts/render-design-mock.mjs — the only renderer in the tree; it takes *.mock.html
  • motir-core/design/auth/design-notes.md — the divergence ledger, planning flag 1, and the .mock.html route the siblings took
  • MOTIR-3909blocked_by; PR #2513 changes the Legal row
  • MOTIR-4006 — the card that found it; relates_to
  • MOTIR-4163 — the planning bug this amendment came from

Advisory dispositions — ⚠️ CORRECTED 2026-09-02

  • MOTIR-3909 — a blocked_by IS owed, and is now wired. The original text denied it: "This card reads nothing either produces … both of which exist on origin/main today." That applied the right test in the wrong tense — what exists on origin/main today is precisely the row PR #2513 retires. See the BLOCKED section.
  • MOTIR-4006 — no edge owed, and this survives the correction. It is done and merged (PR #2504); its panel 14 is the interim source this card supersedes, so the ordering does run the other way. relates_to carries the trace.
  • subsumption / likely-already-shipped on design/auth/legal-agreement.mock.html (PR #2504, merged) — read and not acted on. That path is excluded by the Boundary; this card's only design/auth/ edit is the planning flag in design-notes.md, a different file.