バグ #127
完了
調査報告(2026-03-20 13:00 頃実施)¶
報告者: Claude Code (Opus 4.6)
発生状況¶
- セッション中に
butler__submit_task で git_commit を投入
- MCP ツール呼び出しが応答なく延々と待ち状態になった
- ユーザーが手動でキャンセル
診断結果¶
プロセス状態¶
| 項目 |
値 |
butler.pid の中身 |
6056 |
| PID 6056 の現在 |
存在しない(消滅済み) |
| 実際の fastmcp プロセス |
PID 31048(7,324 KB) |
| fastmcp 起動時刻 |
11:03:06 |
| butler.db 最終更新 |
12:43 |
PID 不一致の構造¶
-
butler/main.py の _write_pid() は os.getpid() を書く
-
Python プロセスの PID (6056) が書かれるが、MCP 通信を受ける fastmcp.exe (31048) とは別プロセス
- PID 6056 は起動後に消滅 → PID ファイルが孤立
MCP 接続状態¶
-
butler__list_skills() → MCP error -32000: Connection closed
- fastmcp.exe プロセスは存在するが MCP 通信チャネルが死んでいる
ハングの推定メカニズム¶
-
git_commit は同期実行パス(should_submit_synchronously() = true)
- 同期パスでは
_orchestrator_mod.run_task() の完了を待つ
- MCP 接続が切れている状態で呼び出すと、応答が返らずハングする
追加の発見事項¶
-
~/.claude/secrets/env.sh に REDMINE_URL と REDMINE_TOKEN が未設定(Butler 障害時のフォールバック不可)
- Butler のログ出力先が不明(*.log ファイルが見つからない)
未解明の点¶
- PID 6056 がなぜ消滅したか
- MCP チャネルがいつ切れたか
- Butler のログ永続化の仕組みが無い
提案する対策¶
短期: fastmcp 再起動、env.sh に REDMINE 環境変数追加
中期: PID ファイルに fastmcp の PID を書く、ログ永続化、MCP 健全性チェック(heartbeat/timeout)
#131 と同じ根本原因。_request_push_approval が wait_for_approval の返り値 "approved" を "approve" と比較していたため、承認後に常にタイムアウト分岐に落ちていた。
修正コミット 0879a09 で _request_push_approval(共通関数)を修正済み。add_project_to_wiki も sync_wiki も同じ関数を使うため、両方とも解消。
他の形式にエクスポート: Atom
PDF