Skip to content

Review Stacks: 「No reviewer」バケットを3区分に分割する #286

@coji

Description

@coji

背景

Review Stacks の Review Queue 側で表示している「No reviewer(レビュアー未アサイン)」には、実際には性質の異なる複数のケースが混在している。

原因: pull_request_reviewers テーブルは GitHub GraphQL の reviewRequests(現在開いているレビュー依頼)をスナップショット洗い替えしているため、reviewer が approve すると行が消え、hasAnyReviewer=false になって No reviewer バケットに落ちてしまう。

関連コード:

  • app/routes/\$orgSlug/workload/+functions/stacks.server.ts:42-52hasAnyReviewer の EXISTS サブクエリ
  • app/routes/\$orgSlug/workload/+functions/aggregate-stacks.ts:144-156 — unassigned バケット生成
  • batch/db/mutations.ts:137-171 — snapshot 方式の upsert

実データ(jtc, open PR 209件)

No reviewer バケットは 165件 (79%)。内訳:

区分 件数 割合
真にレビュアー未アサイン(review 記録ゼロ) 78 47%
Approved 済み(≥1 APPROVED review あり) 49 30%
レビュー済みだが approve なし(COMMENTED/CHANGES_REQUESTED のみ) 38 23%

現状のラベルは半分以上ミスリード。実質「レビュー依頼が今開いていない PR」を指している。

提案

バケットを3区分に分割する:

  1. Unassigned(真に未アサイン) — 誰かをアサインする必要あり
  2. Approved, awaiting merge — マージ待ち。作者スタック側の警告に回すほうが価値がある(マージ詰まり検知)
  3. Reviewed, changes pending(changes_requested / commented のみ) — 作者が対応後に再依頼すべき

実装方針

  • stacks.server.ts のクエリに pull_request_reviews を JOIN し、PR ごとの最新 review state 情報を付与
  • aggregate-stacks.ts の unassigned 分岐を 3区分に拡張
  • UI (pr-block.tsx の amber "no reviewer" ラベル、insight 文言) を更新
  • 「Approved awaiting merge」は author stack 側で別色の警告として表示することを検討

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions