Work item backlog
Work item backlog
Per ADR-0012, each item has a GitHub Issue (status, via labels) and a spec file in this directory (the durable content). This page is the human-readable dependency graph.
The agent’s queue is:
gh issue list --label status:ready --json number,title,labelsAn item is status:ready only when its dependencies are closed and no human is needed. See ../standards/work-items.md for the lifecycle and label vocabulary.
Dependency graph
M0 001 ─→ 002 ─→ 003 ├──→ 004 ──→ 005 └──→ 006
M1 006 ─→ 010 ─→ 011 ─→ 012 ─→ 013 │M2 ├──→ 023 (mobile scaffold) 012 ───┴──→ 022 (web scaffold) 010 ──────→ 020 ─→ 021 (search) ├──→ 025 ─→ 026 ─→ 028 ─→ 029 │ └──→ 027 ──┘ └──→ 024 ← blocked by H01M3 013+022+023 ─→ 030 ─┬─→ 031 └─→ 032M4 032 ─→ 040 031+021 ─→ 041 H02 ─→ 050M0 — Foundation
Serial and closely reviewed; everything downstream inherits it.
| ID | Issue | Item | Size | Area |
|---|---|---|---|---|
| WI-001 | #2 | WSL2 environment and fresh clone — needs a human | S | infra |
| WI-002 | #3 | Monorepo scaffold — pnpm workspaces, Turborepo, shared config | M | infra |
| WI-003 | #4 | The CI gate — templates and labels already applied | M | infra |
| WI-004 | #5 | apps/docs Starlight subsite on Cloudflare Pages | M | docs |
| WI-005 | #6 | ADR catalogue and standards — ✅ done ahead of the scaffold | L | docs |
| WI-006 | #7 | packages/db — Drizzle, Docker Postgres, migration + seed harness | M | db |
| WI-007 | #21 | Deploy the docs subsite to Cloudflare Pages | S | docs |
Nothing is status:ready right now, and that is accurate rather than an oversight. Every M0 item traces back to WI-001, which needs a human to install WSL2 and clone into the Linux filesystem. The queue opens up the moment #2 closes.
M1 — Domain core
| ID | Item | Deps | Size |
|---|---|---|---|
| WI-010 | Schema: games, users, players, shelf_entries, sessions, lists, game_field_provenance + FTS/trgm indexes. The Player/User split is the thing to get right (ADR-0006). | 006 | L |
| WI-011 | packages/shared — Zod schemas via drizzle-zod | 010 | M |
| WI-012 | apps/api Hono skeleton: Hyperdrive binding, nodejs_compat, compat date ≥ 2025-04-01, health route, rate limiting in the first commit, Sentry | 011 | L |
| WI-013 | Clerk email OTP + lazy local user row on first authenticated request (ADR-0005) | 012 | M |
M2 — Catalogue and clients
| ID | Item | Deps | Size |
|---|---|---|---|
| WI-020 | packages/catalogue — CatalogueSource interface + fixture implementation | 010 | M |
| WI-021 | Search endpoint — Postgres FTS + pg_trgm | 020 | M |
| WI-022 | apps/web — Astro SSR scaffold on Workers (ADR-0009) | 012 | M |
| WI-023 | apps/mobile — Expo + Expo Router scaffold | 011 | M |
| WI-024 | BGG sync worker, JSONB-cached — blocked by WI-H01 | H01, 020 | L |
The catalogue seeder (ADR-0016, ADR-0017)
Standalone tooling in tools/catalogue-forge — never deployed, never in the request path.
| ID | Item | Deps | Size |
|---|---|---|---|
| WI-025 | Forge scaffold: pipeline architecture, per-field provenance model, --dry-run default, rate limiting and robots.txt compliance | 020 | M |
| WI-026 | Wikidata source adapter (CC0) — SPARQL harvest of title, designers, publishers, year, BGG ID | 025 | M |
| WI-027 | Wikipedia source adapter (CC BY-SA) — prose fetch plus the attribution rendering path, which is a licence obligation, not a nicety | 025 | M |
| WI-028 | AI normalisation stage — controlled vocabulary, Batches API, structured outputs from packages/shared, confidence scores and review queue. Paid runs gated on WI-H05. | 026, 027 | L |
| WI-029 | Entity resolution and dedup + seed export into packages/catalogue. Merges are human-confirmed. | 028 | L |
M3 — Product
| ID | Item | Deps | Size |
|---|---|---|---|
| WI-030 | Collection management (shelf) — API + web + mobile | 013, 022, 023 | L |
| WI-031 | Curated lists + twenty hand-seeded lists | 030 | M |
| WI-032 | Session logging, tier-one “Played” only (ADR-0007) | 030 | L |
M4 — Social and discovery
| ID | Item | Deps | Size |
|---|---|---|---|
| WI-040 | Follows + fan-out-on-read feed | 032 | L |
| WI-041 | Content-based discovery — designer, mechanic, weight, player count | 031, 021 | L |
| WI-050 | Social sign-in — Expo dev build, three Google client IDs, Sign in with Apple | H02 | L |
Human-gated
Owned by a person, never by an agent — see ../standards/agent-boundaries.md.
These carry status:blocked + needs:human and no size label — see ../standards/work-items.md.
| ID | Issue | Item | Blocks | Urgency |
|---|---|---|---|---|
| WI-H04 | #12 | Provision Cloudflare / Neon / Clerk / Sentry accounts and secrets | #5, #7, WI-012 onward | Highest — do in parallel with #3 |
| WI-H01 | #9 | Email BGG about commercial licensing; get an answer in writing | WI-024 only | Low — a “no” costs nothing |
| WI-H05 | #13 | Approve LLM enrichment spend and volume — first cost beyond Apple’s fee | Paid WI-028 runs | When WI-028 is built |
| WI-H02 | #10 | Apple Developer Program — $99/year | WI-050, any iOS release | Defer — don’t start the billing clock early |
| WI-H03 | #11 | Google Play Developer — $25 one-off | Android store release only | Lowest |
Two of these deserve emphasis. WI-H01 blocks only WI-024 — the CatalogueSource seam and the open-data seeder mean everything else proceeds without it, and if BGG says no the project is not blocked at all. WI-H05 is a spend gate, not a formality: WI-028 can be built, tested against a handful of fixtures, and reviewed without approval, but a full-catalogue batch run costs real money and needs a human to say yes.