This issue has been resolved on main. SPARC/types.py declares patent_id: str (confirmed via grep). The type annotation is correct. Closing as complete.
This issue has been resolved on main. SPARC/analyzer.py lines 133-149 in analyze_single_patent() check if the PDF exists on disk, and if not, look up the cached PDF link in the database and…
This issue has been resolved on main. SPARC/config.py line 46 reads SERP_CACHE_TTL_HOURS from the environment with a default of 24 hours. Closing as complete.
This issue has been resolved on main. SPARC/config.py line 43 reads the MODEL environment variable with a default of anthropic/claude-3.5-sonnet. The analyzer and API endpoints accept an…
This issue has been resolved on main. No print() calls remain in SPARC/analyzer.py, SPARC/serp_api.py, or SPARC/llm.py. All modules use the logging module with `logger = logging.getLogger…
This issue has been resolved on main. tests/test_auth.py (302 lines) covers registration, login, protected routes, token refresh, and admin access with comprehensive mocking of the database…
This issue has been resolved on main. Rate limiting is implemented in SPARC/api.py (using slowapi), and tests/test_rate_limit.py (97 lines) validates the rate limiter behavior on auth…
This issue has been resolved on main. SPARC/database.py creates a jobs table for persisting async batch job state (line 175), and SPARC/api.py uses a database-backed job persistence pattern…
This issue has been resolved on main. SPARC/auth.py (lines 149-178) implements a module-level singleton DatabaseClient initialized via init_db_client() at startup and accessed through…
This issue has been resolved on main. docker-compose.yml uses environment variable substitution (${POSTGRES_USER}, ${POSTGRES_PASSWORD}, ${POSTGRES_DB}) instead of hardcoded credentials.…