Skip to content

coderabbit-resolver: fix stale rate-limit detection + investigate coderabbit CLI integration #4

Description

@ryota-murakami

背景

coderabbit-resolver skill の wait-for-ratelimit.sh が「PR に残っている古い rate-limit comment」を「今発生したばかり」と誤認する設計上の弱点があります。今日 (2026-05-02) の electron-mcp-server PR #24 リリース作業中に再現しました。同時に、ローカルにインストール済みの coderabbit CLI (v0.4.4) の調査で、PR push 不要でレビューが取得できる可能性が見つかったため、まとめて issue 化します。


Bug: stale rate-limit comment detection

症状

wait-for-ratelimit.sh <owner> <repo> <pr_number> は、PR の最新 CodeRabbit コメントを取得して rate.?limit 正規表現で判定します。しかし「最新コメント = 最新の rate-limit インシデント」を仮定しており、スクリプト起動時刻を考慮しません。古い rate-limit comment が PR に残っていると、それを誤検出して再度 @coderabbitai full review を post します。

再現タイムライン (PR #24)

時刻 (UTC) イベント
09:03:49 初 push 後、CodeRabbit が rate-limit comment を post
09:51 頃 rate-limit clear (47 分待機)
09:56:20 手動で @coderabbitai full review post
10:02:21 CodeRabbit が actual review を投稿 (Major×1, Minor×1)
10:02:38 頃 私が並列 background で wait-for-ratelimit.sh を起動
↑ ここで script は 09:03:49 の古い comment を「最新」と検出
10:10:11 PR squash-merge、release.yml 起動
10:10:41 npm publish 成功
10:18:43 script が 8 分待機後に重複 `@coderabbitai full review` を post (closed PR 上)
10:18:49 CodeRabbit が "Full review triggered" 自動 reply (実レビューなし、closed PR ゆえ)

幸い merge 後の post だったので無害でしたが、open PR で同じことが起きると spurious trigger でレートリミット枠を 1 消費 します。Pro plan の 5/hr クォータでは深刻です。

提案する修正

wait-for-ratelimit.sh--since <ISO timestamp> 引数を追加し、その時刻以降の rate-limit comment のみ対象にする。

```bash

現状

LATEST_COMMENT=$(gh api "repos/$OWNER/$REPO/issues/$PR_NUMBER/comments?per_page=10&sort=created&direction=desc" \
--jq '[.[] | select(.user.login == "coderabbitai" or .user.login == "coderabbitai[bot]") | .body] | .[0] // empty')

修正案

SINCE=${SINCE:-$(date -u +%FT%TZ)} # default: now
LATEST_COMMENT=$(gh api "repos/$OWNER/$REPO/issues/$PR_NUMBER/comments?per_page=10&sort=created&direction=desc" \
--jq "[.[] | select(.user.login == \"coderabbitai\" or .user.login == \"coderabbitai[bot]\") | select(.created_at > \"$SINCE\") | .body] | .[0] // empty")
```

workflows/review-loop.md の Step 6b 呼び出し側でも、push 直前のタイムスタンプを引数として渡すように変更する必要があります。

関連: macOS BSD grep の -P (PCRE) 非対応

このスクリプトは grep -oP '\d+' を使っており、macOS の BSD grep では invalid option エラーで死にます。フォールバックの 15 分デフォルト wait に落ちますが、待ち時間精度が大きく落ちます。grep -oE '[0-9]+' または awk ベースに置き換えるべき。今日の PR #23 のラウンドでも踏みました。


Investigation: coderabbit CLI integration の可能性

ローカル環境で coderabbit CLI v0.4.4 (/Users/ryotamurakami/.local/bin/coderabbit) がインストール済みでした。coderabbit review --help を確認したところ、PR push 不要でレビューを取得できる機能が揃っています。

主要サブコマンド

Command 概要
coderabbit review local git changes を AI review
coderabbit auth login/logout/status/org 切替
coderabbit stats レビュー履歴 (使用量可視化)
coderabbit feedback レビュー品質フィードバック送信

coderabbit review の重要オプション

Flag 用途
--agent structured findings を emit (機械可読、agent workflows 向け)
--prompt-only AI agent 用 prompt のみ出力 (Claude Code に直接渡せる)
--type {all,committed,uncommitted} review scope
--base <branch> comparison base (main 等)
--base-commit <commit> base commit 指定
--files <files...> 特定ファイルのみ
-c <files...> 追加 instruction (claude.md, coderabbit.yaml 等)
--api-key <key> API key 認証 (CI 用)

戦略的価値

Pre-push レビュー に組み込めば、push 後に PR 上の CodeRabbit (rate-limited) で発見されるはずだった指摘を、push 前にローカルで潰せます。これにより:

  1. PR review サイクル数が減る → rate-limit ヒット頻度が下がる
  2. --agent mode の structured findings を Claude Code が直接読み取り → 自動 fix
  3. -c CLAUDE.md でプロジェクト固有規約も同時適用

検証すべき項目

  • CLI レビューは PR レビューと 別クォータ か? (Pro plan 5/hr が共有なら効果半減)
  • --agent 出力の JSON schema (フィールド構造、severity 分類)
  • coderabbit auth status が CI 非 TTY 環境で機能するか (今回は spinner で hang 気味だった)
  • --api-key 認証フローと credential 管理 (~/.config/coderabbit/ 推定)
  • PR レビューと CLI レビューで同等品質の指摘が得られるか (false-positive/negative 比較)

Action items

Quick fix (短期)

  • wait-for-ratelimit.sh--since <ISO> 引数を追加 (default: 起動時の date -u +%FT%TZ)
  • workflows/review-loop.md Step 6b の呼び出し側で push 直前タイムスタンプを渡す
  • grep -oPgrep -oE または awk に置換 (macOS BSD grep 互換性)

Strategic enhancement (中期)

  • coderabbit CLI 機能の動作検証 (上記検証項目)
  • coderabbit-resolver workflow に Step 0.5: Pre-push CLI review を追加するか設計
    • coderabbit review --agent --base main --type all -c CLAUDE.md を push 前に実行
    • structured findings を Claude Code が解釈 → 自動 fix → 再 review
    • 致命的な指摘がなくなったら push & PR-based review へ
  • CLI/PR レビュー結果の差分が大きい場合のフォールバック戦略

Documentation

  • references/coderabbit-cli.md を追加 (CLI subcommand リファレンス)
  • coderabbit-rate-limit-pattern.md (electron-mcp-server 側 memory) と同様の知見をスキル内 docs に整理

参考: 元の発見コンテキスト

電子 MCP サーバーの v2.0.0-rc.3 リリース作業中に発生 (2026-05-02)。詳細はローカル memory: ~/.claude/projects/-Users-ryotamurakami-laststance-electron-mcp-server/memory/finding_2026-05-02_coderabbit-rate-limit-pattern.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions