Repository navigation
Tags: sunwrobert/pr-review
Tags
fix: readiness scores from GitHub facts first, Jev on top Replayed against 23 live PRs, mean error vs a hand-written review report fell from 21 to 9 points and rank agreement rose from 0.46 to 0.74. Risk no longer lowers the score (shown as an outlined badge), Jev's blocker odds only count above 0.5, and Jev now reads one dated timeline of reviews and comments with superseded bot reports and CI boilerplate dropped. Cache key bumped so old scores are re-fetched.
fix: re-check merge state after a refused merge and after 3 minutes A PR's updatedAt does not change when main moves under it, so a cached CLEAN state could hide a new conflict until the PR itself was edited. Cached merge states now expire after 3 minutes. A refused merge immediately re-fetches that PR's merge state, so the red Merge conflicts badge and Fix with Devin appear right away, with a toast naming the base branch.
fix: cap concurrent gh calls and retry TLS handshake timeouts A refresh fans out queue, merge-state batches, body, diff, conversation, threads and neighbour prefetches at once, each its own gh process with its own TLS handshake. At most 6 gh calls now run at a time. Failures that happen before the request leaves the machine (TLS handshake timeout, dial, DNS) retry after 0.4, 1.2 and 3 s; HTTP and GraphQL errors and mid-request resets are never retried, so mutations cannot repeat.
perf: stop forcing layout when the list re-renders or the selection m… …oves The virtual list read scrollTop and clientHeight on every render, highlight move and scroll-into-view, each forcing a synchronous layout right after rows changed. It now caches both from the scroll event and ResizeObserver, and writes scroll through one setter. The diff pane's reset to the top moved before new items mount, so DiffView.show no longer forces a layout either (about 56 ms of self time per chip press under 4x throttle in profiles).
chore: bench verifies its work, survives hung runs, reports spread Each scenario now checks that its work happened, and page errors count as failures; any failure forces SCORE 0. The type-filter scenario pressed f, which no longer focuses the filter, so it timed empty keystrokes; it now uses /. Adds a refresh scenario. Hung headless runs (about 1 in 14, on either side) are relaunched after 60s instead of hanging the bench forever, frames that never arrive are excluded and counted, and --spread prints per-scenario ranges.
fix: stop images flashing, custom ⇧X Devin message, clearer selectabl… …e toasts The PR list rebuilt every visible row on each refresh, filter keystroke or selection change, so avatars reloaded blank. It now reuses unchanged rows and moves already-decoded images into rebuilt markup; the description and comments do the same when re-rendered for the same PR. Avatars no longer lazy-load. The ⇧X dialog has a message box; Send to Devin sends that text, or Fix CI and merge conflicts if any when empty. Toast text is selectable, stays open while hovered or selected, and every toast names its PR or subject.
PreviousNext