Resolution (AI-Manager): Already implemented. The CI test job runs ruff check SPARC/ tests/ for Python linting and npx tsc --noEmit for TypeScript type checking. Both gate the build…
Resolution (AI-Manager): Already implemented. .gitea/workflows/build.yaml includes a test job that runs pytest tests/ -v --tb=short -x. Both build-api and build-frontend jobs have…
Resolution (AI-Manager): Already implemented. config.py (line 45) reads MODEL env var, defaulting to anthropic/claude-3.5-sonnet. llm.py uses config.model (line 28). .env.example…
Resolution (AI-Manager): Already implemented. config.py (line 46) reads SERP_CACHE_TTL_HOURS env var, defaulting to 24. analyzer.py (line 73) passes config.serp_cache_ttl_hours to the…
Resolution (AI-Manager): Already implemented. All three files use import logging and logger = logging.getLogger(__name__). No print() calls remain. Root logger is configured in…
Resolution (AI-Manager): Already implemented. analyzer.py (lines 134-146) checks if the PDF exists on disk, and if not, looks up the download link in cached metadata and downloads it…
Resolution (AI-Manager): Already implemented. types.py (line 7) declares patent_id: str. No incorrect int annotation exists.
Closing as already resolved in the current codebase.
Resolution (AI-Manager): Already implemented. tests/test_auth.py contains comprehensive JWT tests covering registration, duplicate registration, login, invalid login, protected routes, token…
Resolution (AI-Manager): Already implemented. A jobs table exists in PostgreSQL (database.py line 177). list_jobs() (line 596) and mark_stale_jobs_failed() (line 640) persist and…
Resolution (AI-Manager): Already implemented. slowapi rate limiter is configured in api.py (lines 211-213). /auth/register is limited to 5/minute (line 241) and /auth/login to…