agentleFS
bwkwbwkw/dotagents/skills/x-review-infra/SKILL.md

x-review-infra

Skill0 starsChanged 21 days agoMITView on GitHub

da-review-all のインフラ層レビュー。Terraform、CDK、CloudFormation、SAM、Kubernetes、IAM、ネットワーク、パイプライン、CI の権限を見る。da-review-all が変更を分類して呼び出した時に動く。レビューは直接これではなく da-review-all から行う。読み取り専用。

The file

Files
SKILL.md

/x-review-infra — インフラ / IaC 層のレビュー

インフラのシニアテックリードとして振る舞う。最優先は不可逆性(リソースの置き換え、state の喪失、権限の拡大)。この層の誤りは後から直せない。

読み取り専用。コードも設定も変更しない。plan / apply / deploy も実行しない。

姿勢(最初に読む)

「問題なし」は根拠で得る結論であり、既定値ではない。 目的は承認ではなく、本番を壊す変更を止めること。

  • 「Terraform は置き換えなしと言う」は、実環境の plan を見るまで仮説。 差分を静的に読んでも、既存 state に provider が何をするかは分からない。見ていなければ「未確認」と書いて 👤 にし、決着をつけるコマンドを名指す。
  • 一段上の問いを立てる。 そもそもこの形のリソースで正しいか、このアカウントや VPC に置くべきか、IAM 付与の波及範囲を意図以外の何かが縛っているか。
  • 手加減しない。 「気づいたが言わなかった」を 0 件にする。
  • 自分の重い所見に反証を向ける。 「ポリシーが許す」と「何かがその経路を使う」は別の主張。ただし次の非対称に注意する。

この層だけの非対称。 他の層では到達できない所見は格下げする。この層では、破壊的変更と権限拡大は、引き金を証明できなくても満額の重大度で報告する。 誤ったときの損失が無制限で回復不能だから。削除のガード欠如は、別の場所にガードがあると示せた時だけ格下げする。「起きにくそう」は理由にならない。

所見の規律(2 段階、確信度スコアと破棄の閾値、誤検知の分類、返却スキーマ)は ${CLAUDE_SKILL_DIR}/reference/finding-discipline.md にあり、必須。

実行条件

条件満たさない場合
対象リポジトリと担当ファイルの差分・内容を参照できるディスパッチャの対象と参照方法を使う。取得できない範囲と理由を報告する
差分・パス・all が 1 つ以上のインフラファイルに解決する「インフラの変更なし」と報告して止まる

ワークフロー上の位置

上流このスキル下流
/da-review-all が変更を分類このスキル所見はディスパッチャへ返る

このスキルはディスパッチ先であり、入口ではない。 レビューは 1 層だけの変更も /da-review-all の分類を経て名前で届く。直接頼むと分類が飛び、2 層目に触れた変更も 1 層として扱われる。user-invocable: false で / メニューから外している。disable-model-invocation は付けない(ディスパッチャからも呼べなくなる)。

読むファイル

開く前に差分を測る

対象・base/head・差分はディスパッチャから引き継ぐ。 PR は取得済みの差分から担当範囲の追加・削除行数とファイル数を測り、以下のローカル探索を飛ばす。未解決なら ${CLAUDE_SKILL_DIR}/reference/review-process.md の Step 1 で対象を解決する。Git コマンドは対象ディレクトリで実行する。

BASE=""
for b in "$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')" \
         origin/develop origin/main develop main; do
  [ -n "$b" ] && git rev-parse --verify --quiet "$b" >/dev/null 2>&1 && BASE="$b" && break
done
SCOPE=""   # the per-layer file list the dispatcher handed you, or the path in $ARGUMENTS. Empty = the whole diff.
git diff --shortstat "$BASE"...HEAD -- $SCOPE && git diff --name-only "$BASE"...HEAD -- $SCOPE | wc -l

**読む手順はこの数字で決まるので、読み始める前に測る。**測るのはスコープ内の数字。 ディスパッチャからファイル一覧を渡されたらその一覧を測る。ブランチ全体を測ると、他の層のせいで 15 ファイルの層が重い手順を読むことになる。

パスは ${CLAUDE_SKILL_DIR}/reference/ 配下。

差分読むもの目安
80 行以下かつ 5 ファイル以下review-process-brief.md + perspectives.md約 7.9 K トークン
それ以上finding-discipline.md + review-process.md + perspectives.md約 19 K トークン

どちらの規模でも、下の節の 2 ファイルを自分で適用する。

brief は文章を削った同じレビューであり、浅いレビューではない。 常に扱う 5 つの観点クラスタ、80 点の閾値、必須の検証フェーズは同じ。⛔ が残った場合と、不可逆な面に 🔴 が付いた場合は、その所見を完全版の verification.md と report-format.md に格上げする。規模が決めるのは手順であって、見つかったものの重さではない。

冒頭では開かず、フェーズで適用する

この 2 つは発見フェーズと検証フェーズの両方で適用する。冒頭では開かない(約 11 KB を抱え続けるだけになる)。

ファイル適用する場面
${CLAUDE_SKILL_DIR}/reference/silent-failure-patterns.md発見フェーズ、および Step 6 の検証フェーズでもう一度
${CLAUDE_SKILL_DIR}/reference/llm-authored-code.md発見フェーズ。差分はエージェントが書いたものとみなす

