id: ADR-006 title: オプショナルチャンネルのターゲットをランタイムプラグインにする date: 2026-07-18 status: proposed relates-to:
- ADR-002
- ADR-009
- docs/book/src/foundations/fnd-001-intentional-architecture.md
- https://github.com/zeroclaw-labs/zeroclaw/issues/8850
- https://github.com/zeroclaw-labs/zeroclaw/issues/8691#issuecomment-5009706612
- wit/v0/channel.wit
- crates/zeroclaw-plugins/src/wasm_channel.rs
ADR-006: オプションチャネルの対象をランタイムプラグインにする
コンテキスト
ZeroClaw は現在、多くのメッセージング統合を Cargo の feature フラグを通じてコンパイルしています。これにより、選択したビルドから未使用のチャネルコードを除外できますが、オプションの統合を追加または更新するには、依然としてアプリケーションの再ビルドが必要です。また、ベンダー固有の依存関係とリリースサイクルがメインバイナリに結び付いたままになります。
WITコンポーネントモデルは現在、channel-plugin ワールドを定義しており、ホストアダプターはWASMコンポーネント向けに共有の Channel トレイトを実装します。ディスカバリーとホスト側アダプターは存在しますが、実行中のデーモンはまだ、ディスカバリーされたチャネルプラグインを構築したり、必要なベンダーごとのリスナーをすべて提供したりはしません。したがって、ランタイムプラグインは、現在のパッケージングモデルではなく、運用パスが不完全な実際のターゲットを記述します。
代替案は、恒久的なコンパイル時/ランタイムのハイブリッドを維持するか、すべてのチャネルの即時移行を必須にするか、またはランタイムプラグインをデフォルトのターゲットとしつつ、プラグイン境界ではまだサポートできない機能については明示的なネイティブ例外を認めることです。
決定
ランタイムインストール可能なプラグインを、オプションチャネルのターゲットパッケージングおよび実行モデルとします。
オプションのチャネルは、WIT/WASI ホスト境界が、ランタイムのセキュリティモデルを弱めることなく、必要なネットワーク接続、webhook またはポーリングによる受信、設定、シークレット、メディア、インタラクション、ライフサイクルの機能を提供できる場合、コンパイル済みの機能からランタイムプラグインへ移行すべきです。
移行期間中、ネイティブ実装を残せるのは、明示的かつ機能に基づく例外としての場合に限ります。例外では、不足しているホスト機能または運用上の制約、それに依存するネイティブコードパス、および移行を可能にする条件を特定する必要があります。ベンダーの識別情報、既存の機能フラグ、または実装の古さだけでは、恒久的な例外の理由にはなりません。
ランタイムは、プラグインの検出、権限の適用、設定の配信、リスナーの監視、ヘルス状態の報告、共有 Channel コントラクトへの適応を担う。チャネルプラグインは、プラットフォーム固有のプロトコル動作とメッセージ変換を担う。ゲートウェイがホストするイングレスは汎用 HTTP トラフィックをルーティングしてもよいが、ベンダー固有のチャネルロジックの恒久的な所有者になるべきではない。
Issue #8850 は、移行順序、機能ギャップの追跡、およびコンパイル済みオプションチャネルを廃止するための境界条件を担います。この ADR は、どのチャネルを最初に移行するかを選択するものではなく、ランタイムの代替が同等の運用サポートを備える前に、動作しているネイティブ実装の削除を要求するものでもありません。
この ADR は、以下の条件をすべて満たすまで提案中のままです:
- 検出されたチャネルプラグインは、実行中のデーモンによって設定および登録できます;
- サポートされているディストリビューションは、カスタムリビルドなしにチャンネルプラグインをインストール、設定、および実行できます。
- 監視対象ランタイムの管理下では、インバウンドリスナーまたは Webhook トラフィックがプラグインに到達できます;
- 少なくとも1つの既存のオプションのコンパイル済みチャネルがエンドツーエンドで移行済みであること。また、
- まだ移行できないチャンネル向けに、例外と互換性プロセスが文書化されています。
結果
肯定的な結果:
- ユーザーは ZeroClaw を再ビルドせずに、オプションの統合機能を追加および更新できます。
- ベンダー依存関係とリリースケイデンスは、メインバイナリから切り離すことができます。
- チャネル実装は、1つの権限付きランタイム境界と1つの呼び出し元から見えるトレイトコントラクトを共有します。
- ネイティブの例外は、未定義の恒久的な第2モデルになるのではなく、名前付きの能力ギャップに結び付けられているため、レビュー可能な状態を維持します。
否定的な結果:
- ホストは、長期間存続するリスナーを監督し、コンポーネント境界を越えてチャネルの健全性、インタラクション、メディア、設定の動作を維持する必要があります。
- 一部のプラットフォームはWIT/WASIの機能が成熟するまでネイティブのままとなる可能性があるため、移行には引き続き2つのパッケージングパスが伴います。
- プラグインの配布、互換性、署名、失効は、運用チャネルのライフサイクルの一部となります。
- 移行にはパリティの証跡が必要です。チャネルコンポーネントを単にコンパイルするだけでは、そのネイティブ実装を廃止するには不十分です。
参照
- ADR-002: トレイト駆動の拡張性
- ADR-009: WIT と wasmtime プラグインの実行
- FND-001: 意図的なアーキテクチャ
- チャネルプラグインの作成
- チャンネルランタイムのライフサイクル
- Migration tracker #8850
- ADR-006 と ADR-007 の方針決定
wit/v0/channel.witcrates/zeroclaw-plugins/src/wasm_channel.rscrates/zeroclaw-plugins/src/host.rs