review-before-commit · git:20260921.aeecf4e · 2026-09-21 · sha256 1832b5b27ef3540e
review-before-commit git:20260921.aeecf4eA
Immutable. This exact content is served forever at /api/v1/blob/1832b5b27ef3540e.
--- name: review-before-commit description: commit を提案する直前に回す検査。対話でのみ述べて記録に入れ忘れたものを洗い出し、文脈を持たない読み手が読めるかを参照・時点語・件数の3軸で検査する。公開リポジトリなら、コミットメッセージの規約・staging に混ざった未追跡ファイル・履歴として公開される情報も同じ1本で検査する。staging 内容とコミットメッセージを提示する前に使用(push 前の検査は review-before-push)。 --- # commit 直前の検査 **読み手は「文脈を持たない次のセッションの AI」である。** 書いた本人には解決できてしまう参照が、ここで落ちる。 🔴 **冒頭で1つだけ判定する: 対象は公開リポジトリか、非公開か。** ⇒ **公開なら、下の「公開リポジトリのときに追加で回す」節まで含めて、この1本で回す。** ⭐ **判定は最初の1回だけで、手順ごとに「これは公開向けか」を考えない**——**判断の場面を消すための構成である。** **この Skill は手順だけを持つ。** **なぜ検査するかの一般形は `01_ai-driven-dev-strategy.md`「外に出る直前に検査を挟む(非可逆な操作のゲート)」**にあり、**このリポジトリ固有の規約は `CLAUDE.md`** にある。⇒ **どちらも正本で、この Skill はその実装である。** ## 前提思想 - **検査は通過判定ではない。** 指摘は列挙して人間に渡す。致命的でなければ直さず記録する、という選択が常にある。 - **検査そのものが、部分適用で「通過」しうる。** 落ち方は2通りある——**検査項目の一部を飛ばす**(3軸のうち2軸だけ当てる)と、**検査対象の一部を飛ばす**(2ファイルのうち1ファイルだけ見る)。⇒ **どちらも明示的に宣言してから始める。** - **対象は「自分が編集した範囲」ではない。** 今回触っていない箇所でも、次のセッションの開始に要るなら読む。 ## モード | モード | 発動 | 振る舞い | |--------|------|---------| | **検査(既定)** | commit を提案しようとした瞬間 | 下の手順を上から順に回し、検出物を一覧で出す | | **再検査** | 前回の検査の後にさらに編集した場合 | **前回の検査後に書いた分を対象に、同じ手順を回す**(⚠️ 前回「通った」ことは今回の根拠にならない) | ## 確度ラベル 検出物には `[Fact]`(実測した)/`[Judgment]`(読んで判断した)/`[Assumption]`(確かめていない)を付ける。**「たぶん解決する」を `[Fact]` として報告しない。** ## 手順 ### 1. 対話にのみ在るものを洗い出す このセッションで**対話でのみ述べて、まだ `.md` に入っていない**ものを列挙し、1件ずつ「入っている/入っていない」を判定する。 - ⚠️ **特に見るもの: 「後で書きます」「レトロで扱います」「次のセッションで」と言ったもの。** ⇒ **そう言ったこと自体が、記録した気にさせる。** - ⚠️ **裁定・訂正・数値・人の逐語**は落ちやすい。**提案しただけで採用されなかったものは、落ちてよい**(区別して報告する)。 - **判定は grep で行う**——記憶で「書いたはず」と答えない。 ### 2. 検査対象を宣言する - **今回の diff で触ったファイル** - + **それらを指しているファイル/それらが指しているファイル** - + **次のセッションの入口になるファイル**(制御plane・記録の開始点) ⇒ **この3つを列挙してから検査に入る。** 対象を宣言しないと、後から「そこは見ていなかった」が出る。 ### 3. 3軸をすべて当てる | 軸 | 見るもの | 落ちている例 | |---|---|---| | **参照** | リンク・見出し名・ID・「あのファイル」「上記」「下記」 | 実在しない見出しを指す/位置語で指した先が、自分の挿入で動いた | | **時点語** | 「次」「現在」「まだ〜していない」「予定」 | 読まれる時点では既に済んでいる断定形/どのセッションを指すか決まらない | | **件数・範囲** | 「N 件」「`A`〜`E`」「N 本」 | 正本から数え直せる値を別の行に書いた(**編集のたびに壊れ、壊れたことが読んでも分からない**) | ⚠️ **3軸のうち1つでも当てていないなら「通った」と報告しない。** ### 4. 出力する 検出物を一覧にして、**直すか・記録して残すか**を人間に裁定させる。⚠️ **勝手に直さない**——AI の指摘は提案であって、自動適用しない。 ## 公開リポジトリのときに追加で回す **公開リポジトリの履歴は、push した時点で永久に公開される。** ⇒ **diff だけでなく、メッセージ・日時・author・staging の中身が、そのまま読まれる。** 🔴 **この節が要る理由は「漏れるから」ではなく「直すコストが跳ね上がるから」である。** **push 前に見つけても直せるが、履歴になった後は `amend` か rebase になる**——**小さく commit する運用と組み合わさると、跨る確率が高い。** - **commit の瞬間にしか安く直せないものがある**——**メッセージ/staging の中身/author。** - **commit date は、commit した瞬間に確定する。** ⇒ **push を遅らせても稼働時間の露出は減らない**(遅らせて効くのは操作ミスと誤公開だけ)。**ここで止められるのは「何を・どう書くか」であって、日時ではない。** ### 5. コミットメッセージを検査する - **何をしたかを1行で書く。理由を書かない**——**理由は判断の記録側、課題は課題一覧側に置く。** 🔴 **git 履歴は正本ではなく複製であり、意味を載せると二重管理になって必ず片方が腐る。** - ⚠️ **発火の合図: メッセージに理由を書きたくなった瞬間。それが判断の記録へ起票する合図である。** ⇒ **「後で書く」と言わずに、その場で起票する。** - **メッセージ自体の機微を見る**——**実名・メールアドレス・絶対パス・内部 URL・チケット ID・依頼者や案件の名前。** - **`-m` を複数指定して渡す**(件名と付記を別の `-m` にする)。⚠️ **複数行の文字列を1つの引数として組み立てない**——**引用符法を選ぶ場面が生じ、literal が混入する失敗モードに到達できてしまう。** ### 6. staging の中身を1件ずつ提示する - 🔴 **`git add -A` を使わない**——**未追跡ファイルを無検査で取り込むため。** - **staging に入るファイルを列挙し、意図しないものが無いかを人間に見せる**——**下書き・作業メモ・一時ファイル・別の作業の残骸。** - ⚠️ **`.gitignore` されているものは diff に出ない。** ⇒ **「差分がきれい」は「混入が無い」を意味しない**——**追跡下に入る瞬間を見る。** ### 7. 履歴として公開されるものを確認する - **author**(名前・メールアドレス)が意図した値か。 - **この commit が、稼働の傾向を露出させないか**——**個々の記述が許容範囲でも、時系列で累積すると像を結ぶ。** - **判定基準は「内部か外部か」ではなく「書き手の生活・稼働の記録か、内容についての判断の記録か」。** ## Output Format ``` ## 対象(公開 / 非公開) ## 対話にのみ在るもの | ID | 内容 | 判定 | ## 検査対象(宣言) - 触ったファイル / それを指すファイル / 入口 ## 3軸の結果 | 軸 | 結果 | 検出物 | ## 公開リポジトリのとき(非公開なら「対象外」と1行書く) - staging(1件ずつ) - コミットメッセージ案(件名 / 付記)— 理由を書いていないか / 機微は無いか - 履歴としての露出(author / 稼働の傾向) ## 提案 - 直す: … - 記録して残す: … ## 承認のお願い(commit のみ。push は別に伺う) ``` ## この Skill の受入基準(AC — 機能したと言える観測可能な条件) 1. **対象が公開か非公開かを、検査を始める前に宣言した** 2. **対話にのみ在るものを、grep で判定して列挙した**(記憶で答えていない) 3. **検査対象を、検査を始める前に列挙した** 4. **3軸すべてを当てたことが出力から読み取れる**(部分適用でないこと) 5. **検出物を勝手に直していない**——直すかどうかは人間が決めた 6. **検出ゼロのときも、何を見てゼロだったかが読み取れる** 7. **公開リポジトリのときは、staging を1件ずつ列挙し(`git add -A` を使っていない)、メッセージに理由が入っていないことを確認し、メッセージの機微を名指しで検査した** 8. **commit の承認だけを求めた**(push を同じ文で承認させていない) ## 運用規律 - **規律の本体は `01`「外に出る直前に検査を挟む」と `CLAUDE.md`。** この Skill が持つのは手順だけで、同じことを二重に書かない。 - 🔴 **この1本で公開・非公開の両方を覆う。** ⚠️ **他の Skill を呼ぶ前提を持たない**——**自足させることで、呼び出す本数を増やさない。** - **push 前の検査は `review-before-push`**(到達状態・確度ラベル・不変条件での測定。公開なら読み手・機微・版が加わる)。 - **環境依存の値(パス・ホスト名・バージョン)をこの Skill に書かない。** 実行環境の記録側に置く。 - **この Skill は commit の可否を判定しない。** 判定するのは人間である。