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-2482Done

The a11y sweeps load 9 routes and load them EMPTY — 108 of 134 files carrying a measured contrast defect sit on routes axe never visits

Filed by MOTIR-2481 rather than left in its body — a finding recorded in a bug report is not in the plan. Surfaced while measuring MOTIR-2459: the question "why are the a11y sweeps green if there are 262 contrast defects on main?" has an answer, and the answer is about the sweeps.

Repo: motir-core. One PR.

The measurement

tests/e2e/shell-a11y*.spec.ts runs axe with color-contrast enabled and zero rule exclusions — the sweeps are strict, and they are green. Crossing the 134 files carrying a measured --el-text-faint / --el-text-muted defect against the routes those specs actually goto:

  • 108 of 134 sit on routes the sweeps never load. Whole areas are unswept: app/(public) (the docs catalogue, /explore, the public project pages at /p/[identifier]), (onboarding), /backlog, /triage, /settings/account, /settings/organization, /code-health, /filters, /plans, /ready, and components/planning.
  • The remaining 26 sit on a swept route and still pass, because SHELL_ROUTES sweeps a fresh user with an empty project. The /items empty-state sweep waits for "No work items yet"; the faint ink lives on a populated row's timestamp, a "Showing N of M" tail, a menu section label — DOM the sweep never renders.

So both arms of the sweep are narrower than they read: a route list that covers a fraction of the product, and fixtures that keep the covered routes in their emptiest state.

Scope

In: widening the swept route set to the areas above, and giving the covered routes a populated fixture where the empty state is what is currently being measured.

Out: fixing the contrast defects themselves — that is MOTIR-2475 and MOTIR-2477, and this card is blocked_by them so it does not open against a tree that is still red. Also out: the public marketing surfaces outside this repo.

Acceptance criteria

  • The @a11y sweep visits the currently-unswept authed areas — /backlog, /triage, /settings/account, /settings/organization — and the public routes /explore, /docs and a /p/[identifier] project page, each with the same WCAG_TAGS and the same zero rule exclusions the existing sweeps use.
  • At least one sweep loads a populated project rather than a fresh one, so row timestamps, "showing N of M" tails and menu section labels are in the DOM when axe runs — the shape that made 26 files pass while carrying defects.
  • Where a route genuinely cannot be swept (an unreachable state, a third-party subtree), the spec says so in a comment naming what is not covered, in the mould of the existing .exclude('.ProseMirror') justifications — never a silent omission.
  • The new sweeps are added to the existing E2E shard layout without pushing the a11y leg past the other shards' wall clock; if they do, the shard split is rebalanced in the same PR.
  • Every route added is green at merge, with any defect it surfaces that is NOT a --el-text-* contrast failure logged as its own bug rather than absorbed here.

Context refs

  • tests/e2e/shell-a11y.spec.tsSHELL_ROUTES, the nine-route list and its empty-project fixture.
  • tests/e2e/shell-a11y-detail.spec.ts — the populated /items sweeps, the pattern to follow for a populated fixture.
  • tests/e2e/shell-a11y-tokens.spec.ts — the specimen sweeps.
  • MOTIR-2481 — the planning bug that filed this.