- Replace /Users/shunsukehayashi/dev/clawdbot with /path/to/clawdbot - Sanitize local-only path references in docs - Update debounceMs test expectation from 300ms to 5000ms to match implementation Co-Authored-By: Claude <noreply@anthropic.com>
5.4 KiB
5.4 KiB
Clawdbot並列実行クラッシュFix実装プラン
作成日: 2026-01-25 担当: しきるん (Claude Code) GitHub Issue: #93 関連Issue: #92 (調査レポート)
📋 概要
Clawdbotの並列実行時に発生するサービス再起動ループ (30回/3.2分間隔) を修正するための詳細実装プラン。
問題の要約
| 現象 | 頻度 | 影響 |
|---|---|---|
| Service Restart Loop | 30回/3.2分 | Discord切断、応答欠落 |
| Shutdown Timeout | 1回 | リソースリーク |
| Discordリアクション未完了 | 複数回 | UX低下 |
🎯 根本原因
Primary Cause: Config Watcher過剰反応
-
metaフィールドの循環更新
"meta": { "lastTouchedAt": "2026-01-25T11:25:18.265Z", "lastTouchedVersion": "2026.1.24-0" }これらのメタデータが更新されるたびに、Config Watcherが変更検知 → 再起動トリガー → またメタデータ更新 (無限ループ)
-
デバウンス時間不足
- 現行: 300ms
- 問題: 並列実行時の複数Config更新を吸収しきれない
🔧 Fix設計
Fix 1: metaフィールド無視ルール追加
ファイル: src/gateway/config-reload.ts
変更内容:
const BASE_RELOAD_RULES_TAIL: ReloadRule[] = [
{ prefix: "identity", kind: "none" },
{ prefix: "wizard", kind: "none" },
{ prefix: "logging", kind: "none" },
+ { prefix: "meta", kind: "none" }, // FIX: meta.*フィールドの変更を無視
{ prefix: "models", kind: "none" },
...
効果:
meta.lastTouchedAt,meta.lastTouchedVersionの変更が再起動をトリガーしなくなる- ループが断ち切られる
Fix 2: デバウンス時間延長
変更内容:
const DEFAULT_RELOAD_SETTINGS: GatewayReloadSettings = {
mode: "hybrid",
- debounceMs: 300,
+ debounceMs: 5000, // FIX: 300ms → 5000ms (並列実行時の複数更新を吸収)
};
効果:
- 5秒間のConfig変更がまとめて処理される
- 並列実行時の複数エージェントによるConfig更新を1回に集約
📊 変更ファイル
| ファイル | 変更内容 | 行数 |
|---|---|---|
src/gateway/config-reload.ts |
metaルール追加 + debounceMs変更 | 2箇所 |
🧪 検証計画
Unit Tests
pnpm test src/gateway/config-reload.test.ts
検証項目:
- metaフィールド変更で再起動がトリガーされない
- 5000msデバウンスが正しく動作
- その他のフィールド変更は正常に動作
Integration Tests
# 並列実行シミュレーション
pnpm test:manual --parallel-config-changes
検証シナリオ:
- 複数エージェントが同時にConfig更新
- 5秒以内の複数変更が1回に集約される
- metaフィールド更新で再起動が発生しない
Production Verification
# 1. ローカルビルドをインストール
cd /path/to/clawdbot
pnpm build
sudo npm link
# 2. Gateway再起動
pkill -9 -f clawdbot-gateway || true
clawdbot gateway run --port 18789 &
# 3. ログ監視
tail -f /tmp/clawdbot/clawdbot-*.log | grep -E "config change|service restart|SIGUSR1"
# 4. Discordテスト
# - メッセージ送信 → リアクションが返ってくることを確認
# - 並列実行 → 再起動回数が減少していることを確認
📝 CodeXレビュー依頼項目
コードレビュー
| 項目 | 確認内容 |
|---|---|
| 正確性 | metaフィールドが正しく無視されるか? |
| 完全性 | 他のフィールドへの副作用はないか? |
| 安全性 | デバウンス延長による問題はないか? |
| パフォーマンス | 5000msの遅延がUXに影響しないか? |
エッジケース確認
- meta以外のフィールド変更: 正常に再起動するか?
- 5秒以上の間隔で更新: デバウンスが効かないことを確認
- hot reloadアクション: 既存のhot reloadは正しく動くか?
🔄 リリース計画
Phase 1: Local Testing
- Unit Tests実行
- Integration Tests実行
- ローカルGatewayで検証
Phase 2: Beta Release
npm publish --tag beta- テスト環境にデプロイ
- 24時間監視
Phase 3: Stable Release
- 問題なしを確認
npm publish --tag latest- 変更ログ更新
📈 成功指標
| 指標 | 現状 | 目標 | 測定方法 |
|---|---|---|---|
| 再起動回数/時間 | 30回/3.2分 | <5回/時間 | ログ解析 |
| Discord切断 | 33回/日 | <5回/日 | ログ解析 |
| 応答完了率 | ~70% | >95% | Discord確認 |
⚠️ リスク評価
| リスク | 確率 | 影響 | 緩和策 |
|---|---|---|---|
| デバウンス長すぎてUX悪化 | 低 | 中 | ユーザー設定で短縮可能 |
| meta無視で必要な更新漏れ | 低 | 低 | metaは内部用のみ |
| 既存機能への副作用 | 低 | 中 | Unit Testsで網羅 |
📚 参考資料
作成者: しきるん (Claude Code) 最終更新: 2026-01-25 ステータス: 🟡 コードレビュー待ち