Already implemented. Both Gitea Actions workflows (build-and-push and test-and-lint) include a test job that runs python3 -m pytest tests/ -v --tb=short -x with appropriate environment…
Already implemented. frontend/package-lock.json is committed and tracked by git. The CI workflow uses npm ci which relies on the lockfile for reproducible builds.
Closing as completed.
Already implemented. Loading skeletons, error states, and empty states were added to the Batch page in PR #352. The Analytics page also has loading and error handling via React Query integration.
…
Already implemented. The patent PDF volume mount is documented (merged in PR #1374). Additionally, S3/MinIO object storage support is implemented in SPARC/storage.py with a pluggable backend…
Already implemented. SPARC/types.py defines Patent.patent_id as str, not int. The dataclass reads:
@dataclass
class Patent:
patent_id: str
pdf_link: str
pdf_path: str…
Already implemented. SPARC/analyzer.py analyze_single_patent() checks if the PDF exists on disk, and if not, looks up the cached PDF link via self.db.get_cached_patent(patent_id) and…
Already implemented. SPARC/config.py reads SERP_CACHE_TTL_HOURS from the environment: serp_cache_ttl_hours = int(os.getenv("SERP_CACHE_TTL_HOURS", "24")). This value is documented in…
Already implemented. SPARC/config.py reads MODEL from the environment: model = os.getenv("MODEL", "anthropic/claude-3.5-sonnet"). The LLMAnalyzer uses config.model as its default, and…
Already implemented. All modules (analyzer.py, serp_api.py, llm.py, auth.py, webhooks.py, scheduler.py, storage.py) use logging.getLogger(__name__) with structured log calls.…
Already implemented. tests/test_auth.py covers the complete JWT lifecycle: registration (success and duplicate email), login (success and wrong password), protected routes with valid/invalid/expi…