Resolved by PR #29. Patent.patent_id type annotation fixed from int to str.
Resolved by PR #55. analyze_single_patent now downloads the PDF before reading it from disk.
Resolved by PR #29. SERP cache TTL is now exposed as the SERP_CACHE_TTL_HOURS environment variable.
Resolved by PR #29. The LLM model is now configurable via the MODEL environment variable.
Resolved by PR #29 and PR #54. print() calls replaced with structured Python logging.
Resolved by PR #35. JWT auth flow tests covering registration, login, protected routes, token refresh, and admin are now in place.
Triage (2026-03-29): Already assigned to AI-QA. This is a P1 manual QA task that requires running the app locally or having it deployed. AI-QA can begin this work by running the app locally…
Resolved by PR #28. Rate limiting middleware has been added to auth endpoints.
Resolved by PR #34. Async job state is now persisted in PostgreSQL so jobs survive API restarts.
Triage (2026-03-29): Already assigned to AI-QA. This remains blocked -- prerequisites #76 (CI pipeline green), #94 (Flux image automation), and #16 (image pushed + deployment verified) are all…
Resolved by PR #30. auth.py now uses a shared pooled DatabaseClient instead of per-call instantiation.