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

3.5.1 At-scale board fixture + cap/Done-age test seam

Estimate: 25m · Depends on: 2.5.16, 3.3.4, 3.8.2

The harness the two journey specs build on — a board-shaped large dataset plus a test-only env seam over the load-model bounds, so the at-scale board states are reachable deterministically and cheaply. Test infrastructure only (a dev seed script + a few-line, production-inert service seam) — it changes NO UI, so the design gate does not fire.

Board-shaped large seed. db:seed:large (Subtask 2.5.16, scripts/seed-large.ts) today builds a tree/list-shaped tenant to make finding-#57 List/Tree pagination visible — its issues are NOT spread across the board's statuses, assignees, priorities, or epics, so a board over it would pile every card into one column with no lanes. Extend it (a new SEED_SHAPE=board mode, or a sibling seedLargeBoard the script calls — keep it idempotent + service-routed like the original, NO raw inserts that skip the kind-parent triggers) so the BIG project's issues spread across: every workflow status (so each board column is populated, including a tall one for virtualization), many distinct assignees + every priority + several epics (so group-by Assignee/Epic/Priority each produce many lanes + a catch-all), and a Done-age spread in the terminal status (some resolvedAt inside the 14-day window, some well outside) so the Done-age trim is observable. Tunable via the existing SEED_* envs.

Cap + Done-age test seam. BOARD_ISSUE_CAP (5,000) and DONE_AGE_WINDOW_DAYS (14) are hardcoded export consts in lib/services/boardsService.ts; triggering the over-cap banner would otherwise need 5,000+ materialized rows. Add a minimal seam: resolve the cap (and, if useful, the Done-age window) from an env override (e.g. BOARD_ISSUE_CAP_OVERRIDE / DONE_AGE_WINDOW_DAYS_OVERRIDE) when set, falling back to the shipped constant otherwise — read once at the service boundary, kept as the single source the projection and the cap/truncated DTO fields already use (3.8.2). The override is wired ONLY into the Playwright webServer env (playwright.config.ts) / the vitest setup; with the env unset, production behaviour is byte-for-byte the shipped 5,000 / 14 — VERIFIED by a unit test, so this is a test seam, not a behaviour change.

E2E helper extensions. Extend tests/e2e/_helpers/board.ts with the at-scale helpers the journey specs need (resolve a column's rendered card count vs. its total badge, assert no "Load more" affordance exists, read the over-cap banner, sign in as the board-seed owner) — additive, no change to the existing 3.1.7/3.6.4 helpers.

Acceptance criteria

  • pnpm db:seed:large (board mode) seeds the BIG project so its default board has every column populated (one tall enough to virtualize), many assignee/epic/priority lanes + a catch-all under each group-by, and a Done-age spread in the terminal column; idempotent and routed through the shipped services (no raw inserts), refusing to run under NODE_ENV=production like the original.
  • The cap + Done-age seam reads an env override when set and falls back to the shipped BOARD_ISSUE_CAP (5,000) / DONE_AGE_WINDOW_DAYS (14) when unset, with the override wired only into the test webServer / vitest env; a vitest test asserts the unset-env default equals the shipped constants (no production behaviour change).
  • tests/e2e/_helpers/board.ts gains the at-scale helpers (rendered-vs-total count, "no Load more", over-cap banner read, board-seed sign-in) without altering the existing helpers; a focused vitest asserts the board-shaped seed yields the documented column/lane/Done-age distribution.
  • No migration, no UI change, no new product surface — dev script + service seam + test helpers only.

Context refs

  • scripts/seed-large.ts (2.5.16, finding #57) — the existing large seed + its SEED_* env knobs + idempotent service-routed pattern to extend
  • lib/services/boardsService.tsBOARD_ISSUE_CAP / DONE_AGE_WINDOW_DAYS / doneSince() + getBoard (the cap/truncated projection, 3.8.2) the seam feeds
  • tests/e2e/_helpers/board.ts (getBoard / moveCard / columnByStatus / cardIdsIn) + tests/e2e/_helpers/{workflow,shell-session,db-reset}.ts; tests/helpers/db.ts
  • lib/repositories/workItemRepository.ts (the bounded board read, 3.8.2) — the distribution the seed must populate; motir-core/CLAUDE.md (real Postgres, no mocks)