Repository navigation
Releases: thomast8/pr-dashboard
Release list
v1.16.0
What's New
Recently Closed filter
New "Recently closed" option in the PR status dropdown showing closed (unmerged) PRs from the last 7 days, sorted newest-first. Backed by a new closed_at column on the PullRequest model.
PR search bar
Free-text search input in the RepoView filter bar. Matches case-insensitively against PR number, title, author login/display name, branch name, reviewer logins/display names, and label names. Includes a clear button and integrates with the existing Reset action.
Fixes
PRDetailendpoint now correctly includesclosed_atandmerged_atfields (were silently omitted)- Added
ge=0validation oninclude_merged_daysandinclude_closed_daysquery params - Added test coverage for
include_closed_daysfiltering
v1.15.0
Auth Health Detection & Guided Remediation
Detect GitHub authentication problems during background sync and surface them to users with actionable remediation steps.
What's new
- Auth error classification: 401/403 responses are now classified into specific error types (token expired, token revoked, insufficient permissions, SSO required, decrypt failed, repo not accessible)
- Health banner: Persistent banner below the nav bar when auth issues exist, color-coded by severity (red for critical, orange for partial failures)
- Health panel: Slide-out panel accessible from the banner or user menu, showing account cards with status badges, error messages, affected repos, and remediation buttons
- On-demand token validation: "Check all now" button calls GitHub's API to verify each token and updates status immediately
- Inline repo indicators: Warning icons on repo cards that have sync errors, with tooltip showing the error
- Auto-recovery: When a token starts working again (e.g., after re-authentication), the error state clears automatically and the banner disappears
- SSE events:
auth_issueandauth_resolvedevents for real-time frontend updates
Technical details
- New columns on
GitHubAccount(token_status, token_error, token_checked_at) andTrackedRepo(last_sync_error, last_sync_error_at, last_successful_sync_at) - Alembic migration included
- Transient network/server errors are not misclassified as token problems
- SSE broadcasts only fire on status transitions (not every sync cycle)
v1.14.4
Bug Fixes
- Filter draft and prerelease releases from release notes modal: The release notes viewer was showing draft releases (like v1.11.1) when authenticated, making it look like notes hadn't been updated. Now only published, non-prerelease entries appear.
- Unconditionally hide blocked PRs from attention filters: Blocked PRs were still showing in owner mode when they had actionable items (new feedback, unstable merge). The
blocked_by_pr_idcheck is now applied before mode-specific logic so blocked PRs are hidden in both owner and review modes.
v1.14.3
Bug Fix
- Exclude blocked PRs from attention filters: PRs blocked by another PR in a stack are now hidden from "Waiting on me" (review mode) and "Needs my attention" (owner mode) filters, since there's nothing actionable until the blocker merges. In owner mode, blocked PRs with failing CI or changes requested still appear since those need fixing regardless of stack ordering.
v1.14.2
Fix: Label operations use correct user token
The update_labels endpoint was using a generic token resolver that could pick up an OAuth token instead of the acting user's PAT. This caused 403 errors when setting labels on repos in organizations with OAuth App access restrictions.
All other write operations (reviewers, priority, assignees) already used the correct per-user token resolver. This release aligns label operations with the same pattern.
v1.14.1
Bug Fix: GitHub API Error Handling
What changed
- 5xx retry: Transient GitHub server errors (500, 502, 503) are now retried up to 3 times with exponential backoff, reducing random failures
- Descriptive error toasts: The generic "GitHub API error" toast now shows the actual GitHub error message (e.g. "Validation Failed: Reviews may not be requested from pull request authors"), so you can tell what went wrong without checking backend logs
Housekeeping
- Gitignore all dot-folders (
.claude/,.worktrees/,.gitnexus/,.superpowers/, etc.) - Added AGENTS.md
v1.14.0
What's New
Fix: Accurate merge state badges
Previously the dashboard showed "Has conflicts" for PRs that were blocked by branch protection rules (unresolved review threads, missing approvals, etc.) rather than actual merge conflicts. Now each mergeable_state gets its own badge:
- "Has conflicts" - only shown for actual merge conflicts (
dirty) - "Merge blocked" - branch protection prevents merge (
blocked) - "Unresolved threads (N)" - blocked with specific thread count via GraphQL
- "Branch behind" - base branch has new commits, needs update (
behind) - "Unstable merge" - mergeable but status checks are not clean (
unstable) - "Clean merge" - no issues, ready to merge (
clean)
Scoring improvements
Each merge state now gets semantically correct priority points instead of collapsing to 0:
- Review mode: clean (10), blocked (8), behind (6), unstable (5)
- Owner mode: clean (15), behind (10), unstable (8), blocked (5)
Webhook support for thread resolution
- New
pull_request_review_threadwebhook event for real-time updates when threads are resolved/unresolved - Existing webhooks are automatically migrated to include the new event on startup
Bug fix: sync_single_pr field extraction
Webhook-triggered PR syncs now correctly update mergeable_state, additions, deletions, changed_files, and commit_count (previously only updated during polling sync).
v1.13.1 — Fix Self-Authored PRs in Review Queue
Bug Fix
- Exclude self-authored PRs from the Review Queue: Your own PRs no longer appear in your review queue, even if you're listed as a requested reviewer or have submitted self-reviews. They remain in "My PRs" where they belong.
v1.13.0 — Smarter Polling for Webhook Repos
What's new
RepoView stats: repositioned, hoverable, clickable
Summary stats ("25 open", "5 failing", "3 approved") now sit right next to the repo name instead of being pushed to the far right. Hovering "failing" or "approved" shows a styled tooltip listing the specific PRs. Clicking toggles the corresponding filter on/off for quick drill-down.
Lightweight polling for webhook-active repos
Repos with an active GitHub webhook now skip all detail API calls (reviews, comments, checks, PR detail) during polling cycles. Instead, a lightweight sync fetches only the PR list (with ETag caching) and runs stale PR detection as a safety net. Webhooks continue delivering instant updates for all detail data. This can save up to 6N API calls per webhook-active repo per cycle (where N = number of changed PRs).
Reduced GitHub API rate limit consumption
Polling now categorizes PRs by change status (changed open, changed closed, unchanged open) and only fetches details for PRs that actually changed. Unchanged open PRs only get CI check refreshes. Unchanged closed PRs are skipped entirely.
Fixes
- LOG_LEVEL setting: The
LOG_LEVELenvironment variable now correctly applies to loguru's logger - Filter auto-clear: Selecting "Me" in the author filter now automatically clears any complementary filter that would hide your PRs
Commits
74481b4feat: move RepoView stats next to repo name with hover tooltips and click-to-filterc900722feat: skip redundant polling detail fetches for webhook-active repos1a44f0cfeat: reduce GitHub API rate limit consumptionc1dfd94fix: apply LOG_LEVEL setting to loguru3adb621fix: auto-clear complementary filter when selecting "Me"
v1.12.0 — UI Redesign & Rate Limiting
What's New
UI Redesign
- Card grid layout — PRs now display as responsive cards instead of rows, with visual distinction between stacked and standalone PRs
- Navigation overhaul — underline tab style replaces pill buttons; Spaces/Team moved into user menu
- Overview cards — health bar and compact stats replace the previous stat grid
- Filter UX — progressive disclosure with primary filters always visible, secondary behind "+ Filter" button
- Reviewer filter promoted — always visible in primary filter bar; CI filter moves to secondary section
- Flat view toggle — per-repo toggle to disable dependency graph and show all PRs sorted by priority score (persists to localStorage)
- Dark theme refinement — darker base tones and improved border contrast
Reliability
- Client-level rate limiting — concurrency semaphore (max 10 parallel requests), 100ms inter-request throttle, exponential backoff (5s/15s/45s), proactive rate limit monitoring from response headers, and early abort when rate limit is exhausted. Prevents GitHub API abuse detection during sync bursts.
Bug Fixes
- Priority score bar now sits inline with PR badges instead of floating disconnected