openclaw/docs/fixes/2026-01-25-config-reload-loop.md
Shunsuke Hayashi 4c014b7b6b fix: replace personal paths with placeholders and update test expectations
- 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>
2026-01-26 06:33:44 +09:00

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過剰反応

  1. metaフィールドの循環更新

    "meta": {
      "lastTouchedAt": "2026-01-25T11:25:18.265Z",
      "lastTouchedVersion": "2026.1.24-0"
    }
    

    これらのメタデータが更新されるたびに、Config Watcherが変更検知 → 再起動トリガー → またメタデータ更新 (無限ループ)

  2. デバウンス時間不足

    • 現行: 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

検証シナリオ:

  1. 複数エージェントが同時にConfig更新
  2. 5秒以内の複数変更が1回に集約される
  3. 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に影響しないか?

エッジケース確認

  1. meta以外のフィールド変更: 正常に再起動するか?
  2. 5秒以上の間隔で更新: デバウンスが効かないことを確認
  3. 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 ステータス: 🟡 コードレビュー待ち