Priority: P1 (review-quality). Child of #1029.
Problem: AI reviews are not durably stored — ai_review_cache has 0 rows and stores only {notes, reviewer_count}. We cannot gauge review accuracy over time (verdict vs realized PR outcome).
Requirements: Persist the FULL review per (repo, pr, head_sha, mode): the verdict (consensusDefect/split/inconclusive/clean), blockers, nits, notes, readiness, disposition, model, timestamp. Wire the verdict↔pr_outcome correlation (computeGateEval / the accuracy loop) so a maintainer dashboard can show precision over time. Deliverables: a reviews/verdict store (migration), the write on every completed review (webhook + sweep paths), and the accuracy read. Relates to the #1462 cache verdict-drop (the cache should carry the verdict, not just notes).
Priority: P1 (review-quality). Child of #1029.
Problem: AI reviews are not durably stored —
ai_review_cachehas 0 rows and stores only{notes, reviewer_count}. We cannot gauge review accuracy over time (verdict vs realized PR outcome).Requirements: Persist the FULL review per
(repo, pr, head_sha, mode): the verdict (consensusDefect/split/inconclusive/clean), blockers, nits, notes, readiness, disposition, model, timestamp. Wire the verdict↔pr_outcomecorrelation (computeGateEval / the accuracy loop) so a maintainer dashboard can show precision over time. Deliverables: a reviews/verdict store (migration), the write on every completed review (webhook + sweep paths), and the accuracy read. Relates to the #1462 cache verdict-drop (the cache should carry the verdict, not just notes).