AI のレビューを同じ会話とサブエージェントで2回通したのに、ログインボーナスが二重に配られた。書いた側の言い分を渡さず、差分と仕様だけでレビューを頼む依頼の組み立て(敵対的レビュー)を TypeScript と node --test で書きます。
公式サイトのドキュメントを貼って AI に書かせたら、入っている版に無い関数でビルドが30か所落ちた。インストール済みの依存から名前と版を取り出し、AI に渡す資料を作る方法(最新ドキュメントを渡す)を TypeScript と node --test で書きます。
AI に保管料の計算の改修を任せたら、テストの期待値がバグの出力に書き換えられ、チェックは全部緑のまま請求が倍になった。テストを先に固め、その後の差分からテストの削除と期待値の書き換えを見つける仕掛け(テスト先行と改変の検知)を TypeScript と node --test で書きます。
AI に一つの会話で不具合を7件続けて直させたら、7件目の修正で5件目が元に戻った。会話をタスクごとに区切り、決めたこととやめたことだけを次の会話に渡す引き継ぎ書(1タスク1セッション)を TypeScript と node --test で書きます。
確認が一日三百回出るのに疲れて AI の操作を全部許可にしたら、AI が検証環境のデータを消した。通す・聞く・止める操作を先に決めて、読む確認だけを残す仕組み(許可リスト)を TypeScript と node --test で書きます。
指摘のたびに規則を足した指示書が300行を超え、肝心の1行が埋もれて同じ指摘が三回目に。hook の名前ではなく、規則ごとの違反例を実際に流して止まった行だけを消す刈り込み(指示書の刈り込み)を TypeScript と node --test で書きます。
指示書に3回書いた「本番に出したマイグレーションは書き換えない」を AI が10回目に破り、本番だけ列が足りずに落ちた。書き込む直前に必ず走るスクリプトで止める仕組み(hooks)を TypeScript と node --test で書きます。
キャンセルされた注文が工場への作業指示に残り、要らない部品を300個作った。AI に先に質問させて仕様書を書かせ、要件ごとに受け入れテストがあるかを確かめる関数(仕様インタビュー)を TypeScript と node --test で書きます。
AI に番号表示の修正を頼んだら、決済の端数処理まで含む42ファイルが書き換えられていた。先に読ませて計画を書かせて承認し、差分が計画のファイルに収まるかを判定する関数(探索→計画→実装)を TypeScript と node --test で書きます。
AI の「完了しました。テスト12件すべて通過」を信じてマージしたら、送信処理は空のまま本番に出ていた。完了報告に件数を申告させ、人の側で走らせた実測と突き合わせる検収関数(完了の証拠)を TypeScript と node --test で書きます。
部品ごとの単体テストは全部緑なのに、月末の締め処理を通すテストは1本も無い。影響が集まる1か所にテストを1本だけ置く締め所(Pinch Point)を、部品を1つずつわざと壊して確かめながら Perl で書きます。
通知先を別の部品に替えたら、日次処理は通るのに月末処理だけがメソッド不足で止まった。使う側が呼ぶメソッド名の一覧を1か所に書き、can で本物と替えの両方を確かめる――インタフェースの抽出(Extract Interface)を素の Perl で書きます。
数百行の決算処理は途中の値がすべて関数の中に閉じていて、3段目だけを確かめられない。関数をクラスへ移し、局所変数をフィールドにする――メソッドオブジェクトの抽出(Break Out Method Object)を、呼び方も戻り値も変えずに行います。
関数名を揃えたら、テストは緑のまま、差し替えたはずの印字処理が本物のまま動いていた。名前で縛った差し替えは名前が変わると効かなくなる。インスタンス委譲の導入(Introduce Instance Delegator)で、差し替えを渡すオブジェクトで決める形にします。
組み立てた途端に本番の帳簿ファイルを開いてしまうクラスは、そのままではテストできない。コンストラクタのパラメータ化(Parameterize Constructor)で、依存を外から渡しても渡さなくても動く形にします。