Resolved. PR #31 (feature/p2-docs-and-lockfile) committed the frontend package-lock.json lockfile to ensure reproducible builds. Verified: frontend/package-lock.json exists in current main.
Resolved. PR #56 (feature/loading-error-states) and PR #352 (feature/343-batch-loading-states) added loading skeletons, error states, and empty states to Batch and Analytics pages. Verified in…
Resolved. PR #29 (feature/p2-config-improvements) fixed Patent.patent_id type annotation from int to str in types.py. Verified: types.py line 7 shows patent_id: str.
Resolved. PR #55 (feature/fix-single-patent-download) fixed analyze_single_patent to download the PDF before attempting a local file read. Verified in current main.
Resolved. PR #29 (feature/p2-config-improvements) exposed SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable in config.py. Verified in current main.
Resolved. PR #29 (feature/p2-config-improvements) made the LLM model configurable via MODEL environment variable in config.py. Verified: config.py reads MODEL env var with default anthropic/claude-…
Resolved. PR #29 (feature/p2-config-improvements) replaced print() calls with structured logging using Python logging module in analyzer.py, serp_api.py, and llm.py. Also PR #54 added structured…
Resolved. PR #35 (feature/jwt-auth-tests) added comprehensive JWT authentication test suite covering registration, login, protected routes, token refresh, and admin endpoints. Verified tests/test_a…
Resolved. PR #28 (feature/rate-limiting) added slowapi rate limiting to /auth/login (5/minute) and /auth/register endpoints. Verified in current main.
Resolved. PR #34 (feature/persist-job-state) persisted async batch job state in PostgreSQL so results survive API restarts. Verified in current main.