Conversation
…spec docs + add 3 sections When PR #2153 landed the AAO Verified badge implementation, it shipped a fully reframed `aao-verified.mdx` using the **(Spec)** / **(Live)** qualifier model — one brand mark with two composable axes, replacing the earlier "AdCP Conformant + AAO Verified" two-marks framing from #3001. The reframing landed cleanly in `aao-verified.mdx` itself but did not propagate to all the docs that cross-reference the mark, leaving `conformance.mdx` internally inconsistent and several pages still using the old two-marks language. This PR closes that drift. **`docs/building/conformance.mdx`** — replaces the contradictory "Two marks: AdCP Conformant and AAO Verified" section (which directly contradicted the (Spec)/(Live) intro a few lines above) with a single "Storyboard conformance vs. AAO Verified" section that explains the relationship in qualifier terms: storyboards back **(Spec)**; **(Live)** is observed continuously and is opt-in; (Spec) is a prerequisite for (Live). **`docs/building/build-an-agent.mdx`** and **`docs/building/implementation/seller-integration.mdx`** — reframed the AAO Verified call-out in each from "the AdCP Conformant mark" + "AAO Verified" to "**(Spec)** qualifier" + "**(Live)** qualifier". Same content, current naming. **`docs/accounts/overview.mdx`** — qualified six call-sites where "AAO Verified mark" / "AAO Verified attestation" / "AAO Verified observability" / "AAO Verified readiness" specifically meant the (Live) axis (because they all pivot on the `attestation_verifier` scope, which is a (Live)-only construct). Generic references to AAO Verified as the umbrella mark stay unqualified. **`static/schemas/source/core/account-authorization.json`** — same qualification in the schema's top-level description and the `StandardScope.attestation_verifier` description. The (Live) qualifier is what `attestation_verifier` actually binds to; (Spec) doesn't grant any seller-side scope (it's run against a test-mode endpoint). **`docs/building/aao-verified.mdx`** — added three sections that #3001 had but didn't make it through #2153's reframing: 1. **"How to claim each qualifier"** — concrete step-by-step for both (Spec) and (Live), in one place. Previously the steps were scattered across the TL;DR Tip, the eligibility tables, and the enrollment prose. 2. **"What AAO Verified is not"** — explicit out-of-scope list (regulatory/financial attestation, hard ground-truth reconciliation in v1, certification beyond AAO membership, SLA, due diligence substitute). Prevents misreading the mark as more than it claims. 3. **"Relationship to supporting specs"** — cross-refs to the GitHub issues that back the (Live) machinery: #2963 (account-ownership scope), #2964 (authorization envelope + attestation_verifier scope + RBAC errors), #2902 (filter assertions), #3009 (multi-subscriber webhooks for 4.0). Different from the existing "Relationship to other surfaces" section, which is doc cross-refs only. **Changeset** — updated the existing `.changeset/aao-verified-mark.md` to describe the (Spec)/(Live) qualifier model so the 3.1.0-beta release notes reflect the actual shipped framing rather than the earlier two-marks draft. Validation: `test:schemas` ✅ (7/7), `test:json-schema` ✅, `test:examples` ✅, `test:composed` ✅. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Required by Check for changeset CI gate. Modifying the existing aao-verified-mark.md changeset doesn't count as a new entry in the changesets tooling — it needs a distinct file per PR. Doc-only, additive, no package release implied. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…-relaunch # Conflicts: # docs/building/conformance.mdx
… lifecycle-running tracked as #3561 Review feedback on PR #3537: `attestation_verifier` today is the reporting half of AAO Verified (Live) — the engine observes campaigns the seller has already trafficked, reads delivery, and attaches a verification webhook. It deliberately cannot create campaigns, attach creatives, or modify budgets, which is the right shape for brownfield Path B (today's enrollment-based observation). But it's not enough for the AAO-operated canonical-campaign runner (#3046), where the engine traffics canonical PSAs end-to-end through a seller's live agent. That role needs a broader write scope — full create_media_buy / sync_creatives / update_media_buy lifecycle. Filed [#3561](#3561) to track the complementary `attestation_runner` scope. Added a Note to the existing `attestation_verifier` section pointing at it so readers don't infer "this one scope covers all of (Live)." The runner-side scope lights up alongside the canonical-campaign runner itself; today's brownfield enrollment continues to need only `attestation_verifier`. No change to current shipping behavior. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When PR #2153 landed the AAO Verified badge implementation, it shipped a fully reframed
aao-verified.mdxusing the (Spec) / (Live) qualifier model — one brand mark with two composable axes, replacing the earlier "AdCP Conformant + AAO Verified" two-marks framing from #3001. The reframing landed cleanly inaao-verified.mdxitself but did not propagate to all the docs that cross-reference the mark, leavingconformance.mdxinternally inconsistent and several pages still using the old two-marks language.This PR closes that drift and adds three sections from #3001 that didn't survive the rename.
What's in this PR
1. Reconcile internally-contradictory
conformance.mdxThe page had a "Two words, not three" intro using (Spec) / (Live) qualifiers (lines 11–23) followed immediately by a "Two marks: AdCP Conformant and AAO Verified" section (lines 25–40) that contradicted it. Replaced the contradicting section with a single "Storyboard conformance vs. AAO Verified" pointer in qualifier terms.
2. Reframe stale call-outs to the new qualifier model
docs/building/build-an-agent.mdxdocs/building/implementation/seller-integration.mdx3. Qualify (Live)-specific references in accounts/overview.mdx and the schema
Six call-sites in
docs/accounts/overview.mdxplus two instatic/schemas/source/core/account-authorization.jsonreferenced "the AAO Verified mark" / "AAO Verified attestation" / "AAO Verified observability" / "AAO Verified readiness" specifically meaning the (Live) axis (because they all pivot on theattestation_verifierscope, which is a (Live)-only construct). Qualified those to (Live). Generic references to AAO Verified as the umbrella mark stay unqualified.4. Add three sections to aao-verified.mdx that #3001 had
5. Update changeset
Updated
.changeset/aao-verified-mark.md(already queued for 3.1.0-beta) to describe the (Spec)/(Live) qualifier model so the release notes reflect the actual shipped framing rather than the earlier two-marks draft.Why a focused doc PR rather than re-landing #3001
PR #3001 was merged into a stacked branch alongside #2994 (now landed as 63e58c3 on main), but its content was largely subsumed by PR #2153 a few hours later. The
aao-verified.mdxpage on main is richer than what #3001 had — 293 vs 232 lines, with full badge/JWT/SVG/registry-filter coverage. The actual gap was: PR #2153 reframedaao-verified.mdxend-to-end but missed the cross-references on adjacent pages and three sections from #3001 that were valuable but not blocking. This PR closes those.Closes the framing drift; supports #2965.
Test plan
npm run test:schemas— 7/7 passnpm run test:json-schema— all $schema-bearing JSON blocks validatenpm run test:examples— 34/34 passnpm run test:composed— 32/32 pass🤖 Generated with Claude Code