MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-372

6.7.1 Reporting-shaped corpus — `db:seed:reporting` time-spread 10k-issue seed + saved filters/dashboard/rules through the shipped services (+ helpers, CI-lane cap)

Done
Description

Estimate: 28m · Depends on: 6.2, 6.3, 6.6, 5.3.3, 5.4.2

The fixture gap (the 4.7.1 / 5.6.1 precedent): no existing large seed builds reporting-shaped data. A scripts/seed-reporting.ts (+ pnpm db:seed:reporting) constructing the corpus through the shipped services (the no-raw-inserts rule, doubling as a bulk smoke test of every Epic-6 write path), with ONE recorded deviation: a documented timestamp back-dating pass (created/resolved/revision timestamps are server-set and no service accepts them; the pass is confined to this script, touches timestamps only, and the self-check asserts the resulting spread).

The corpus: 10k issues (cap-parameterised env var; the CI lane runs reduced — the board-at-scale cap precedent) spread across ~26 weeks of created/resolved history with realistic weekly variance (the created-vs-resolved report needs real buckets), full spread over status/priority/assignee/kind, label + component + all five custom-field types valued on meaningful subsets (the 6.1 predicates need selective matches, not all-or-nothing), a long-tail of resolved issues for the status-distribution report. Plus the Epic-6 entities: 5+ named saved filters (6.2) spanning enum/negation/date-window/CF predicates, one populated dashboard (6.3) whose widgets consume them, and 3+ enabled automation rules (6.6) over the built-in action set. Deterministic (the FNV-hash convention — no Date.now/random; stable across reseeds). Fixture helpers (tests/e2e/_helpers/reporting.ts): accessors for the corpus counts AND the expected aggregates (weekly created-vs-resolved buckets, the status distribution) computed independently from the deterministic spread — the values the 6.7.3 report asserts compare against.

Acceptance criteria

  • pnpm db:seed:reporting builds the corpus + saved filters + dashboard + rules idempotently through the shipped services (re-run converges; any service error fails loudly), deterministic, cap-parameterised with the CI lane reduced.
  • The seeded shape matches the spec sheet (time spread with weekly variance, field spread, selective predicate matches, the Epic-6 entities) — asserted by a fixture self-check, including that the timestamp pass produced the intended distribution.
  • The back-dating deviation is documented in the script header (what, why, scope) and touches nothing but timestamps.
  • Helpers expose counts + independently-computed expected aggregates; existing seeds and suites untouched and green; pnpm test:coverage holds on shared helpers.

Context refs

  • The fixture lineage: db:seed:large (2.5.16), seedLargeBoard (3.5.1), the 4.7.1 sprint seed, db:seed:collab (5.6.1) — the cap/CI-lane + determinism patterns
  • The Epic-6 services as they land (6.2 saved filters, 6.3 dashboards, 6.6 rules) — the only write paths besides the timestamp pass
  • 5.3.3 / 5.4.2 (custom-field + label write paths for the predicate spread)
  • The no-raw-inserts seed rule (MOTIR.md Plan seed §) + the recorded deviation in the Story 6.7 header