Skip to content

feat(review-request): bot 作成 PR へ人間資格情報で CodeRabbit レビューを要求する - #380

Merged
aloekun merged 1 commit into
masterfrom
feat/review-request
Aug 10, 2026
Merged

feat(review-request): bot 作成 PR へ人間資格情報で CodeRabbit レビューを要求する#380
aloekun merged 1 commit into
masterfrom
feat/review-request

Conversation

@aloekun

@aloekun aloekun commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • bot 作成 PR に @coderabbitai review人間資格情報で 1 回投稿する workflow を新設。新規 1 ファイル (143 行) のみで既存 workflow は無変更
  • CodeRabbit は PR の author が bot なら自動レビューをスキップする。夜間ループ (ADR-072) の PR は App token 作成のためこれに該当し、レビューが一度も付いていなかった
  • nightly-todo.yml の中には置かない — あの job は未信頼 agent が実装を書き cargo test がそれを実行する job で、未解決のトークン露出リスクの対象に人間資格情報を加えたくないため
  • pull_request_target の攻撃面を 3 点で封じた: checkout しない / run: へ展開するのは PR 番号 (整数) だけ / fork PR を条件で除外
  • 投稿しただけで成功としない。投稿後に CodeRabbit の反応を確認し、無ければ red で落とす

Context

Why: ADR-072 決定 15 は「draft をやめれば auto_review の初回レビューに自然に乗る」を前提にしていたが、この前提が誤りだった。ブロック要因は draft ではなく author が bot であること。決定 15 で draft を廃止した後も、夜間 PR にレビューは付かなかった。

Trigger: 2026-08-10 に経路を全て実測して確定した。

