Skip to content

feat(macapp): show per-reviewer status in the PR panel (#52) - #64

Merged
joelmoss merged 1 commit into
masterfrom
feat/pr-review-status
Jun 17, 2026
Merged

joelmoss merged 1 commit into
masterfrom
feat/pr-review-status

Conversation

@joelmoss

Copy link
Copy Markdown
Owner

Closes #52.

What

The Pull Request inspector now shows per-reviewer status — who approved, who requested changes, who is still pending — beneath the aggregate review-decision header. Tells you at a glance when reviews are requested vs in, and when to go visit the PR.

Changes requested              ← aggregate decision header
✗ octocat   changes requested
⏱ Copilot   in progress         ← bots → "in progress"; humans → "review requested"
✓ iainad    approved

How

  • Reviews ride the existing gh pr list --head … --json probe via two new fields (latestReviews, reviewRequests) — no extra API call.
  • classifyPR folds them into a typed, deduped [Reviewer]: .user(login) / .team(slug) identity (a team can't collide with a user), reviewRequests wins on re-request, unrecognised review states skipped, missing fields → [], malformed → keepPrior.
  • PRPresentation.reviewers(_:) is the single sort + map seam → rows with bot-aware labels ("in progress" for bots like Copilot, "review requested" for humans) and friendly names.
  • The aggregate reviewDecision is kept as a header above the rows, so a branch-protected REVIEW_REQUIRED PR with no named reviewers still shows a signal.

Tests

make app-build / app-test (429 pass, +15 review tests) / app-lint — all green. Covers review parse / dedup / team / skip-unknown / decoder back-compat regression; presentation sort / state mapping / bot-aware / team / no-collision.

Not in scope (tracked in TODOS.md)

  • Per-reviewer comment counts ([N comments]) — needs a second gh api call.
  • At-a-glance review status in the sidebar / collapsed header — needs PR resolution in the background sweep.

🤖 Generated with Claude Code

The Pull Request inspector now lists each reviewer with their state — who
approved, who requested changes, who is still pending — beneath the aggregate
review-decision header, so you can tell at a glance when reviews are requested
vs in, and jump to the PR when needed.

Reviews ride the existing `gh pr list` probe via two new --json fields
(latestReviews, reviewRequests) — no extra API call. classifyPR folds them into
a typed, deduped reviewer list (user/team identity so a team can't collide with
a user; reviewRequests wins on re-request; unrecognised review states skipped).
PRPresentation.reviewers sorts and maps each to a row with a bot-aware label
("in progress" for bots like Copilot, "review requested" for humans). The
aggregate reviewDecision is retained as a header, so a branch-protected
REVIEW_REQUIRED PR with no named reviewers still shows a signal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@joelmoss
joelmoss merged commit 68a6228 into master Jun 17, 2026
2 checks passed
@joelmoss
joelmoss deleted the feat/pr-review-status branch June 17, 2026 21:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

In the PR display show that reviews have been requested and when they are in

1 participant