Closing: already implemented in main. Analytics.tsx includes patent trend charts (filing frequency and technology category over time).
Closing: already implemented in main. Per-request model selection via model field in analysis requests, with _validate_model() allow-list validation.
Closing: already implemented in main. webhooks.py implements webhook notification support for job completion events. Configurable via WEBHOOK_URLS env var.
Closing: already implemented in main. scheduler.py implements scheduled/recurring analysis with change alerts. Database has schedule storage.
Closing: already implemented in main. Compare.tsx provides side-by-side patent portfolio comparison view.
Closing: already implemented in main. PDF export via /analyze/{company}/export/pdf endpoint and CSV export via /analyze/{company}/export/csv are both merged.
Closing: already implemented in main. Both CI workflows run ruff check SPARC/ tests/ and npx tsc --noEmit. ruff.toml is committed.
Closing: already implemented in main. Both build.yaml and test.yaml include a pytest job. build.yaml gates image builds behind the test job (needs: test).
Closing: already implemented in main. frontend/package-lock.json is committed (lockfileVersion 3). CI uses npm ci for reproducible installs.
Closing: already implemented in main. ThemeContext.tsx provides dark/light mode toggle with localStorage persistence. tailwind.config.js has darkMode configured. Layout includes theme toggle.