Already implemented. get_db_client() in auth.py is documented as returning a shared pooled database client. Closing.
Already implemented. api.py uses slowapi with rate limiting (5/minute) on auth endpoints. Closing.
Already implemented. config.py reads SERP_CACHE_TTL_HOURS env var with default 24. Closing.
Already implemented. config.py reads MODEL env var with default 'anthropic/claude-3.5-sonnet'. Closing.
Already correct. Patent.patent_id is typed as str in types.py. Closing.
Code review: Solid implementation. ListCollaborators and AssignIssue client methods use correct Gitea API. Handler has proper validation and HTMX/non-HTMX response paths. Template conditionally renders assignee dropdown. Minor nit: strings.NewReader(string(payload)) could be bytes.NewReader(payload), but functionally correct. Ready to merge.
Code review: Well-implemented label multi-select. New GET /issues/new/labels endpoint returns HTML fragments consistent with HTMX patterns. Proper error handling, HTML escaping applied correctly. CreateIssue handler now parses label_ids and passes them through. Ready to merge.
Code review: Changes are clean and well-scoped. Dashboard handler correctly reads org query param, template uses HTMX with hx-push-url for proper URL state, filter only shows when multiple orgs exist. Ready to merge.