- Verified (Spec) — あなたの AdCP プロトコル実装が仕様に一致する。ストーリーボードがどこかで通過する — テストデプロイかもしれず、ローカル開発かもしれない。ワイヤー形式、タスク形状、エラーセマンティクス、ステートマシン遷移がすべてチェックアウトする。本番許容ではなく ワイヤー形式適合性 を証明する。
- Verified (Sandbox) — あなたの 実本番エンドポイント が
account.sandbox: trueを正しく尊重する。AAO は登録されたagent_urlに対してサンドボックスフラグ付きトラフィックで完全なストーリーボードスイートを実行する。あなたの本番スタックは、スキーマ有効なレスポンス、正しいライフサイクル遷移、適切なエラーエンベロープ、実世界の副作用なし(実支出なし、実永続化なし、実プラットフォーム呼び出しなし)でそれを処理する。本番コードパスがテストトラフィックを正しく許容する ことを証明する。
各軸が認証するもの
Verified (Spec)
Verified (Sandbox)
(Sandbox) 修飾子は、以前のドラフトの
Verified (Live) フレーミングを置き換えます。変更点: 「あなたの実マネー本番コードパスがインプレッションを正しく配信する」(スタックを通る正準キャンペーン)を証明する代わりに、(Sandbox) は「あなたの実本番コードパスが完全なストーリーボードスイート全体でサンドボックスフラグ付きトラフィックを正しく処理する」を証明します。両方とも実本番表面のクレームです。違いは何がテストされるかです。(Sandbox) は新しい AAO 運用インフラなしに専門分野全体で普遍的に達成可能です。再フレーミングの判定については #4379 を参照してください。
comply_test_controller について: コントローラーは採用者自身の統合テストのための 開発/ステージング専用 アフォーダンスです。AAO の (Sandbox) グレーディングはそれを要求も使用もしません。セラーは決定的ローカルテストをサポートするため開発環境でコントローラーエンドポイントを実装してもよい(MAY)が、本番スタックは (Sandbox) を獲得するために comply_test_controller を公開する必要はありません。セラー側のサンドボックスゲートが (Sandbox) が証明するものです — 実本番上での、フラグ付きトラフィックの下でのスキーマとライフサイクルの正しさ。開発時のテスト表面自体がどう立ち上げられるか — 状態ローカルセラー用の DB バックの seed_* 対 アップストリームプロキシセラー用の SDK の TestControllerBridge — は Test surfaces and the storyboard loop でカバーされます。命名の歴史
以前のドラフト(#3001)は「AdCP Conformant」と「AAO Verified」を 2 つの別個のマーク名 — 軸ごとに 1 つ — として提案しました。このページは代わりに 括弧内の軸修飾子を伴う単一のブランドマーク を使います。同じ形状、異なる命名規約:
リネームの背後にある理由: 合成可能な修飾子を伴う単一のブランドワード(「Verified」)は、バイヤーメッセージングにとってよりクリーンです。バイヤーは 2 つの別個のマークを学ぶ必要がなく、修飾子をインラインで読みます。Verified (Spec) を獲得するテストエージェントは、「ジュニア」な Conformant 階層ではなく、完全で尊厳あるクレームです — それらはテストエージェントで、それが全ポイントです。ワイヤー形式はこれを反映します: JWT とレジストリ API 内の単一の
verification_modes: string[] 配列で、エージェントは ["spec"] または ["spec", "sandbox"] を持ちうる。エージェント + ロールごとに 1 つのバッジ URL。軸が獲得されるにつれ修飾子は進化し、埋め込まれたバッジは自動的に現在の状態を反映します。
以前のドラフトの「Tier 1 / Tier 2」の拒否は依然として正しい: 同じワード — verified — を 2 つの異なる種類のクレームにわたって階層化することはメッセージを濁します。2 軸修飾子フレーミングはその拒否を継承しつつ、ブランドワードを単数に保ちます。
カバレッジギャップは明示的
(Sandbox) フレーミングの下では、適用可能なすべてのストーリーボードがサンドボックスフラグ付きトラフィックでセラーの本番エンドポイントに対して試みられます。可観測性の切り出しはありません — universal ストーリーボード(signed_requests、pagination_integrity など)は標準スイートの一部として実行されます。レジストリは未選択項目を選択済みだがスキップされた項目と別に保ちます: 実行モード除外(「これはサンドボックス専用実行だったので、ライブ専用プローブは選択されなかった」)、辞退されたオプションケイパビリティ(「セラーはこの機能を主張しなかった」)、決定的テスト表面ギャップ(「本番エンドポイントは正しく comply_test_controller を省略している」)。それらはセラーへの異なる要求であり、1 つの一般的な「スキップされたオプションのもの」バケットに折りたたんではなりません(MUST NOT)。(Sandbox) 修飾子はその証拠に対する検証プロファイルです: どの未選択とスキップのクラスが Sandbox バッジに許容可能で、どれがブロッカーのままかを定義します。以前の (Live) 可観測性モデルを置き換えたフレーミング決定については #4379 を参照してください。
バッジを読む
バッジは括弧内に修飾子を伴う単一の shields.io スタイル画像としてレンダリングされます:
バッジ URL はエージェント + ロールごとに安定です。エージェントが軸を獲得または喪失するにつれ、SVG コンテンツは URL を変えずに更新されます — 埋め込まれたバッジは自動的に現在の状態を反映します。
専門分野を宣言する
specialisms はバッジルーティングフィールドです。それを省略すると、エージェントは依然として supported_protocols が含意する universal とプロトコルベースラインストーリーボードを実行しますが、検証エンジンが評価する狭いクレームを持たないため専門分野バッジは発行できません。
エージェントが各軸を獲得する方法
軸はストーリーボード証拠に対する検証プロファイルであり、別々のランナー実装ではありません。ランナーは何が通過、失敗、スキップしたかとその理由を記録します。Spec と Sandbox プロファイルは、その証拠が公開修飾子に十分かどうかを決定します。 バイヤー固有の要件は別です。バイヤーは公開修飾子、宣言されたプロトコルまたは専門分野、1 つ以上のオプションケイパビリティ、スキップに対するより厳格な立場を要求できます。例えば、プロポーザルワークフローを必要とするバイヤーは、media_buy.supports_proposals: false がプロポーザルストーリーボードをスキップさせた、それ以外はクリーンな実行を拒否できます。決定的統合テストを行うバイヤーは、本番 Sandbox 修飾子がそのコントローラーの公開を要求しなくても、comply_test_controller を伴う開発/ステージングエンドポイントを要求できます。
Verified (Spec) を獲得するには:
- 宣言された専門分野のために AdCP を実装する。
- テストモードエンドポイントでストーリーボードを通過する。(何が失敗しているかを見るため、まず
@adcp/sdk/testing経由でローカルに実行する。) - API アクセス階層でアクティブな AAO メンバーシップを保持する。
Verified (Sandbox) を獲得するには:
セラーは以下によって (Sandbox) を獲得します:- 本番
agent_urlを AAO に登録する。これは (Spec) を獲得するのと同じ登録です — 別の「コンプライアンスアカウント」や「テストデプロイ」は不要。 - 本番スタックに サンドボックスアカウントゲート を実装する:
account.sandbox: trueを伴うリクエストが到着したとき、セラーは(フィールドを信頼せずに)ターゲットされたアカウントが永続化されたレコード内のサンドボックスアカウントであることを検証し、完全なスキーマ/ライフサイクルの正しさでリクエストを処理しつつ 実世界の副作用ゼロ を生成する — 実支出なし、実広告サーバーオーダーなし、第三者プラットフォーム呼び出しなし、サンドボックスアカウントの境界された状態を超えた本番永続化なし。 - API アクセス階層でアクティブな AAO メンバーシップを保持する。
account.sandbox: true を付けて登録された本番 URL をターゲットします。通過 → (Sandbox) 修飾子が発行されます。
キー要件: サンドボックスアカウント分離。 セラーはアカウントレベルで明確なサンドボックス/ライブ区別を永続化しなければなりません(MUST)。ライブアカウントに対して sandbox: true を主張するリクエストは構造化エラーで拒否されなければなりません(MUST) — 正準拒否チェックについては #4028 と comply-controller-mode-gate ストーリーボードを参照してください。クロスモードリークが (Sandbox) が対して証明する失敗モードです。
分散型検証
各バッジは署名付き JWT(EdDSA / Ed25519)に裏付けられています。AAO は/.well-known/jwks.json で公開鍵セットを公開するため、任意の第三者が AAO の API を呼ぶことなくバッジの真正性を検証できます。
トークンクレーム:
adcp_version はこのバッジが対して発行された AdCP リリース(MAJOR.MINOR)です。バッジ URL ルートで使われる (agent_url, role, adcp_version) アイデンティティとペアになります。検証者は、関心のある AdCP バージョンに対して adcp_version をチェックしなければなりません(MUST) — 3.1 適合性の証明として提示された 3.0 トークンは権威的ではありません。署名付きクレームは署名時に形状検証されます(^[1-9][0-9]*\.[0-9]+$)。検証者は同じ正規表現を防御的に適用すべきです(SHOULD)。
verification_modes は獲得された軸の配列です。テストデプロイのストーリーボード通過のみは ["spec"]。本番エンドポイントもサンドボックスフラグ付きトラフィックの下で通過するエージェントは ["spec", "sandbox"]。protocol_version はバッジがテストされた仕様ビルドの完全な semver です — サポートと監査のための情報的メタデータ。
ランナーカバレッジはバッジモードとは別にレポートされます。本番パスのサンドボックス実行は、本番エンドポイントが正しく comply_test_controller を省略するために選択されたコントローラー依存シナリオがスキップするとき、失敗アサーションがゼロでも partial になりうる。それは有用な証拠ですが、バッジ発行はレジストリのストーリーボードごとのステータス、未選択理由、スキップ理由を使い、失敗ステップ数だけではありません。期待されるサンドボックスモード除外、オプションケイパビリティスキップ、欠けている必須表面スキップは別々のシグナルとして可視のままで、バイヤーは「この実行の一部でない」を「選択されたが実行されなかった」を「このセラーが実装していない」から区別できます。
レジストリ API はリアルタイムステータスに対して権威的です。JWT は 30 日間キャッシュ可能な証明です。
ライフサイクル
検証は 1 回限りの証明書ではなく、継続的に再評価されます。(Spec)
- 発行 — すべての宣言された専門分野ストーリーボードが通過し + アクティブなメンバーシップを伴う最初のハートビート。
- アクティブ — 各ハートビートで再チェック。JWT が自動更新される。
- 劣化 — 最初のストーリーボード退行が 48 時間の猶予を開始する。オペレーターが調査する間、バッジは (Spec) をレンダリングし続ける。
- 取り消し — 48 時間連続失敗 →
(Spec)修飾子がバッジから落ちる。保持されていれば (Sandbox) は影響を受けない — 軸は独立している。 - 回復 — 通過するストーリーボードが自動的に (Spec) を再発行する。
(Sandbox)
- 発行 — Sandbox 検証プロファイルが
account.sandbox: trueの下で登録された本番 URL に対して通過し + アクティブなメンバーシップを伴う最初のハートビート。プロファイルは、すべてのバイヤー可視サンドボックスパスアサーションが通過することを要求し、本番禁止のコントローラーフェーズを未選択実行モード除外として扱い、オプションケイパビリティスキップを可視に保つ。 - アクティブ — 各ハートビートで再チェック。JWT が自動更新される。
- 劣化 — 最初の Sandbox プロファイル退行が 48 時間の猶予を開始する。オペレーターが調査する間、バッジは (Sandbox) をレンダリングし続ける。クロスモードリーク(実世界の副作用を生成するサンドボックスリクエスト、またはサンドボックスフラグ付きトラフィックを受け入れるライブアカウント)は猶予期間をスキップし即座に取り消してもよい(MAY) — それが (Sandbox) 証明の全ポイントである。
- 取り消し — 48 時間連続失敗 →
(Sandbox)修飾子が落ちる。保持されていれば (Spec) は影響を受けない。 - 回復 — Sandbox プロファイルを通過すると (Sandbox) が再発行される。
マークセマンティクス
セラーは以下を保持してもよい(MAY):- (Spec) のみ — テストモードエンドポイントでストーリーボードが通過。(Sandbox) は登録されていない、または本番エンドポイントがまだサンドボックスフラグ付きトラフィックの下で通過していない。テストエージェント、サンドボックス、本番前ロールアウトによくある。
- (Sandbox) のみ —
account.sandbox: trueの下で登録された本番エンドポイントに対してストーリーボードが通過。別のテストモード表面を持たない本番専用プラットフォームによくある。 - (Spec + Sandbox) — 最強のクレーム。両方の軸が独立に検証された。
- どちらもなし
バージョンごとのバッジ
各バッジは (agent, role, AdCP version) で識別されます — (Spec) と (Sandbox) の上の 3 つ目の軸。エージェントは AdCP リリース全体で並列バッジを保持できます。例えば、AdCP 3.1 向けのアップグレードを出荷するメディアバイエージェントは以下の両方を保持するかもしれません:AAO Verified Media Buy Agent 3.0 (Spec)— 以前に獲得、まだ有効AAO Verified Media Buy Agent 3.1 (Spec + Sandbox)— アップグレード後に獲得
Media Buy Agent 3.1 (Spec + Sandbox)。
表示
SVG バッジ
2 つの URL 形状:Media Buy Agent 3.0 (Spec) から Media Buy Agent 3.1 (Spec + Sandbox) に自動的に切り替わる)を望むバイヤーはレガシー URL を埋め込みます。「AdCP 3.0 で検証済み」を具体的に呼び出したいバイヤーはバージョンピン留め URL を埋め込みます。
両方とも Content-Security-Policy: script-src 'none' と 5 分キャッシングを伴う shields.io スタイル SVG を返します。検証済みのときティール、そうでないときグレーでレンダリングされます。未知のエージェント、未知のロール、取り消されたバッジはすべてグレーの「Not Verified」バリアントを返します — URL は決して 404 せず、埋め込みを安全にします。エージェントが決して獲得しなかったバージョンのバージョンピン留め URL も「Not Verified」を返します(レガシー URL は現在の最良のマークを表示するのと対照的)。
埋め込みスニペット
レジストリフィルター
エージェントレジストリはどちらの軸のフィルターも独立に表示します:- 「AdCP を正しく実装するエージェントを見せて」 →
verification_modes contains 'spec'でフィルター - 「サンドボックスフラグ付きトラフィックの下で通過する本番エンドポイントを見せて」 →
verification_modes contains 'sandbox'でフィルター - 「両方を持つエージェントを見せて」 → 両方でフィルター
brand.json 拡充
AgenticAdvertising.org が登録されたブランドの brand.json データをサーブするとき、エージェントエントリーは完全なバージョンごとの詳細を伴うaao_verification ブロックを得ます:
badges[] は正準形状です — (role, adcp_version) ごとに 1 エントリー、バージョン降順。特定の AdCP バージョンにピン留めされたバイヤーは、modes_by_role(ロールごとに最高バージョンエントリーに平坦化され、3.1 バッジのみが Sandbox を持つとき 3.0 バイヤーにエージェントが Sandbox を持つと誤解させうる)を読むのではなく、adcp_version でフィルターしなければなりません(MUST)。
roles[] と modes_by_role は 1 リリースの間 非推奨エイリアス として保たれます。削除ターゲット: AdCP 4.0。
各修飾子を主張する方法
(Spec) を主張するには
- API アクセス階層でアクティブな AAO メンバーシップを保持する。
get_adcp_capabilitiesでsupported_protocolsとspecialismsを宣言する。- 宣言が義務付けるストーリーボード(universal + protocol ベースライン + specialism ベースライン)を特定の AdCP メジャーバージョンで通過する。
- AAO コンプライアンスハートビートが AAO Verified (Spec) を自動的に発行し、各ハートビートサイクルで再検証する。
(Sandbox) を主張するには
(Sandbox) は (Spec) から独立 しています — 別のテストデプロイを持たないセラーは、本番エンドポイントをサンドボックスフラグ付きで AgenticAdvertising.org のランナーに公開することで (Sandbox) を直接獲得できます。- API アクセス階層でアクティブな AAO メンバーシップを保持する。
get_adcp_capabilitiesでsupported_protocolsとspecialismsを宣言する((Spec) と同じ)。- 本番
agent_urlを AgenticAdvertising.org に登録する。コンプライアンスハートビートが、すべてのストーリーボードリクエストにaccount.sandbox: trueを付けてそれをターゲットする。 - 本番スタックにサンドボックスアカウントゲートを実装する: (フィールドを信頼するのではなく)永続化されたレコード内でターゲットされたアカウントがサンドボックスであることを検証し、完全なスキーマ/ライフサイクルの正しさでリクエストを処理しつつ 実世界の副作用ゼロ を生成する — 実支出なし、実広告サーバーオーダーなし、第三者プラットフォーム呼び出しなし、境界されたサンドボックスアカウント状態を超えた本番永続化なし。
- Sandbox 検証プロファイルを通過する: バイヤー可視サンドボックスパスストーリーボードが通過しなければならず、未選択実行モード除外は許可され、オプションケイパビリティスキップはスコープ選択として可視のまま。本番エンドポイントは
comply_test_controllerを公開することを期待されない。選択されたコントローラー依存決定的フェーズは、要求通りコントローラーが本番から欠けているとき Sandbox バッジのブロッカーではない。 comply_test_controllerをサンドボックスプリンシパルに公開する共有本番表面を運用する場合、その表面についてcomply-controller-mode-gateチェックを通過する。正準の 2 デプロイセラーは、本番でコントローラーを一切アドバタイズしないことで同じ分離要件を満たす。- AgenticAdvertising.org コンプライアンスハートビートは、Sandbox プロファイルがサンドボックスフラグ付きトラフィックで登録された URL に対して通過するとき AAO Verified (Sandbox) を発行する。
AAO Verified でないもの
- 規制または財務の証明ではない。 SOC 2、ISO 27001、ISAE 3402 と類似のフレームワークは運用と財務統制の姿勢に対処します — 独自の監査パスを持つ別個の質問。AAO Verified は AdCP のワイヤーと配信の正しさです。
- ハードなグラウンドトゥルース照合ではない。 (Sandbox) は本番コードパスがプロトコル表面全体でサンドボックスフラグ付きトラフィックを正しく処理することを証明します。ライブトラフィックの下でセラーの内部広告サーバーダッシュボードに対して実マネー AdCP レポート数値を照合しません。ハード照合は (Sandbox) 階層の外で追跡される別種の証明です。
- AAO メンバーシップを超えた認定ではない。 AgenticAdvertising.org 認定プログラム は AAO Verified と合成します — 検証は認定への必要な入力ですが、検証自体は認定ではありません。
- SLA ではない。 AAO Verified はアップタイム、レイテンシー、商業的成果を保証しません。セラーの AdCP 表面が実配信を継続的に反映することを証明します。商業的信頼性はバイヤーとセラーの間です。
- デューデリジェンスの代替ではない。 バイヤーは依然としてセラーの契約条件、課金姿勢、ガバナンス慣行、インシデントレスポンス姿勢を独立に精査すべきです(SHOULD)。AAO Verified は 1 つの入力であり、全体像ではありません。
サポートする仕様との関係
AAO Verified (Sandbox) は小さな規範的 AdCP 仕様要素のセットに乗っています:account.sandboxスキーマゲート (#3755 / #4382) — アカウント参照にサンドボックス意図をピン留めし、セラーに永続化されたアカウントモードに対して検証するプロトコルレベルフラグを与える。セラー側ゲートが荷重を担う制御。リクエストフラグはそれ自体では信頼されない。comply-controller-mode-gateストーリーボード (#4028 / #4384) — コントローラーをサンドボックスプリンシパルに公開する共有表面を選ぶとき、セラーがライブモードアカウントに対するコントローラーディスパッチを正しく拒否することを検証する。正準本番デプロイはコントローラーを一切公開しないことでこれを満たす。- UNKNOWN_SCENARIO グレーディング (#4226 / #4228) — セラーは開発/ステージングでコントローラーシナリオを選択的に実装してもよい(MAY)。ランナーは欠けている操作を失敗ではなくカバレッジギャップとしてグレードする。コントローラーは (Sandbox) フレーミングに従い開発専用。
attestation_verifier スコープ、get_media_buys 所有権、実データでの動作フィルターアサーション)は延期されました。AAO が正準キャンペーンモデルに戻るなら関連したままですが、(Sandbox) の下では荷重を担いません。
他の表面との関係
- 適合性仕様 — ストーリーボードを介して conformant が何を意味するかを定義。(Spec) 軸はあなたのエージェントがその仕様に一致することを検証。
- コンプライアンスカタログ — エージェントが主張できるプロトコルと専門分野をインデックス。各宣言された専門分野が、適格な軸で検証エンジンがテストするもの。
get_adcp_capabilities— エージェントがsupported_protocolsとspecialismsを宣言する場所。宣言が検証への入力。- AAO メンバーシップ — バッジ発行に必要。メンバーシップの失効はバッジを取り消す。