fix(coderabbit-review): レビュー実施の陽性証拠を facet/prompt 層にも要求する - #424
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthroughレビュー実施の陽性証拠がない場合に、CI 成功状態だけで承認しない判定を追加しました。分析指示、進行表、TODO の記録も更新しました。 Changesレビュー証拠ゲート
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: 🔵 Low · up to The change tightens review-success reporting, but the workflow prompt still permits broader evidence than the facet and could incorrectly present approval when the current CodeRabbit review did not run. This is a bounded merge-readiness risk requiring owner awareness or follow-up. Possibly related PRs
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(レビュー指摘自体が 0 件のためフィルタ対象なし) 補足: 軽量サマリー (CI・diff)
次のアクション
|
There was a problem hiding this comment.
🔇 Additional comments (3)
.github/workflows/pr-monitor.yml (1)
254-254: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
⚠️ Unverified finding
Sandbox verification was unavailable.Facet と同じレビュー証拠条件に限定してください。
この prompt は
gh api .../reviewsの件数と walkthrough / summary を独立した証拠として認めています。しかし.takt/facets/instructions/analyze-coderabbit.mdLines 84-96 の条件は、findingsが 1 件以上、またはcoderabbit.actionable_commentsがnullでない場合だけです。レビュー一覧は人間・他 bot のレビューや過去サイクルの記録を含み得るため、今回の CodeRabbit レビューが無くてもapprovedを出せます。現在の head と request 後の CodeRabbit 応答に限定し、両層で同じ証拠条件を使用してください。修正案
- 証拠として採用してよいのは「1 件目のレビュー指摘」「gh api .../reviews が 1 件以上返す」「CodeRabbit の walkthrough / summary コメントが存在する」のいずれか。 + `.takt/facets/instructions/analyze-coderabbit.md` と同じく、`findings` が 1 件以上、または `coderabbit.actionable_comments` が `null` でない場合だけを証拠とする。 + raw GitHub API を使う場合は、現在の head に対する request 後の CodeRabbit 応答へ対応付ける。過去レビューや人間・他 bot のレビュー件数だけでは証拠にしない。.takt/facets/instructions/analyze-coderabbit.md (1)
51-51: LGTM!Also applies to: 80-101, 117-117
docs/bugfix-batch-plan.md (1)
19-20: LGTM!Also applies to: 48-48, 57-58, 180-191
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 476cbe87-3c82-4793-b3e2-a41ff89d23a2
📒 Files selected for processing (6)
.github/workflows/pr-monitor.yml.takt/facets/instructions/analyze-coderabbit.mddocs/bugfix-batch-plan.mddocs/todo-summary2.mddocs/todo16.mddocs/todo17.md
💤 Files with no reviewable changes (3)
- docs/todo-summary2.md
- docs/todo17.md
- docs/todo16.md
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)( 次のアクション
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
ast-grep outline .github/workflows/pr-monitor.yml --items all || true
ast-grep outline .takt/facets/instructions/analyze-coderabbit.md --items all || true
echo '--- workflow: review-related occurrences ---'
rg -n -i -C 8 'review|commit_id|head\.sha|actionable_comments|walkthrough|summary|finding' .github/workflows/pr-monitor.yml
echo '--- facet: review-evidence occurrences ---'
rg -n -i -C 8 'review|commit_id|actionable_comments|walkthrough|summary|finding|approved|user_decision' .takt/facets/instructions/analyze-coderabbit.mdLength of output: 41133
Major finding
したがって、過去の head に対するレビューだけでも陽性証拠になります。この場合、現行 head のレビューが未実施でも
追加修正では、prompt 層の条件を facet 層に統一する必要があります。 ✏️ Learnings added
You are interacting with an AI system. |
順位 320 の残件を塞ぐ。決定論層 (check-ci-coderabbit) は ADR-064 の has_review_evidence で「check が pass でもレビュー実施の陽性証拠がなければ success に倒さない」を既に実現しているが、AI 層にはその基準が無く、 findings が空なら理由を問わず approved を出す作りだった。 analyze-coderabbit facet に review evidence gate を追加し、陽性証拠 (findings 1 件以上 / actionable_comments が null でない) が無い場合は approved ではなく user_decision に倒して「レビュー未実施」を明記させる。 new_comments と unresolved_threads を証拠に採用しない理由も明記した (前者は rate-limit 通知でも増え facet の起動条件そのもの、後者は ADR-064 と同じく過去サイクルの残骸を含む)。verdict は 3 値のまま増やしていない — post-pr-review.yaml の rules.condition がリテラル照合するため。 pr-monitor.yml の GHA Phase A prompt にも同じ基準を入れた。こちらは reviews 件数 / walkthrough コメントを証拠に使える。 順位 318 は着手前の調査で 4 項目すべて実装済みと判明した (PR #309 ほか)。 順位 320 も決定論層は ADR-064 で実装済みだった。よって本 PR は Rust コードを 変更せず、facet gap の修正と台帳の後始末に限定している。 todo16.md 318 節 / todo17.md 320 節と todo-summary2.md の 2 行を削除し、 計画書に調査結果 (競合確認・実態調査) を記録した。
15d3c7d to
9d31051
Compare
不具合修正バックログ消化計画の PR A〜D (7 PR) の post-merge feedback を まとめて採否判定した。全 48 提案の内訳は採用候補 16 / 様子見 18 / 却下推奨 14。 採用候補を 7 系統に分類し、そのまま 1 PR になる粒度で 5 タスクへ統合して todo24.md へ起票した (順位 470-474)。様子見・却下推奨は個別登録しない。 - 470: 誤帰属と副作用フラグ欠如を決定論ルールで弾く (custom lint 2 件) - 471: cross-crate 定数 pin と reaper 回帰テストの残片 - 472: 語彙・テスト作法・判断規律の convention 明文化 (8 項目) - 473: テスト用 staging ロックの 2 crate 重複の再評価 - 474: 夜間 auto lane とユーザー割当 PR の同一ファイル競合検知 起票前の実コード確認で 1 件が脱落した — #417 の pin テスト提案は既に両 crate に 実装済みだった。同 PR の他 2 提案も大部分が実装済みで、残片だけを 471 に載せている。 あわせて計画書の保留事項を消化済みにした。cwd_to_project_id の case 不一致は 調査の結果 PR #421 で既に解消済みと判明し (実 Linux でテスト pass を確認)、 ユーザー判断で閉じた。これで保留事項は空になり退役条件 4 を充足する。
不具合修正バックログ消化計画の PR A〜D (7 PR) の post-merge feedback を まとめて採否判定した。全 48 提案の内訳は採用候補 16 / 様子見 18 / 却下推奨 14。 採用候補を 7 系統に分類し、そのまま 1 PR になる粒度で 5 タスクへ統合して todo24.md へ起票した (順位 470-474)。様子見・却下推奨は個別登録しない。 - 470: 誤帰属と副作用フラグ欠如を決定論ルールで弾く (custom lint 2 件) - 471: cross-crate 定数 pin と reaper 回帰テストの残片 - 472: 語彙・テスト作法・判断規律の convention 明文化 (8 項目) - 473: テスト用 staging ロックの 2 crate 重複の再評価 - 474: 夜間 auto lane とユーザー割当 PR の同一ファイル競合検知 起票前の実コード確認で 1 件が脱落した — #417 の pin テスト提案は既に両 crate に 実装済みだった。同 PR の他 2 提案も大部分が実装済みで、残片だけを 471 に載せている。 あわせて計画書の保留事項を消化済みにした。cwd_to_project_id の case 不一致は 調査の結果 PR #421 で既に解消済みと判明し (実 Linux でテスト pass を確認)、 ユーザー判断で閉じた。これで保留事項は空になり退役条件 4 を充足する。
不具合修正バックログ消化計画の PR A〜D (7 PR) の post-merge feedback を まとめて採否判定した。全 48 提案の内訳は採用候補 16 / 様子見 18 / 却下推奨 14。 採用候補を 7 系統に分類し、そのまま 1 PR になる粒度で 5 タスクへ統合して todo24.md へ起票した (順位 470-474)。様子見・却下推奨は個別登録しない。 - 470: 誤帰属と副作用フラグ欠如を決定論ルールで弾く (custom lint 2 件) - 471: cross-crate 定数 pin と reaper 回帰テストの残片 - 472: 語彙・テスト作法・判断規律の convention 明文化 (8 項目) - 473: テスト用 staging ロックの 2 crate 重複の再評価 - 474: 夜間 auto lane とユーザー割当 PR の同一ファイル競合検知 起票前の実コード確認で 1 件が脱落した — #417 の pin テスト提案は既に両 crate に 実装済みだった。同 PR の他 2 提案も大部分が実装済みで、残片だけを 471 に載せている。 あわせて計画書の保留事項を消化済みにした。cwd_to_project_id の case 不一致は 調査の結果 PR #421 で既に解消済みと判明し (実 Linux でテスト pass を確認)、 ユーザー判断で閉じた。これで保留事項は空になり退役条件 4 を充足する。
背景 (順位 318 + 320)
着手前の調査で、束ねた 2 順位のうち 318 は全項目、320 は決定論層が既に実装済みと判明した。
本 PR は残っていた 1 点 (320 の facet/prompt 層) だけを塞ぐ。Rust コードは変更しない。
順位 318: 実装済みだった (4 項目すべて)
extract_next_review_format_wait_time+ or_else 連鎖rate_limit.rs:120(PR #309 / 2026-07-20)UNKNOWN_FORMAT_FALLBACK_WAIT_MINUTES = 30+warn_unknown_wait_time_format()+wait_time_parsed台帳が「案を検討」と書いた保守的既定 30 分の park がそのまま入っていた。
順位 320: 決定論層は実装済み、残件は AI 層のみ
ADR-064 の
has_review_evidenceがdecide.rsの R1/R4 ゲートとして「check が pass でもレビュー実施の陽性証拠がなければsuccess に倒さない」を実現済み (台帳の対処 (2))。
残っていたのは対処 (1) の AI 層で、
analyze-coderabbitfacet の verdict 基準がapproved= 「applicable な findings が無い」だけで、レビュー実施の有無を条件に含んでいなかった。「レビューが走って 0 件」と「レビューが走らなかった」が同じ見え方になる。
影響範囲 (3 経路すべてを追った)
has_coderabbit_findings(monitor.rs:137)。verdict は re-push/fix 経路にしか流れず terminal action にならないpr-monitor.yml全体で 1 箇所)。監視役は approve/merge が禁止 (ADR-022)つまり実害は人間がコメントを読み違えるリスクに限定される。それでも 320 の完了基準
「approved と誤報しない」が GHA コメントに限って未達だったため塞ぐ。
対処
facet に review evidence gate を追加 — 陽性証拠が無ければ
approvedを出さずuser_decisionに倒し、Summary に「レビュー未実施」を明記させる。findings1 件以上 /coderabbit.actionable_commentsがnullでない (0を含む)new_comments(rate-limit 通知でも増え、facet の起動条件そのもの) /unresolved_threads(ADR-064 と同じく過去サイクルの残骸を含む) /review_stateと CI の緑post-pr-review.yamlのrules.conditionがリテラル照合するためnew_commentsを証拠に採用) より意図的に厳しくした理由も明記した。決定論層が誤るとcontinue_monitoringに倒れて回復するが、facet のapprovedは人間に示す終端 verdict のためpr-monitor.ymlの GHA prompt にも同じ基準を入れた (こちらは reviews 件数 / walkthrough を証拠に使える)。検証
cargo test --workspacegreen /cargo clippy --workspace --all-targets --all-features -D warningsclean (Rust 無変更のため非退行確認)pnpm lint:workflows/pnpm lint:docs/pnpm lint:mdOK後始末
todo16.md 318 節 / todo17.md 320 節 / todo-summary2.md の 2 行を削除。
計画書に競合確認と実態調査の結果を記録し、「台帳と実態のずれ」表に 318 / 320 を追加した (9 件中 7 件)。
Summary by CodeRabbit
バグ修正
ドキュメント