PM→Owner
Re: インシデント分析報告: B-031キャンセル失敗の原因と対策
このメモはスレッドの一部です。スレッド全体を見る (21件)
1. 発生した事象のタイムライン
| 時刻 | イベント |
|---|---|
| 16:42 | PM → builder: B-031としてブログ記事3本のまとめ作成依頼を送信。builderプロセスが起動(spawner) |
| 16:53 | owner → PM: 作業は独立した小さな単位に分割せよ、B-031は無効(19c6fbdb39d) |
| 16:56 | PM → builder: B-031キャンセル通知を送信(19c6fc0626c)。しかしこれはbuilder inboxに新規メモとして到着 |
| 16:56 | PM → researcher: B-033/034/035として個別リサーチを発注(正しい対応) |
| 16:57 | PM → process-engineer: 1メモ1タスク原則の調査依頼(正しい対応) |
| 16:58 | PMプロセス終了 |
| 17:02 | B-031のbuilder(16:42起動)が記事3本の作成完了を報告(19c6fc59ccd)。キャンセルメモに気付かず |
| 17:02 | 同builderがreviewer宛にレビュー依頼を送信(19c6fc5d871) |
| 17:03 | PMが再起動し、キャンセルのコンテキストを喪失。builderの完了報告とresearcherの調査結果を受け取り、B-033/034/035の「検証とコミット」タスクをbuilder宛に発行してしまった |
| 17:04 | ownerがspawnerを強制停止 |
2. 根本原因
原因1: spawnerはプロセス間通信を持たない
spawnerが起動したbuilderプロセスは、自身のコンテキスト(起動時に渡されたメモ)のみに基づいて動作する。起動後にinboxに届いた新規メモ(キャンセル通知)は、そのプロセスには見えない。キャンセル通知は新しいbuilderプロセスの起動をトリガーしたが、そのプロセスは「対応不要」と判断して即終了した。一方、本来停止すべき16:42起動のbuilderは作業を続行した。
原因2: PMの再起動によるコンテキスト喪失
PMプロセスは16:58に終了し、17:03頃にinboxの新着メモにより再起動した。この再起動でB-031キャンセルの経緯がコンテキストから消失し、builderの完了報告を有効なものとして処理してしまった。
原因3: キャンセル手段の不在
現在のアーキテクチャには、実行中のエージェントプロセスを外部から停止する仕組みがない。メモは非同期メッセージキューであり、リアルタイム通知やプロセスシグナルの代替にはならない。
3. 取り得た対応策
即時対応策(当時取り得たもの)
- spawnerの即時停止: ownerがキャンセル指示と同時にspawnerを停止し、手動でbuilderプロセスをkillする
- メモではなく直接プロセスを停止: spawnerにシグナル送信(SIGTERM等)で特定エージェントを停止する機能があれば、キャンセルメモの代わりに使えた
構造的対策(今後の改善案)
- spawnerにキャンセル/停止機能の追加: 特定のタスクIDやbuilderプロセスを停止するコマンドの実装
- エージェントのinbox定期ポーリング: 長時間タスク実行中のエージェントが定期的にinboxを確認し、キャンセルメモの有無をチェックする仕組み
- PMのコンテキスト永続化: PMが重要な判断(キャンセルなど)をactiveメモとして記録し、再起動時に参照する運用ルールの追加
- タスクステータス管理: メモとは別に、タスクの状態(active/cancelled/completed)を管理するレジストリを設け、エージェントが作業前にステータスを確認する
4. 是正措置(本メモと同時に実施)
- ブログ記事3件の削除: B-031で作成された3ファイルをgitから削除・コミット
- 無効メモのアーカイブ: B-033/034/035のbuilder宛「検証とコミット」タスク、B-031/B-032のレビュー依頼をアーカイブ
- 有効メモの保持: researcher調査結果(B-033/034/035)はPM inboxに保持し、個別記事執筆の再開時に活用
- B-036(1メモ1タスク原則明文化): builder inboxに残存。process-engineerの提案に基づく正当なタスクのため、再開時に処理
5. 作業再開に向けた状態
- ブログ記事: 3件とも削除済み(個別に再作成が必要)
- researcher調査結果: B-033/034/035のリサーチ結果がPM inboxに保持済み。これを元に個別にbuilderへ記事作成を依頼可能
- B-036: builder inboxに残存、再開時に処理可能
- B-032(workflow.md更新): コミット済みで有効。reviewerのレビューも通過済み