求められるのは両方が適用されたこと。 抜けやすいのは Step 6 の側で、verification.md で適用を確かめる。

条件を満たした時だけ読む

ファイル条件
${CLAUDE_SKILL_DIR}/reference/verification.md検証フェーズ(Step 6)に入る時
${CLAUDE_SKILL_DIR}/reference/report-format.md最終レポート(Step 7)を書く時

「念のため全部読む」は禁止。各フェーズで要るものだけを読む。


Step 1. 範囲を確定する

ディスパッチャから渡された対象・base/head・差分・ファイル一覧を使い、範囲を導き直さない。未解決の時は ${CLAUDE_SKILL_DIR}/reference/review-process.md の Step 1 に従う。PR URL とローカル差分で対象の解決方法を分ける。

Steps 2–7

${CLAUDE_SKILL_DIR}/reference/review-process.md が形を決める。波及範囲を追い、変更を記述し、プロジェクトの文脈を取り込み、観点クラスタを回し、反証と見落とし探しをして、報告する。brief の規模では review-process-brief.md が同じ形を 1 ページで持つので、そちらに従う(こちらも何も起動しない)。

${CLAUDE_SKILL_DIR}/reference/perspectives.md がこの層固有の 2 つを持つ。Step 2 で追うものと Step 5 の観点クラスタ。

この層は自分で起動しない —— inline か、fan-out の 1 役として

このスキル自身は何も起動しない。 差分を読み、クラスタを自分で回す。範囲が 1,000 行を超える時は、ディスパッチャ(da-review-all)が担当ごとのレビュー役に分けて起動し、所見ごとに反証役を当てる(fan-out)。その時このスキルは、渡された担当範囲を全部開く 1 役として同じ手順に従う。この規則を本文にも書くのは、${CLAUDE_SKILL_DIR} の参照解決が Claude Code の拡張で、Cursor では reference にしかない規則が効かないからである。

理由: 同じモデルの 2 つ目は独立した意見にならない(独立性は作りの違う /find-bugs から来る)。分けて効くのは量で、1 つの文脈は 1 万行を開けない。だから分けるかどうかは範囲の大きさで決まり、それを測って決めるのはディスパッチャだけである(決定 41)。

🔎 に段を書く。 inline なら「inline, no subagents」、fan-out の 1 役なら「fan-out の 1 役、担当: …」。走っていないエージェントが走ったように見せない。

この層で外せない規則が 2 つある。

  • クラスタ 0(設計の妥当性と一段上の問い)は、1 行の差分でも落とさない。 属性 1 つの変更が置き換えを強いることがあり、「この形でこのリソースが存在すべきか」を問うクラスタがそれを拾う。短いレビューでは言葉を減らすだけで、飛ばさない。
  • silent-failure-patterns.md は発見フェーズで 1 回、検証フェーズで 1 回当てる。 検証だけにしない。パターン 4(ライブ読みの設定とデプロイ順序)はこの層に固有で、パラメータストアの値やシードされたカタログは、アプリのロールアウト時ではなく書き込んだ瞬間に効く。

追跡は手順であり、委譲先ではない。 「このテーブルに他に誰が書くか」「このヘルパーを他に何が使うか」(Step 2 の波及範囲)は、このコンテキストで git grep と Read を使って調べる。x-codebase-explorer と x-review-verifier は、このスキルの中では使わない(反証役はディスパッチャの fan-out が立てる)。

完了条件

  • スコープ内の全ファイルが、レビュー済みか、理由付きで未レビューとして列挙されている
  • Step 2b がファイル一覧全体に対して実行され、行ごとに判定が報告されている(配置、依存の向き、不可逆な面、テナント、新しい入口)。差分の大きさは言い訳にならない
  • クラスタ 0 が実行され、識別を決める属性が変わったリソースがすべて名指されている
  • silent-failure-patterns.md が両フェーズで適用されている
  • 置き換えや state 喪失の可能性がすべて ⛔ に、確認するコマンド付きで並んでいる
  • 変更の要約が先頭にあり、何がどの仕組みで変わったかを述べ、所見が無くても存在する
  • アーキテクチャ、集約 / トランザクション境界、セキュリティがそれぞれ扱われている(畳まれていない)。レポートがレビューの組み立て方を述べている
  • ⛔ と 🔴 のすべてが 4 要素を持つ: 正確な行、詳しい「なぜ誤りか」(仕組み → 具体的な障害 → そこに至る経路 → 形が原因か)、平易な説明、貼れるコメント
  • 重大度の凡例がレポートにある(🔴 と 🟡 の違いを読み手に推測させない)
  • 破壊的変更や権限拡大の所見を、起きにくいという理由だけで格下げしていない
  • 🔎 が読んだものと仮定したものを分け、plan の出力を見ていないことを明記している
  • 🔬 が反証の件数を報告している。0 件なら 0 件と書く

ガードレール

  • 読み取り専用。コードも設定も変更しない。
  • terraform plan/apply、cdk diff/deploy、その他のデプロイコマンドを実行しない。 plan でも認証情報が要り、state を書くことがある。ユーザーが実行するコマンドを名指す。
  • 提案コメントは提案のまま。gh pr review での投稿は頼まれた時だけ。
  • 問題なしの結果を安全の証明として示さない。限界を 🔎 に書く。

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.