Skip to content

fix(coderabbit-review): レビュー実施の陽性証拠を facet/prompt 層にも要求する - #424

Merged
aloekun merged 1 commit into
masterfrom
fix/review-evidence-gate
Aug 19, 2026
Merged

fix(coderabbit-review): レビュー実施の陽性証拠を facet/prompt 層にも要求する#424
aloekun merged 1 commit into
masterfrom
fix/review-evidence-gate

Conversation

@aloekun

@aloekun aloekun commented Aug 19, 2026

Copy link
Copy Markdown
Owner

背景 (順位 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)
本丸 silent 化の構造的解消 UNKNOWN_FORMAT_FALLBACK_WAIT_MINUTES = 30 + warn_unknown_wait_time_format() + wait_time_parsed
③ 第 3 format fixture + silent ケース variant 3 本 + fallback 2 本
④ ADR-034 の format 一覧 table 第 3 世代行あり (ADR-034:76)

台帳が「案を検討」と書いた保守的既定 30 分の park がそのまま入っていた。

順位 320: 決定論層は実装済み、残件は AI 層のみ

ADR-064has_review_evidence
decide.rs の R1/R4 ゲートとして「check が pass でもレビュー実施の陽性証拠がなければ
success に倒さない」を実現済み (台帳の対処 (2))。

残っていたのは対処 (1) の AI 層で、analyze-coderabbit facet の verdict 基準が
approved = 「applicable な findings が無い」だけで、レビュー実施の有無を条件に含んでいなかった。
「レビューが走って 0 件」と「レビューが走らなかった」が同じ見え方になる。

影響範囲 (3 経路すべてを追った)

経路 誤って approved に倒れるか
決定論層 倒れない (ADR-064)
ローカル takt 到達しない — 起動条件が has_coderabbit_findings (monitor.rs:137)。verdict は re-push/fix 経路にしか流れず terminal action にならない
GHA Phase A 倒れうるが機械消費されないコメント文字列 (該当トークンの出現は pr-monitor.yml 全体で 1 箇所)。監視役は approve/merge が禁止 (ADR-022)

つまり実害は人間がコメントを読み違えるリスクに限定される。それでも 320 の完了基準
「approved と誤報しない」が GHA コメントに限って未達だったため塞ぐ。

対処

facet に review evidence gate を追加 — 陽性証拠が無ければ approved を出さず
user_decision に倒し、Summary に「レビュー未実施」を明記させる。

  • 証拠として採用: findings 1 件以上 / coderabbit.actionable_commentsnull でない (0 を含む)
  • 採用しない: new_comments (rate-limit 通知でも増え、facet の起動条件そのもの) /
    unresolved_threads (ADR-064 と同じく過去サイクルの残骸を含む) / review_state と CI の緑
  • verdict は 3 値のまま増やしていない — post-pr-review.yamlrules.condition がリテラル照合するため
  • 決定論層 (new_comments を証拠に採用) より意図的に厳しくした理由も明記した。決定論層が誤ると
    continue_monitoring に倒れて回復するが、facet の approved は人間に示す終端 verdict のため

pr-monitor.yml の GHA prompt にも同じ基準を入れた (こちらは reviews 件数 / walkthrough を証拠に使える)。

検証

  • cargo test --workspace green / cargo clippy --workspace --all-targets --all-features -D warnings clean (Rust 無変更のため非退行確認)
  • pnpm lint:workflows / pnpm lint:docs / pnpm lint:md OK

後始末

todo16.md 318 節 / todo17.md 320 節 / todo-summary2.md の 2 行を削除。
計画書に競合確認と実態調査の結果を記録し、「台帳と実態のずれ」表に 318 / 320 を追加した (9 件中 7 件)。

Summary by CodeRabbit

  • バグ修正

    • レビュー結果の判定に、実際のレビュー指摘や結果コメントなどの明確な証拠を必須化しました。
    • レビュー未実施の場合、CI 成功のみで承認済みと誤判定されないよう改善しました。
  • ドキュメント

    • バグ修正計画とタスク一覧を更新し、完了済み項目や残作業を整理しました。
    • 不要になったタスクや重複した記載を削除しました。

