hazel.exeNETONLINESYNC09msHAZEL.EXE //ARCHIVE_03 // PR-SWEEPSTATUSOPEN TO CHAT--:--:--
< ARCHIVE_03

PR SWEEP

RECORD 01 OF 05 · ELECTRON · ANGULAR

A Windows and Linux desktop app that shows where a team’s pull requests are stuck this sprint — every open PR across a GitHub organization on one board, sorted by what it’s waiting on, with a sprint summary and a standup you can copy in one click.

01Viewport//01 OF 05
PR Sweep — board — the sprint strip, the Sweep of stuck PRs with next steps, then a table per review state
CAM 01 // PR-SWEEP
BOARD — THE SPRINT STRIP, THE SWEEP OF STUCK PRS WITH NEXT STEPS, THEN A TABLE PER REVIEW STATE · CLICK OR → FOR NEXT
02Readme//3 PARAGRAPHS

Set the org, the team and the sprint schedule once, and the board opens on the current sprint and moves on when it ends. The Sweep at the top lists every PR that needs a human — failing CI, a merge conflict, feedback nobody addressed, a push waiting on re-review, an approval nobody merged, no reviewers — with how long it has been that way, a one-click next step and a snooze. A strip above it sums up the sprint: days left, what’s open, what needs attention, what merged and the median time to merge, and Copy standup turns that into a standup that pastes formatted into Teams and as Markdown into Discord. Below, open PRs are sorted into Needs review, Changes requested, Approved and Merged from GitHub’s own reviewDecision, with no labels to keep up, and Waiting on my review lists what anywhere in the org is waiting on you. Profiles save an org, team and period, and export as JSON for teammates to import.

The interesting engineering is in the GitHub layer. Every “this PR has a problem” signal comes from one pure attention function, which the Sweep, the summary and the standup all read. OR-ing authors needs GraphQL’s advanced search backend; search hard-caps at 1000 results, so a busy date window splits itself in half and recurses; merged PRs are searched a week at a time, four weeks in parallel, and a page that times out is re-sent at half the size. Mergeability and review times come from one follow-up query, only for the PRs that need them, and v0.11 took a full refresh for a five-person team from 28.9 s to 9.1 s. Auto-refreshes ask only for PRs updated since the last sweep and patch the cached result, and the last sweep is snapshotted to disk, so the board renders instantly on launch. A token that isn’t SAML-authorized gets silently empty results rather than errors, so PR Sweep probes for that and explains it.

It ships like a real product: device-flow "Sign in with GitHub", credentials encrypted at rest (DPAPI through safeStorage on Windows, the system keyring through libsecret on Linux), and a tray that sweeps every five minutes, counts what needs the team, and notifies when a PR lands in your queue or one of yours is approved, gets changes requested or starts failing CI. Windows builds are code-signed with Azure Trusted Signing, the Windows installer and the Linux AppImage update themselves, and the portable exe says when a new version is out. A Playwright harness screenshots every state from fixtures in light and dark, and CI runs the core tests and a WCAG AA contrast check on the theme. It only ever reads from GitHub, with no telemetry and no server of its own.

03Record//INFO
STATUS
ACTIVE
YEAR
2026
STACK
Electron · Angular
SCREENSHOTS
05
SOURCE
github.com/hazeliscoding/pr-sweep
< All projects
04Tags
ElectronAngularTypeScriptGitHub GraphQLNode.jsPlaywrightCI/CDDesktop
05Adjacent records
OPERATIONALOPEN RECORD → ARCHIVE_03 // PR-SWEEP · --:--:--1–4 MODE · ⌘K COMMAND · ESC BACK