kiwi/app
pyr0ball ed4595d960 feat(recipes): async L3/L4 recipe job queue with poll endpoint
Adds the recipe_jobs table and background task pipeline for level 3/4
recipe generation. POST ?async=true returns 202 with job_id; clients
poll GET /recipes/jobs/{job_id} until status=done.

Key fix: _enqueue_recipe_job now calls scheduler.enqueue() after
insert_task() to wake the in-memory work queue immediately. Without
this, tasks sat in 'queued' until the scheduler's 30s idle cycle or
an API restart triggered _load_queued_tasks().

- Migration 034: recipe_jobs table (job_id, user_id, status, request,
  result, error) with indexes on job_id and user_id/created_at
- Store: create/get/update_running/complete/fail recipe job methods
- runner.py: recipe_llm task type + _run_recipe_llm handler; MUST
  call fail_recipe_job() before re-raising so status stays consistent
- CLOUD_MODE guard: falls back to sync generation (scheduler only
  polls shared settings DB, not per-user DBs)
- L4 wildcard is covered by the same req.level in (3, 4) dispatch
2026-04-19 21:44:27 -07:00
..
api feat(recipes): async L3/L4 recipe job queue with poll endpoint 2026-04-19 21:44:27 -07:00
core fix: suppress E2E test sessions from log-based analytics 2026-04-18 19:06:37 -07:00
db feat(recipes): async L3/L4 recipe job queue with poll endpoint 2026-04-19 21:44:27 -07:00
models feat(recipes): async L3/L4 recipe job queue with poll endpoint 2026-04-19 21:44:27 -07:00
services fix(recipe): fail fast on cf-orch 429 instead of slow LLMRouter fallback 2026-04-19 20:24:21 -07:00
staples fix: staple library — consistent tofu_firm slug, load error handling, typed yield_formats, expanded test coverage 2026-03-30 23:10:51 -07:00
static chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
styles feat: recipe engine Phase 3 — StyleAdapter, LLM levels 3-4, user settings 2026-03-31 14:15:18 -07:00
tasks feat(recipes): async L3/L4 recipe job queue with poll endpoint 2026-04-19 21:44:27 -07:00
utils chore: initial commit — kiwi Phase 2 complete 2026-03-30 22:20:48 -07:00
__init__.py chore: bump version to 0.2.0 2026-04-08 22:10:36 -07:00
cloud_session.py fix: wire recipe corpus to cloud per-user DBs via SQLite ATTACH (#102) 2026-04-18 14:21:56 -07:00
main.py fix: recipe enrichment backfill, main_ingredient browser domain, bug batch 2026-04-18 15:38:56 -07:00
tiers.py chore: merge main into feature/meal-planner 2026-04-14 14:53:52 -07:00