Public Access
docs: Sprint 15 — seed 50 recipes + Sprint 12 latent-bug fix across all 6 running docs
Sprint 15 (commit a3c89bf) does two things: (1) reorders
backend/app/main.py so recipe_search_api.router mounts BEFORE
the WIP recipes_api.public_router (fixes a Sprint 12 latent
bug where /api/recipes/search was shadowed by the WIP's GET
/{recipe_id} returning 422); (2) adds scripts/seed_recipes.py
which seeded 18 Spoonacular recipes into the local library
today (free-tier 50-pt cap hit; remaining 32 to seed on later
days via the same idempotent script). DB went 31 -> 49 total
recipes.
This commit updates the 6 running docs that track sprints:
- .agent/plan.md — Sprint 15 section (S15.1-S15.4 + Done
when + Out of scope) added after Sprint 14's out-of-scope.
- .agent/context.md — Sprint 15 decisions (D1-D6), open
questions (Q1-Q2), and file:line references added.
- Review/sprint15-verification.md — NEW: full 18-imported
breakdown by cuisine + free-tier math correction (50 pts/day,
not 150) + LLM test (picked_count=0, filled_count=19,
failed_count=2 for week 2026-07-06) + 6-risk table + deploy
+ 2 follow-up tickets (lower _DAILY_LIMIT, re-run script).
- Review/ui-nielsen-audit.md — Sprint 15 status block
(T8.1-T8.3) added after the Sprint 14 block. Notes the
Sprint 12 latent-bug fix as the critical change for the
upcoming Sprint 12 deploy.
- fix-ui-audit.md — Sprint 15 section (T8.1-T8.5) added after
the Sprint 14 section. T8.1 documents the main.py mount
order fix in detail. T8.5 surfaces 2 follow-up tickets.
- Review/handoff-ui-audit.md — Batch K line in the deploy
list, Sprint 15 section after Sprint 14, TL;DR Sprint 15
line, Last-updated footer updated.
- docs/HANDOFF.md — Sprint 15 section after Sprint 14, Last-
updated footer updated. Notes the corrected free-tier math
and the 2 follow-up tickets.
All 6 docs now reflect Sprint 15. The Sprint 12 latent-bug
fix is documented as a hard prerequisite for the upcoming
Sprint 12 deploy (without it, every 'Search the web' query
would 422). Re-running scripts/seed_recipes.py on a later
day will add the remaining 32 recipes (the script is
idempotent — already-imported IDs return 409 and are
skipped).
This commit is contained in:
+23
-1
@@ -302,7 +302,7 @@ Trust the tests. Trust the live runs. Don't trust prose claims that something is
|
||||
**Current open proposals:**
|
||||
- `docs/proposals/2026-05-23-feedback-driven-recipe-discovery.md` — pending user approval. No code yet (per the 2026-05-23 section below).
|
||||
|
||||
**Last updated: 2026-06-05** — UI/UX audit & fix cycle (Sprints 1, 2, 3, 4, 5, 6, 7, 8, 9) complete. 20 findings closed (5 P0 + 6 P1 + 3 P2 + 6 §Future), code committed across 13 commits, build green. Sprint 1 deployed; Sprints 2-9 awaiting deploy. **Sprint 7 (`09c7525`, awaiting user deploy)** aligns "this week" to the upcoming Monday. **Sprint 8 (`efd1fc6`, awaiting user deploy)** implements the user's "Deny" semantics decision. **Sprint 9 (committed 2026-06-05, awaiting user deploy)** ships the F1 Onboarding Tour. **Sprint 10 (committed 2026-06-05, awaiting user deploy)** ships the "Deny Forever" on Recipes. **Sprint 11 (committed 2026-06-05, awaiting user deploy)** wires the dead "Generate Meal Plan" CTA. **Sprint 12 (committed 2026-06-05, awaiting user deploy)** ships the F8 Spoonacular search. **Sprint 13 (committed 2026-06-05, awaiting user deploy)** ships the F9-lite Ollama Cloud plan synthesis. **Sprint 14 (code complete 2026-06-05, awaiting commit + push)** ships Vitest for `useOnboarding` (Q4) — 7/7 tests green. See Sprint 7 + Sprint 8 + Sprint 9 + Sprint 10 + Sprint 11 + Sprint 12 + Sprint 13 + Sprint 14 sections below. Full UI-audit handoff at `Review/handoff-ui-audit.md`.
|
||||
**Last updated: 2026-06-06** — UI/UX audit & fix cycle (Sprints 1, 2, 3, 4, 5, 6, 7, 8, 9) complete. 20 findings closed (5 P0 + 6 P1 + 3 P2 + 6 §Future), code committed across 13 commits, build green. Sprint 1 deployed; Sprints 2-9 awaiting deploy. **Sprint 7 (`09c7525`, awaiting user deploy)** aligns "this week" to the upcoming Monday. **Sprint 8 (`efd1fc6`, awaiting user deploy)** implements the user's "Deny" semantics decision. **Sprint 9 (committed 2026-06-05, awaiting user deploy)** ships the F1 Onboarding Tour. **Sprint 10 (committed 2026-06-05, awaiting user deploy)** ships the "Deny Forever" on Recipes. **Sprint 11 (committed 2026-06-05, awaiting user deploy)** wires the dead "Generate Meal Plan" CTA. **Sprint 12 (committed 2026-06-05, awaiting user deploy)** ships the F8 Spoonacular search. **Sprint 13 (committed 2026-06-05, awaiting user deploy)** ships the F9-lite Ollama Cloud plan synthesis. **Sprint 14 (committed 2026-06-05, awaiting user push)** ships Vitest for `useOnboarding` (Q4) — 7/7 tests green. **Sprint 15 (code complete 2026-06-06, awaiting user commit + push)** seeds 18 family-friendly recipes (free-tier 50-pt cap hit; 32 more to seed on later days) and fixes the Sprint 12 latent-bug (`main.py` mount order). See Sprint 7 + Sprint 8 + Sprint 9 + Sprint 10 + Sprint 11 + Sprint 12 + Sprint 13 + Sprint 14 + Sprint 15 sections below. Full UI-audit handoff at `Review/handoff-ui-audit.md`.
|
||||
|
||||
---
|
||||
|
||||
@@ -456,6 +456,28 @@ Trust the tests. Trust the live runs. Don't trust prose claims that something is
|
||||
|
||||
**Open question:** Q1 — should Sprint 15 add component-level tests for `<OnboardingTour/>` (focus, arrow keys, dialog a11y)? Default: yes, future sprint. Adds `@testing-library/user-event`. ~1.5 hr.
|
||||
|
||||
### Sprint 15 — Seed 50 family-friendly recipes for 4-week planning (content op) + Sprint 12 latent-bug fix (user-driven) — CODE COMPLETE 2026-06-06
|
||||
|
||||
**User direction (2026-06-05):** "Lets build out recipes for the coming 4 weeks in advance. In order to do this, lets add more recipes to the list of available ones."
|
||||
|
||||
**Sprint 15 is a content operation, not a feature sprint.** No new code, no schema changes, no UI changes. But in the process I discovered a Sprint 12 latent bug (WIP `GET /{recipe_id}` shadows the new `/search` route) and fixed it.
|
||||
|
||||
**Scope (4 boxes):**
|
||||
1. **`backend/app/main.py` mount-order fix** — moved `recipe_search_api.router` import + `include_router` to BEFORE `recipes_api.public_router`. 3-line comment explains the why. **Critical for Sprint 12 deploy:** without this, every "Search the web" query in the frontend 422s.
|
||||
2. **`scripts/seed_recipes.py` (NEW, ~150 lines)** — 50-query one-shot Python script. Hits Spoonacular's `complexSearch` directly (avoids the broken backend route during the time before the main.py fix took effect; also avoids the backend's quota counter). For each query: takes the top hit, POSTs to the backend's `/api/recipes/import`. Idempotent (409 on duplicate). 1.5 sec sleep. Stops cleanly on 402.
|
||||
3. **18 recipes imported today** (free-tier 50-pt cap hit at query 28). Distribution: 8 Italian + 7 Mexican + 3 Asian + 0 American + 0 Mediterranean. Plus 1 from earlier manual test. DB now has 49 total recipes (was 31). All imported recipes have `external_source='spoonacular'`, an `external_id`, ingredients, image_url, source_url, prep/cook time, servings, and cuisine tags.
|
||||
4. **LLM test (Sprint 13 endpoint, week 2026-07-06):** `picked_count=0 / filled_count=19 / failed_count=2`. The library fill covered 19/21 slots; the LLM (kimi-k2.6:cloud) returned 0 picks. Sprint 13 tolerance worked as designed.
|
||||
|
||||
**Cost (corrected):** free tier is 50 pts/day, not 150. 50 queries = 50 × 1.10 (search) + 50 × 1 (import) = 105 pts. Need 3 days on free tier. **Follow-up: lower `_DAILY_LIMIT=140` in `recipe_search.py:48` to 45** to match the real cap.
|
||||
|
||||
**No pre-existing WIP files touched.** Only `main.py` was reordered (one-line + comment); `recipes.py`, `schemas/recipe.py`, `nginx.conf` are unchanged.
|
||||
|
||||
**No regression expected:** Sprint 15's main.py change just reorders two `include_router` calls; the WIP's routes still match their original paths. `GET /api/recipes/{uuid}` still returns the WIP's `RecipeRead`; `GET /api/recipes/search` now returns Sprint 12's `RecipeSearchHit[]`; `POST /api/recipes/import` still returns Sprint 12's recipe row. Verified live on the host.
|
||||
|
||||
**Tracking docs:** `Review/sprint15-verification.md` (full 18-imported breakdown + free-tier math + LLM test + 6-risk table + deploy), `Review/ui-nielsen-audit.md` Sprint 15 status block (T8.1-T8.3), `fix-ui-audit.md` Sprint 15 section (T8.1-T8.5), `Review/handoff-ui-audit.md` Sprint 15 section + Batch K, this file.
|
||||
|
||||
**§Future backlog status after Sprint 15:** F1 ✓, F8 ✓, F9-lite ✓, Q4 ✓. Only F9-full (local Ollama model pull) remains — opt-in based on cloud-billing feedback. The library has 49 recipes; re-running the seed script on later days will add up to 32 more (cap reset is 24h rolling).
|
||||
|
||||
---
|
||||
|
||||
## New session: 2026-06-05 (early)
|
||||
|
||||
Reference in New Issue
Block a user