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
144
planned
1,365
shipped

Motir · Roadmap

MOTIR-3931Done

The `/design` asset draws muted captions on `--el-surface-soft` — 4.34:1, under AA in the default palette, and its own AA sweep never measured the pair

Opened by Zhu Yue ·

Found while building MOTIR-1043 (motir.co/design), against the asset that card builds to.

The defect

design/marketing/design-showcase.mock.html draws the axis rail as a --el-surface-soft band with the axis help lines set at 12px in --el-text-muted (.axis-hd .help { font-size: 12px; color: var(--el-text-muted) }, and .rail-head .lead likewise). The shipped AxisField does the same thing — text-xs text-(--el-text-muted) for help, and AxisNote for the registry line under each axis.

That pairing is under AA, and theme.css says so in its own words, at the token's declaration:

"⚠️ AA-SAFE ONLY ON THE WHITE PAGE/CARD, and by 0.04 (4.54:1). On --el-surface it is 4.17, on --el-muted 4.12, on --el-surface-soft 4.34 — all under AA. A muted caption belongs inside a card, never on a panel. (MOTIR-2455; light theme is the binding one — every ink clears AA on dark.)"

Re-measured independently over all ten palettes in both themes (tests/aaMatrix.test.ts, shipped by MOTIR-1043), the light theme of the default motir palette is the binding cell:

inkon --el-surface-softon --el-card / --el-page-bg
--el-text-muted4.344.54 ✓
--el-text-eyebrow4.344.54 ✓
--el-text-helper4.344.54 ✓

12px is not WCAG large text, so 1.4.3 asks 4.5:1.

Why the asset missed it, which is the part worth keeping

The asset's AA work was thorough and its harness has a control that reproduces to the digit. Its PAIRS list is five entries — four --el-accent-on-surface pairs and one --el-danger-on-surface pair — because the question it was answering was MOTIR-3872's accent-ink question. The pair it actually DRAWS on its own rail was never in the list, and a sweep that returns 0/10 on the pairs it measures reads as a clean bill of health for the surface.

This is the same shape as MOTIR-3874 one token over: an asset that reasons from a measured set, where the set was chosen by the question that prompted the measurement rather than by the elements the asset draws.

What MOTIR-1043 did, and why this is still owed

It put the axis stack inside a Card--el-card resolves to the same --color-background as the page, so all three inks return to 4.54:1 — and kept the --el-surface-soft band the layout is built on. The page ships AA-clean; the ASSET still draws the failing arrangement, so the next reader of design-showcase.mock.html builds the defect back.

Acceptance criteria

  • design/marketing/design-showcase.mock.html draws the axis rows on the page/card surface rather than directly on the --el-surface-soft band, matching what /design ships.
  • design/marketing/design-notes.md § motir.co/design records the pair, its number and the rule (a muted caption belongs inside a card, never on a panel), and its How this asset was measured section's PAIRS list gains --el-text-muted / --el-text-eyebrow / --el-text-helper against every surface the asset paints them on.
  • The re-exported design-showcase.png shows the corrected rail.
  • pnpm vitest --config vitest.design.config.ts — if that lane exists in this repository — plus pnpm lint, format:check, typecheck, build, test.

Boundary

This is an ASSET fix, not a token fix. --el-text-muted's values are motir-core's and are deliberate (MOTIR-2455 chose them and documented the constraint); nothing here asks for a republish. Whether AxisField should refuse to render a muted caption outside a card — i.e. whether the PACKAGE owes a guard — is a separate question for motir-core and is not claimed by this card.

Advisory dispositions

validate_work_item returned three at create time. All three are disposed of here, and the edge one is WIRED rather than noted.

  • shape · likely-self-blocking-design (design criterion 1, surface criterion 3) — DOES NOT APPLY. The detector fires on a childless card that is its own design blocker: one criterion produces a design and a later one builds a surface against it. This card is type: design and every criterion is part of the SAME three-file asset — the mock, its note section, its PNG export. There is no build criterion downstream of the design, so there is nothing to cut and nothing to split out.
  • subsumption · likely-in-flighttests/aaMatrix.test.ts on moooon-B-V/motir-marketing#15 — APPLIES, and it is why the edge below exists. That file is this card's EVIDENCE, not its deliverable: this card edits design/marketing/** and touches no test. But the pull request it sits on is MOTIR-1043's, and criterion 1 reads "matching what /design ships" — which is post-merge state.
  • reference · advisory — names MOTIR-1043 at in_review — APPLIES, same finding. Both are discharged by ONE blocked_by edge to MOTIR-1043, wired at filing, with this card moved into MOTIR-656 alongside it so the edge is intra-container rather than cross-parent (gate 7). It is blocked rather than todo accordingly.

Discussion

No comments yet.

Adding to this discussion signs you in on app.motir.co and brings you back to this request.

Add a comment