@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 2b06a98b-386e-465b-80c4-8147109c08f2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

レビュー実施の陽性証拠がない場合に、CI 成功状態だけで承認しない判定を追加しました。分析指示、進行表、TODO の記録も更新しました。

Changes

レビュー証拠ゲート

Layer / File(s) Summary
レビュー証拠判定
.github/workflows/pr-monitor.yml, .takt/facets/instructions/analyze-coderabbit.md
findings または coderabbit.actionable_comments がない場合は、approved ではなく user_decision として未実施を表示します。CI 結果などはレビュー証拠に使用しません。
進行記録の更新
docs/bugfix-batch-plan.md, docs/todo-summary2.md, docs/todo16.md
PR の進行状況、実装済み項目、残件、TODO、Markdown 区切り線を更新しました。

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: 🔵 Low · up to 15d3c

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)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、facet と prompt 層にレビュー実施の陽性証拠ゲートを追加する主な変更を明確に示しています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/review-evidence-gate

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: issue_comment (created) / 実行 run
  • CI: pending (rust (ubuntu-latest) / rust (windows-latest) は pending、request は skipping。失敗 check なし)
  • レビュー状況: 未実施 (陽性証拠なし) — pulls/424/reviews は 0 件、インラインコメントも 0 件。CodeRabbit は「This repository does not receive automatic reviews because it has fewer than 10 stars.」として明示的にレビューを skip しており、walkthrough/summary も未投稿
  • Verdict: user_decision

Applicable Findings (Critical / High / Major)

(該当なし)

Applicable Findings (Medium 以下)

(該当なし)

Filtered (not applicable)

(レビュー指摘自体が 0 件のためフィルタ対象なし)

補足: 軽量サマリー (CI・diff)

  • 変更ファイル: .github/workflows/pr-monitor.yml.takt/facets/instructions/analyze-coderabbit.mddocs/bugfix-batch-plan.mddocs/todo-summary2.mddocs/todo16.mddocs/todo17.md の6ファイル。Rust ソースの変更なし
  • 変更の性質: 本 workflow (pr-monitor.yml) と analyze-coderabbit.md に「レビュー実施の陽性証拠がなければ approved を出さない」という gate を追加するもの (ADR-064 の決定論層と同趣旨を facet/prompt 層に拡張)。加えて台帳 (docs/bugfix-batch-plan.md 等) の完了記録・エントリ削除を伴う後始末
  • CodeRabbit: 本リポジトリの星数 <10 のため自動レビュー対象外という定型スキップ。レビュー内容そのものは今回まだ得られていない

次のアクション

  • 本 PR は「レビュー実施の陽性証拠が無い場合は approved を出さない」gate 自体を導入する PR であり、皮肉にもその CodeRabbit レビューが未実施の状態。CI (rust ubuntu/windows) の pending 完了を待ち、可能なら人手または追加トリガーでレビュー実施を確認してからマージ判断すること
  • mergeStateStatus: BLOCKED の要因 (必須 check 未完了と推測される) を確認し、CI 完了後に再度状態を見ること

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔇 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.md Lines 84-96 の条件は、findings が 1 件以上、または coderabbit.actionable_commentsnull でない場合だけです。レビュー一覧は人間・他 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

📥 Commits

Reviewing files that changed from the base of the PR and between fec62d4 and 15d3c7d.

📒 Files selected for processing (6)
  • .github/workflows/pr-monitor.yml
  • .takt/facets/instructions/analyze-coderabbit.md
  • docs/bugfix-batch-plan.md
  • docs/todo-summary2.md
  • docs/todo16.md
  • docs/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.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: pull_request_review (submitted) / 実行 run
  • CI: analyze (本 workflow自身) が pending、rust (ubuntu-latest) / rust (windows-latest) は pass、request は skipping。失敗 check なし
  • レビュー状況: CodeRabbit が現行 head (15d3c7d) に対してレビュー実施済み (根拠: レビュー本体に finding 1件 + walkthrough コメントで Configuration used: Path: .coderabbit.yaml / Review profile: CHILL を確認。前回分析コメント時点の「レビュー未実施」判定はその後の CodeRabbit 実行で解消)。人間レビューは無し。reviewDecision は空 (CodeRabbit のレビュー種別が COMMENTED のため必須承認カウント対象外)
  • Verdict: needs_fix

