次のAIに渡す指示書を、別のAIに「論破しろ」と投げたら、「緑なのに中身が空っぽのテスト」を掘り当てられた
いま、あるアプリをClaude Codeで作っている。 ただ作り方が少し変わっていて、1つの「司令塔」セッションが指示書を書き、別の「作業員」セッションたちが並行で実装する、という回し方をしている。 司令塔は自分では手を動かさない。次に何をやるかを、作業員がそのまま読んで動ける「引き継ぎプロンプト」に落とすのが仕事です。
で、その引き継ぎプロンプトが、地味にいちばん怖い。 渡した瞬間、作業員はそれを「仕様書」として信じて走り出すから。 仕様書が間違っていたら、間違ったものが、勢いよく出来上がる。
渡す前に、いつもの儀式をやった
作業員に投げる前に、最近クセになっている一手がある。 「論破するのが仕事」のサブエージェントに、その指示書を読ませる。 承認するな、粗を探せ、「概ね妥当です」で締めるな、と定義してあるやつです。
今回いつもと違ったのは、こいつがプロンプトの文章だけでなく、実際のコードを読みに行ったこと。 で、返ってきた指摘で、ちょっと胃が冷えた。
指摘1: 「テストを緑にしろ」と書いたが、そのテストは緑の意味がなかった
指示書に、完了条件(DoD)としてこう書いていた。 「◯◯のテストを通す(緑にする)こと」。
論破エージェントの返答はこうだった。 「そのテスト、中身が失敗しても緑になります」。
読むと、本当にそうだった。 そのテストは「処理が最後まで走ったか」しか見ていなくて、肝心の「成功したか」を検査していない。 失敗しても「失敗という結果を返して最後まで走った」ら緑。 おまけに一括実行のケースは例外を握り潰していて、何が起きても緑。
つまり作業員が「DoD達成、テスト緑です!」と報告してきても、何ひとつ証明されていない可能性があった。 自分で書いた完了条件が、空っぽの合格判定だったわけです。
指摘2: 「フラグを切り替えるだけ」と書いたが、その切り替えは存在しなかった
もうひとつ。 指示書に「設定フラグを切り替えれば本物の部品に差し替わる」と、さも既にある機能みたいに書いていた。
論破エージェントはコードを追ってこう返した。 「その配線、どこからも呼ばれていません。関数は在るが、繋がっていない」。
これも当たっていた。 差し替える関数は用意されていたけど、画面のどこからもその関数に到達していない。 作業員は、存在しないスイッチを小一時間探すか、探し疲れて「それっぽく」でっち上げるか、のどちらかに落ちるところだった。
怖かったのは、どっちも「在ると言い切れた」こと
2件とも、自分は自信満々で書いていた。 「テストは通る」「フラグで差し替わる」。 書いた時点では、本当にそう思っていた。 論破エージェントは、自分が読み返さなかったコードのほうを読んだ。それだけの差です。
引き継ぎのプロンプトって、要は仕様書です。 そして人からAIへ、AIからAIへ、あるいは今日の自分から来週の自分へ仕事を手渡す瞬間の「仕様書」にこそ、嘘が紛れる。 「緑だけど中身のないテスト」とか「在ることになっている配線」とか。 散文をもっともらしく読んで承認するレビューじゃなく、実物のコードを読んで殴りにくるレビューじゃないと、これは捕まらない。
学び
「テストが緑」は、そのテストが正しいことしか保証しない。 そして自分で書いた完了条件は、自分ではいちばん疑いにくい。
だから、手を動かす前に一番論破させるべきなのは、コードじゃなくて指示書のほうかもしれない。 実装を10時間走らせてから「その緑、意味なかったね」に気づくより、渡す前の3分の敵対レビューのほうが、圧倒的に安い。