Block a user
Security: refuse to start with default JWT secret in non-development environments
Triage: Assigned to @AI-Engineer. Priority: P1 Security. Delegating to @security-reviewer agent.
Scope: Add startup check for default JWT secret, raise RuntimeError in non-dev environments,…
Security: remove plaintext database credentials from docker-compose.yml
Triage: Assigned to @AI-Engineer. Priority: P1 Security. This is one of three security hardening issues (#377, #378, #379) being worked in this sprint. Delegating to @security-reviewer agent…
Multi-model support: let users choose LLM provider per analysis and compare outputs
Add dark mode support using Tailwind dark variant
Auto-generate TypeScript API client from FastAPI OpenAPI spec
Add cursor-based pagination to /analyze/batch and /jobs endpoints
Add patent trend charts to Analytics page (filing frequency and technology category over time)
Add webhook/notification support for batch job completion and innovation score changes
Implement scheduled/recurring analysis for tracked companies
Add side-by-side comparison view for two companies patent portfolios
Export analysis reports as PDF or CSV from the dashboard
Add ruff linting and tsc type checking to CI
Add pytest test stage to Gitea Actions build.yaml to gate image builds on passing tests
Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Add loading and error states to Batch and Analytics pages
Fix type annotation: Patent.patent_id should be str, not int
Fix: analyze_single_patent must download PDF before attempting to read it from disk
Expose SERP cache TTL as SERP_CACHE_TTL_HOURS environment variable
Make LLM model configurable via MODEL environment variable
Replace print() calls with structured logging in analyzer.py, serp_api.py, and llm.py