Applicable Findings (Critical / High / Major)

# File (Line) Reviewer Issue Recommended Action
1 .github/workflows/pr-monitor.yml (254) CodeRabbit 本 PR が追加した prompt 層のレビュー証拠条件 (「1件目の指摘」「gh api .../reviews が1件以上」「walkthrough/summary コメントが存在」) が、同じ PR で追加した facet 層の条件 (findings>=1 または actionable_comments != null) より緩い。特に「reviews が1件以上」は commit_id を現行 head に絞っておらず、過去サイクルや他レビュアーの古いレビューだけで陽性証拠と判定しうる (今回の CodeRabbit レビューが未実施でも approved を出せる余地が残る) prompt 層の証拠条件を facet 層と揃える。具体的には gh api .../reviews を証拠として使う場合は各レビューの commit_id が現行 head と一致するものに限定し、過去コミットのレビュー件数だけでは陽性証拠に数えないよう文言を修正する

Applicable Findings (Medium 以下)

(該当なし)

Filtered (not applicable)

(.takt/facets/instructions/analyze-coderabbit.md および docs/bugfix-batch-plan.md への CodeRabbit の言及は LGTM のみで、対応不要な指摘のため表に計上せず)

次のアクション

@coderabbitai

coderabbitai Bot commented Aug 19, 2026

Copy link
Copy Markdown

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.md

Length of output: 41133


@github-actions[bot] 最新の分析コメントだけを確認して回答します。コメントチェーン全体の内容は参照できません。

Major finding #1 は有効です。

.github/workflows/pr-monitor.yml Line 254 は、gh api .../reviews の結果が 1 件以上であればレビュー実施の陽性証拠として扱います。この条件には、レビューの commit_id と現行 PR head SHA の一致確認がありません。

したがって、過去の head に対するレビューだけでも陽性証拠になります。この場合、現行 head のレビューが未実施でも approved を出す経路があります。

.takt/facets/instructions/analyze-coderabbit.md の条件はより厳格です。同ファイルは findings >= 1 または coderabbit.actionable_comments != null だけを陽性証拠として許可します。

追加修正では、prompt 層の条件を facet 層に統一する必要があります。reviews を維持する場合は、各レビューの commit_id が現行 PR head SHA と一致するものだけを証拠にしてください。過去 head のレビュー、new_commentsunresolved_threads、CI 成功、mergeStateStatus は証拠に含めないでください。


✏️ Learnings added
Learnt from: github-actions[bot]
URL: https://github.com/aloekun/claude-code-hook-test/pull/424

Timestamp: 2026-08-19T06:42:58.616Z
Learning: `.github/workflows/pr-monitor.yml` の PR Monitor prompt では、レビュー実施の陽性証拠が現行 PR head に対応する必要がある。`pulls/<number>/reviews` API のレビューを証拠に使う場合、各レビューの `commit_id` を現行 PR head SHA と照合する。過去 head のレビュー、`new_comments`、`unresolved_threads`、CI 成功、`mergeStateStatus` は `approved` の根拠にしない。

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

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 行を削除し、
計画書に調査結果 (競合確認・実態調査) を記録した。
@aloekun
aloekun force-pushed the fix/review-evidence-gate branch from 15d3c7d to 9d31051 Compare August 19, 2026 06:55
@aloekun
aloekun merged commit b91f08c into master Aug 19, 2026
3 checks passed
@aloekun
aloekun deleted the fix/review-evidence-gate branch August 19, 2026 10:11
aloekun added a commit that referenced this pull request Aug 19, 2026
不具合修正バックログ消化計画の 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 を充足する。
aloekun added a commit that referenced this pull request Aug 19, 2026
不具合修正バックログ消化計画の 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 を充足する。
aloekun added a commit that referenced this pull request Aug 19, 2026
不具合修正バックログ消化計画の 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 を充足する。
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.

1 participant