main への push(Markdown と docs/** パスはトリガー時に無視)、非ドラフトの pull request(CHANGELOG のみの差分は無視)、および手動 dispatch で実行されます。正規の main push はまず 90 秒の hosted-runner 受け入れウィンドウを通過します。CI concurrency group は新しい commit が到着すると待機中の run をキャンセルするため、連続する merge がそれぞれ完全な Blacksmith matrix を登録することはありません。Pull request と手動 dispatch は待機をスキップします。その後、preflight job が差分を分類し、無関係な領域だけが変更された場合は高コストな lane をオフにします。手動の workflow_dispatch run は、release candidate と広範な検証のため、意図的にスマートスコープをバイパスしてグラフ全体にファンアウトします。Android lane は include_android(または release_gate input)を通じて opt-in のままです。リリース専用の Plugin coverage は別の Plugin プレリリース workflow にあり、完全リリース検証 または明示的な手動 dispatch からのみ実行されます。
パイプライン概要
| Job | 目的 | 実行タイミング |
|---|---|---|
preflight | docs のみの変更、変更された scope、変更された extensions を検出し、CI manifest を構築する | 非ドラフトの push と PR で常に実行 |
runner-admission | Blacksmith 作業が登録される前に、正規の main push に対して hosted の 90 秒 debounce を行う | すべての CI run。sleep は正規の main push のみ |
security-fast | 秘密鍵の検出、zizmor による変更 workflow 監査、本番 lockfile 監査 | 非ドラフトの push と PR で常に実行 |
pnpm-store-warmup | Linux Node shard をブロックせず、lockfile に固定された pnpm store cache をウォームする | Node または docs-check lane が選択された場合 |
build-artifacts | dist/、Control UI、built-CLI smoke check、起動時メモリ、埋め込み built-artifact check をビルドする | Node 関連の変更 |
checks-fast-core | 高速な Linux correctness lane: bundled + protocol、Bun launcher、CI-routing fast task | Node 関連の変更 |
checks-fast-contracts-plugins-* | 重み付けされた 2 つの Plugin contract shard | Node 関連の変更 |
checks-fast-contracts-channels-* | 重み付けされた 2 つの channel contract shard | Node 関連の変更 |
checks-node-* | channel、bundled、contract、extension lane を除外した Core Node test shard | Node 関連の変更 |
check-* | shard 化された main local gate 相当: guards、shrinkwrap、bundled-channel config metadata、prod types、lint、dependencies、test types | Node 関連の変更 |
check-additional-* | boundary check stripe(prompt snapshot drift を含む)、session accessor/transcript reader boundary、extension lint group、package boundary compile/canary、runtime topology architecture | Node 関連の変更 |
checks-node-compat-node22 | Node 22 互換 build と smoke lane | リリース向けの手動 CI dispatch |
check-docs | docs formatting、lint、broken-link check | Docs が変更された場合(PR と手動 dispatch) |
native-i18n | Native app、Android、Apple i18n inventory check | Native i18n 関連の変更 |
skills-python | Python-backed Skills 向け Ruff + pytest | Python-skill 関連の変更 |
checks-windows | Windows 固有の process/path test と、共有 runtime import specifier regression | Windows 関連の変更 |
macos-node | macOS の絞り込まれた TypeScript test: launchd、Homebrew、runtime path、packaging script、process-group wrapper | macOS 関連の変更 |
macos-swift | macOS app 向け Swift lint、build、test | macOS 関連の変更 |
ios-build | Xcode project generation と iOS app simulator build | iOS app、shared app kit、または Swabble の変更 |
android | 両 flavor の Android unit test と 1 つの debug APK build | Android 関連の変更 |
test-performance-agent | 別 workflow: trusted activity 後の日次 Codex slow-test optimization | Main CI success または手動 dispatch |
openclaw-performance | 別 workflow: mock-provider、deep-profile、GPT 5.5 live lane を含む日次/on-demand Kova runtime performance report | スケジュールおよび手動 dispatch |
Fail-fast 順序
runner-admissionは正規のmainpush のみ待機します。新しい push があると、Blacksmith 登録前に run がキャンセルされます。preflightはどの lane がそもそも存在するかを決定します。docs-scopeとchanged-scopeのロジックは、この job 内の step であり、独立した job ではありません。security-fast、check-*、check-additional-*、check-docs、skills-pythonは、より重い artifact および platform matrix job を待たずにすばやく失敗します。build-artifactsは高速な Linux lane と重なって実行されるため、共有 build の準備ができ次第、下流の consumer が開始できます。- その後、より重い platform および runtime lane がファンアウトします:
checks-fast-core、checks-fast-contracts-plugins-*、checks-fast-contracts-channels-*、checks-node-*、checks-windows、macos-node、macos-swift、ios-build、android。
main ref に新しい push が到着すると、GitHub は置き換えられた job を cancelled としてマークする場合があります。同じ ref の最新 run も失敗していない限り、これは CI ノイズとして扱ってください。Matrix job は fail-fast: false を使用し、build-artifacts は小さな verifier job を queue に入れる代わりに、埋め込み channel、core-support-boundary、gateway-watch の失敗を直接報告します。自動 CI concurrency key は versioned(CI-v7-*)であるため、古い queue group 内の GitHub 側 zombie が新しい main run を無期限にブロックすることはありません。手動 full-suite run は CI-manual-v1-* を使用し、進行中の run をキャンセルしません。
pnpm ci:timings、pnpm ci:timings:recent、または node scripts/ci-run-timings.mjs <run-id> を使用して、GitHub Actions から wall time、queue time、最も遅い job、失敗、pnpm-store-warmup fanout barrier を要約します。workflow 内の ci-timings-summary job は ci.yml に存在しますが、現在は無効化されています(if: false)。代わりに timing helper をローカルで実行してください。Build timing については、build-artifacts job の Build dist step を確認してください。pnpm build:ci-artifacts は [build-all] phase timings: を出力し、ui:build を含みます。この job は startup-memory artifact もアップロードします。
PR コンテキストと証拠
外部 contributor の PR は、.github/workflows/real-behavior-proof.yml から PR context と evidence gate を実行します。この workflow は trusted workflow revision(github.workflow_sha)を checkout し、PR body のみを評価します。contributor branch の code は実行しません。
この gate は、repository owner、member、collaborator、bot ではない PR author に適用されます。PR body に author が書いた What Problem This Solves と Evidence section が含まれている場合に通過します。Evidence には、焦点を絞った test、CI result、screenshot、recording、terminal output、live observation、redacted log、artifact link を使用できます。Body は意図と有用な validation を提供します。reviewer は code、test、CI を検査して correctness を評価します。
check が失敗した場合は、別の code commit を push する代わりに PR body を更新してください。
スコープとルーティング
Scope logic はscripts/ci-changed-scope.mjs にあり、src/scripts/ci-changed-scope.test.ts の unit test でカバーされています。手動 dispatch は changed-scope detection をスキップし、preflight manifest がすべての scoped area が変更されたかのように動作します。
- CI ワークフローの編集は、Node CI グラフ、ワークフローの lint、Windows レーン(
ci.ymlが実行)を検証しますが、それだけで iOS、Android、macOS のネイティブビルドを強制するものではありません。これらのプラットフォームレーンは、プラットフォームのソース変更にスコープされたままです。 - ワークフロー健全性は、すべてのワークフロー YAML ファイルに対する
actionlint、zizmor、コンポジットアクション補間ガード、競合マーカーガードを実行します。PR スコープのsecurity-fastジョブも、変更されたワークフローファイルに対してzizmorを実行するため、ワークフローのセキュリティ所見はメインの CI グラフで早期に失敗します。 mainプッシュ時のドキュメントは、CI と同じ ClawHub ドキュメントミラーを使うスタンドアロンのDocsワークフローでチェックされるため、コードとドキュメントが混在するプッシュでも CI のcheck-docsシャードは追加でキューに入りません。Pull request と手動 CI では、ドキュメントが変更された場合に引き続き CI からcheck-docsが実行されます。- TUI PTYは、TUI の変更に対して
checks-node-core-runtime-tui-ptyLinux Node シャードで実行されます。このシャードはOPENCLAW_TUI_PTY_INCLUDE_LOCAL=1付きでtest/vitest/vitest.tui-pty.config.tsを実行するため、決定論的なTuiBackendフィクスチャレーンと、外部モデルエンドポイントのみをモックする遅めのtui --localスモークの両方をカバーします。 - CI ルーティングのみの編集、高速タスクが直接実行する少数の core-test フィクスチャ、狭い Plugin 契約ヘルパーの編集は、高速な Node のみのマニフェストパスを使います。
preflight、security-fast、および変更が触れた高速レーンのみ、つまり単一のchecks-fast-coreCI ルーティングタスク、2 つの Plugin 契約シャード、またはその両方です。このパスは、ビルド成果物、Node 22 互換性、チャネル契約、完全なコアシャード、バンドル済み Plugin シャード、追加のガードマトリクスをスキップします。 - Windows Node チェックは、Windows 固有のプロセス/パスラッパー、npm/pnpm/UI ランナーヘルパー、パッケージマネージャー設定、およびそのレーンを実行する CI ワークフローサーフェスにスコープされます。無関係なソース、Plugin、インストールスモーク、テストのみの変更は Linux Node レーンにとどまります。
- Plugin 契約とチャネル契約は、それぞれ標準の GitHub ランナーフォールバック付きで、重み付けされた Blacksmith バックの 2 つのシャードとして実行されます。
- コアユニットの高速/サポートレーンは個別に実行されます。コアランタイムインフラは、process、shared、hooks、secrets、3 つの cron ドメインシャードに分割されます。
- 自動返信はバランスされたワーカーとして実行され、reply サブツリーは agent-runner、commands、dispatch、session、state-routing シャードに分割されます。
- Agentic gateway/server(コントロールプレーン)設定は、ビルド済み成果物を待つのではなく、chat、auth、model、HTTP/plugin、runtime、startup レーンに分割されます。
- 通常の CI は、分離されたインフラ include-pattern シャードのみを最大 64 テストファイルの決定論的なバンドルに詰め込み、非分離の command/cron、ステートフルな agents-core、gateway/server スイートをマージせずに Node マトリクスを削減します。重い固定スイートは 8 vCPU のままにし、バンドル済みレーンと低重みレーンは 4 vCPU を使います。
- 正規リポジトリ上の Pull request は、コンパクトな受け入れプランを使います。同じ設定ごとのグループが分離サブプロセスで実行され、現在は 74 ジョブの完全マトリクスではなく 18 個の Node テストジョブです。
mainプッシュ、手動ディスパッチ、リリースゲートは完全マトリクスを維持します。 - 広範なブラウザー、QA、メディア、その他の Plugin テストは、共有 Plugin キャッチオールではなく専用の Vitest 設定を使います。Include-pattern シャードは CI シャード名を使ってタイミングエントリを記録するため、
.artifacts/vitest-shard-timings.jsonは設定全体とフィルター済みシャードを区別できます。 check-additional-*は、補助的な境界ガードリスト(scripts/run-additional-boundary-checks.mjs)を、プロンプト負荷の高い 1 つのシャード(check-additional-boundaries-a。Codex プロンプトスナップショットのドリフトチェックを含む)と、残りのストライプをまとめた 1 つのシャード(check-additional-boundaries-bcd)に分割します。各シャードは独立したガードを並行実行し、チェックごとのタイミングを出力します。パッケージ境界の compile/canary 作業はまとめたままにし、ランタイムトポロジーアーキテクチャはbuild-artifactsに埋め込まれた Gateway watch カバレッジとは別に実行されます。- Gateway watch、チャネルテスト、コア support-boundary シャードは、
dist/とdist-runtime/がすでにビルドされた後、build-artifacts内で並行実行されます。
testPlayDebugUnitTest と testThirdPartyDebugUnitTest の両方を実行し、その後 Play debug APK をビルドします。third-party フレーバーには別個のソースセットやマニフェストはありません。そのユニットテストレーンは、Android 関連の各プッシュで重複した debug APK パッケージングジョブを避けつつ、SMS/通話ログ BuildConfig フラグ付きで引き続きフレーバーをコンパイルします。
check-dependencies シャードは、pnpm deadcode:dependencies(正確な Knip バージョンに固定された本番 Knip 依存関係のみのパスで、dlx インストールでは pnpm の最低リリース経過日数を無効化)と pnpm deadcode:unused-files を実行します。後者は Knip の本番未使用ファイル所見を scripts/deadcode-unused-files.allowlist.mjs と比較します。さらに、助言的な pnpm deadcode:report:ci:ts-unused レポートが deadcode-reports 成果物としてアップロードされます。未使用ファイルガードは、PR が新しい未レビューの未使用ファイルを追加した場合、または古い allowlist エントリを残した場合に失敗します。一方で、Knip が静的に解決できない意図的な動的 Plugin、生成物、ビルド、ライブテスト、パッケージブリッジのサーフェスは保持します。
ClawSweeper アクティビティ転送
.github/workflows/clawsweeper-dispatch.yml は、OpenClaw リポジトリアクティビティを ClawSweeper に送るターゲット側ブリッジです。信頼されていない pull request コードをチェックアウトしたり実行したりしません。このワークフローは CLAWSWEEPER_APP_PRIVATE_KEY から GitHub App トークンを作成し、コンパクトな repository_dispatch ペイロードを openclaw/clawsweeper にディスパッチします。
このワークフローには 4 つのレーンがあります。
- 正確な issue と pull request レビューリクエスト用の
clawsweeper_item; - issue コメント内の明示的な ClawSweeper コマンド用の
clawsweeper_comment; mainプッシュ上のコミットレベルレビューリクエスト用のclawsweeper_commit_review;- ClawSweeper エージェントが検査する可能性のある一般的な GitHub アクティビティ用の
github_activity。
github_activity レーンは、正規化されたメタデータのみを転送します。イベント種別、アクション、アクター、リポジトリ、項目番号、URL、タイトル、状態、およびコメントやレビューが存在する場合の短い抜粋です。完全な Webhook 本文は意図的に転送しません。openclaw/clawsweeper 側の受信ワークフローは .github/workflows/github-activity.yml で、正規化されたイベントを ClawSweeper エージェント用の OpenClaw Gateway フックに投稿します。
一般アクティビティは観測であり、デフォルト配信ではありません。ClawSweeper エージェントはプロンプト内で Discord ターゲットを受け取り、イベントが予想外、対応可能、リスクあり、または運用上有用な場合にのみ #clawsweeper に投稿するべきです。通常の open、edit、bot の変動、重複 Webhook ノイズ、通常のレビュー通信は NO_REPLY になるべきです。
このパス全体で、GitHub のタイトル、コメント、本文、レビュー本文、ブランチ名、コミットメッセージを信頼されていないデータとして扱ってください。これらは要約とトリアージの入力であり、ワークフローやエージェントランタイムへの指示ではありません。
手動ディスパッチ
手動 CI ディスパッチは通常の CI と同じジョブグラフを実行しますが、Android 以外のすべてのスコープ付きレーンを強制的に有効にします。Linux Node シャード、バンドル済み Plugin シャード、Plugin とチャネル契約シャード、Node 22 互換性、check-*、check-additional-*、ビルド済み成果物のスモークチェック、ドキュメントチェック、Python Skills、Windows、macOS、iOS ビルド、Control UI i18n です。スタンドアロンの手動 CI ディスパッチは、include_android=true の場合にのみ Android を実行します(release_gate 入力も Android を強制します)。完全リリースの包括ワークフローは include_android=true を渡すことで Android を有効にします。Plugin プレリリース静的チェック、リリース専用の agentic-plugins シャード、完全な extension バッチスイープ、Plugin プレリリース Docker レーンは CI から除外されます。Docker プレリリーススイートは、Full Release Validation がリリース検証ゲートを有効にして別個の Plugin Prerelease ワークフローをディスパッチした場合にのみ実行されます。
手動実行は一意の concurrency group を使うため、リリース候補の完全スイートが同じ ref 上の別の push や PR 実行によってキャンセルされることはありません。任意の target_ref 入力により、信頼された呼び出し元は、選択されたディスパッチ ref のワークフローファイルを使いながら、ブランチ、タグ、または完全なコミット SHA に対してそのグラフを実行できます。release_gate 入力は、容量不足で停滞した PR CI 用の正確な SHA の maintainer フォールバックです。target_ref は、ディスパッチされたブランチヘッドに一致する完全なコミット SHA である必要があります。
OpenClaw NPM Release preflight と Full Release Validation の両方を正確な
extended-stable/YYYY.M.33 ブランチからディスパッチし、それらの run ID を保持し、
両方の ID を直接 npm publish 実行に渡します。コマンド、正確な identity 要件、
registry readback、selector 修復手順については、月次 npm のみの extended-stable
公開 を参照してください。
このパスは、Plugin、macOS、Windows、GitHub
Release、private dist-tag、またはその他のプラットフォーム公開をディスパッチしません。
ランナー
| ランナー | ジョブ |
|---|---|
ubuntu-24.04 | 手動 CI ディスパッチと非正規リポジトリのフォールバック、CodeQL のセキュリティおよび品質スキャン、workflow-sanity、labeler、auto-response、単独の Docs ワークフロー、Install Smoke ワークフロー全体 |
blacksmith-4vcpu-ubuntu-2404 | preflight、security-fast、pnpm-store-warmup、native-i18n、checks-fast-core、Plugin/チャンネル契約シャード、ほとんどのバンドル済み/軽量 Linux Node シャード、check-lint 以外の check-* レーン、選択された check-additional-* シャード、check-docs、skills-python |
blacksmith-8vcpu-ubuntu-2404 | 維持されている重い Linux Node スイート、境界/拡張機能が重い check-additional-* シャード、android |
blacksmith-16vcpu-ubuntu-2404 | CI と Testbox の build-artifacts、および check-lint(CPU の影響を十分に受けるため、8 vCPU は節約分よりコストが大きかった) |
blacksmith-8vcpu-windows-2025 | checks-windows |
blacksmith-6vcpu-macos-15 | openclaw/openclaw 上の macos-node。フォークは macos-15 にフォールバックする |
blacksmith-12vcpu-macos-26 | openclaw/openclaw 上の macos-swift と ios-build。フォークは macos-26 にフォールバックする |
ランナー登録予算
OpenClaw の現在の GitHub ランナー登録バケットは、ghx api rate_limit で 5 分あたり 10,000 件のセルフホストランナー登録を報告する。GitHub はこのバケットを変更できるため、各チューニング作業の前に actions_runner_registration を再確認する。この制限は openclaw organization 内のすべての Blacksmith ランナー登録で共有されるため、別の Blacksmith インストールを追加しても新しいバケットは追加されない。
バースト制御では、Blacksmith ラベルを希少リソースとして扱う。ルーティング、通知、要約、シャード選択、または短い CodeQL スキャンだけを行うジョブは、測定済みの Blacksmith 固有の必要性がない限り、GitHub ホストランナーに留める。新しい Blacksmith マトリクス、より大きい max-parallel、または高頻度ワークフローは、最悪ケースの登録数を示し、organization レベルの目標をライブバケットのおよそ 60% 未満に保つ必要がある。現在の 10,000 登録バケットでは、これは 6,000 登録の運用目標を意味し、同時実行リポジトリ、リトライ、バーストの重なりに対する余裕を残す。
正規リポジトリの CI は、通常の push および pull request 実行のデフォルトランナーパスとして Blacksmith を維持する。workflow_dispatch と非正規リポジトリの実行は GitHub ホストランナーを使用するが、通常の正規実行は現在、Blacksmith のキュー健全性をプローブしたり、Blacksmith が利用できない場合に GitHub ホストラベルへ自動フォールバックしたりしない。
ローカル同等コマンド
OpenClaw Performance
OpenClaw Performance は製品/ランタイムのパフォーマンスワークフローである。main で毎日実行され、手動でもディスパッチできる。
target_ref を設定する。公開レポートパスと latest ポインターはテスト対象 ref をキーにし、各 index.md はテスト対象 ref/SHA、ワークフロー ref/SHA、Kova ref、プロファイル、レーン認証モード、モデル、繰り返し回数、シナリオフィルターを記録する。
ワークフローは、固定されたリリースから OCM を、固定された kova_ref 入力の openclaw/Kova から Kova をインストールし、次の 3 つのレーンを実行する。
mock-provider: 決定的な偽の OpenAI 互換認証を使い、ローカルビルドランタイムに対して Kova 診断シナリオを実行する。mock-deep-profile: 起動、Gateway、エージェントターンのホットスポットに対する CPU/ヒープ/トレースプロファイリング。スケジュール時、またはdeep_profile=true付きのディスパッチ時に実行される。live-openai-candidate: 実際の OpenAIopenai/gpt-5.5エージェントターン。OPENAI_API_KEYが利用できない場合はスキップされる。スケジュール時、またはlive_openai_candidate=true付きのディスパッチ時に実行される。
channel-chat-baseline hello ループ、起動済み Gateway に対する CLI 起動コマンド、SQLite 状態のスモークパフォーマンスプローブである。テスト対象 ref について前回公開された mock-provider ソースレポートが利用できる場合、ソース要約は現在の RSS とヒープ値をそのベースラインと比較し、大きな RSS 増加を watch としてマークする。ソースプローブの Markdown 要約はレポートバンドル内の source/index.md にあり、生 JSON はその横にある。
すべてのレーンは GitHub アーティファクトをアップロードする。CLAWGRIT_REPORTS_TOKEN が設定されている場合、ワークフローは report.json、report.md、バンドル、index.md、ソースプローブアーティファクトも openclaw/clawgrit-reports の openclaw-performance/<tested-ref>/<run-id>-<attempt>/<lane>/ 配下へコミットする。現在のテスト対象 ref ポインターは openclaw-performance/<tested-ref>/latest-<lane>.json として書き込まれる。
フルリリース検証
Full Release Validation は「リリース前にすべてを実行する」ための手動の包括ワークフローである。ブランチ、タグ、または完全なコミット SHA を受け取り、そのターゲットで手動 CI ワークフローをディスパッチし(Android を含む)、リリース専用の Plugin/パッケージ/静的/Docker 証明のために Plugin Prerelease をディスパッチし、ターゲット SHA に対して OpenClaw Performance をディスパッチし、インストールスモーク、パッケージ受け入れ、クロス OS パッケージチェック、QA Lab パリティ、Matrix、Telegram レーンのために OpenClaw Release Checks をディスパッチする(アドバイザリ成熟度スコアカードのレンダリングは run_maturity_scorecard によるオプトイン)。stable プロファイルと full プロファイルは、常に包括的なライブ/E2E と Docker リリースパスの soak カバレッジを含む。beta プロファイルは run_release_soak=true でオプトインできる。正規パッケージ Telegram E2E は Package Acceptance 内で実行されるため、完全な候補は重複するライブポーラーを開始しない。公開後は、release_package_spec を渡して、リリースチェック、Package Acceptance、Docker、クロス OS、Telegram にわたり、再ビルドなしで出荷済み npm パッケージを再利用する。集中した公開済みパッケージ Telegram 再実行にのみ npm_telegram_package_spec を使用する。Codex Plugin ライブパッケージレーンは、デフォルトで同じ選択状態を使用する。公開済みの release_package_spec=openclaw@<tag> は codex_plugin_spec=npm:@openclaw/codex@<tag> を導出し、SHA/アーティファクト実行は選択された ref から extensions/codex をパックする。npm:、npm-pack:、git: specs などのカスタム Plugin ソースには codex_plugin_spec を明示的に設定する。
ステージマトリクス、正確なワークフロージョブ名、プロファイル差分、アーティファクト、集中再実行ハンドルについては、フルリリース検証 を参照する。
OpenClaw Release Publish は、変更を加える手動リリースワークフローである。リリースタグが存在し、OpenClaw npm preflight が成功した後(preflight はチェックの中で pnpm plugins:sync:check を実行する)、release/YYYY.M.PATCH または main からディスパッチする。保存済みの preflight_run_id と成功した full_release_validation_run_id が必要で、すべての公開可能な Plugin パッケージに対して Plugin NPM Release をディスパッチし、同じリリース SHA に対して Plugin ClawHub Release をディスパッチしてから、ようやく OpenClaw NPM Release をディスパッチする。stable 公開では正確な windows_node_tag も必要である。このワークフローは、いずれかの公開子ワークフローの前に Windows ソースリリースを検証し、その x64/ARM64 インストーラーを候補承認済みの windows_node_installer_digests 入力と比較したうえで、GitHub リリースドラフトを公開する前に、同じ固定済みインストーラーダイジェストと正確なコンパニオンアセットおよびチェックサム契約を昇格および検証する。
gh workflow run ... --ref main -f ref=<sha> の代わりにヘルパーを使用する。
release-ci/<sha>-... ブランチを push し、
その固定 ref から Full Release Validation を dispatch し、すべての子
workflow の headSha が対象と一致することを検証し、run の完了時に一時ブランチを削除します。包括 verifier は、いずれかの子 workflow が異なる SHA で実行された場合にも失敗します。
release_profile は release checks に渡されるライブ/provider の範囲を制御します。
手動 release workflow のデフォルトは stable です。広範な advisory provider/media matrix を意図的に使いたい場合のみ full を使ってください。stable と full の release checks は常に網羅的な live/E2E と Docker release-path soak を実行します。
beta profile は run_release_soak=true で opt in できます。
minimumは最速の OpenAI/core release-critical lanes を維持します。stableは stable provider/backend セットを追加します。fullは広範な advisory provider/media matrix を実行します。
Verify full validation job は現在の子 run の conclusion を再確認し、各子 run の slowest-job table を追記します。子 workflow を rerun して green になった場合は、包括結果とタイミング summary を更新するために親 verifier job だけを rerun してください。
復旧用に、Full Release Validation と OpenClaw Release Checks はどちらも rerun_group を受け付けます。release candidate には all、通常の full CI child のみには ci、plugin prerelease child のみには plugin-prerelease、OpenClaw Performance child のみには performance、すべての release child には release-checks、または包括 workflow ではより狭い group として install-smoke、cross-os、live-e2e、package、qa、qa-parity、qa-live、npm-telegram を使います。これにより、集中的な修正後の失敗した release box の rerun を限定できます。1 つの失敗した cross-OS lane には、rerun_group=cross-os と cross_os_suite_filter を組み合わせます。例: windows/packaged-upgrade。長い cross-OS command は heartbeat line を出力し、packaged-upgrade summary には phase ごとの timing が含まれます。QA release-check lane は advisory ですが、標準 runtime tool coverage gate は例外で、必須の OpenClaw dynamic tools が標準 tier summary から drift したり消えたりした場合に block します。
OpenClaw Release Checks は信頼済み workflow ref を使って、選択された ref を一度だけ release-package-under-test tarball に解決し、その artifact を cross-OS checks と Package Acceptance に渡します。soak coverage が実行される場合は live/E2E release-path Docker workflow にも渡します。これにより、release box 間で package bytes の一貫性を保ち、同じ candidate を複数の子 job で repack することを避けます。Codex npm-plugin live lane については、release checks は release_package_spec から導出した一致する公開済み plugin spec を渡すか、operator が指定した codex_plugin_spec を渡すか、入力を空にして Docker script が選択された checkout の Codex plugin を pack するようにします。
ref=main かつ rerun_group=all の重複した Full Release Validation run は古い包括 run を置き換えます。親 monitor は、親が cancel されたときに、すでに dispatch した子 workflow をすべて cancel するため、新しい main validation が古い 2 時間の release-check run の後ろで待機することはありません。release branch/tag validation と focused rerun group は cancel-in-progress: false を維持します。
Live と E2E shards
release live/E2E child は広範なネイティブpnpm test:live coverage を維持しますが、1 つの serial job ではなく、scripts/test-live-shard.mjs を通じて名前付き shard として実行します。
native-live-src-agentsとnative-live-src-agents-zai-codingnative-live-src-gateway-core- provider-filtered
native-live-src-gateway-profilesjobs native-live-src-gateway-backendsnative-live-src-infranative-live-testnative-live-extensions-a-knative-live-extensions-l-nnative-live-extensions-moonshotnative-live-extensions-openainative-live-extensions-o-z-othernative-live-extensions-xai- 分割された media audio/video shards と provider-filtered music shards
native-live-src-gateway、native-live-extensions-o-z、native-live-extensions-media、native-live-extensions-media-music shard 名は、手動 one-shot rerun でも引き続き有効です。
ネイティブ live media shards は、Live Media Runner Image workflow によってビルドされる ghcr.io/openclaw/openclaw-live-media-runner:ubuntu-24.04 で実行されます。この image には ffmpeg と ffprobe が事前インストールされています。media job は setup 前に binary を検証するだけです。Docker-backed live suite は通常の Blacksmith runner に維持してください。container job はネストした Docker tests を起動する場所として不適切です。
Docker-backed live model/backend shards は、選択された commit ごとに別の共有 ghcr.io/openclaw/openclaw-live-test:<sha>-<extensions> image を使います。live release workflow はその image を一度だけビルドして push し、その後 Docker live model、provider-sharded gateway、CLI backend、ACP bind、Codex harness shards は OPENCLAW_SKIP_DOCKER_BUILD=1 で実行されます。Gateway Docker shards は、workflow job timeout より短い明示的な script-level timeout cap を持つため、container や cleanup path が stuck した場合に release-check budget 全体を消費せずに早く失敗します。これらの shard が full source Docker target を個別に rebuild している場合、その release run は誤設定されており、重複した image build で wall clock を浪費します。
Package Acceptance
「この installable OpenClaw package は product として機能するか」が問いである場合はPackage Acceptance を使います。これは通常の CI とは異なります。通常の CI は source tree を検証しますが、package acceptance は install または update 後にユーザーが実行するのと同じ Docker E2E harness を通じて、単一の tarball を検証します。
Jobs
resolve_packageはworkflow_refを checkout し、1 つの package candidate を解決し、.artifacts/docker-e2e-package/openclaw-current.tgzを書き込み、.artifacts/docker-e2e-package/package-candidate.jsonを書き込み、その両方をpackage-under-testartifact として upload し、source、workflow ref、package ref、version、SHA-256、profile を GitHub step summary に出力します。package_integrityはpackage-under-testartifact を download し、scripts/check-openclaw-package-tarball.mjsで public package tarball contract を強制します。docker_acceptanceは、解決済み package source SHA(workflow_refに fallback)とpackage_artifact_name=package-under-testでopenclaw-live-and-e2e-checks-reusable.ymlを呼び出します。reusable workflow はその artifact を download し、tarball inventory を検証し、必要に応じて package-digest Docker images を準備し、workflow checkout を pack する代わりにその package に対して選択された Docker lanes を実行します。profile が複数の targeteddocker_lanesを選択した場合、reusable workflow は package と shared images を一度だけ準備し、その後それらの lane を unique artifact を持つ並列 targeted Docker jobs として fan out します。package_telegramは必要に応じてNPM Telegram Beta E2Eを呼び出します。telegram_modeがnoneでない場合に実行され、Package Acceptance が package を解決した場合は同じpackage-under-testartifact を install します。standalone Telegram dispatch では、引き続き公開済み npm spec を install できます。summaryは package resolution、integrity、Docker acceptance、または任意の Telegram lane が失敗した場合に workflow を失敗させます。advisoryinput は、advisory caller 向けに acceptance failure を warning に downgrade します。
Candidate sources
source=npmはopenclaw@extended-stable、openclaw@beta、openclaw@latest、またはopenclaw@2026.4.27-beta.2のような正確な OpenClaw release version のみを受け付けます。公開済み extended-stable、prerelease、または stable acceptance に使います。source=refは信頼済みpackage_refbranch、tag、または full commit SHA を pack します。resolver は OpenClaw branch/tag を fetch し、選択された commit が repository branch history または release tag から到達可能であることを検証し、detached worktree に deps を install し、scripts/package-openclaw-for-docker.mjsで pack します。source=urlは public HTTPS.tgzを download します。package_sha256は必須です。この path は URL credentials、default 以外の HTTPS port、private/internal/special-use hostname または解決済み IP、同じ public safety policy の外への redirect を拒否します。source=trusted-urlは.github/package-trusted-sources.jsonの名前付き trusted-source policy から HTTPS.tgzを download します。package_sha256とtrusted_source_idは必須です。configured hosts、ports、path prefixes、redirect hosts、または private-network resolution が必要な maintainer-owned enterprise mirror または private package repository にのみ使います。policy が bearer auth を宣言している場合、workflow は固定のOPENCLAW_TRUSTED_PACKAGE_TOKENsecret を使います。URL-embedded credentials は引き続き拒否されます。source=artifactはartifact_run_idとartifact_nameから 1 つの.tgzを download します。package_sha256は任意ですが、外部共有 artifact には指定するべきです。
workflow_ref と package_ref は分けておいてください。workflow_ref は test を実行する信頼済み workflow/harness code です。package_ref は source=ref のときに pack される source commit です。これにより、現在の test harness は古い workflow logic を実行せずに、古い信頼済み source commit を検証できます。
Suite profiles
smoke—npm-onboard-channel-agent,gateway-network,config-reloadpackage—npm-onboard-channel-agent,doctor-switch,update-channel-switch,skill-install,update-corrupt-plugin,upgrade-survivor,published-upgrade-survivor,root-managed-vps-upgrade,update-restart-auth,plugins-offline,plugin-updateproduct— livepluginscoverage をplugins-offlineの代わりに使うpackageセットに加えて、mcp-channels、cron-mcp-cleanup、openai-web-search-minimal、openwebuifull— OpenWebUI を含む full Docker release-path chunkscustom— 正確なdocker_lanes。suite_profile=customの場合は必須です
package profile は offline plugin coverage を使うため、published-package validation は live ClawHub availability によって gate されません。任意の Telegram lane は NPM Telegram Beta E2E で package-under-test artifact を再利用し、standalone dispatch 用には公開済み npm spec path を維持します。
専用の update と plugin testing policy については、local commands、
Docker lanes、Package Acceptance inputs、release defaults、failure triage を含め、
Testing updates and plugins を参照してください。
Release checks は、prepared release package artifact、suite_profile=custom、docker_lanes='doctor-switch update-channel-switch skill-install update-corrupt-plugin upgrade-survivor published-upgrade-survivor root-managed-vps-upgrade update-restart-auth plugins-offline plugin-update plugin-binding-command-escape'、telegram_mode=mock-openai とともに、source=artifact で Package Acceptance を呼び出します。これにより、package migration、update、live ClawHub skill install、stale-plugin-dependency cleanup、configured-plugin install repair、offline plugin、plugin-update、Telegram proof を同じ解決済み package tarball 上に保ちます。beta の公開後に、rebuild せず shipped npm package に対して同じ matrix を実行するには、Full Release Validation または OpenClaw Release Checks で release_package_spec を設定します。Package Acceptance が release validation の残り部分とは異なる package を必要とする場合のみ package_acceptance_package_spec を設定してください。Cross-OS release checks は引き続き OS 固有のオンボーディング、installer、platform behavior を cover します。package/update product validation は Package Acceptance から始めるべきです。
published-upgrade-survivor Docker レーンは、ブロッキングリリースパスで、実行ごとに公開済みパッケージのベースラインを 1 つ検証します。パッケージ受け入れでは、解決された package-under-test tarball が常に候補になり、published_upgrade_survivor_baseline がフォールバック用の公開済みベースラインを選択します。既定は openclaw@latest です。失敗したレーンの再実行コマンドはそのベースラインを保持します。run_release_soak=true または release_profile=full を指定したフルリリース検証では、published_upgrade_survivor_baselines='last-stable-4 2026.4.23 2026.5.2 2026.4.15' と published_upgrade_survivor_scenarios=reported-issues が設定され、最新 4 件の安定版 npm リリースに加えて、固定された Plugin 互換性境界リリースと、Feishu 設定、保持された bootstrap/persona ファイル、設定済み OpenClaw Plugin インストール、チルダログパス、古いレガシー Plugin 依存関係ルートに対する issue 形状のフィクスチャへ展開されます。複数ベースラインの公開済みアップグレードサバイバー選択は、ベースラインごとにシャーディングされ、個別のターゲット Docker ランナージョブになります。別個の Update Migration ワークフローは、通常のフルリリース CI の広さではなく、公開済み更新のクリーンアップを網羅的に確認する場合に、all-since-2026.4.23 ベースラインと plugin-deps-cleanup シナリオ付きの update-migration Docker レーンを使用します。ローカルの集約実行では、OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS で正確なパッケージ仕様を渡すか、openclaw@2026.4.15 のような OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC で単一レーンを維持するか、OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS を設定してシナリオマトリクスを指定できます。公開済みレーンは、組み込みの openclaw config set コマンドレシピでベースラインを設定し、レシピ手順を summary.json に記録し、Gateway 起動後に /healthz、/readyz、および RPC ステータスをプローブします。Windows のパッケージ済みレーンとインストーラー fresh レーンも、インストール済みパッケージが生の絶対 Windows パスから browser-control オーバーライドをインポートできることを検証します。OpenAI クロス OS agent-turn smoke は、設定されている場合は OPENCLAW_CROSS_OS_OPENAI_MODEL を既定にし、それ以外の場合は openai/gpt-5.5 を使用します。これにより、GPT-4.x の既定を避けつつ、インストールと Gateway の証明を GPT-5 テストモデル上に保ちます。
レガシー互換性ウィンドウ
パッケージ受け入れには、すでに公開済みのパッケージに対する有界のレガシー互換性ウィンドウがあります。2026.4.25-beta.* を含む 2026.4.25 までのパッケージでは、互換性パスを使用できます。
dist/postinstall-inventory.json内の既知の非公開 QA エントリは、tarball から省略されたファイルを指していてもかまいません。- パッケージがそのフラグを公開していない場合、
doctor-switchはgateway install --wrapper永続化サブケースをスキップできます。 update-channel-switchは、tarball 由来の fake git フィクスチャから欠落している pnpmpatchedDependenciesを除去でき、永続化されたupdate.channelの欠落をログに出力できます。- Plugin smoke は、レガシーのインストールレコード場所を読み取るか、マーケットプレイスのインストールレコード永続化の欠落を許容できます。
plugin-updateは、インストールレコードと再インストールなしの挙動が変わらないことを引き続き要求しながら、設定メタデータ移行を許可できます。
2026.4.26 パッケージは、すでに出荷済みのローカルビルドメタデータスタンプファイルについても警告を出せます。また、2026.5.20 までのパッケージでは、npm-shrinkwrap.json が欠落している場合に失敗ではなく警告にできます。それ以降のパッケージは最新の契約を満たす必要があります。同じ条件は警告またはスキップではなく失敗になります。
例
resolve_package サマリーから開始し、パッケージソース、バージョン、SHA-256 を確認します。次に docker_acceptance 子実行とその Docker アーティファクトを調べます: .artifacts/docker-tests/**/summary.json、failures.json、レーンログ、フェーズタイミング、再実行コマンド。フルリリース検証を再実行するのではなく、失敗したパッケージプロファイルまたは正確な Docker レーンを再実行することを優先してください。
インストール smoke
別個のInstall Smoke ワークフローは、pull request または main push では実行されなくなりました。夜間スケジュール、手動 dispatch、リリース検証からの workflow call で実行され、すべての実行が GitHub ホストランナー上で完全な install-smoke パスを通ります。
- ルート Dockerfile smoke イメージはターゲット SHA ごとに 1 回ビルドされるか、
ghcr.io/openclaw/openclaw-dockerfile-smoke:<sha>として GHCR から再利用されます。その後、CLI smoke、agents delete shared-workspace CLI smoke、コンテナ gateway-network E2E、組み込みmatrixPlugin build-arg smoke がそのイメージに対して実行されます。Plugin smoke は、ランタイム依存関係インストールのミラーリングと、Plugin が entry-escape 診断なしで読み込まれることを検証します。 - QR パッケージインストールとインストーラー/update Docker smoke(Rocky Linux インストーラーレーン、および設定可能な
update_baseline_versionnpm ベースラインに対する update レーンを含む)は個別のジョブとして実行されるため、インストーラー作業がルートイメージ smoke の後ろで待たされることはありません。
run_bun_global_install_smoke によって個別にゲートされます。これは夜間スケジュールで実行され、リリースチェックからの workflow call では既定でオンになり、手動の Install Smoke dispatch では opt in できます。通常の PR CI は、Node 関連の変更に対して高速な Bun ランチャー回帰レーンを引き続き実行します。QR とインストーラー Docker テストは、それぞれ独自のインストール重視 Dockerfile を維持します。
ローカル Docker E2E
pnpm test:docker:all は、共有 live-test イメージを 1 つ事前ビルドし、OpenClaw を npm tarball として 1 回パックし、共有 scripts/e2e/Dockerfile イメージを 2 つビルドします。
- インストーラー/update/Plugin 依存関係レーン用の素の Node/Git ランナー。
- 通常の機能レーン用に同じ tarball を
/appにインストールする機能イメージ。
scripts/lib/docker-e2e-scenarios.mjs にあり、プランナーロジックは scripts/lib/docker-e2e-plan.mjs にあり、ランナーは選択されたプランのみを実行します。スケジューラーは OPENCLAW_DOCKER_E2E_BARE_IMAGE と OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE でレーンごとにイメージを選択し、その後 OPENCLAW_SKIP_DOCKER_BUILD=1 でレーンを実行します。
調整可能項目
| 変数 | 既定値 | 目的 |
|---|---|---|
OPENCLAW_DOCKER_ALL_PARALLELISM | 10 | 通常レーン用のメインプールスロット数。 |
OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM | 10 | プロバイダー依存のテールプールスロット数。 |
OPENCLAW_DOCKER_ALL_LIVE_LIMIT | 9 | プロバイダーが throttle しないようにする同時 live レーン上限。 |
OPENCLAW_DOCKER_ALL_NPM_LIMIT | 5 | 同時 npm install レーン上限。 |
OPENCLAW_DOCKER_ALL_SERVICE_LIMIT | 7 | 同時 multi-service レーン上限。 |
OPENCLAW_DOCKER_ALL_START_STAGGER_MS | 2000 | Docker daemon の create storm を避けるためのレーン開始間隔。stagger なしの場合は 0 を設定。 |
OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS | 7200000 | レーンごとのフォールバックタイムアウト(120 分)。選択された live/tail レーンはより厳しい上限を使用。 |
OPENCLAW_DOCKER_ALL_DRY_RUN | unset | 1 はレーンを実行せずにスケジューラープランを出力します。 |
OPENCLAW_DOCKER_ALL_LANES | unset | カンマ区切りの正確なレーン一覧。cleanup smoke をスキップし、エージェントが失敗した 1 レーンを再現できるようにします。 |
再利用可能な live/E2E ワークフロー
再利用可能な live/E2E ワークフローは、どのパッケージ、イメージ種別、live イメージ、レーン、認証情報カバレッジが必要かをscripts/test-docker-all.mjs --plan-json に問い合わせます。次に scripts/docker-e2e.mjs がそのプランを GitHub outputs とサマリーに変換します。これは scripts/package-openclaw-for-docker.mjs を通じて OpenClaw をパックするか、現在実行中のパッケージアーティファクトをダウンロードするか、package_artifact_run_id からパッケージアーティファクトをダウンロードします。tarball インベントリを検証し、プランがパッケージインストール済みレーンを必要とする場合は Blacksmith の Docker layer cache を通じて package-digest タグ付きの bare/functional GHCR Docker E2E イメージをビルドして push します。また、再ビルドする代わりに、指定された docker_e2e_bare_image/docker_e2e_functional_image 入力または既存の package-digest イメージを再利用します。Docker イメージの pull は、試行ごとに有界の 180 秒タイムアウトで再試行されるため、停止した registry/cache ストリームが CI クリティカルパスの大半を消費する代わりに、すばやく再試行されます。
リリースパスのチャンク
リリース Docker カバレッジは、OPENCLAW_SKIP_DOCKER_BUILD=1 を使った小さなチャンクジョブで実行されます。これにより、各チャンクは必要なイメージ種別のみを pull し、同じ重み付きスケジューラーを通じて複数レーンを実行します。
OPENCLAW_DOCKER_ALL_PROFILE=release-pathOPENCLAW_DOCKER_ALL_CHUNK=core | package-update-openai | package-update-anthropic | package-update-core | plugins-runtime-plugins | plugins-runtime-services | plugins-runtime-install-a..h
core、package-update-openai、package-update-anthropic、package-update-core、plugins-runtime-plugins、plugins-runtime-services、および plugins-runtime-install-a から plugins-runtime-install-h までです。package-update-openai には live Codex Plugin パッケージレーンが含まれます。このレーンは、候補 OpenClaw パッケージをインストールし、明示的な Codex CLI インストール承認のもとで codex_plugin_spec または同一 ref tarball から Codex Plugin をインストールし、Codex CLI preflight を実行し、その後 OpenAI に対して同一セッションの OpenClaw エージェントターンを複数実行します。plugins-runtime-core、plugins-runtime、plugins-integrations は集約 Plugin/ランタイムエイリアスのままです。install-e2e レーンエイリアスは、両方のプロバイダーインストーラーレーンに対する集約手動再実行エイリアスのままです。
OpenWebUI は、完全なリリースパスのカバレッジで要求される場合は plugins-runtime-services に組み込まれ、OpenWebUI のみのディスパッチの場合だけスタンドアロンの openwebui チャンクを維持します。バンドル済みチャネル更新レーンは、一時的な npm ネットワーク障害に対して 1 回だけ再試行します。
各チャンクは、レーンログ、タイミング、summary.json、failures.json、フェーズタイミング、スケジューラープラン JSON、遅いレーンの表、レーンごとの再実行コマンドを含む .artifacts/docker-tests/ をアップロードします。ワークフローの docker_lanes 入力は、チャンクジョブの代わりに選択されたレーンを準備済みイメージに対して実行します。これにより、失敗したレーンのデバッグを対象を絞った 1 つの Docker ジョブに限定し、その実行用のパッケージアーティファクトを準備、ダウンロード、または再利用します。選択されたレーンがライブ Docker レーンの場合、対象ジョブはその再実行用のライブテストイメージをローカルでビルドします。生成されるレーンごとの GitHub 再実行コマンドには、これらの値が存在する場合に package_artifact_run_id、package_artifact_name、および準備済みイメージ入力が含まれるため、失敗したレーンは失敗した実行とまったく同じパッケージとイメージを再利用できます。
Plugin プレリリース
Plugin Prerelease は、よりコストの高いプロダクト/パッケージのカバレッジであるため、Full Release Validation または明示的なオペレーターによってディスパッチされる別個のワークフローです。通常の pull request、main push、スタンドアロンの手動 CI ディスパッチでは、このスイートはオフのままです。これは、バンドル済み Plugin テストを 8 つの拡張ワーカーに分散します。これらの拡張シャードジョブは、Plugin 設定グループを同時に最大 2 つまで実行し、各グループに 1 つの Vitest ワーカーとより大きな Node ヒープを割り当てるため、インポートの多い Plugin バッチが追加の CI ジョブを作成しません。リリース専用の Docker プレリリースパス(full_release_validation 入力で有効化)は、1〜3 分のジョブのために多数の runner を予約しないよう、対象 Docker レーンを 4 つずつのグループにまとめます。このワークフローは、@openclaw/plugin-inspector からの情報提供用 plugin-inspector-advisory アーティファクトもアップロードします。inspector の検出結果はトリアージ入力であり、ブロッキング対象の Plugin プレリリースゲートは変更しません。
QA Lab
QA Lab には、メインのスマートスコープワークフローとは別に専用の CI レーンがあります。エージェント型パリティは、スタンドアロンの PR ワークフローではなく、広範な QA およびリリースハーネスの下にネストされています。パリティを広範な検証実行に含める必要がある場合は、rerun_group=qa-parity を指定して Full Release Validation を使用します。
QA-Lab - All Lanesワークフローは、mainで毎晩および手動ディスパッチで実行されます。これは、モックパリティレーン、ライブ Matrix レーン、ライブ Telegram レーンおよび Discord レーンを並列ジョブとして展開します。ライブジョブはqa-live-shared環境を使用し、Telegram/Discord は Convex リースを使用します。
mock-openai/gpt-5.5 および mock-openai/gpt-5.5-alt)を使って Matrix と Telegram のライブトランスポートレーンを実行します。これにより、チャネル契約がライブモデルのレイテンシーおよび通常のプロバイダー Plugin 起動から切り離されます。ライブトランスポート Gateway は、QA パリティがメモリ動作を別途カバーするため、メモリ検索を無効化します。プロバイダー接続性は、別個のライブモデル、ネイティブプロバイダー、Docker プロバイダーの各スイートでカバーされます。
Matrix は、スケジュールおよびリリースゲートで --profile fast を使用し、チェックアウトされた CLI が対応している場合のみ --fail-fast を追加します。CLI のデフォルトおよび手動ワークフロー入力は all のままです。手動の matrix_profile=all ディスパッチは、Matrix の全カバレッジを常に transport、media、e2ee-smoke、e2ee-deep、e2ee-cli ジョブにシャードします。
OpenClaw Release Checks も、リリース承認前にリリースクリティカルな QA Lab レーンを実行します。その QA パリティゲートは、候補パックとベースラインパックを並列レーンジョブとして実行し、その後、最終的なパリティ比較用の小さなレポートジョブに両方のアーティファクトをダウンロードします。
通常の PR では、パリティを必須ステータスとして扱うのではなく、スコープされた CI/チェックのエビデンスに従います。
CodeQL
CodeQL ワークフローは、完全なリポジトリスイープではなく、意図的に絞り込まれた第 1 段階のセキュリティスキャナーです。毎日、手動、main push、およびドラフトではない pull request のガード実行では、Actions ワークフローコードに加えて、最もリスクの高い JavaScript/TypeScript サーフェスを、高信頼度のセキュリティクエリでスキャンし、high/critical の security-severity に絞り込みます。
pull request ガードは軽量のままです。.github/actions、.github/codeql、.github/workflows、packages、scripts、src、またはプロセスを所有するバンドル済み Plugin ランタイムパス配下の変更に対してのみ開始され、スケジュール済みワークフローと同じ高信頼度のセキュリティマトリクスを実行します。Android と macOS の CodeQL は、PR のデフォルトには含めません。
セキュリティカテゴリ
| カテゴリ | サーフェス |
|---|---|
/codeql-security-high/core-auth-secrets | 認証、シークレット、サンドボックス、Cron、Gateway ベースライン |
/codeql-security-high/channel-runtime-boundary | コアチャネル実装契約に加えて、チャネル Plugin ランタイム、Gateway、Plugin SDK、シークレット、監査タッチポイント |
/codeql-security-high/network-ssrf-boundary | コア SSRF、IP 解析、ネットワークガード、web-fetch、Plugin SDK SSRF ポリシーサーフェス |
/codeql-security-high/mcp-process-tool-boundary | MCP サーバー、プロセス実行ヘルパー、アウトバウンド配信、エージェントツール実行ゲート |
/codeql-security-high/process-exec-boundary | ローカルシェル、プロセス spawn ヘルパー、サブプロセスを所有するバンドル済み Plugin ランタイム、ワークフロースクリプトの接着部分 |
/codeql-security-high/plugin-trust-boundary | Plugin インストール、ローダー、マニフェスト、レジストリ、パッケージマネージャーインストール、ソース読み込み、Plugin SDK パッケージ契約の信頼サーフェス |
プラットフォーム固有のセキュリティシャード
CodeQL Android Critical Security— スケジュールされた Android セキュリティシャード。ワークフロー sanity が許容する最小の Blacksmith Linux runner 上で、CodeQL 用に Android アプリを手動でビルドします。/codeql-critical-security/android配下にアップロードします。CodeQL macOS Critical Security— 週次/手動の macOS セキュリティシャード。Blacksmith macOS 上で CodeQL 用に macOS アプリを手動でビルドし、依存関係のビルド結果をアップロード済み SARIF から除外して、/codeql-critical-security/macos配下にアップロードします。クリーンな場合でも macOS ビルドが実行時間の大半を占めるため、日次デフォルトの外に置かれています。
クリティカル品質カテゴリ
CodeQL Critical Quality は、対応する非セキュリティシャードです。GitHub-hosted Linux runner 上で、狭く高価値なサーフェスに対して、error 重要度の非セキュリティ JavaScript/TypeScript 品質クエリのみを実行します。これにより、品質スキャンが Blacksmith runner 登録予算を消費しません。その pull request ガードは、スケジュール済みプロファイルより意図的に小さくなっています。ドラフトではない PR は、触れたサーフェスに対応するシャードのみを、PR でルーティング可能な 13 個のシャード(agent-runtime-boundary、channel-runtime-boundary、config-boundary、core-auth-secrets、gateway-runtime-boundary、mcp-process-runtime-boundary、memory-runtime-boundary、network-runtime-boundary、plugin-boundary、plugin-sdk-package-contract、plugin-sdk-reply-runtime、provider-runtime-boundary、session-diagnostics-boundary)から実行します。ui-control-plane と web-media-runtime-boundary は PR 実行には含めません。CodeQL 設定および品質ワークフローの変更は、PR シャードセット全体を実行します(ネットワークランタイムシャードは、それ自身の CodeQL 設定ファイルとネットワーク所有ソースパスをキーにします)。
手動ディスパッチは以下を受け付けます。
| カテゴリ | サーフェス |
|---|---|
/codeql-critical-quality/core-auth-secrets | 認証、シークレット、サンドボックス、Cron、Gateway セキュリティ境界コード |
/codeql-critical-quality/config-boundary | 設定スキーマ、マイグレーション、正規化、IO コントラクト |
/codeql-critical-quality/gateway-runtime-boundary | Gateway プロトコルスキーマとサーバーメソッドコントラクト |
/codeql-critical-quality/channel-runtime-boundary | コアチャネルとバンドル済みチャネル Plugin の実装コントラクト |
/codeql-critical-quality/agent-runtime-boundary | コマンド実行、モデル/プロバイダーのディスパッチ、自動返信のディスパッチとキュー、ACP コントロールプレーンランタイムコントラクト |
/codeql-critical-quality/mcp-process-runtime-boundary | MCP サーバーとツールブリッジ、プロセス監視ヘルパー、アウトバウンド配信コントラクト |
/codeql-critical-quality/memory-runtime-boundary | メモリホスト SDK、メモリランタイムファサード、メモリ Plugin SDK エイリアス、メモリランタイム有効化の接着コード、メモリ doctor コマンド |
/codeql-critical-quality/network-runtime-boundary | ネットワークポリシーパッケージ、生ソケットとプロキシキャプチャランタイム、SSH トンネル、Gateway ロック、JSONL ソケット、プッシュトランスポートサーフェス |
/codeql-critical-quality/session-diagnostics-boundary | 返信キュー内部、セッション配信キュー、アウトバウンドセッションのバインド/配信ヘルパー、診断イベント/ログバンドルサーフェス、セッション doctor CLI コントラクト |
/codeql-critical-quality/plugin-sdk-reply-runtime | Plugin SDK のインバウンド返信ディスパッチ、返信ペイロード/チャンク化/ランタイムヘルパー、チャネル返信オプション、配信キュー、セッション/スレッドバインドヘルパー |
/codeql-critical-quality/provider-runtime-boundary | モデルカタログ正規化、プロバイダー認証と検出、プロバイダーランタイム登録、プロバイダーのデフォルト/カタログ、web/search/fetch/embedding レジストリ |
/codeql-critical-quality/ui-control-plane | Control UI ブートストラップ、ローカル永続化、Gateway コントロールフロー、タスクコントロールプレーンランタイムコントラクト |
/codeql-critical-quality/web-media-runtime-boundary | コア web fetch/search、メディア IO、メディア理解、画像生成、メディア生成ランタイムコントラクト |
/codeql-critical-quality/plugin-boundary | ローダー、レジストリ、公開サーフェス、Plugin SDK エントリポイントコントラクト |
/codeql-critical-quality/plugin-sdk-package-contract | 公開パッケージ側の Plugin SDK ソースと Plugin パッケージコントラクトヘルパー |
メンテナンスワークフロー
Docs Agent
Docs Agent ワークフローは、最近取り込まれた変更に既存ドキュメントを合わせ続けるためのイベント駆動の Codex メンテナンスレーンです。純粋なスケジュールはありません。main への bot 以外の push CI 実行が成功するとトリガーでき、手動ディスパッチで直接実行することもできます。ワークフロー実行による呼び出しは、main が先に進んでいる場合、またはスキップされていない別の Docs Agent 実行が過去 1 時間以内に作成されている場合はスキップされます。実行時には、前回のスキップされていない Docs Agent ソース SHA から現在の main までのコミット範囲をレビューするため、1 時間ごとの 1 回の実行で、前回のドキュメント確認以降に蓄積されたすべての main 変更をカバーできます。
Test Performance Agent
Test Performance Agent ワークフローは、遅いテスト向けのイベント駆動の Codex メンテナンスレーンです。純粋なスケジュールはありません。main への bot 以外の push CI 実行が成功するとトリガーできますが、その UTC 日に別のワークフロー実行による呼び出しがすでに実行済みまたは実行中の場合はスキップします。手動ディスパッチは、その日次アクティビティゲートをバイパスします。このレーンはフルスイートのグループ化された Vitest パフォーマンスレポートを作成し、Codex には大規模なリファクタではなく、カバレッジを保つ小さなテストパフォーマンス修正だけを行わせ、その後フルスイートレポートを再実行して、合格ベースラインのテスト数を減らす変更を拒否します。グループ化されたレポートは Linux と macOS で設定ごとのウォールタイムと最大 RSS を記録するため、前後比較では所要時間の差分に加えてテストメモリの差分も明らかになります。ベースラインに失敗しているテストがある場合、Codex は明白な失敗のみを修正でき、エージェント後のフルスイートレポートはコミット前に合格しなければなりません。bot の push が取り込まれる前に main が進んだ場合、このレーンは検証済みパッチをリベースし、pnpm check:changed を再実行して push を再試行します。競合する古いパッチはスキップされます。Codex アクションが docs agent と同じ sudo 降格の安全姿勢を保てるよう、GitHub ホストの Ubuntu を使用します。
マージ後の重複 PR
Duplicate PRs After Merge ワークフローは、取り込み後の重複整理用の手動メンテナーワークフローです。デフォルトは dry-run で、apply=true の場合にのみ明示的に列挙された PR を閉じます。GitHub を変更する前に、取り込まれた PR がマージ済みであること、および各重複 PR に共有された参照 Issue または重複する変更ハンクがあることを検証します。
ローカルチェックゲートと変更ルーティング
ローカルの changed-lane ロジックはscripts/changed-lanes.mjs にあり、scripts/check-changed.mjs によって実行されます。そのローカルチェックゲートは、広範な CI プラットフォームスコープよりもアーキテクチャ境界に対して厳格です。
- コア本番変更は、コア本番およびコアテストの型チェックに加えて、コア lint/guard を実行します。
- コアのテストのみの変更は、コアテストの型チェックに加えてコア lint のみを実行します。
- 拡張機能の本番変更は、拡張機能の本番および拡張機能テストの型チェックに加えて、拡張機能 lint を実行します。
- 拡張機能のテストのみの変更は、拡張機能テストの型チェックに加えて拡張機能 lint を実行します。
- 公開 Plugin SDK または plugin-contract の変更は、拡張機能がそれらのコアコントラクトに依存するため、拡張機能の型チェックへ拡張されます(Vitest 拡張機能スイープは明示的なテスト作業のままです)。
- リリースメタデータのみのバージョン更新は、対象を絞ったバージョン/設定/ルート依存関係チェックを実行します。
- 不明な root/config 変更は、安全側に倒してすべてのチェックレーンを実行します。
scripts/test-projects.test-support.mjs にあり、意図的に check:changed より低コストです。直接のテスト編集は自身を実行し、ソース編集は明示的なマッピングを優先し、その後 sibling テストとインポートグラフ依存を実行します。共有 group-room 配信設定は明示的なマッピングの 1 つです。group visible-reply 設定、ソース返信配信モード、または message-tool システムプロンプトへの変更は、コア返信テストに加えて Discord と Slack の配信回帰を通るため、共有デフォルトの変更は最初の PR push の前に失敗します。変更がハーネス全体に及び、低コストなマッピング済みセットを信頼できる代理として扱えない場合にのみ、OPENCLAW_TEST_CHANGED_BROAD=1 pnpm test:changed を使用してください。
Testbox 検証
Crabbox は、メンテナー向け Linux 証明のためのリポジトリ所有 remote-box ラッパーです。エージェントセッションは、テストおよび計算負荷の高い作業でデフォルトでこれを使用します。これにはビルド、型チェック、lint ファンアウト、Docker、パッケージレーン、E2E、ライブ証明、CI parity が含まれます。信頼済みメンテナーコードはデフォルトでblacksmith-testbox を使用し、.crabbox.yaml も現在はそれをデフォルトにしています。設定済みワークフローはプロバイダーとエージェント認証情報を hydrate するため、信頼できない contributor または fork のコードは、代わりにシークレットなしの fork CI またはサニタイズ済み direct AWS Crabbox を使わなければなりません。サニタイズ済み AWS 実行では CRABBOX_ENV_ALLOW=CI を設定し、--no-hydrate を渡し、新しい一時リモート HOME を使用します。これにより、リポジトリの OPENCLAW_* allowlist と既存の認証プロファイルが信頼できないコードへ到達するのを防ぎます。信頼できないそのソース専用に新しくウォームアップしたリースを使用し、信頼済みまたは以前に hydrate されたリースは決して使用しません。クリーンな信頼済み main チェックアウトからインストール済みの信頼済み Crabbox バイナリを起動し、--fresh-pr でリモート PR のみを取得します。信頼できないチェックアウトのラッパーや設定をローカルで実行してはいけません。CRABBOX_AWS_INSTANCE_PROFILE を unset し、解決された aws.instanceProfile が空でない限り fail closed します。インストール/テストの前に、信頼済みの絶対パスツールを使用して IMDSv2 トークンを必須にし、IAM 認証情報エンドポイントが 404 を返すことを証明し、リモートの git rev-parse HEAD をレビュー済み PR head SHA の完全値と比較します。リースをその SHA にバインドし、head が変わったら停止して再ウォームアップします。クリーンな main から信頼済みの scripts/crabbox-untrusted-bootstrap.sh を --fresh-pr と一緒にアップロードします。これは固定された Node/pnpm をインストールし、SHA と package-manager pin を検証し、HOME を分離し、依存関係をインストールしてから、要求されたテストを実行します。
すべての CRABBOX_TAILSCALE* override を unset し、--network public --tailscale=false を強制し、exit-node/LAN フラグをクリアし、スクリプトをアップロードする前に crabbox inspect が Tailscale 状態なしの public networking を報告することを要求します。所有 AWS/Hetzner キャパシティは、Blacksmith 障害、クォータ問題、または明示的な所有キャパシティテストのフォールバックでもあります。
テストまたは重い証明が必要になりそうな信頼済みコードタスクの開始時に、エージェントはバックグラウンドコマンドセッションでただちに pre-warm し、hydration の実行中に調査と編集を続け、返された tbx_... id を再利用し、各実行で現在のチェックアウトを同期し、引き渡し前に停止するべきです。
git status --short が少なくとも 200 件の追跡済み削除を示すと即座に失敗します。これにより pnpm-lock.yaml のようなルートファイルの消失を捕捉します。意図的な大量削除 PR では、リモートコマンドに CRABBOX_ALLOW_MASS_DELETIONS=1 を設定してください。
Crabbox は、同期後の出力がないまま sync フェーズに 5 分以上留まるローカル Blacksmith CLI 呼び出しも終了します。そのガードを無効にするには CRABBOX_BLACKSMITH_SYNC_TIMEOUT_MS=0 を設定し、通常より大きいローカル差分にはより大きなミリ秒値を使用してください。
初回実行の前に、リポジトリルートからラッパーを確認します。
pnpm crabbox:run スクリプトは避けてください。代わりに node ラッパーを直接呼び出します。
.crabbox.yaml の blacksmith: ブロックは、org、workflow、job、ref のデフォルトをすでに固定しているため、以下の明示的なフラグは任意です。変更ゲート:
provider、leaseId、
syncDelegated、exitCode、commandMs、totalMs です。委譲された
Blacksmith Testbox 実行では、Crabbox ラッパーの終了コードと JSON サマリーが
コマンド結果です。リンクされた GitHub Actions 実行は hydration と keepalive を担当します。この実行は、SSH
コマンドがすでに返ったあとに Testbox が外部から停止された場合、cancelled として終了することがあります。
ラッパーの exitCode が非ゼロであるか、コマンド出力が失敗したテストを示していない限り、それはクリーンアップまたはステータスの成果物として扱います。
Blacksmith バックのワンショット Crabbox 実行では、Testbox は自動的に停止されるはずです。
実行が中断された場合、またはクリーンアップが不明な場合は、稼働中のボックスを確認し、自分が作成したボックスだけを停止してください:
--no-sync は省略します。意図的に、変更されていない同期済みツリーを再実行する場合にのみ使用してください。信頼されていないコントリビューター/フォークのコードでは、すべてのコマンドで CRABBOX_ENV_ALLOW=CI、--provider aws --no-hydrate、新しい一時リモート HOME を使用する必要があります。テスト前に、そのサニタイズ済みコマンド内で依存関係をインストールします。同じ信頼されていないソース専用に新しくウォームアップされたリースのみを再利用し、信頼済みまたは以前にハイドレートされたリースは絶対に使用しないでください。信頼されていないチェックアウトのラッパーや設定をローカルで実行してはいけません。クリーンな信頼済み main から、インストール済みの信頼済み Crabbox バイナリを起動し、すべての実行で --fresh-pr を渡します。CRABBOX_AWS_INSTANCE_PROFILE は未設定のままにし、解決済みインスタンスプロファイルが空でない場合は拒否し、信頼済みリモートの IMDS ロールなし証明を必須にし、インストール/テスト前にレビュー対象の head SHA を検証します。リースをその SHA に紐付け、head が変更された場合は停止して再ウォームアップします。リモート PR が存在しない場合は、シークレットなしのフォーク CI を使用します。信頼されていないソースに hydrate-github や認証情報でハイドレートされた Blacksmith ワークフローを選択してはいけません。
Crabbox が壊れている層で、Blacksmith 自体は動作している場合は、list、status、クリーンアップなどの診断に限って直接 Blacksmith を使用します。直接 Blacksmith 実行をメンテナー証明として扱う前に、Crabbox パスを修正してください。
blacksmith testbox list --all と blacksmith testbox status は動作するものの、新しいウォームアップが数分後も IP や Actions 実行 URL なしで queued のままの場合は、Blacksmith プロバイダー、キュー、請求、または org 制限の負荷として扱います。作成したキュー中の id を停止し、それ以上 Testbox を開始するのを避け、誰かが Blacksmith ダッシュボード、請求、org 制限を確認している間、下記の所有 Crabbox キャパシティパスへ証明を移します。
Blacksmith がダウンしている、クォータ制限がある、必要な環境がない、または所有キャパシティが明示的な目的である場合にのみ、所有 Crabbox キャパシティへエスカレーションします。
class=beast は避けてください。beast リクエストは 192 vCPU から始まり、リージョンの EC2 Spot または On-Demand Standard クォータに最も引っかかりやすい方法です。リポジトリ所有の .crabbox.yaml は、class: standard、オンデマンドマーケット、capacity.hints: true をデフォルトにしているため、仲介された AWS リースでは選択されたリージョン/マーケット、クォータ負荷、Spot フォールバック、高負荷クラス警告が表示されます。より重い広範なチェックには fast を使用し、standard/fast で不十分な場合にのみ large を使用し、beast はフルスイートまたは全 Plugin Docker マトリクス、明示的なリリース/ブロッカー検証、高コア性能プロファイリングなど、例外的な CPU バウンドレーンにのみ使用してください。pnpm check:changed、フォーカスされたテスト、docs のみの作業、通常の lint/typecheck、小規模 E2E 再現、Blacksmith 障害トリアージに beast を使用しないでください。Spot マーケットの変動がシグナルに混ざらないように、キャパシティ診断には --market on-demand を使用します。
.crabbox.yaml はプロバイダー、同期、GitHub Actions ハイドレーションのデフォルトを所有します。Crabbox 同期は .git を転送しないため、ハイドレートされた Actions チェックアウトは、メンテナーローカルのリモートやオブジェクトストアを同期する代わりに、独自のリモート Git メタデータを保持します。また、リポジトリ設定は、転送してはならないローカルランタイム/ビルド成果物(.artifacts やテストレポートなど)も除外します。.github/workflows/crabbox-hydrate.yml は、所有クラウドの crabbox run --id <cbx_id> コマンドのために、チェックアウト、Node/pnpm セットアップ、origin/main フェッチ、非シークレット環境の引き渡しを所有します。