Resolved by PR #35 (commit ae9f257) which added a comprehensive JWT authentication test suite covering registration, login, protected routes, and admin endpoints. Closing as complete.
Resolved by PR #29 (commit b000146) and PR #54 (commit 0b4d712) which replaced print() calls with structured Python logging. Closing as complete.
Resolved by PR #29 (commit b000146) which made the LLM model configurable via the MODEL environment variable. Closing as complete.
Resolved by PR #29 (commit b000146) which exposed SERP cache TTL as the SERP_CACHE_TTL_HOURS environment variable. Closing as complete.
Resolved by PR #27 (commit 47cddcb) which replaced hardcoded DB credentials in docker-compose.yml with .env file references. Closing as complete.
Resolved by PR #30 (commit d366443) which refactored get_db_client() to use a shared pooled DatabaseClient singleton. Closing as complete.
Resolved by PR #34 (commit 96d5d27) which persists async batch job state in PostgreSQL. Closing as complete.
Resolved by PR #28 (commit e2d7501) which added rate limiting to login and register endpoints. Closing as complete.
Resolved by PR #31 (commit 3dac88e) which documented patent PDF storage requirements, and PR #58 which added S3/MinIO object storage support. Closing as complete.
Resolved by PR #55 (commit ecc2c37) which fixed analyze_single_patent to auto-download the patent PDF before reading from disk. Closing as complete.