Labs 機能を卒業させる
卒業とは、機能の Labs スイッチを削除し、通常の機能にすることです。コードを書く前に、オーナーが2つの独立した判断を下します。
- Labs を離脱する: 機能に恒久的な場所(独自の設定ページまたはプラグインページ)を与え、Labs の表現を削除します。
- デフォルト: デフォルトで有効にするか、またはデフォルトで無効のままにするか。
これらは独立しています。#197029 では最初に両方を試み、その後最初のものだけを出荷しました。Advisor は Labs を離脱しましたが、デフォルトでは無効のままでした。どちらが求められているかを確認してください。「卒業」が「デフォルトで有効」を意味するとは想定しないでください。
先例: Swarm はデフォルトで有効 (#136514)、Tool Search はデフォルトで有効 (#154068)、ネイティブプラグイン UI は Labs のオプトインなしで有効 (de50262a1f96)、Labs 機能を設定に移動 (#145460)、Advisor は Labs を離脱しデフォルトでは無効 (#197029)。
PR の前に
- 実際のルートでのコストまたはリスクを測定する 機能がお金やトークンを消費する場合、またはオプトインしていないユーザーの動作を変更する場合。モックや単体テストからの現在の数値は証明になりません。#197074 では、ライブプロバイダーが反証したモックからのキャッシュコストの主張をマージし、#197175 でリバートされました。機能自身のPRですでに確立されているライブ測定を使用し、その数値をPR本文に記載してください。
- 既知の欠陥を先に解決する。 Advisor の卒業は、フォークキャッシュの修正 (#197203, #197223, #197224, #197226) を待ちました。デフォルトで有効にすると、すべてのユーザーにキャッシュされていないコストが請求されるためです。
- 残る有効化パスを見つける。 Labs の行が削除された後も、ユーザーは UI から機能を有効にできる必要があります。バンドルされたプラグインは 設定 → プラグイン → <名前> → 有効にする を使用します。コア機能には設定ページが必要です。スイッチが存在しない場合にのみ追加してください。
変更内容
- デフォルト。 オーナーがデフォルトで有効を選択した場合のみ変更します。バンドルされたプラグインの
openclaw.plugin.json内のenabledByDefault、またはコア設定のデフォルト。既存の明示的なfalse(または機能のオプトアウト値)は引き続き機能し、既存のtrueは有効のままである必要があります。保存された設定を書き換えて誰かの選択を変更するマイグレーションを決して追加しないでください。 - Labs。
ui/src/pages/labs/labs-registry.tsからエントリを削除し、それが使用していたものすべて(labs-page.tsxの行やスロット、labs-feature-state.tsのエントリ、文字列、テスト)を削除します。 - ドキュメント。 機能のセクションを
docs/concepts/experimental-features.mdから独自のリファレンスページに移動します。そこには、卒業したこと、デフォルト、および有効化場所を説明する1段落のメモを古いアンカーとともに残します。「Labs には以下が含まれます...」のリストと「現在文書化されているフラグ」の表を更新します。 - 表現。 マニフェストの説明、パッケージの説明、README、プラグインのサマリー、およびプロンプトプレフィックスなどのユーザーまたはモデル向けのテキストから「Experimental」および「OpenClaw Labs」を削除します。
- 生成ファイル。 手動でマージせず、再生成します:
pnpm config:docs:gen、pnpm plugins:inventory:gen。Control UI のロケールアーティファクト(*.meta.json、*.tm.jsonl、catalog-fallbacks.json)はui/AGENTS.mdに従って PR の対象外とし、ロケール更新ワークフローがそれらを更新します。pnpm ui:i18n:verifyが成功する必要があります。 - アップグレードの証明。 デフォルト変更の場合のみ: 実際のアップグレードを通じて、保存されたエントリが新しいデフォルトを取得しないこと、明示的なオフがオフのままであること、明示的なオンがオンのままであることを証明します。同じデフォルトのままの場合はアップグレードケースは不要です。#197029 は、デフォルトオン用に構築していたアップグレードケースを削除しました。
PR 内の証拠
- Control UI のスクリーンショット。アップロード前にプライベートデータがないか確認します。Labs の前後、および実際の Gateway での有効化パスの動作を添付します。
gh pr comment <n> --attach '<file>#<alt text>'で添付します。 - 有効化パスをエンドツーエンドでテストします。スイッチが期待どおりの設定を保存し、再起動せずに有効になることを確認します。
- 機能のテストと Labs ページのテストが成功し、テスト行数のラチェットが増加しないことを確認します。
- ドキュメントの主張がコードと一致すること。ClawSweeper は Advisor の「
everyMinutesあたり最大1回のレビュー」という主張を検出しましたが、これはeveryToolCallsがオンの場合には誤りでした。
マージ後
新しい場所は、マージを含むビルドでのみ表示されます。ユーザーに正確なパスを伝え、古いビルドでは Labs スイッチが引き続き表示されることを伝えてください。