Skip to content

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:

Terminal window
gh issue list --label status:ready --json number,title,labels

An 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 H01
M3 013+022+023 ─→ 030 ─┬─→ 031
└─→ 032
M4 032 ─→ 040 031+021 ─→ 041 H02 ─→ 050

M0 — Foundation

Serial and closely reviewed; everything downstream inherits it.

IDIssueItemSizeArea
WI-001#2WSL2 environment and fresh clone — needs a humanSinfra
WI-002#3Monorepo scaffold — pnpm workspaces, Turborepo, shared configMinfra
WI-003#4The CI gate — templates and labels already appliedMinfra
WI-004#5apps/docs Starlight subsite on Cloudflare PagesMdocs
WI-005#6ADR catalogue and standards — ✅ done ahead of the scaffoldLdocs
WI-006#7packages/db — Drizzle, Docker Postgres, migration + seed harnessMdb
WI-007#21Deploy the docs subsite to Cloudflare PagesSdocs

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

IDItemDepsSize
WI-010Schema: 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).006L
WI-011packages/shared — Zod schemas via drizzle-zod010M
WI-012apps/api Hono skeleton: Hyperdrive binding, nodejs_compat, compat date ≥ 2025-04-01, health route, rate limiting in the first commit, Sentry011L
WI-013Clerk email OTP + lazy local user row on first authenticated request (ADR-0005)012M

M2 — Catalogue and clients

IDItemDepsSize
WI-020packages/catalogueCatalogueSource interface + fixture implementation010M
WI-021Search endpoint — Postgres FTS + pg_trgm020M
WI-022apps/web — Astro SSR scaffold on Workers (ADR-0009)012M
WI-023apps/mobile — Expo + Expo Router scaffold011M
WI-024BGG sync worker, JSONB-cached — blocked by WI-H01H01, 020L

The catalogue seeder (ADR-0016, ADR-0017)

Standalone tooling in tools/catalogue-forge — never deployed, never in the request path.

IDItemDepsSize
WI-025Forge scaffold: pipeline architecture, per-field provenance model, --dry-run default, rate limiting and robots.txt compliance020M
WI-026Wikidata source adapter (CC0) — SPARQL harvest of title, designers, publishers, year, BGG ID025M
WI-027Wikipedia source adapter (CC BY-SA) — prose fetch plus the attribution rendering path, which is a licence obligation, not a nicety025M
WI-028AI normalisation stage — controlled vocabulary, Batches API, structured outputs from packages/shared, confidence scores and review queue. Paid runs gated on WI-H05.026, 027L
WI-029Entity resolution and dedup + seed export into packages/catalogue. Merges are human-confirmed.028L

M3 — Product

IDItemDepsSize
WI-030Collection management (shelf) — API + web + mobile013, 022, 023L
WI-031Curated lists + twenty hand-seeded lists030M
WI-032Session logging, tier-one “Played” only (ADR-0007)030L

M4 — Social and discovery

IDItemDepsSize
WI-040Follows + fan-out-on-read feed032L
WI-041Content-based discovery — designer, mechanic, weight, player count031, 021L
WI-050Social sign-in — Expo dev build, three Google client IDs, Sign in with AppleH02L

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.

IDIssueItemBlocksUrgency
WI-H04#12Provision Cloudflare / Neon / Clerk / Sentry accounts and secrets#5, #7, WI-012 onwardHighest — do in parallel with #3
WI-H01#9Email BGG about commercial licensing; get an answer in writingWI-024 onlyLow — a “no” costs nothing
WI-H05#13Approve LLM enrichment spend and volume — first cost beyond Apple’s feePaid WI-028 runsWhen WI-028 is built
WI-H02#10Apple Developer Program — $99/yearWI-050, any iOS releaseDefer — don’t start the billing clock early
WI-H03#11Google Play Developer — $25 one-offAndroid store release onlyLowest

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.