経路 結果
bot 作成 PR の auto_review skip (#379 が 10 時間超 無反応)
bot が @coderabbitai review を投稿 無視 (#373 が 10 時間 無反応)
人間が @coderabbitai review を投稿 動く (#373 は 4 秒、#378 は 5 秒で応答)
CodeRabbit を reviewer に要求 API が 422 (App は collaborator ではない)
PR を reopen 無効 (状態遷移では skip が解除されない)
設定で bot を許可 キーが存在しない (schema.v2.json 全数確認)

人間 identity のコメント投稿が唯一の経路であることは、消去法ではなく上表すべての実測で確定した。

PAT を許容できる根拠: ADR-072 決定 8 が PAT を却下したのは「オーナー権限で ADR-067 の ruleset backstop を bypass する」ためだったが、本 PAT は fine-grained で Pull requests: write のみ (対象リポジトリ 1 つ、期限付き) であり、push もマージもできない (どちらも Contents: write が必要)。したがって決定 8 の懸念は成立しない。

決定 11 の教訓の反映: 決定 11 は「投稿できたか」しか観測せず、bot 投稿が無視されている事実に 10 時間気づけなかった。本 workflow は効果 (CodeRabbit の反応) を観測する。照会の一時失敗は「反応なし」と読み替えず、判定は deadline 到達時のみ行う。

author 判定を login 直書きにしない理由: nightly-todo-aloekun[bot] を直書きすると App 改名で黙って発火しなくなる。user.type == 'Bot' で判定する。

Scope decision: workflow のみ。ADR-072 決定 15 の前提訂正・ADR-019 の quota 注記・ADR-051 の PAT 実体記録・計画書の更新は、実走検証の結果を見てから PR 2 で行う。

Validation

  • YAML パース OK、checkout step 0 件
  • run: 内への ${{ }} 直接展開なし (すべて env 経由) — 機械的に走査して確認
  • env に攻撃者制御フィールドなし (title / body / head.ref / user.login のいずれも不使用)
  • 起動条件は 4 つの AND で fail-closed。kill-switch は ADR-066 の既存 1 拠点に相乗りし停止操作を増やしていない
  • pnpm lint:md (127 files) / pnpm lint:docs: 0 error
  • pnpm push pre-push review: simplicity / security とも approved
  • 実走検証はマージ後: gh workflow run nightly-todo.yml で bot PR を作り、本 workflow が自動起動して CodeRabbit が反応することを確認する

References

Summary by CodeRabbit

  • 新機能
    • Bot が作成したプルリクエストに対して、自動的にコードレビューを依頼できるワークフローを追加しました。
    • 対象条件を確認したうえでレビューを投稿し、レビュー結果が届くまで自動的に確認します。
    • 一定時間内にレビューが確認できない場合は、処理結果を失敗として通知します。

@coderabbitai

coderabbitai Bot commented Aug 10, 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: 1afce772-62be-4b98-b906-55e916500288

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

Bot 作成 PR を対象とする review-request workflow を追加しました。条件を確認した後、@coderabbitai review を投稿します。CodeRabbit の bot コメントを最大 20 回確認します。

Changes

CodeRabbit レビュー要求

Layer / File(s) Summary
起動条件と実行条件
.github/workflows/review-request.yml
pull_request_targetopened イベントで workflow を起動します。Bot 作成、非 fork、同一リポジトリ、AUTONOMY_ENABLED 有効の条件を確認します。
レビュー要求の投稿
.github/workflows/review-request.yml
PR コードを checkout せず、CODERABBIT_TRIGGER_PAT@coderabbitai review を投稿します。PAT の未設定と PR 番号の非整数をエラーにします。
CodeRabbit 応答の確認
.github/workflows/review-request.yml
GITHUB_TOKEN で PR コメントを30秒間隔に最大20回取得します。coderabbitai[bot] のコメントがない場合は workflow を失敗させます。

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant GitHub
  participant GitHubActions
  participant GitHubAPI
  participant CodeRabbit

  GitHub->>GitHubActions: Bot 作成 PR の opened イベント
  GitHubActions->>GitHubActions: 実行条件を確認
  GitHubActions->>GitHubAPI: `@coderabbitai` review を投稿
  GitHubAPI->>CodeRabbit: レビュー要求を通知
  loop 最大20回、30秒間隔
    GitHubActions->>GitHubAPI: PR コメントを確認
    GitHubAPI-->>GitHubActions: CodeRabbit bot コメント
  end
Loading

Possibly related issues

Possibly related PRs

  • aloekun/claude-code-hook-test#367 — Bot 作成 PR に @coderabbitai review を投稿する GitHub Actions の変更であり、本 PR は専用 workflow と応答確認を追加しています。
🚥 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 タイトルは、Bot 作成 PR に人間資格情報で CodeRabbit レビューを要求する主要な変更を明確かつ簡潔に示しています。
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 feat/review-request

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) pending、rust (windows-latest) pending。現時点で失敗している check は無し。
  • レビュー状況: CodeRabbit はレビュー処理中 (Currently processing new changes... please wait、findings 未着)。人間レビュアーによる正式レビューはまだ無し (reviewDecision 空、pulls/380/reviews = 0 件、インラインコメントも 0 件)。
  • Verdict: approved (現時点でレビュー指摘 0 件のため — ただし CI/CodeRabbit レビューが完了した時点の判定ではない暫定値。下記「次のアクション」参照)

Applicable Findings (Critical / High / Major)

該当なし(レビュー指摘 0 件)

Filtered (not applicable)

該当なし

差分概要 (レビュー指摘が無いための軽量サマリー)

  • 変更ファイル: .github/workflows/review-request.yml (新規, +143 / -0)
  • 内容: bot 作成 PR (pull_request_target, types: [opened]) に対し、人間資格情報の PAT (CODERABBIT_TRIGGER_PAT) で @coderabbitai review を 1 回投稿する workflow。fork PR 除外・PR 番号のみを整数検証してシェルに渡す・checkout 無しという安全策を実装しており、投稿後に CodeRabbit の応答有無をポーリング (最大 10 分) して未応答なら red で落とす設計。ADR-072 (夜間 todo ループ) の実測結果を踏まえた対応。

次のアクション

  1. CodeRabbit のレビューおよび CI (rust (ubuntu-latest) / rust (windows-latest)) がまだ進行中のため、完了後に本 workflow または次のローカルセッションで再確認すること (現時点の approved はレビュー未完了下での暫定判定)。
  2. mergeStateStatusBLOCKED になっているため、ブロック理由 (必須チェック未完了 or 必須レビュー不足) を 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.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/review-request.yml:
- Around line 80-84: Update the review-request workflow condition to require
both vars.AUTONOMY_ENABLED == 'true' and the [autonomy] enabled value from
autonomy-config.toml, while preserving the existing bot, head repository, and
base repository checks.
- Around line 131-133: 投稿ステップで作成したレビュー依頼コメントの ID を取得して保存し、後続の応答検証でその ID
を基準にするよう更新してください。COUNT の gh api 呼び出しは --paginate --slurp を使い、jq 内で CodeRabbit
コメントかつ .id が REQUEST_COMMENT_ID より大きいものだけを対象にしてください。判定対象の CodeRabbit マーカーは
pr-monitor の定義と、この step が待つレビュー開始または後続マーカーに統一してください。
- Around line 69-71: Update the review-request workflow around the `@coderabbitai`
review posting step to make requests idempotent: before posting, query the pull
request’s existing issue comments for the same PAT actor and identical
review-request content, and skip posting when a match exists. Keep posting
enabled when no matching comment is found; do not rely on concurrency for
deduplication.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 63ff6771-7bb9-4ea8-aa4e-cd854cdf3a07

📥 Commits

Reviewing files that changed from the base of the PR and between ef09f8a and 9c8a18e.

📒 Files selected for processing (1)
  • .github/workflows/review-request.yml

Comment thread .github/workflows/review-request.yml
Comment thread .github/workflows/review-request.yml
Comment thread .github/workflows/review-request.yml Outdated
@github-actions

Copy link
Copy Markdown
Contributor

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

  • トリガー: pull_request_review (submitted) / 実行 run
  • CI: 失敗 check なし — rust (ubuntu-latest) pass、rust (windows-latest) pass、CodeRabbit (レビュー完了) pass。analyze (本 workflow 自身) は実行中のため pending 表示のみ。
  • レビュー状況: CodeRabbit が 1 件のレビュー (COMMENTED, 2026-08-10T07:37:55Z) を提出し、inline actionable 指摘 3 件 (すべて Major)。人間レビュアーによる正式レビューはまだ無し (reviewDecision 空)。
  • Verdict: needs_fix

Applicable Findings (Critical / High / Major)

# File (Line) Reviewer Issue Recommended Action
1 .github/workflows/review-request.yml (69-71) CodeRabbit @coderabbitai review の投稿が冪等でない。concurrency は同時実行制御のみで、job 再実行時や検証失敗後の再実行で重複コメントが投稿されうる 投稿前に同一 PAT 投稿者・同一内容の既存コメントを検索し、あれば投稿をスキップする
2 .github/workflows/review-request.yml (80-84) CodeRabbit 起動条件が vars.AUTONOMY_ENABLED のみを見ており、ADR-066 決定2が要求する autonomy-config.toml[autonomy] enabled との AND 合成になっていない (kill-switch の片側のみ実装) ADR-066 決定4「呼び手は cli-autonomy-gate の判定を経由し、env/config を直読みして独自に真偽を組み立てない」に従い判定を cli-autonomy-gate 経由に置き換える (checkout しない制約下での実現方法は要検討)
3 .github/workflows/review-request.yml (131-133) CodeRabbit 応答検証が「coderabbitai[bot] のコメントが1件でもあれば成功」という判定で、今回投稿したリクエストへの応答かを区別していない。1ページ目のみ参照のため、既存コメントによる false positive・後続ページの新規コメントを見逃す false negative の双方が起こりうる 投稿ステップでコメント ID を保存し、検証は --paginate --slurpid > REQUEST_COMMENT_ID の CodeRabbit コメントのみを対象にする

Applicable Findings (Medium 以下)

該当なし

Filtered (not applicable)

該当なし

次のアクション

  1. 3件の Major 指摘はいずれもプロジェクトの設計・ADR に照らして妥当な指摘 (特に fix(hooks): stop-quality のパイプデッドロックを修正 #2 は ADR-066 決定4に直接抵触する未実装ギャップ)。次の fix iteration での対応を推奨。
  2. mergeStateStatusBLOCKED のため、fix 反映後に必須チェック/レビュー要件を再確認すること。
  3. CodeRabbit のレビューは完了済みのため、追加レビュー到着を待つ必要はない。

@coderabbitai

coderabbitai Bot commented Aug 10, 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

workflow=".github/workflows/review-request.yml"
if [[ -f "$workflow" ]]; then
  nl -ba "$workflow" | sed -n '1,220p'
else
  printf 'Missing expected workflow: %s\n' "$workflow"
  fd -HI '^review-request\.ya?ml$' .github 2>/dev/null || true
fi

printf '\n--- Candidate autonomy and ADR files ---\n'
fd -HI -t f '(^autonomy-config\.toml$|ADR-066|adr.*066|cli-autonomy-gate)' . 2>/dev/null || true

printf '\n--- References to gate/config/ADR ---\n'
rg -n -i -C 3 \
  '(cli-autonomy-gate|AUTONOMY_ENABLED|\[autonomy\]|autonomy-config\.toml|ADR[- ]?066)' \
  . \
  -g '!**/.git/**' \
  -g '!**/node_modules/**' \
  -g '!**/dist/**' \
  -g '!**/build/**' || true

Length of output: 1034


🏁 Script executed:

#!/bin/bash
set -euo pipefail

workflow=".github/workflows/review-request.yml"

if [ -f "$workflow" ]; then
  awk '{ printf "%6d\t%s\n", NR, $0 }' "$workflow" | sed -n '1,220p'
else
  printf 'Missing expected workflow: %s\n' "$workflow"
  find .github -type f \( -name 'review-request.yml' -o -name 'review-request.yaml' \) -print 2>/dev/null || true
fi

printf '\n--- Candidate autonomy and ADR files ---\n'
find . -type f \
  \( -iname 'autonomy-config.toml' -o -iname '*adr*066*' -o -iname '*cli-autonomy-gate*' \) \
  -not -path '*/.git/*' \
  -not -path '*/node_modules/*' \
  -not -path '*/dist/*' \
  -not -path '*/build/*' \
  -print 2>/dev/null || true

printf '\n--- References to gate/config/ADR ---\n'
grep -RInE \
  --exclude-dir=.git \
  --exclude-dir=node_modules \
  --exclude-dir=dist \
  --exclude-dir=build \
  -e 'cli-autonomy-gate' \
  -e 'AUTONOMY_ENABLED' \
  -e '\[autonomy\]' \
  -e 'autonomy-config\.toml' \
  -e 'ADR[- ]?066' \
  . 2>/dev/null || true

Length of output: 37805


@github-actions[bot] 報告の 3 件はすべて妥当です。以前のコメント全体は利用できないため、最新の報告と現在のリポジトリ内容だけを検証しました。

  1. 冪等性の欠如は確認できます。
    .github/workflows/review-request.yml の Line 112 は常に gh pr comment を実行します。concurrency は並行 run を直列化しますが、再実行時の既存コメントを検出しません。
    投稿前に、PAT の投稿者 login と本文が @coderabbitai review の既存コメントを --paginate --slurp で検索してください。該当コメントがあれば投稿を省略してください。

  2. kill-switch の実装は ADR-066 に適合しません。
    Line 84 は vars.AUTONOMY_ENABLED == 'true' だけを評価します。autonomy-config.toml[autonomy] enabled は評価しません。
    ADR-066 は 2 つの入力の AND を要求します。また、呼び手が env と config を直接評価することを禁止し、cli-autonomy-gate の exit code を使うよう要求します。
    PR ブランチを checkout しないという制約は維持してください。ただし、信頼済み default branch の cli-autonomy-gateautonomy-config.toml を使う実装が必要です。現在の nightly-todo.ymlpr-monitor.yml の master ref 調達方式が、この信頼境界の既存パターンです。

  3. 応答検証は今回のリクエストと相関していません。
    Lines 131-135 は、最初のページに存在する任意の coderabbitai[bot] コメントを成功として扱います。このため、既存コメントで誤って成功します。
    投稿を REST API 経由で行い、作成したコメントの id を保存してください。検証時は --paginate --slurp を使い、id > REQUEST_COMMENT_IDcoderabbitai[bot] コメントだけを成功条件にしてください。API の一時失敗を definitive failure と扱わない現在の方針は維持できます。

この 3 件を修正するまで、この workflow は merge-ready ではありません。

You are interacting with an AI system.

CodeRabbit は PR の author が bot なら自動レビューをスキップする (公式挙動
"Auto Review Skipped — Bot user detected")。夜間ループ (ADR-072) の PR は
App token で作られるためこれに該当し、レビューが一度も付かない状態だった。

2026-08-10 に経路を全て実測し、人間 identity のコメント投稿が唯一の経路だと確定した:

| 経路 | 結果 |
|---|---|
| bot 作成 PR の auto_review | skip (#379 が 10 時間超 無反応) |
| bot が @coderabbitai review を投稿 | 無視 (#373 が 10 時間 無反応) |
| 人間が @coderabbitai review を投稿 | 動く (#373 は 4 秒、#378 は 5 秒) |
| CodeRabbit を reviewer に要求 | GitHub API が 422 (App は collaborator でない) |
| PR を reopen | 無効 (状態遷移では skip が解除されない) |
| 設定で bot を許可 | schema.v2.json に該当キーが存在しない |

これは ADR-072 決定 15 の前提 (draft をやめれば auto_review に乗る) が誤りだった
ことも意味する。ブロック要因は draft ではなく author が bot であることだった。

## 設計

nightly-todo.yml の中には置かない。あの job は未信頼の agent が実装を書き
cargo test がそれを実行する job で、決定 5 (Bash 非付与) / 決定 8 § 副次効果
(agent の GITHUB_TOKEN を read-only 化) が守っている面である。さらにスモークで
唯一未解決なのが「cargo サブプロセスへのトークン露出」であり、そこへ人間資格情報を
置くと未解決の露出リスクの対象が広がる。本 workflow は agent を動かさない。

PAT は fine-grained で Pull requests: write のみ (対象リポジトリ 1 つ、期限付き)。
決定 8 が PAT を却下した理由は push が ruleset backstop を bypass する点だったが、
この PAT は push もマージもできない (Contents: write が必要) ため懸念は成立しない。

pull_request_target は public リポジトリでは fork PR からも起動し secrets へ
到達できるため、(a) checkout しない (b) run: へ展開するのは PR 番号 (整数) だけ
(c) fork PR を条件で除外する、の 3 点で攻撃面を閉じた。タイトル・本文・ブランチ名は
一切シェルに入れない (cli-stale-branch-scan で塞いだのと同じクラスの脆弱性)。

起動条件は 4 つの AND で fail-closed: author が Bot / fork でない / base が本リポジトリ
/ AUTONOMY_ENABLED が true。author は login 直書きではなく user.type == 'Bot' で
判定する (App 改名で黙って止まらないため)。kill-switch は ADR-066 の既存 1 拠点に
相乗りし、停止操作を増やしていない。

## 投稿しただけで成功としない

決定 11 の失敗の本質は「投稿できたか」しか見ておらず、bot 投稿が無視されている事実に
10 時間気づけなかったことにある。本 workflow は投稿後に CodeRabbit の反応を確認し、
無ければ red で落とす。照会の一時失敗は「反応なし」と読み替えず、判定は deadline
到達時のみ行う (API blip で偽の red を出すと本当に反応しない夜と区別できなくなる)。

## 検証

- YAML パース OK、checkout step 0 件
- run: 内への ${{ }} 直接展開なし (すべて env 経由)
- env に攻撃者制御フィールドなし (title/body/head.ref/user.login のいずれも不使用)
- markdownlint 0 error / cli-docs-lint OK
- 実走検証はマージ後に dispatch で行う (本 PR には含まれない)

--- CodeRabbit レビュー対応 (#380、3 件すべて修正) ---

1. kill-switch の config 面が抜けていた (Major)
   ADR-066 の kill-switch は Actions variable と autonomy-config.toml の 2 面 AND だが、
   workflow 式ではリポジトリ内ファイルを読めないため variable 面しか見ておらず、
   enabled = false にしても投稿できてしまった。既定ブランチの config を API で読む step
   を追加 (checkout はしない。PR ブランチ側ではなく既定ブランチから読むのは ADR-072 と
   同じ信頼境界 — 自律 actor が自分の停止フラグを書き換える経路を作らない)。
   「意図した停止」は green、「読めなかった」は red と分けた (決定 10 と同じ分類)。

2. 投稿が冪等でなかった (Major)
   opened は PR ごとに 1 回だが、run の手動 re-run や検証失敗後の再実行で二重投稿に
   なりうる。ADR-019 § 再トリガー抑止ガードのとおり同一 HEAD への再投稿はレート枠を
   消費するだけで、無料枠運用では実害がある。既存要求があれば再投稿せず、その id を
   起点に検証だけ行う。

3. 反応検証が不正確だった (Major)
   PR 上の CodeRabbit コメント総数を見ていたため、過去の skip 通知や別要求への反応が
   1 件でもあれば成功と誤判定した。また既定 1 ページ (30 件) しか見ていなかった。
   要求コメントの id を起点に、それより新しいコメントだけを --paginate で数える形へ。

## レビュー提案どおりに書かず実測で確定させた点

指摘 3 は `--paginate --slurp` + `--jq` を提案していたが、**gh 2.95.0 では --slurp と
--jq は併用できない** (実測でエラー)。提案のまま書いていれば実行時に壊れていた。
--paginate 単体は jq をページごとに適用して出力を連結するため、id をストリームで出し
shell 側で畳む形に変えた。全ページを取りこぼさないことを実 PR (#378) で確認済み。

あわせて jq の test("@coderabbitai\s+review") はパースエラーになったため、正規表現を
使わない contains("@coderabbitai review") を採用した (失敗経路を減らす)。

## 検証

- awk のセクション判定を実 config で確認 ([autonomy] 内の enabled だけを拾い、
  他 section の同名キーとコメント行を拾わないことを合成データでも確認)
- jq/--paginate の件数判定を実 PR (#378) で確認 (since=0 で 3 件、巨大値で 0 件)
- YAML パース OK / checkout 0 件 / run: への直接展開なし / env に攻撃者制御なし
@aloekun
aloekun force-pushed the feat/review-request branch from 9c8a18e to 15fe007 Compare August 10, 2026 07:52
@aloekun

aloekun commented Aug 10, 2026

Copy link
Copy Markdown
Owner Author

CodeRabbit レビュー対応 (3 件すべて修正)

# 指摘 判定 対応
1 autonomy-config.tomlenabled 条件が無い (🟠 Major) 妥当 既定ブランチの config を API で読む step を追加
2 レビュー要求の投稿が冪等でない (🟠 Major) 妥当 既存要求があれば再投稿せず、その id を起点に検証
3 応答検証が既定ページ・総数依存 (🟠 Major) 妥当 要求コメント id より新しいものだけを --paginate で数える

1. kill-switch の config 面

ご指摘のとおりです。ADR-066 の kill-switch は Actions variable と autonomy-config.toml2 面 AND ですが、実装は variable 面しか見ておらず、enabled = false にしても投稿できる状態でした。コード内のコメントが「ADR-066 の既存 1 拠点に相乗り」と主張しているのに実装が片面だけという、記述と実装の食い違いでもありました。

workflow 式からはリポジトリ内ファイルを読めないため、job 内の step で API から読む形にしました。PR ブランチではなく既定ブランチから読みます — 自律 actor が自分の停止フラグを書き換えて自己解除する経路を作らないためで、ADR-072 と同じ信頼境界です (checkout はしません)。

あわせて「意図した停止」と「読めなかった」を分けました。前者は green で終え、後者は red にします (ADR-072 決定 10 と同じ分類)。読めないまま素通りさせると、kill-switch が効いているのか壊れているのか run 一覧から区別できなくなります。

2. 冪等性

opened は PR ごとに 1 回ですが、run の手動 re-run や検証失敗後の再実行で二重投稿になり得ます。ADR-019 § 再トリガー抑止ガードが記録しているとおり、同一 HEAD への @coderabbitai review 再投稿はレート枠を消費するだけで、無料枠運用では実害があります。既存要求を検出したら再投稿せず、その id を起点に検証だけ行うようにしました。

3. 応答検証の精度

これも実害のある指摘でした。PR 上の CodeRabbit コメント総数を見ていたため、過去の skip 通知や別要求への反応が 1 件でもあれば成功と誤判定します。既定 1 ページ (30 件) しか見ていない点も同様です。要求コメントの id を起点に、それより新しい CodeRabbit コメントだけを数える形へ変更しました (comment id は単調増加)。

ただし提案どおりには実装できませんでした

--paginate --slurp + --jqgh 2.95.0 で併用できません。実測でエラーになります:

the `--slurp` option is not supported with `--jq` or `--template`

提案のまま書いていれば実行時に壊れていました。--paginate 単体は jq をページごとに適用して出力を連結するため、id をストリームで出して shell 側で畳む形に変え、全ページを取りこぼさないことを実 PR (#378) で確認しています (since=0 → 3 件 / 巨大値 → 0 件)。

同様に test("@coderabbitai\s+review") もパースエラーになったため、正規表現を使わない contains("@coderabbitai review") を採用しました (失敗経路を減らすため)。

観測 (総数依存・1 ページ依存) は正確でしたが、修正手段は実測しないと通らないものでした。

pre-push review で追加検出した 1 件

自前のレビューが、上記 1 の実装に残っていた fail-open を検出しました。case "$ENABLED" in *true*)部分一致だと enabled = false # reverted from true after incident #999proceed=true になります。コメントと空白を除いた値の厳密一致へ修正済みです。検証:

入力行 判定
enabled = true proceed=true
enabled = false # ... true ... proceed=false
enabled = "true" proceed=false (boolean でないため fail-closed)
enabled = proceed=false

検証

  • YAML パース OK / checkout step 0 件 / run: への ${{ }} 直接展開なし / env に攻撃者制御フィールドなし (機械的に走査)
  • awk のセクション判定を実 config と合成データの両方で確認 ([autonomy] 内の enabled だけを拾い、他 section の同名キーとコメント行は拾わない)
  • pnpm push pre-push review: security approved / simplicity は 1 件指摘 → 修正 → convergence_verdict: fully_resolved
  • pnpm lint:md (127 files) / pnpm lint:docs: 0 error

@coderabbitai

coderabbitai Bot commented Aug 10, 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

workflow=".github/workflows/review-request.yml"

printf '%s\n' '--- Workflow outline and contents ---'
if [[ -f "$workflow" ]]; then
  ast-grep outline "$workflow" --items all || true
  nl -ba "$workflow" | sed -n '1,240p'
else
  fd -HI '^review-request\.ya?ml$' .github 2>/dev/null || true
fi

printf '%s\n' '--- Relevant configuration and ADR files ---'
fd -HI -t f '(^autonomy-config\.toml$|^adr-066.*|^adr-072.*|^adr-019.*)' . 2>/dev/null

printf '%s\n' '--- Gate and request/response references ---'
rg -n -i -C 4 \
  '(AUTONOMY_ENABLED|^\[autonomy\]|^enabled\s*=|cli-autonomy-gate|review-request|`@coderabbitai` review|REQUEST_COMMENT_ID|--paginate|coderabbitai\[bot\])' \
  .github docs autonomy-config.toml \
  -g '!**/.git/**' 2>/dev/null || true

Length of output: 1219


🏁 Script executed:

#!/bin/bash
set -euo pipefail

workflow=".github/workflows/review-request.yml"

echo '--- Workflow ---'
if [ -f "$workflow" ]; then
  sed -n '1,240p' "$workflow"
else
  find .github -type f \( -name 'review-request.yml' -o -name 'review-request.yaml' \) -print 2>/dev/null
fi

echo '--- Matching config and ADR paths ---'
find . -type f \
  \( -name 'autonomy-config.toml' -o -iname 'adr-066*' -o -iname 'adr-072*' -o -iname 'adr-019*' \) \
  -not -path '*/.git/*' -print 2>/dev/null

echo '--- Relevant excerpts ---'
grep -RInE -C 4 \
  --exclude-dir=.git \
  --include='*.yml' --include='*.yaml' --include='*.toml' --include='*.md' \
  'AUTONOMY_ENABLED|^\[autonomy\]|^enabled[[:space:]]*=|cli-autonomy-gate|`@coderabbitai` review|REQUEST_COMMENT_ID|--paginate|coderabbitai\[bot\]' \
  .github docs . 2>/dev/null | sed -n '1,520p'

Length of output: 64074


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo '--- ADR-066 ---'
sed -n '1,300p' docs/adr/adr-066-autonomy-global-kill-switch.md

echo '--- cli-autonomy-gate source candidates ---'
find src -type f \( -iname '*autonomy*gate*' -o -path '*/cli-autonomy-gate/*' \) -not -path '*/target/*' -print 2>/dev/null

echo '--- Gate interface and config parsing references ---'
grep -RInE -C 3 \
  --exclude-dir=target --exclude-dir=.git \
  '(cli-autonomy-gate|struct .*Args|enum .*Operation|AUTONOMY_ENABLED|autonomy-config\.toml|enabled)' \
  src/cli-autonomy-gate src/lib-autonomy-policy 2>/dev/null | sed -n '1,420p'

Length of output: 38418


@aloekun --paginate --jq のストリーム処理への変更は正しいです。--slurp--jq を併用できない点も確認しました。
応答確認は、全ページを対象に id > SINCE_IDcoderabbitai[bot] コメントだけを数えます。この指摘は解消しています。

ただし、次の 2 件は未解決です。

  1. ADR-066 の gate 契約に違反しています。
    ADR-066 決定 4 は、呼び手が env または config を直接評価することを禁止しています。呼び手は cli-autonomy-gate の exit code を使う必要があります。
    .github/workflows/review-request.yml Lines 121-143 は awksed[autonomy] enabled を直接解析しています。これは lib-autonomy-policy の TOML 解析、fail-closed 判定、テスト済みの判定コアを複製します。
    既定ブランチから config を取得する方針は適切です。取得後の判定は、既定ブランチ由来の cli-autonomy-gateautonomy-config.toml を使ってください。

  2. 冪等性ガードが PAT 投稿者を確認していません。
    Lines 177-179 は本文に @coderabbitai review を含む任意のコメントを既存要求として再利用します。PR にコメントできる別ユーザーがこの文字列を投稿すると、workflow は人間 PAT による要求を投稿しません。
    PAT で /user を取得して login を確定し、comment.user.login がその login と一致し、かつ本文が要求文言に一致するコメントだけを再利用してください。

この 2 件が残るため、現時点では merge-ready ではありません。


✏️ Learnings added
Learnt from: aloekun
URL: https://github.com/aloekun/claude-code-hook-test/pull/380

Timestamp: 2026-08-10T07:56:47.379Z
Learning: GitHub CLI 2.95.0 の `gh api` では、`--paginate --slurp` と `--jq` を併用できず、`the --slurp option is not supported with --jq or --template` で失敗する。ページネーションした結果を `--jq` でストリーム出力して shell 側で処理する場合、`--paginate --jq` は使用できる。

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.

@aloekun
aloekun merged commit e1c35e7 into master Aug 10, 2026
3 checks passed
@aloekun
aloekun deleted the feat/review-request branch August 10, 2026 09:02
aloekun added a commit that referenced this pull request Aug 10, 2026
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ
登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。

採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 /
      系統 C (shell・config パースの安全性) 3 件
却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見
形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく
      「cargo fmt を PreToolUse でブロックする」(順位 411)

系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ
コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと
同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ
到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。

**この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」
が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて
いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への
追記を含めた。
aloekun added a commit that referenced this pull request Aug 10, 2026
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ
登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。

採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 /
      系統 C (shell・config パースの安全性) 3 件
却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見
形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく
      「cargo fmt を PreToolUse でブロックする」(順位 411)

系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ
コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと
同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ
到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。

**この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」
が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて
いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への
追記を含めた。

## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成

**WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない**
(2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。

従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。

- (1) 観測待ち — 機構は整備済みで事象か期限を待つもの
- (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。
      順位 397 / 398-400 / 401 / 410。**完了条件に含める**
- (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない

(3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、
リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。
ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt
ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。

あわせて古い記述を実測に合わせた:

- 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が
  2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ
- 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。
  同一ファイル内の自己矛盾だった
- WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて
  「代替解は draft 廃止」が誤りだったことも記録した

## todo 側

- 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2
  相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし
  経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す
- 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい)
- **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処
  2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と
  抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した
aloekun added a commit that referenced this pull request Aug 10, 2026
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ
登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。

採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 /
      系統 C (shell・config パースの安全性) 3 件
却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見
形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく
      「cargo fmt を PreToolUse でブロックする」(順位 411)

系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ
コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと
同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ
到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。

**この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」
が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて
いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への
追記を含めた。

## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成

**WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない**
(2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。

従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。

- (1) 観測待ち — 機構は整備済みで事象か期限を待つもの
- (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。
      順位 397 / 398-400 / 401 / 410。**完了条件に含める**
- (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない

(3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、
リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。
ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt
ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。

あわせて古い記述を実測に合わせた:

- 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が
  2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ
- 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。
  同一ファイル内の自己矛盾だった
- WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて
  「代替解は draft 廃止」が誤りだったことも記録した

## todo 側

- 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2
  相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし
  経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す
- 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい)
- **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処
  2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と
  抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した

--- CodeRabbit レビュー対応 (#384、5 件すべて修正) ---

1. WP-18 完了条件でスモーク未確定の扱いが不明確 (Major)
   (c) だけを非必須と書き (a)(b) の扱いが無かった。(a)(b) は事象待ちで**自力で発生させ
   られない**ため、条件に含めると WP を閉じられない。3 件すべてを非ブロッカーとし、
   理由と移管先・期限を表で明記した。(a)(b) は 2026-11-06 時点で未観測なら
   「機会が来なかった」として見送り ADR-067 の bounded lifetime へ委ねる。

2. 順位 411 の要約が詳細計画と不一致 (Minor)
   summary は「正しいコマンドを提示」だが、cargo fmt に**代替コマンドは存在しない**
   (手で直すのが正)。「正しい対処を提示」へ変更し、詳細側にもその旨を明記した。

3. 順位 398 の完了判定を対象 PR に束縛すべき (Major)
   「report 生成を完了根拠にする」案が不十分だった。copy_feedback_report は
   find_latest_run_dir で最新 run を選ぶだけで **pr_number と照合していない**ため、
   別 PR の report を現在の PR の {pr_number}.md へコピーし得る。また takt の終了は
   timeout や失敗でも起こるので終了した事実は report 完成を証明しない。実装を読んで
   裏付けたうえで、完了判定には「成功終了」と「対象 PR のものであること」の両方が
   要る旨を追記した。本セッションで実際に context.json が別 PR を指していた事象とも
   同型である。

4. 旧語彙 lint の extensions から yaml が漏れている (Minor)
   拡張子は eq_ignore_ascii_case の文字列一致で **yml と yaml は別物**。本リポジトリは
   .github/workflows/*.yml と .coderabbit.yaml の両方を持つため、yaml を落とすと
   後者が未検査になる。両方を対象に加え、理由も併記した。

5. cargo fmt の検出対象が未定義 (Major)
   完全一致だけでは cargo fmt --all / cargo +stable fmt / rustup run stable cargo fmt /
   cargo-fmt が素通りする。作業計画の先頭に「検出範囲を先に決める」を追加し、完了基準に
   「完全一致に限定する場合は素通りする形態を明記する」ことを求める形にした。

いずれも実物 (takt.rs の実装 / linter の拡張子判定 / リポジトリ内の .yml と .yaml の
共存) を確認したうえで妥当と判断している。
aloekun added a commit that referenced this pull request Aug 10, 2026
あわせて post-merge feedback (#376/#377/#380/#381/#382) の採用分 10 件を順位 402-411 へ
登録した。2026-08-10 に採用候補を系統別へ分類し、ユーザーが採否を決定したもの。

採用: 系統 A (観測の完全性) 3 件 / 系統 B (重複実装の予防) 3 件 /
      系統 C (shell・config パースの安全性) 3 件
却下: 系統 D (workflow セキュリティ標準化) / 系統 E (PAT 失効監視) — 様子見
形を変えて採用: 系統 F — 「CLAUDE.md に rustfmt 非適用の方針を書く」ではなく
      「cargo fmt を PreToolUse でブロックする」(順位 411)

系統 F の変更理由 (ユーザー判断): 規約は CLAUDE.md に書いた時点で毎セッション読まれ
コンテキストを圧迫するが、PreToolUse hook は発火するまでコストがゼロで、ブロックと
同時に正しいコマンドをフィードバックできる。読み手は規約を覚えていなくても正しい経路へ
到達する。ADR-042 の mechanizable 判定を満たすため機構側が正しい。

**この非対称は現行 ADR-042 に無い**。同 ADR の判断基準は「機械判定できるか」「投資対効果」
が中心で、「規約は常時コンテキストを消費し hook は発火時のみ」という観点が明示されて
いない。ルール追加を検討するたびに効く一般則なので、順位 411 の作業範囲に ADR-042 への
追記を含めた。

## 計画書 (harness-improvement-plan.md) の WP-18 節を再編成

**WP-18 で生んだ問題と、WP-18 の運用で日常的に踏む問題を WP-18 の外へ押し出さない**
(2026-08-10 ユーザー方針) ため、残作業を 3 区分へ分けて完了条件を明示した。

従来は観測と派生タスクが 1 表に混在し、WP-18 の完了に何が要るのかが読み取れなかった。

- (1) 観測待ち — 機構は整備済みで事象か期限を待つもの
- (2) 運用問題の対処 — WP-18 が生んだ (基準 1) / WP-18 の運用で踏む潜在バグ (基準 2)。
      順位 397 / 398-400 / 401 / 410。**完了条件に含める**
- (3) WP-18 外の派生 — 順位 396 / 411 / 402-409 等。完了条件に含めない

(3) を完了条件から外すのは、§ 7 の退役条件が「全 WP が完了または見送り」である以上、
リポジトリ全体の一般則を WP-18 に紐づけると計画書が永久に退役できなくなるため。
ただし**優先度が低いという意味ではない** — 順位 396 (flaky テスト) と 411 (cargo fmt
ブロック) はいずれも高優先度で、WP-18 とは独立に早期着手する旨を明記した。

あわせて古い記述を実測に合わせた:

- 見出しの「実装・スモークは 2026-08-08 までにほぼ完了」→ 決定 16 という新規実装が
  2026-08-10 に入ったため「観測中 + 運用問題の対処中」へ
- 「前 2 者は順位 394 後の run で判定できる」→ 順位 394 は完了済みで実際の前提は決定 16。
  同一ファイル内の自己矛盾だった
- WP-17 残課題節にも同じ「順位 394 後の run」が残っていたため同期。あわせて
  「代替解は draft 廃止」が誤りだったことも記録した

## todo 側

- 順位 396 を Tier 2 → **Tier 1** へ格上げ (ユーザー判断)。単発の Severity では Tier 2
  相当だが、flaky テストは「また flake だろう」という読み替えを生み実バグの見落とし
  経路になるため。両 OS matrix (ADR-065) の信号品質を守る意味で早期に潰す
- 順位 411 に早期着手の根拠を追記 (cargo fmt は反射的に実行されやすい)
- **却下を negative result として記録**: 系統 D / E は様子見。trunk 保護の drift 対処
  2 件は却下 (予防側は順位 405 で押さえた / 共有 lib 化は network isolation 設計と
  抵触しうる)。**再採用条件は「同型の drift が今後も再発する場合」**と明記した

--- CodeRabbit レビュー対応 (#384、5 件すべて修正) ---

1. WP-18 完了条件でスモーク未確定の扱いが不明確 (Major)
   (c) だけを非必須と書き (a)(b) の扱いが無かった。(a)(b) は事象待ちで**自力で発生させ
   られない**ため、条件に含めると WP を閉じられない。3 件すべてを非ブロッカーとし、
   理由と移管先・期限を表で明記した。(a)(b) は 2026-11-06 時点で未観測なら
   「機会が来なかった」として見送り ADR-067 の bounded lifetime へ委ねる。

2. 順位 411 の要約が詳細計画と不一致 (Minor)
   summary は「正しいコマンドを提示」だが、cargo fmt に**代替コマンドは存在しない**
   (手で直すのが正)。「正しい対処を提示」へ変更し、詳細側にもその旨を明記した。

3. 順位 398 の完了判定を対象 PR に束縛すべき (Major)
   「report 生成を完了根拠にする」案が不十分だった。copy_feedback_report は
   find_latest_run_dir で最新 run を選ぶだけで **pr_number と照合していない**ため、
   別 PR の report を現在の PR の {pr_number}.md へコピーし得る。また takt の終了は
   timeout や失敗でも起こるので終了した事実は report 完成を証明しない。実装を読んで
   裏付けたうえで、完了判定には「成功終了」と「対象 PR のものであること」の両方が
   要る旨を追記した。本セッションで実際に context.json が別 PR を指していた事象とも
   同型である。

4. 旧語彙 lint の extensions から yaml が漏れている (Minor)
   拡張子は eq_ignore_ascii_case の文字列一致で **yml と yaml は別物**。本リポジトリは
   .github/workflows/*.yml と .coderabbit.yaml の両方を持つため、yaml を落とすと
   後者が未検査になる。両方を対象に加え、理由も併記した。

5. cargo fmt の検出対象が未定義 (Major)
   完全一致だけでは cargo fmt --all / cargo +stable fmt / rustup run stable cargo fmt /
   cargo-fmt が素通りする。作業計画の先頭に「検出範囲を先に決める」を追加し、完了基準に
   「完全一致に限定する場合は素通りする形態を明記する」ことを求める形にした。

いずれも実物 (takt.rs の実装 / linter の拡張子判定 / リポジトリ内の .yml と .yaml の
共存) を確認したうえで妥当と判断している。
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