Block a user
Add cursor-based pagination to /analyze/batch and /jobs endpoints
Add export functionality for analysis reports (PDF and CSV download)
Add ruff (Python) and tsc --noEmit (TypeScript) linting to CI
Add pytest test job to Gitea Actions CI workflow that gates image builds
Commit a frontend lockfile (package-lock.json or pnpm-lock.yaml) for reproducible builds
Add loading states and error messages to Batch and Analytics frontend pages
Fix Patent.patent_id type annotation from int to str in types.py
chore: add -race flag to CI test step to catch concurrency bugs in aggregation layer
Fix analyze_single_patent to download PDF before reading 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
Add JWT authentication integration tests covering login, protected routes, and admin endpoints
Add rate limiting middleware to /auth/login and /auth/register endpoints
Persist async job state in PostgreSQL to survive API restarts
Refactor auth.py to use a shared pooled DatabaseClient instead of per-call instantiation
Move database credentials out of docker-compose.yml into .env file
Make CORS allowed origins configurable via environment variable
Add startup check refusing default JWT secret in non-dev environments
feat: add review status icon and merge status indicator to PR list rows
Status: PR Created
PR #102 implements this feature. Changes across 4 files:
internal/gitea/client.go: AddedReviewStatefield,Reviewstruct,GetPullReviewState()(aggregates…