Severity: high | Category: infra | Phase: P2.1
Problem
_query_top_tasks calls tasks.get() per row (new SQLite connection each) with limit up to 1000, and get_top_tasks_by_cost runs a dominant-agent subquery per task — ~1000 connection opens + ~2000 queries for one dashboard request.
Evidence
codeframe/ui/routers/costs_v2.py:232, codeframe/platform_store/repositories/token_repository.py:419
Acceptance criteria
Title lookup batched via WHERE id IN (...); dominant-agent folded into one windowed/CTE query; O(1) queries regardless of limit.
Dependencies
blocked by #712 ([P0.1])
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).
Severity: high | Category: infra | Phase: P2.1
Problem
_query_top_taskscallstasks.get()per row (new SQLite connection each) withlimitup to 1000, andget_top_tasks_by_costruns a dominant-agent subquery per task — ~1000 connection opens + ~2000 queries for one dashboard request.Evidence
codeframe/ui/routers/costs_v2.py:232,codeframe/platform_store/repositories/token_repository.py:419Acceptance criteria
Title lookup batched via
WHERE id IN (...); dominant-agent folded into one windowed/CTE query; O(1) queries regardless of limit.Dependencies
blocked by #712 ([P0.1])
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).