2026 MAC
OPENCLAW_
V2026.5.3–5.7_
FAIL_CLOSED_
DOCTOR_LAUNCHD.

ターミナルと運用オートメーション

2026年5月OpenClaw v2026.5.3–5.7 を連続適用したあと、Gateway が無効設定を理由に即終了(fail-closed) し、CLI だけ正常に見える状況に遭遇することがあります。これは多くの場合、スキーマ検証の厳格化npm プラグイン読み込みの硬化LaunchAgent と対話シェルの環境差の組み合わせです。本稿では課題の分解、意思決定表、5ステップ Runbook、ケーススタディ、運用上の観点、数値ゲート、FAQ を示し、偽アップグレードと PID 整合Gateway 未導入と npm パスv2026.5.x 本番運用とチャネル/TTS と相互参照します。証跡をチケットに残し、必要に応じて リモート Apple Silicon 上の Gateway 検証用ホスト で同じ手順を先に演習してください。

1. 課題の分解:fail-closed は運用意味論の移行です

以前は不完全な JSON でも Gateway が起動し続けることがありましたが、新しいビルドでは スキーマ違反や移動済みディレクトリ参照 に対して早期終了しやすくなります。プラグインの npm ツリーが壊れている場合、インストール時ではなく 実行時ロード で失敗します。macOS では LaunchAgent の EnvironmentVariables が zshrc の export と自動同期されません。doctor --fix が状態を移したのに plist が古い workspace を指していると、CLI は緑、デーモンは赤 になります。リモート 7×24 では再起動ループが証跡を消すため、まず書き込み面を凍結しログスライスを取得してください。偽アップグレード(古いバイナリが動く)とは証拠の取り方が異なり、こちらは JSON パスとスキーマメッセージ を優先します。

2. 意思決定表

シグナル主アクション代替
invalid / schema / fail-closed で即終了バックアップ後に doctor --fix、openclaw.json を差分確認再起動ループを止め、直近200行を保存
プラグインのみ失敗該当 id の npm 再インストール最小プラグイン集合で起動検証
シェルは正常、launchd のみ失敗plist の PATH/NODE を which と突合unload/load または kick
監査が再現可能な窓を要求第2のリモート Mac で同一手順を演習読み取り専用スナップショット後に灰度

3. 5ステップ Runbook

Step 1 書き込み面の凍結

バージョン文字列、Gateway ポート、LaunchAgent Label を記録し、openclaw statusopenclaw gateway status、ログスライスをチケットに添付します。

Step 2 ログの分類

設定拒否とプラグイン拒否を分けます。JSON パスが示されていれば部分修正を優先します。リモートは SSH で非対話取得します。

Step 3 doctor --fix の順序

Gateway を停止してから状態ディレクトリの移動を許可します。tar スナップショット必須です。doctor は副作用のあるマイグレータです。

Step 4 npm プラグイン修復

エラーに出たプラグイン id を再インストールし、npm prefix -g を常駐プロセスの環境と揃えます。最小集合で30分安定後に全復帰します。

Step 5 launchd コールドスタート

plist 変更後は unload/load。健康チェックを3回連続成功とし、channels.probe が赤でないことを確認します。

tail -n 200 ~/.openclaw/logs/gateway.log 2>/dev/null || openclaw logs --since 30m for i in 1 2 3; do openclaw gateway status || exit 1; sleep 5; done

4. 3つのゲート

doctor に未解決項目がある間は本番復旧と宣言しません。最小プラグイン集合の30分安定窓を満たすまで全量復帰しません。plist とシェルの PATH/NODE/OPENCLAW_GATEWAY_TOKEN を差分なしに揃えます。

5. ケーススタディ

「リモート Mac mini で週内に三回マイクロアップグレード後、Gateway が即終了。ノートPCでは同じ openclaw.json で起動——plist が旧 workspace を指したままだった。」

対処は書き込み凍結、plist と JSON の差分、LaunchAgent のコールドリロード、最小プラグイン30分窓です。教訓は、plist とシェルを 別 OS I/F として扱い、doctor 移行を両方で検証することです。運用責任者はバージョン文字列、doctor 出力、plist diff、ログスライスの四点セットをチケット化してください。

ノートPCだけでの検証は個人開発には十分ですが、連鎖アップグレードと fail-closed、plist 差分がボトルネックになる場合、夜間に死角が残ります。MACGPU のリモート Mac は、同じ Runbook を第2ホストで演習しログを突き合わせるのに適しています。Apple Silicon と launchd 意味論に沿った常駐検証を重視する場合、専用ノードをレンタルして本稿のゲートをそのまま適用してください。

6. 業界観点

短周期のセキュリティ修正は週次の軽量マイグレーションを伴います。本番単体で doctor を走らせるとピークと衝突しやすいため、低トラフィック帯に第2ホストで演習する価値が高まります。Linux 汎用 VM と比べ、Mac は launchd とスクリプトパスが実運用に近いことが多く、OpenClaw 利用者のスタックと整合しやすいです。

7. 数値ゲート

最小プラグイン安定窓 ≥30分。健康チェック 3/3。ログスライス既定200行または30分。同一夜に未レビューの doctor 自動修正を2件超えたら変更凍結を発動します。

8. FAQ

doctor を飛ばしてダウングレードだけ? 止血には有効ですが部分移行が残る場合があります。リモート plist の誤編集? クローンホストで diff してから本番へ。