AI駆動開発の実運用ノート

配布資料の目次 › 失敗事例カード

配布資料 42事例 #02: プロジェクト記憶の引き継ぎが静かに取りこぼされ続けた

コミットは成功します。エラーも出ません。なのに記憶が引き継がれていません。 いちばん気づきにくい種類の事故でした。

何が起きたか

プロジェクト記憶——AI の長期記憶——を SQLite の DB としてリポジトリに置き、git 経由で別端末へ引き継ぐ構成を採っていました。

セッション終了時に手動で git add して commit します。 コミットは成功したように見えるのに、記憶が引き継がれません。 これが繰り返し起きました。

原因は SQLite の WAL(先行書き込みログ)モードでした。 書き込み内容は git 管理外の別ファイルに滞留し、チェックポイントするまで本体の DB ファイルに反映されません。本体が「無変更」に見えるので、git は何もコミットしていなかったのです。

なぜ起きたのか

表面的には、手動 git add では WAL がフラッシュされないことです。

構造のほうが厄介でした。 既存の予防フックが「DB ファイルがステージ済みのときだけチェックポイントする」条件になっていました。つまり未統合のときほど発動しません。 見事な catch-22 です。

別の壊れ方もしました。記憶への長文書き込みが蓄積し、読み出しがサイズ超過エラーで機能停止しました。 記憶は書きすぎでも壊れます。

そこから生まれたルール

「記憶の同期は専用スクリプト(チェックポイント→add→commit→push を一括実行)以外で行わない。手動 git add は禁止」

「記憶には要点のみ書き、実装詳細はイシューコメントを正本にする」

どう機械に守らせたか

①pre-commit フックを「WAL に未統合バイトがあれば無条件にチェックポイント + add」に改修 ②pre-push フックが未統合を検出したら push を中止する(安全網) ③セッション開始フックが git フックの未取付を自動修復する ④長文書き込み(1500字超)には警告フックを出す

持ち帰るなら

「成功したように見えて何も起きていない」サイレント失敗が、記憶やバックアップの系では最も危ないです。

同期は1コマンドに固めます。手動手順は禁止します。 そして検知の側は、「失敗時に発動しない条件になっていないか」まで疑ってください。