Already implemented -- closing.
Both the Batch and Analytics pages have loading skeletons and error states:
- Analytics page (
frontend/src/pages/Analytics.tsx): UsesisLoadingand…
Already implemented -- closing.
analyze_single_patent() in SPARC/analyzer.py (lines 109-164) already handles automatic PDF download. When the PDF is not found on disk, it checks the…
Already implemented -- closing.
Patent.patent_id is already typed as str in SPARC/types.py (line 7): patent_id: str. No type annotation fix is needed.
No further work needed.
Already implemented -- closing.
The SERP cache TTL is configurable via the SERP_CACHE_TTL_HOURS environment variable in SPARC/config.py (line 46), defaulting to 24 hours. The value is…
Already implemented -- closing.
The LLM model is configurable via the MODEL environment variable in SPARC/config.py (line 43), defaulting to anthropic/claude-3.5-sonnet. Additionally,…
Already implemented -- closing.
All modules in the SPARC/ package use logging.getLogger(__name__) instead of print(). A codebase search for print() calls in SPARC/ returns zero…
Already implemented -- closing.
Comprehensive auth tests exist in tests/test_auth.py (303 lines) covering:
TestRegister: first user becomes admin, subsequent users get user role,…
Already implemented -- closing.
Rate limiting is implemented using slowapi in SPARC/api.py:
Limiterinitialized withget_remote_addresskey function (line 212)/auth/register…
Already implemented -- closing.
Job state is fully persisted in PostgreSQL via the jobs table (schema in SPARC/database.py lines 175-188). The DatabaseClient provides create_job(),…
Already implemented -- closing.
get_db_client() in SPARC/auth.py (lines 168-178) returns a shared DatabaseClient singleton. The DatabaseClient class in SPARC/database.py uses…