AIエージェントのcommit報告を機械的に検証する

AIエージェントのcommit報告を機械的に検証する

AIエージェントに実装を任せると、作業完了時に「commitしました」とハッシュが返ってきます。便利な報告ですが、ハッシュが書かれていることと、そのcommitが作業環境に存在することは別の話です。

複数のAIエージェントを並行運用する仕組みを検証していたとき、完了報告に含まれていたハッシュを独立に調べたところ、対象リポジトリに存在しないものが見つかりました。報告の形式は整っていても、Gitの履歴に裏付けがなければ、反映済みという判断はできません。

起きやすい失敗パターン

典型的なのは、作業場所と確認場所が分かれているケースです。ある環境でcommitを作ったあと、変更されたファイルだけを別の環境へコピーすると、ファイルの内容は移せてもGitのcommitオブジェクトは移りません。コピー先で同じハッシュを名乗っても、そのハッシュを構成する履歴や親commitが存在しないからです。

さらに、並行作業では別のcommitが先に作られたり、意図しない変更が同じcommitに含まれたりします。人間が報告文を目視するだけでは、こうした履歴上の食い違いを安定して見抜けません。

報告前に行う二つの確認

commitを作成した側は、ハッシュを報告へ記載する前に、次の二つを同じ作業環境で実行します。どちらか一つだけでは不十分です。

commit_hash="<確認対象のハッシュ>"

# 1. そのオブジェクトが存在し、commit型であること
git cat-file -t "$commit_hash"

# 2. 現在のHEADからたどれる履歴に含まれていること
git merge-base --is-ancestor "$commit_hash" HEAD

最初のコマンドの結果が commit であり、二つ目の終了ステータスが0であることを確認します。後者は「そのハッシュがどこかに存在する」だけでなく、いま確認しているブランチの履歴に到達可能かを調べるものです。

確認に失敗した場合は、ハッシュを報告せず、作業場所・ブランチ・同期手順を見直します。ファイル差分が見えていても、履歴が確認できないなら、完了扱いにしないほうが安全です。

独立チェックを組み込む

実装したエージェント自身の確認だけに依存すると、作業場所を取り違えた場合に同じ誤りを見逃します。品質確認を担当する人や別エージェントは、報告されたハッシュを自分の環境で再検証します。

git cat-file -t "$reported_hash" >/dev/null \
  && git merge-base --is-ancestor "$reported_hash" HEAD

この確認は、報告文の信頼性を評価するためではなく、Gitという一次データを直接調べるためのものです。実装者の説明、画面に出た成功メッセージ、ファイルの存在確認は補助情報にとどめ、最終判定はリポジトリの状態で行います。

「ファイルがある」だけでは足りない

同じ考え方はデプロイ確認にも適用できます。配置先にファイルが存在していても、最新の内容とは限りません。個別にコピーした場合は、依存ファイルや指定漏れが残る可能性があります。

反映の完全性を確認したいなら、対象範囲を明示したうえで、正本と配置先のファイルをSHA-256などで全量比較します。結果は MATCHMISMATCHONLY_LOCALONLY_REMOTE のように分類すると、存在だけを確認したときの見落としを減らせます。

commitの実在・到達性確認とファイルの全量比較は、別々の手順に見えて本質は同じです。「作業した」という自己申告や部分的な成功表示ではなく、成果物の状態を独立した機械的な証拠で確かめる、という運用です。

AI開発をチームで使うための小さな規約

AIエージェントは、コードを書くことだけでなく、完了報告を作るところまで担当します。だからこそ報告の末尾に、次のような検証結果を必須項目として持たせると運用しやすくなります。

  • 報告対象のcommitハッシュ
  • git cat-file -t の結果
  • git merge-base --is-ancestor の終了ステータス
  • 確認したブランチ名と作業ディレクトリ
  • 独立確認者による再検証の結果

この情報がそろわない報告は、変更内容が正しそうに見えても保留にします。確認コマンドは短く、CIや作業完了フックにも組み込みやすいため、注意力に頼るより再現性があります。

AIに任せる範囲が広がるほど、報告を疑うことが目的になるのではありません。報告を信頼できる状態にするため、誰が作業しても同じ証拠を残すことが重要です。ハッシュを二つのコマンドで検証する小さな習慣が、見えない履歴の取り違えを早期に止めます。