> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# AAO Verified

> AdCP エージェントの公開信頼マーク。2 つの修飾子 — ワイヤー形式適合性の Verified (Spec)、本番表面のサンドボックス許容の Verified (Sandbox)。どちらか、または両方を獲得する。

**ステータス**: Request for Comments
**最終更新**: May 11, 2026

**AAO Verified** は AdCP エージェントの公開信頼マークです。括弧内に 2 つの修飾子のいずれか — **(Spec)** または **(Sandbox)** — を持ち、両方を持つこともあります。修飾子は、エージェントが *どの軸* の検証を獲得したかを名指します。

これは 2 つの階層ではなく 2 つの軸です。修飾子は異なる質問に答えます:

* **Verified (Spec)** — あなたの AdCP プロトコル実装が仕様に一致する。ストーリーボードがどこかで通過する — テストデプロイかもしれず、ローカル開発かもしれない。ワイヤー形式、タスク形状、エラーセマンティクス、ステートマシン遷移がすべてチェックアウトする。本番許容ではなく *ワイヤー形式適合性* を証明する。
* **Verified (Sandbox)** — あなたの **実本番エンドポイント** が `account.sandbox: true` を正しく尊重する。AAO は登録された `agent_url` に対してサンドボックスフラグ付きトラフィックで完全なストーリーボードスイートを実行する。あなたの本番スタックは、スキーマ有効なレスポンス、正しいライフサイクル遷移、適切なエラーエンベロープ、**実世界の副作用なし**（実支出なし、実永続化なし、実プラットフォーム呼び出しなし）でそれを処理する。*本番コードパスがテストトラフィックを正しく許容する* ことを証明する。

エージェントはどちらかの軸、または両方を獲得できます。スタブ広告サーバーの周りの純粋なプロトコルラッパーは正直に **Verified (Spec)** です — それがテストエージェントと開発環境そのものです。本番 URL が完全なストーリーボードスイート全体でサンドボックストラフィックを処理する実本番セラーは、利用可能な最強のクレーム **Verified (Spec + Sandbox)** を獲得します。

2 つの軸は **直交** しています — どちらも他方の前提条件ではありません。別のテストデプロイを持たないセラー（テストモード表面を持たない本番専用プラットフォーム）は、本番 URL をサンドボックスフラグ付きで AAO のランナーに公開することで **(Sandbox)** を直接獲得できます — 別のテストエンドポイントは不要です。逆に、実インプレッションを決してサーブできないテストエージェントは、完全なクレームとして **(Spec)** を獲得します。

バッジは獲得された修飾子を表示します。

<Tip>
  **セラー向け TL;DR。** 両方の修飾子は同じ AAO コンプライアンスハートビートを通じて同じストーリーボードを実行します。違いは、ランナーが *どこを* ターゲットするかと、セラーのスタックがサンドボックスフラグ付きトラフィックで *何をする* かです:

  * **(Spec)** はテストデプロイ / ローカル開発 / サンドボックスエンドポイントに対してストーリーボードを実行します。エージェントの本番表面は行使されません。
  * **(Sandbox)** はセラーの登録された本番 `agent_url` に対して、すべてのリクエストに `account.sandbox: true` を付けてストーリーボードを実行します。セラーの本番スタックはフラグを尊重しなければなりません（MUST） — スキーマ有効なレスポンスを返し、状態を正しく遷移させ、エラーを適切に表面化し、**実世界の副作用がゼロ**（課金なし、サンドボックスアカウントを超えた永続化なし、第三者プラットフォーム呼び出しなし）でなければなりません。

  セラー側のサンドボックスゲートは規範的です: すべてのサンドボックスフラグ付き本番リクエストは、`sandbox: true` クレームをまとったライブアカウントではなく、永続化されたサンドボックスアカウントに解決しなければなりません。開発側の決定的テストアフォーダンスについては [comply\_test\_controller](/docs/building/by-layer/L3/comply-test-controller) を参照してください。Sandbox グレーディング自体はコントローラーを要求も使用もしません。
</Tip>

## 各軸が認証するもの

### Verified (Spec)

