# Feature checklist (phases A–E) Short parity checklist for Descrybe v2. Detailed gaps: **[status-and-gaps.md](status-and-gaps.md)**. Cutover: [cutover.md](cutover.md). Schema: [schema-map.md](schema-map.md). Legend: `[x]` done · `[~]` partial/stub · `[ ]` missing ## Phase 0 — Scaffold - [x] Monorepo: `apps/api`, `apps/web`, docs/scripts (migrator under `apps/api/cmd/migrator`) - [x] Docker Compose PostgreSQL 16 - [x] goose migrations + sqlc generate - [x] `cmd/api`, `cmd/worker`, `cmd/migrator` - [x] SvelteKit shell + `PUBLIC_API_URL` + CSRF-aware client - [x] ID map JSON format documented ([schema-map.md](schema-map.md)) - [ ] CI (`go test`, sqlc check, `svelte-check`) - [ ] Automated tests ## Phase A — Platform - [x] Email/password auth (argon2id), login/logout, session cookies (scs) - [x] Invite accept + set-password (`must_set_password`) - [x] Companies + memberships (replace Clerk orgs / profiles) - [~] Team invite / revoke / remove member (invite + remove yes; revoke/list pending incomplete) - [~] Settings: profile, company (language, merge-by-GTIN) — company yes; profile update thin - [~] API keys CRUD (dashboard keys yes; **`/api/v1` product API missing**) - [~] Billing/usage read + credit consume (overview + consume yes; plans/cycles/cron incomplete) - [ ] `is_platform_admin` gate + migrator from `admin_users` - [x] Health: `/healthz` + `/readyz` (Postgres `pool.Ping`) - [x] Svelte: login, accept-invite, settings, billing overview, API keys - [~] Migrator: companies, users, memberships, plans (+ dry-run) — needs real MySQL validation - [ ] Invite / set-password emails (SMTP) ## Phase B — Catalog - [~] Categories tree + CSV upload (CRUD + formulas API; no tree UI / CSV) - [~] Attributes hierarchy + category links (CRUD; linking UI incomplete) - [~] Custom variables + title/description formula editors (API yes; rich UI missing) - [~] Products list/search/edit (API list/get/patch; UI basic) - [ ] File uploads (products / EANs) + object storage - [~] Migrator: categories, attributes, variables, products (best-effort; files incomplete) ## Phase C — Feeds / export - [~] Input feeds (URL / file / FTP), mapping, schema extraction (CRUD + mapping JSON; sync/FTP/extract missing) - [~] Sync jobs via River (DB job row stub; River not wired) - [~] Export feed builder (XML/CSV) + public URLs (create + stub body) - [ ] Preview APIs - [~] Migrator: feeds, export feeds (mappings incomplete) ## Phase D — AI processing - [x] Pipeline workers: categorize (vector + LLM taxonomy) → attributes → enhance - [~] Credits, rate limits, cancel/retry (credits + cancel yes; rate limits/retry incomplete) - [~] OpenAI / Pinecone behind interfaces (OpenAI + optional Pinecone; LLM categorize when category missing) - [~] Job controls UI (list/start/cancel basic; no admin visibility) ## Phase E — WooCommerce + admin / cutover - [~] WooCommerce sync (config only; test/sync stubs) - [ ] Admin: users, billing, jobs, stuck cleanup - [ ] Final ETL verification + count reports on real data - [ ] Cutover runbook executed ([cutover.md](cutover.md)) - [ ] Clerk decommissioned; MySQL retained 30 days ## Suggested next milestones 1. Validate migrator `-dry-run` on production MySQL dump 2. Implement real feed sync (URL + CSV) 3. Implement real export XML/CSV 4. AI pipeline MVP behind interfaces 5. Port `/api/v1` for existing API clients 6. Catalog CSV + formula UI + product edit parity 7. Admin + Woo (if needed) → cutover