plan(quotesdb): create domain planning tickets for api, ui, qa, and infra
Adds 84 tickets across 4 sub-domains with a full dependency graph: - quotesdb/api (f3dc74): 15 work tickets + 6 TRIAGE tickets Covers Cargo.toml, Workers entry point, DB migrations, all 7 endpoints, auth code gen, tag handling, error envelope, unit tests, and docs. - quotesdb/ui (c3503b): 15 work tickets + 5 TRIAGE tickets Covers Yew/Wasm setup, Trunk config, app shell, API client, 5 pages, shared components (QuoteCard, auth modal, pagination, tag filter), and docs. - quotesdb/qa (ce1e4f): 12 work tickets + 4 TRIAGE tickets Covers test harness, one test suite per endpoint, router ordering, tag operations, and README. - quotesdb/infra (25c413): 10 work tickets + 6 TRIAGE tickets Covers OpenTofu setup, D1 database, Worker script + route, Pages project, custom domain (quotes.elijah.run), migration workflow, secrets, and README. Dependency graph: - Root ticket (ec118c) blocked on all 4 sub-project tickets - Sub-project tickets blocked on their leaf work tickets - Work tickets have intra-domain sequential deps (e.g. Cargo.toml → DB → handlers) - QA test harness has a cross-domain dep on the completed api sub-project - All 21 TRIAGE tickets are immediately unblocked as the highest-priority starting work Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>quotesdb
parent
04b659ee7c
commit
bc17a9ae07
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement 4-word passphrase auth_code generator (must work in WASM/workers-rs)"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6ed325"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement ui/src/main.rs — Yew app shell, BrowserRouter, route definitions for all 5 pages"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["93515e"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement PUT /api/quotes — create quote, generate NanoID, generate auth_code if not provided, return 201 with auth_code"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e", "03bb91", "175382"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] D1 binding chicken-and-egg — D1 ID not known until after apply, but Worker needs it at plan time"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] OpenTofu state backend — local file (gitignored) vs Terraform Cloud vs Cloudflare R2?"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Write api/README.md, api/docs/PLANNING.md, api/docs/ARCHITECTURE.md"
|
||||||
|
priority = 3
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["a6bce1"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Auth code storage strategy — localStorage persistence vs component-only state?"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] HTTP client selection for integration tests — reqwest vs hyper vs ureq (tokio vs blocking)"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement shared QuoteCard component — displays text, author, source, date, tags"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Yew version selection and yew-router compatibility (0.21+?)"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement tag join logic — fetch tags per quote, insert/replace tags on create/update"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["a5049d"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Cloudflare Workers WASM size limit — free tier 1MB limit may require paid plan for Rust binary"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement Home page (/) — fetch and display random quote, 'Browse all' link"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1e6a09", "0d987f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement Submit page (/submit) — quote creation form, display returned auth_code on success"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1e6a09"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement API client module — typed fetch wrappers for all quotesdb-api endpoints"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up api/Cargo.toml with all crate dependencies (axum, tokio, workers-rs, sqlx, serde, nanoid, etc.)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6f2e18", "6ed325", "e8a330"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "quotesdb/infra"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "project"
|
||||||
|
dependencies = ["2d1371", "d0da0b", "a23489", "ae6a82", "ae886f", "657836", "75489a", "71b1d4", "af56a7", "d5839a"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement GET /api/ — serve OpenAPI spec as JSON"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e", "2ec8b1"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Test harness: how to import and start quotesdb-api in tests (workers-rs vs native build target)"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement pagination component — prev/next buttons, current page indicator, total pages"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement GET /api/quotes/random — random row query (must be registered before /:id route)"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up infra/ OpenTofu project — providers.tf, terraform.tf, .gitignore for state"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["07feaa"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] OpenAPI spec serving strategy — embed YAML at compile time vs load at runtime"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Local dev config: Turso (file SQLite) vs D1 binding selection strategy"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Write ui/README.md, ui/docs/PLANNING.md, ui/docs/ARCHITECTURE.md"
|
||||||
|
priority = 3
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1a274d", "5cdbd9", "5f1112", "b3ef98", "1ba523"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: PUT /api/quotes — create (auto auth_code, custom auth_code, missing fields 422)"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Database migration strategy for Cloudflare Workers (startup vs wrangler d1 execute)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] D1 migrations in OpenTofu — null_resource local-exec vs separate wrangler step vs manual"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement Browse page (/browse) — paginated quote list with author/tag filter controls"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1e6a09", "0d987f", "2c5a57", "d3d502"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement POST /api/quotes/:id — partial update, verify X-Auth-Code header, update updated_at"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e", "175382"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement GET /api/quotes/:id — fetch by NanoID, return 404 if not found"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e", "175382"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] CSS/styling approach for Wasm — plain CSS, CDN Tailwind, or Wasm-compatible crate?"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement Quote detail page (/quotes/:id) — view, edit form with auth prompt, delete with auth prompt"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1e6a09", "0d987f", "f850c6"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up tests/Cargo.toml with integration test dependencies (reqwest/hyper, tokio, serde_json)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2ab7a8", "a91260", "0d84fa"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Configure custom domain quotes.elijah.run → Cloudflare Pages (DNS record + Pages domain binding)"
|
||||||
|
priority = 6
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["ae886f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up api/src/main.rs — Cloudflare Workers entry point and Axum router wiring"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1f5bb5", "a5049d"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] 4-word passphrase crate selection for WASM target (no_std/wasm32 constraints)"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] NanoID crate WASM compatibility with workers-rs target"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Document secrets management — Cloudflare API token, account ID, how to supply to OpenTofu and local dev"
|
||||||
|
priority = 6
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2d1371"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Document D1 schema migration workflow — how to apply SQL schema changes to D1 in CI/CD"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["d0da0b", "5c0c64"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Write tests/README.md"
|
||||||
|
priority = 3
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["789d0f", "4a4c26", "f9f448", "aa0eab", "93f1b6", "fae330", "8c87db", "e8f5cf", "893eba"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: GET /api/ — OpenAPI spec returned as valid JSON with expected structure"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement GET /api/quotes — paginated list with author filter (case-insensitive) and tag filter"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e", "175382"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: tag operations — create with tags, list by tag filter, update replaces all tags"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: DELETE /api/quotes/:id — valid auth 204 no body, wrong auth 403, not found 404, cascade deletes tags"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up ui/Cargo.toml with Yew/Wasm dependencies (yew, yew-router, gloo, wasm-bindgen, serde, etc.)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["166996", "5e3e37"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: GET /api/quotes — pagination (page=1, page=N, out-of-range), author filter, tag filter, no results"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement test server harness — spawn quotesdb-api with temp SQLite DB, return base URL"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["5f5ba0", "fba598", "f3dc74"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Define Cloudflare Workers script resource — WASM artifact, D1 binding, environment variables"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2d1371", "d0da0b", "07cafb", "efee79"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement database connection module and SQLx migrations (quotes + quote_tags schema)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1f5bb5", "580e66", "33ed29"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Write unit tests in api/src/tests.rs covering all handlers, auth logic, and pagination"
|
||||||
|
priority = 6
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["28e7d9", "886bfd", "2ce22e", "5dbb7d", "05f8ae", "5d9f5a", "b20b5a", "d792e2"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] workers-rs compatibility with native Rust test binaries (may need separate native feature flag)"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Local dev CORS and Trunk API proxy config (trunk serve proxying to api on different port)"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: GET /api/quotes/random — 200 with quote, 404 when database is empty"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Define Cloudflare Worker route/domain — worker.dev subdomain or custom route for API"
|
||||||
|
priority = 6
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["a23489"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Define Cloudflare Pages project resource — build config, output dir, git repo connection or artifact upload"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2d1371", "fc9bfd", "182210"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Document local dev environment — Turso/SQLite instead of D1, any wrangler.toml config required"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2d1371"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement DELETE /api/quotes/:id — verify X-Auth-Code, cascade delete quote and tags, return 204"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement Author page (/author/:name) — paginated list of quotes by a single author"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["1e6a09", "0d987f", "2c5a57"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "quotesdb/ui"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "project"
|
||||||
|
dependencies = ["93515e", "dc3d2b", "04f865", "1e6a09", "1a274d", "5cdbd9", "5f1112", "b3ef98", "1ba523", "0d987f", "f850c6", "2c5a57", "d3d502", "fc2f51", "372790"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "quotesdb/qa"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "project"
|
||||||
|
dependencies = ["5f5ba0", "9b581f", "789d0f", "4a4c26", "f9f448", "aa0eab", "93f1b6", "fae330", "8c87db", "e8f5cf", "893eba", "75e3f0"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Define Cloudflare D1 database resource and document binding name for the Worker"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["2d1371"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement tag filter component — tag input/select for browse and author pages"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Write infra/README.md — setup, apply, destroy instructions and required credentials"
|
||||||
|
priority = 3
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["ae6a82", "657836", "75489a", "71b1d4", "af56a7"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = 'Implement error handling — consistent {"error": "..."} envelope for 400/403/404/422/500'
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["6e829e"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Set up ui/Trunk.toml and ui/index.html — build configuration and Wasm entry point"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["93515e", "a9534d"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Cloudflare Pages SPA routing — 404 fallback config for client-side Yew router"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] SQLx + workers-rs + Cloudflare D1 compatibility (known issues?)"
|
||||||
|
priority = 9
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: router ordering — verify /api/quotes/random is not matched as :id parameter"
|
||||||
|
priority = 6
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Correct cloudflare_workers_script resource name in current Cloudflare provider version"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "quotesdb/api"
|
||||||
|
priority = 7
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "project"
|
||||||
|
dependencies = ["1f5bb5", "6e829e", "a5049d", "28e7d9", "886bfd", "2ce22e", "5dbb7d", "05f8ae", "5d9f5a", "b20b5a", "03bb91", "175382", "d792e2", "a6bce1", "08af7a"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement auth code modal/prompt component — dialog requesting X-Auth-Code before edit or delete"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865", "0bc655"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: GET /api/quotes/:id — 200 with quote, 404 not found, schema validation"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Test suite: POST /api/quotes/:id — valid auth 200, wrong auth 403, not found 404, partial update, null to clear optional fields"
|
||||||
|
priority = 5
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["9b581f"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Integration test isolation strategy — per-test temp DB vs shared DB with transaction rollback?"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "Implement error display component — consistent error state UI across all pages"
|
||||||
|
priority = 4
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = ["04f865"]
|
||||||
|
+++
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
+++
|
||||||
|
title = "[TRIAGE] Cloudflare Pages build strategy — Pages CI build vs pre-built trunk artifact upload"
|
||||||
|
priority = 8
|
||||||
|
status = "todo"
|
||||||
|
ticket_type = "task"
|
||||||
|
dependencies = []
|
||||||
|
+++
|
||||||
Loading…
Reference in New Issue