|            |                                                                                                                             |
| ---------- | --------------------------------------------------------------------------------------------------------------------------- |
| **テスト対象**  | エージェント所有者が登録する任意のエンドポイント — テストデプロイ、ローカル開発、サンドボックス専用スタック。ランナーは区別しない。                                                         |
| **証明するもの** | AdCP ワイヤー形式、タスク形状、エラーセマンティクス、ステートマシン遷移、宣言された専門分野が動作するツールにマップされること、スキーマ適合性、フィルター動作、冪等性セマンティクス — 実世界の本番状態から分離して行使される。         |
| **方法**     | [コンプライアンスカタログ](/docs/building/verification/compliance-catalog) からのストーリーボードが、AAO のコンプライアンスハートビート上で登録されたエージェント URL に対して実行される。 |
| **頻度**     | 約 1 時間のハートビート                                                                                                               |
| **適格性**    | 宣言された専門分野のストーリーボードを通過し、API アクセス階層のアクティブな AAO メンバーシップを保持する任意のエージェント                                                          |
| **ステータス**  | **現在利用可能**                                                                                                                  |

### Verified (Sandbox)

|            |                                                                                                                                                                                                        |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **テスト対象**  | あなたの登録された本番 `agent_url`、すべてのリクエストに `account.sandbox: true` を付けて。                                                                                                                                       |
| **証明するもの** | あなたの本番コードパスがサンドボックスフラグを正しく尊重すること — (Spec) と同じストーリーボードだが、バイヤーが実際にヒットする実本番スタックに対して行使される。スキーマ有効なレスポンス、正しいライフサイクル遷移、適切なエラーエンベロープ、**実世界の副作用ゼロ**。                                                            |
| **方法**     | (Spec) と同じストーリーボードスイートを、サンドボックスフラグ付きトラフィックでセラーの登録された URL に対して駆動。別の正準キャンペーンインフラなし。                                                                                                                      |
| **頻度**     | (Spec) と同じ約 1 時間のハートビート                                                                                                                                                                                |
| **適格性**    | (Spec) と同じ、加えてセラーの本番表面が `account.sandbox: true` リクエストを受け入れ、実状態を永続化せず、第三者プラットフォームを呼ばず、課金せずに処理すること                                                                                                       |
| **ステータス**  | **基盤出荷中** — [#4382](https://github.com/adcontextprotocol/adcp/pull/4382)（account.sandbox スキーマゲート）、[#4384](https://github.com/adcontextprotocol/adcp/pull/4384)（ライブモード拒否ストーリーボード）。完全なグレーディングフレームワークが続く。 |

(Sandbox) 修飾子は、以前のドラフトの `Verified (Live)` フレーミングを置き換えます。変更点: 「あなたの実マネー本番コードパスがインプレッションを正しく配信する」（スタックを通る正準キャンペーン）を証明する代わりに、(Sandbox) は「あなたの実本番コードパスが完全なストーリーボードスイート全体でサンドボックスフラグ付きトラフィックを正しく処理する」を証明します。両方とも実本番表面のクレームです。違いは何がテストされるかです。(Sandbox) は新しい AAO 運用インフラなしに専門分野全体で普遍的に達成可能です。再フレーミングの判定については [#4379](https://github.com/adcontextprotocol/adcp/issues/4379) を参照してください。

<Note>
  **`comply_test_controller` について**: コントローラーは採用者自身の統合テストのための **開発/ステージング専用** アフォーダンスです。AAO の (Sandbox) グレーディングはそれを要求も使用もしません。セラーは決定的ローカルテストをサポートするため開発環境でコントローラーエンドポイントを実装してもよい（MAY）が、本番スタックは (Sandbox) を獲得するために `comply_test_controller` を公開する必要はありません。セラー側のサンドボックスゲートが (Sandbox) が証明するものです — 実本番上での、フラグ付きトラフィックの下でのスキーマとライフサイクルの正しさ。開発時のテスト表面自体がどう立ち上げられるか — 状態ローカルセラー用の DB バックの `seed_*` 対 アップストリームプロキシセラー用の SDK の `TestControllerBridge` — は [Test surfaces and the storyboard loop](/docs/building/verification/conformance#test-surfaces-and-the-storyboard-loop) でカバーされます。
</Note>

## 命名の歴史

以前のドラフト（#3001）は「AdCP Conformant」と「AAO Verified」を 2 つの別個のマーク名 — 軸ごとに 1 つ — として提案しました。このページは代わりに **括弧内の軸修飾子を伴う単一のブランドマーク** を使います。同じ形状、異なる命名規約:

| 以前のドラフト                        | 現在                         |
| ------------------------------ | -------------------------- |
| AdCP Conformant                | AAO Verified (Spec)        |
| AAO Verified                   | AAO Verified (Live)        |
| AdCP Conformant + AAO Verified | AAO Verified (Spec + Live) |

リネームの背後にある理由: 合成可能な修飾子を伴う単一のブランドワード（「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](https://github.com/adcontextprotocol/adcp/issues/4379) を参照してください。

## バッジを読む

バッジは括弧内に修飾子を伴う単一の shields.io スタイル画像としてレンダリングされます:

| 表示                                          | 意味                                                                                                                                            |
| ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| `AAO Verified Sales Agent (Spec)`           | 宣言されたメディアバイ専門分野のストーリーボードが、テストデプロイ / 開発 / サンドボックス専用エンドポイントに対して通過。ワイヤー形式とプロトコルセマンティクスは正しい。本番スタックのサンドボックス許容はまだ証明されていない。テストエージェントと本番前ロールアウトによくある。 |
| `AAO Verified Sales Agent (Spec + Sandbox)` | 両方の軸を獲得。最強のクレーム。エージェントの登録された本番 URL が、実世界の副作用なしにサンドボックスフラグ付きトラフィックの下で完全なストーリーボードスイートを処理する。                                                     |
| `AAO Verified Sales Agent (Sandbox)`        | `account.sandbox: true` の下でセラーの登録された本番エンドポイントに対してストーリーボードが通過。セラーの本番スタックがサンドボックスゲートを正しく尊重する。別のテストデプロイを持たない本番専用セラーによくある。                        |
| `AAO Verified — Not Verified`               | このエージェント + ロールに対してバッジが発行されていない、またはバッジが取り消された。                                                                                                 |

バッジ URL はエージェント + ロールごとに安定です。エージェントが軸を獲得または喪失するにつれ、SVG コンテンツは URL を変えずに更新されます — 埋め込まれたバッジは自動的に現在の状態を反映します。

## 専門分野を宣言する

```json theme={null}
// エージェントは get_adcp_capabilities でそのクレームを宣言する
{
  "supported_protocols": ["media_buy", "creative"],
  "specialisms": [
    "sales-broadcast-tv",
    "sales-guaranteed",
    "creative-ad-server"
  ]
}
```

`specialisms` はバッジルーティングフィールドです。それを省略すると、エージェントは依然として `supported_protocols` が含意する universal とプロトコルベースラインストーリーボードを実行しますが、検証エンジンが評価する狭いクレームを持たないため専門分野バッジは発行できません。

## エージェントが各軸を獲得する方法

軸はストーリーボード証拠に対する検証プロファイルであり、別々のランナー実装ではありません。ランナーは何が通過、失敗、スキップしたかとその理由を記録します。Spec と Sandbox プロファイルは、その証拠が公開修飾子に十分かどうかを決定します。

バイヤー固有の要件は別です。バイヤーは公開修飾子、宣言されたプロトコルまたは専門分野、1 つ以上のオプションケイパビリティ、スキップに対するより厳格な立場を要求できます。例えば、プロポーザルワークフローを必要とするバイヤーは、`media_buy.supports_proposals: false` がプロポーザルストーリーボードをスキップさせた、それ以外はクリーンな実行を拒否できます。決定的統合テストを行うバイヤーは、本番 Sandbox 修飾子がそのコントローラーの公開を要求しなくても、`comply_test_controller` を伴う開発/ステージングエンドポイントを要求できます。

### Verified (Spec) を獲得するには:

1. 宣言された専門分野のために AdCP を実装する。
2. テストモードエンドポイントでストーリーボードを通過する。（何が失敗しているかを見るため、まず `@adcp/sdk/testing` 経由でローカルに実行する。）
3. API アクセス階層でアクティブな AAO メンバーシップを保持する。

コンプライアンスハートビートが自動的にそれを拾います — [エージェントを登録する](/docs/building/index) を超えた手動登録は不要です。

### Verified (Sandbox) を獲得するには:

セラーは以下によって (Sandbox) を獲得します:

1. **本番 `agent_url`** を AAO に登録する。これは (Spec) を獲得するのと同じ登録です — 別の「コンプライアンスアカウント」や「テストデプロイ」は不要。
2. 本番スタックに **サンドボックスアカウントゲート** を実装する: `account.sandbox: true` を伴うリクエストが到着したとき、セラーは（フィールドを信頼せずに）ターゲットされたアカウントが永続化されたレコード内のサンドボックスアカウントであることを検証し、完全なスキーマ/ライフサイクルの正しさでリクエストを処理しつつ **実世界の副作用ゼロ** を生成する — 実支出なし、実広告サーバーオーダーなし、第三者プラットフォーム呼び出しなし、サンドボックスアカウントの境界された状態を超えた本番永続化なし。
3. API アクセス階層でアクティブな AAO メンバーシップを保持する。

それだけです。コンプライアンスハートビートは (Spec) と同じストーリーボードを実行しますが、すべてのリクエストに `account.sandbox: true` を付けて登録された本番 URL をターゲットします。通過 → (Sandbox) 修飾子が発行されます。

**キー要件: サンドボックスアカウント分離。** セラーはアカウントレベルで明確なサンドボックス/ライブ区別を永続化しなければなりません（MUST）。ライブアカウントに対して `sandbox: true` を主張するリクエストは構造化エラーで拒否されなければなりません（MUST） — 正準拒否チェックについては [#4028](https://github.com/adcontextprotocol/adcp/issues/4028) と `comply-controller-mode-gate` ストーリーボードを参照してください。クロスモードリークが (Sandbox) が対して証明する失敗モードです。

## 分散型検証

各バッジは署名付き JWT（EdDSA / Ed25519）に裏付けられています。AAO は `/.well-known/jwks.json` で公開鍵セットを公開するため、任意の第三者が AAO の API を呼ぶことなくバッジの真正性を検証できます。

トークンクレーム:

```json theme={null}
{
  "iss": "https://aao.org",
  "sub": "https://your-agent.example.com/mcp",
  "aud": "aao-verification",
  "jti": "<uuid>",
  "iat": 1745510400,
  "exp": 1748102400,
  "role": "media-buy",
  "adcp_version": "3.0",
  "verified_specialisms": ["sales-broadcast-tv", "sales-guaranteed"],
  "verification_modes": ["spec"],
  "protocol_version": "3.0.0"
}
```

`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)** — 最強のクレーム。両方の軸が独立に検証された。
* **どちらもなし**

2 つの軸は独立に評価されます。テストエンドポイントでのストーリーボード退行は (Sandbox) に影響せずに (Spec) を取り消します。本番エンドポイントでのサンドボックスパス退行は (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)` — アップグレード後に獲得

各バージョンは独立に評価されます。3.0 ストーリーボード退行は 3.1 に触れずに 3.0 バッジを取り消し、逆もまた然り。メンバーシップの失効は、エージェントのバッジのすべてのバージョンをアトミックに取り消します（信頼マークはバージョンレベルではなくエージェントレベル）。

バッジラベルは AdCP バージョンをロールと修飾子の間にインラインで埋め込みます: `Media Buy Agent 3.1 (Spec + Sandbox)`。

## 表示

### SVG バッジ

2 つの URL 形状:

```
# レガシー: 最高のアクティブバージョンに自動アップグレード
https://agenticadvertising.org/api/registry/agents/{url-encoded-agent-url}/badge/{role}.svg

# バージョンピン留め: 特定の AdCP リリースで凍結
https://agenticadvertising.org/api/registry/agents/{url-encoded-agent-url}/badge/{role}/{adcp-version}.svg
```

自動アップグレード動作（エージェントが 3.1 を獲得したとき、埋め込み画像が `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 は現在の最良のマークを表示するのと対照的）。

### 埋め込みスニペット

```bash theme={null}
# レガシー（自動アップグレード）
curl https://agenticadvertising.org/api/registry/agents/{url-encoded-agent-url}/badge/media-buy/embed

# バージョンピン留め
curl https://agenticadvertising.org/api/registry/agents/{url-encoded-agent-url}/badge/media-buy/3.0/embed
```

SVG をエージェントの AgenticAdvertising.org レジストリリスティングへのリンクでラップする HTML と Markdown スニペットを返します。README、ドキュメント、ランディングページ、ソーシャルプロフィールに安全。エージェントの検証軸または AdCP バージョンが変わるにつれ、レガシー埋め込みは自動的に現在の状態を反映します — (Sandbox) が点灯したときやエージェントが新しい AdCP バージョンを出荷したとき、埋め込みの交換は不要です。

### レジストリフィルター

エージェントレジストリはどちらの軸のフィルターも独立に表示します:

* **「AdCP を正しく実装するエージェントを見せて」** → `verification_modes contains 'spec'` でフィルター
* **「サンドボックスフラグ付きトラフィックの下で通過する本番エンドポイントを見せて」** → `verification_modes contains 'sandbox'` でフィルター
* **「両方を持つエージェントを見せて」** → 両方でフィルター

両方のクエリが有効です。オプションを比較するバイヤーは (Sandbox) を使います。新しいエージェントを統合するオーケストレーター開発者は (Spec) を使います。

### brand.json 拡充

AgenticAdvertising.org が登録されたブランドの brand.json データをサーブするとき、エージェントエントリーは完全なバージョンごとの詳細を伴う `aao_verification` ブロックを得ます:

```json theme={null}
"aao_verification": {
  "verified": true,
  "verified_at": "2026-04-29T12:34:56.000Z",
  "badges": [
    { "role": "media-buy", "adcp_version": "3.1", "verification_modes": ["spec", "sandbox"], "verified_at": "..." },
    { "role": "media-buy", "adcp_version": "3.0", "verification_modes": ["spec"], "verified_at": "..." }
  ],
  "roles": ["media-buy"],
  "modes_by_role": { "media-buy": ["spec", "sandbox"] },
  "deprecation_notice": "roles[] and modes_by_role reflect the highest-version badge per role only. A buyer pinned to a specific AdCP version SHOULD read badges[] and filter by adcp_version. Both fields will be removed in AdCP 4.0."
}
```

`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)** を主張するには

1. API アクセス階層でアクティブな AAO メンバーシップを保持する。
2. `get_adcp_capabilities` で `supported_protocols` と `specialisms` を宣言する。
3. 宣言が義務付けるストーリーボード（universal + protocol ベースライン + specialism ベースライン）を特定の AdCP メジャーバージョンで通過する。
4. AAO コンプライアンスハートビートが **AAO Verified (Spec)** を自動的に発行し、各ハートビートサイクルで再検証する。

### **(Sandbox)** を主張するには

(Sandbox) は **(Spec) から独立** しています — 別のテストデプロイを持たないセラーは、本番エンドポイントをサンドボックスフラグ付きで AgenticAdvertising.org のランナーに公開することで (Sandbox) を直接獲得できます。

1. API アクセス階層でアクティブな AAO メンバーシップを保持する。
2. `get_adcp_capabilities` で `supported_protocols` と `specialisms` を宣言する（(Spec) と同じ）。
3. **本番 `agent_url`** を AgenticAdvertising.org に登録する。コンプライアンスハートビートが、すべてのストーリーボードリクエストに `account.sandbox: true` を付けてそれをターゲットする。
4. 本番スタックにサンドボックスアカウントゲートを実装する: （フィールドを信頼するのではなく）永続化されたレコード内でターゲットされたアカウントがサンドボックスであることを検証し、完全なスキーマ/ライフサイクルの正しさでリクエストを処理しつつ **実世界の副作用ゼロ** を生成する — 実支出なし、実広告サーバーオーダーなし、第三者プラットフォーム呼び出しなし、境界されたサンドボックスアカウント状態を超えた本番永続化なし。
5. Sandbox 検証プロファイルを通過する: バイヤー可視サンドボックスパスストーリーボードが通過しなければならず、未選択実行モード除外は許可され、オプションケイパビリティスキップはスコープ選択として可視のまま。本番エンドポイントは `comply_test_controller` を公開することを期待されない。選択されたコントローラー依存決定的フェーズは、要求通りコントローラーが本番から欠けているとき Sandbox バッジのブロッカーではない。
6. `comply_test_controller` をサンドボックスプリンシパルに公開する共有本番表面を運用する場合、その表面について [`comply-controller-mode-gate`](https://adcontextprotocol.org/compliance/latest/universal/comply-controller-mode-gate) チェックを通過する。正準の 2 デプロイセラーは、本番でコントローラーを一切アドバタイズしないことで同じ分離要件を満たす。
7. AgenticAdvertising.org コンプライアンスハートビートは、Sandbox プロファイルがサンドボックスフラグ付きトラフィックで登録された URL に対して通過するとき **AAO Verified (Sandbox)** を発行する。

(Spec) と同じストーリーボード。同じハートビート頻度。異なる証明表面: 任意の登録エンドポイントではなく、サンドボックスフラグ付きの本番。

## AAO Verified でないもの

* **規制または財務の証明ではない。** SOC 2、ISO 27001、ISAE 3402 と類似のフレームワークは運用と財務統制の姿勢に対処します — 独自の監査パスを持つ別個の質問。AAO Verified は AdCP のワイヤーと配信の正しさです。
* **ハードなグラウンドトゥルース照合ではない。** (Sandbox) は本番コードパスがプロトコル表面全体でサンドボックスフラグ付きトラフィックを正しく処理することを証明します。ライブトラフィックの下でセラーの内部広告サーバーダッシュボードに対して実マネー AdCP レポート数値を照合しません。ハード照合は (Sandbox) 階層の外で追跡される別種の証明です。
* **AAO メンバーシップを超えた認定ではない。** [AgenticAdvertising.org 認定プログラム](/docs/learning/overview) は AAO Verified と合成します — 検証は認定への必要な入力ですが、検証自体は認定ではありません。
* **SLA ではない。** AAO Verified はアップタイム、レイテンシー、商業的成果を保証しません。セラーの AdCP 表面が実配信を継続的に反映することを証明します。商業的信頼性はバイヤーとセラーの間です。
* **デューデリジェンスの代替ではない。** バイヤーは依然としてセラーの契約条件、課金姿勢、ガバナンス慣行、インシデントレスポンス姿勢を独立に精査すべきです（SHOULD）。AAO Verified は 1 つの入力であり、全体像ではありません。

## サポートする仕様との関係

AAO Verified (Sandbox) は小さな規範的 AdCP 仕様要素のセットに乗っています:

* **[`account.sandbox` スキーマゲート (#3755 / #4382)](https://github.com/adcontextprotocol/adcp/issues/3755)** — アカウント参照にサンドボックス意図をピン留めし、セラーに永続化されたアカウントモードに対して検証するプロトコルレベルフラグを与える。セラー側ゲートが荷重を担う制御。リクエストフラグはそれ自体では信頼されない。
* **[`comply-controller-mode-gate` ストーリーボード (#4028 / #4384)](https://github.com/adcontextprotocol/adcp/issues/4028)** — コントローラーをサンドボックスプリンシパルに公開する共有表面を選ぶとき、セラーがライブモードアカウントに対するコントローラーディスパッチを正しく拒否することを検証する。正準本番デプロイはコントローラーを一切公開しないことでこれを満たす。
* **[UNKNOWN\_SCENARIO グレーディング (#4226 / #4228)](https://github.com/adcontextprotocol/adcp/issues/4226)** — セラーは開発/ステージングでコントローラーシナリオを選択的に実装してもよい（MAY）。ランナーは欠けている操作を失敗ではなくカバレッジギャップとしてグレードする。コントローラーは (Sandbox) フレーミングに従い開発専用。

以前の (Live) フレーミングのサポート issue（#2963、#2964、#2902 — `attestation_verifier` スコープ、`get_media_buys` 所有権、実データでの動作フィルターアサーション）は延期されました。AAO が正準キャンペーンモデルに戻るなら関連したままですが、(Sandbox) の下では荷重を担いません。

## 他の表面との関係

* [適合性仕様](/docs/building/verification/conformance) — ストーリーボードを介して *conformant* が何を意味するかを定義。(Spec) 軸はあなたのエージェントがその仕様に一致することを検証。
* [コンプライアンスカタログ](/docs/building/verification/compliance-catalog) — エージェントが主張できるプロトコルと専門分野をインデックス。各宣言された専門分野が、適格な軸で検証エンジンがテストするもの。
* [`get_adcp_capabilities`](/docs/protocol/get_adcp_capabilities) — エージェントが `supported_protocols` と `specialisms` を宣言する場所。宣言が検証への入力。
* AAO メンバーシップ — バッジ発行に必要。メンバーシップの失効はバッジを取り消す。
