-
Notifications
You must be signed in to change notification settings - Fork 29
fix: Convert governance docs to relative links #820
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
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
Absolute links like /docs/governance/... break when docs are synced to v2.6-rc/ on main. Converting to relative links ensures they work in both contexts. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 tasks
bokelley
added a commit
that referenced
this pull request
Jan 25, 2026
* feat: add unified assets field for better asset discovery
- Add new 'assets' array to format schema with 'required' boolean per asset
- Deprecate 'assets_required' (still supported for backward compatibility)
- Enables full asset discovery for buyers and AI agents
- Update server to include both fields in format responses
- Update documentation across creative and media-buy docs
- Bump version to 2.6.0
* Add changeset for assets field feature
* fix: update CI to use .cjs extension for check-testable-snippets
* fix: update docs to reference assets field instead of assets_optional
* docs: keep assets_required as deprecated alongside new assets field
* schema: add formal deprecated: true to assets_required field
* schema: make 'required' field mandatory in assets array
* schema: make 'required' field mandatory in nested repeatable_group assets
* docs: add deprecated assets_required examples with deprecation comments
* ci: add 2.6.x branch to all workflows
* docs: update intro and schema-versioning for 2.6.0
* fix: detect untracked files in sync-versioned-docs workflow
git diff only detects tracked files. Use git add + git diff --cached
to properly detect new v2.6-rc/ folder on first sync.
* fix: create PR instead of pushing directly to main
Main branch is protected. Use peter-evans/create-pull-request action
to create a PR for the synced docs instead of direct push.
* chore: regenerate dist/schemas/2.6.0 with additionalProperties: true
Rebuilds 2.6.0 schemas to include the relaxed validation from #646.
All schema objects now allow unknown fields for forward compatibility.
* feat: Add typed extensions infrastructure with auto-discovery (#648)
* feat: Add typed extensions infrastructure with auto-discovery
Typed extensions provide formal JSON schemas for vendor-agnostic
extension data in `ext.{namespace}` fields. This enables SDK code
generation, schema validation, and cross-vendor interoperability.
**New features:**
- Extension meta schema defining valid_from/valid_until version bounds
- Auto-discovery of extensions during schema build
- Version-filtered extension registries per schema version
- New `extensions_supported` field in agent card adcp extension
- Comprehensive test suite for extension infrastructure
**How it works:**
1. Extensions are defined in `/schemas/source/extensions/{namespace}.json`
2. Build script auto-discovers extensions and filters by version compatibility
3. Each versioned build includes only compatible extensions in registry
4. Agents declare supported extensions via `extensions_supported` array
This is a MINOR release adding new optional capabilities without
breaking existing functionality.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Fix A2A extension format and add MCP server card support
Updates documentation to be compliant with both protocol specs:
**A2A Agent Cards:**
- Changed from `extensions.adcp` object to proper A2A `extensions[]` array format
- Each extension now has uri, description, required, and params fields
- Extension URI: https://adcontextprotocol.org/extensions/adcp
**MCP Server Cards:**
- Added support for declaring AdCP via `_meta['adcontextprotocol.org']`
- Supports both `/.well-known/mcp.json` and `/.well-known/server.json`
- Uses reverse DNS namespacing per MCP server.json spec
**Extension Params Schema:**
- Updated description to clarify usage in both protocols
- Same params structure works for both A2A and MCP
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Remove external $schema reference from MCP server card examples
The JSON schema validation test was failing because it tried to
validate against https://registry.modelcontextprotocol.io/server.schema.json
which is an external schema we don't have locally.
Removed the $schema field from MCP server card examples since they
reference an external MCP registry schema, not an AdCP schema.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add reserved namespaces and deprecation policy for extensions
Addresses PR review feedback:
**Reserved Namespaces (@BaiyuScope3)**
- Added RESERVED_NAMESPACES list: adcp, core, protocol, schema, meta, ext, context
- Build script now validates and rejects reserved namespaces
- Documented in extensions reference
**Deprecation Policy (@BaiyuScope3)**
- Added "Extension Deprecation Policy" section with:
- When extensions may be deprecated (superseded, promoted, low adoption, incompatible)
- Standard deprecation process (valid_until + 1 minor, CHANGELOG, migration guide)
- Emergency deprecation for security issues
**Tests**
- Added test verifying reserved namespaces are not used
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Add Property Governance Protocol for AdCP 3.0 (#588)
* Add Property Governance Protocol for AdCP 3.0
This introduces a stateful property list management model for governance agents:
## Key Concepts
- **Property Lists**: Managed resources combining base property sets with dynamic filters
- **Feature Discovery**: Agents advertise scoring capabilities via `list_property_features`
- **Brand Manifests**: Buyers describe their brand identity; agents apply appropriate rules
- **Discriminated Unions**: `base_properties` uses `selection_type` discriminator for type safety
## Design Principles
- **Scores are internal**: Governance agents filter properties; raw scores never leave the agent
- **Setup-time, not bid-time**: Lists resolved during campaign planning, cached for real-time
- **Identifiers-only responses**: `get_property_list` returns identifiers, not full property objects
- **Notification webhooks**: Webhooks provide summary; recipients call `get_property_list` to refresh
## Schemas Added
- Property list CRUD operations (create, update, get, list, delete)
- Property list filters with explicit logic (`countries_all`, `channels_any`, `feature_requirements`)
- Feature requirements for quantitative (`min_value`/`max_value`) and categorical (`allowed_values`)
- Base property source with discriminated union (publisher_tags, publisher_ids, identifiers)
- Webhook notification schema
- Core identifier schema for reuse
## Documentation
- Governance Protocol overview
- Property Governance specification
- Task reference for all CRUD operations
- Brand Standards placeholder
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add changeset for Property Governance Protocol
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Use empty changeset for draft 3.0 proposal
No version bump needed for draft/proposal specs.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Address review feedback on Property Governance Protocol
Schema fixes:
- Add methodology_url (required) and methodology_version to property-feature-definition
- Add signature field (required) to webhook schema for security
- Make countries_all and channels_any required in property-list-filters
- Move auth_token from get_property_list to create_property_list response
Documentation fixes:
- Add terminology note: Orchestrator = Buyer Agent
- Update examples to show auth_token in create response only
- Add note that auth_token is only returned at creation time
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add validate_property_delivery task for post-campaign compliance validation
Introduces the "what I wanted vs what I got" validation concept:
- validate_property_delivery task validates delivery records against property lists
- Three statuses: compliant, non_compliant, unknown
- Unknown records are valid (detection gaps shouldn't penalize compliance)
- Compliance rate excludes unknown impressions from calculation
- Batch support up to 10,000 records per request
New schemas:
- delivery-record.json: Input record with identifier + impressions
- validation-result.json: Per-record validation result with status and violations
- validate-property-delivery-request.json: Request payload
- validate-property-delivery-response.json: Response with summary and per-record results
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add supply path authorization to validate_property_delivery
Extends validate_property_delivery to validate sales agent authorization:
- Add optional sales_agent_url to delivery records
- Check if sales agent is listed in publisher's adagents.json
- Return authorization status (authorized/unauthorized/unknown) per record
- Add authorization_summary with aggregate stats and authorization_rate
- Two independent checks: property compliance + supply path authorization
New schema:
- authorization-result.json: Per-record authorization validation result
Authorization uses same "unknown excludes from rate" pattern as property
compliance - you cannot penalize for detection gaps or unreachable files.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify validation response: raw counts + optional feature details
Changes:
- Remove compliance_rate and authorization_rate from response schemas
- Return raw counts only (1.2M verified, 0.8M unknown, 0.3M invalid)
- Consumers calculate rates as needed, excluding unknowns from denominator
- Add optional feature_id and requirement to violation objects
- For feature_failed violations, shows which feature and what threshold failed
- Helps debugging why a property was marked non-compliant
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Split unknown into unmodeled/unidentified, add optional aggregate metrics
- Split "unknown" status into two distinct statuses:
- unmodeled: identifier recognized but agent has no data (e.g., property too new)
- unidentified: identifier type not resolvable (e.g., detection failed)
- Add optional aggregate field for computed metrics:
- score, grade, label fields for agent-specific measurements
- methodology_url for transparency
- Update summary to track both unmodeled and unidentified separately
- Update documentation with new statuses and aggregate concept
Inspired by Scope3's inventory_coverage (modeled/unmodeled) pattern. The
distinction helps identify whether gaps are in data coverage vs identifier
resolution.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix include_compliant description to reference new statuses
Updated the description to list non_compliant, unmodeled, and unidentified
(instead of the old "unknown" status).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Move authorized-properties doc to Governance Protocol section
- Moved authorized-properties.mdx from media-buy/capability-discovery to
governance/property (renamed to "Understanding Authorization")
- Added validate_property_delivery task to navigation
- Navigation now shows conceptual explainer before tech spec
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix broken links to authorized-properties after move
Updated links in media-buy docs to point to new location in
governance/property section.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add property_list filtering to get_products for 2.6.x
- Add optional property_list parameter to get_products request schema
- Add property_list_applied response field to indicate filtering status
- Update get_products docs with new parameter, response field, and usage example
- Mark changeset as minor for 2.6.x release
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add governance overview enhancements for working group alignment
- Change banner from Info to Warning for draft status
- Add mission statement for governance protocols
- Add Working Group Areas table mapping to protocol domains
- Add Prompt-Based Policies section for natural language policy support
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix broken links in v2.6-rc docs after authorized-properties move
Update links from /docs/media-buy/capability-discovery/adagents and
/docs/media-buy/capability-discovery/authorized-properties to their
new locations in /docs/governance/property/
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add get_property_features task and property_features discovery
- Add get_property_features task schemas for governance agents to return
property certification/measurement data (carbon scores, TAG certified, etc.)
- Support two request modes: explicit property list or publisher discovery
- Add publisher_domain, property_types, property_tags filtering for discovery
- Add property_features field to adagents.json for feature provider discovery
- Rename from governance_agents to property_features for flexibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add filter semantics for geographic and channel compliance
Clarifies what "compliant in a country" means for property list filters:
- Refers to user location (where impressions are delivered)
- NOT publisher headquarters, server hosting, or incorporation country
- Requires regulatory compliance, ad delivery capability, and valid consent
Also clarifies channel filter semantics (technical capability, availability,
quality standards) and adds cross-references between docs and schema.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Revert filter semantics changes
The Filter Semantics section overstated the meaning of countries_all -
it's about whether the agent has feature data for properties in that
country, not about legal compliance.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add if_not_covered handling and standardize on 'covered' terminology
- Add if_not_covered field to feature-requirement.json (exclude|include)
- Add coverage_gaps to get-property-list-response.json for transparency
- Change 'unmodeled' to 'not_covered' throughout for consistency:
- validation-result.json status enum
- validate-property-delivery-response.json summary fields
- specification.mdx and validate_property_delivery.mdx documentation
- Document coverage handling in property_lists.mdx
This allows callers to specify how missing feature data should be handled
(strict vs lenient enforcement) and provides visibility into which
properties were included despite coverage gaps.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Clarify countries_all semantics: feature data, not compliance
Remove "compliant" language from countries_all descriptions to avoid
confusion with legal/regulatory compliance. The field means "property
must have feature data for these countries" - same semantics as content
standards PR 621 ("standards apply in these countries").
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* build: rebuild dist/schemas/2.6.0 with impressions and paused fields
Includes:
- impressions field in package-request.json and update-media-buy-request.json
- paused field in package-request.json
- Other pending schema updates from 2.6.x source
* refactor: replace creative_ids with creative_assignments (#794)
* docs: clarify inline creative handling (Option B)
- create_media_buy and update_media_buy creatives array creates NEW creatives only
- Add CREATIVE_ID_EXISTS error code when creative_id already exists in library
- Add CREATIVE_IN_ACTIVE_DELIVERY error code to sync_creatives
- Clarify that sync_creatives is the canonical way to update/delete creatives
- Document upsert semantics with active delivery protection
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: replace creative_ids with creative_assignments
- Remove creative_ids from package-request.json and update-media-buy-request.json
- Use creative_assignments for assigning existing library creatives (supports optional weight/placement_ids)
- Update documentation and examples to use creative_assignments
- Clarify delete_missing in sync_creatives cannot delete creatives in active delivery
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Extract package update schema and add reporting_webhook support
Split package schema into three clear variants:
- package-request.json (create): Full package with product_id, format_ids, pricing_option_id
- package-update.json (update): Only updatable fields, omits immutable fields
- package.json (response): Reflects current package state
Adds reporting_webhook to update_media_buy, enabling modification of reporting configuration
after campaign creation. Keeps push_notification_config separate for async operation notifications.
This unifies schema definitions, eliminates duplication, and resolves the issue where
reporting setup could not be updated post-launch without recreating the media buy.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* refactor: Extract reporting_webhook to shared schema
- Create /schemas/core/reporting-webhook.json with webhook config for automated reporting delivery
- Update create-media-buy-request.json to use $ref
- Update update-media-buy-request.json to use $ref
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Address code review feedback
- Fix CREATIVE_ID_EXISTS resolution to use creative_assignments (not creative_ids)
- Update Next Steps in update_media_buy to reference creative assignments
- Use $ref for available-metric enum in reporting-webhook.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add privacy_policy_url to brand manifest and adagents.json (#801)
Enables consumer consent flows by providing a link to advertiser/publisher
privacy policies. AI platforms can use this to present explicit privacy
choices to users before data handoff.
Works alongside MyTerms/IEEE P7012 discovery for machine-readable privacy
terms - the privacy_policy_url serves as the human-readable fallback.
Changes:
- Add privacy_policy_url field to brand-manifest.json schema
- Add privacy_policy_url field to adagents.json contact object
- Add Privacy Integration section to brand manifest documentation
- Update adagents.json documentation with new field
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add OpenAI Commerce integration to brand manifest (#802)
Add support for OpenAI's product feed format and agentic checkout specification, enabling AI agents to discover products and complete purchases through a structured API. Includes field mapping guidance from Google Merchant Center to OpenAI's specification.
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
* Add Content Standards Protocol (#621)
* Add Content Standards Protocol for content safety evaluation
Introduces the Content Standards Protocol with four tasks:
- list_content_features: Discover available content safety features
- get_content_standards: Retrieve content safety policies
- check_content: Evaluate content context against safety policies
- validate_content_delivery: Batch validate delivery records
Features use a generic type system (binary, quantitative, categorical)
aligned with property governance patterns. Policies use prompt-based
evaluation (like Scope3) rather than keyword lists. Standards can be
scoped by country, brand, channel, and product.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify content standards policy model
- Remove sentiment analysis (subset of suitability)
- Clarify brand safety vs suitability distinction:
- Safety = safe for ANY brand (universal thresholds)
- Suitability = safe for MY brand (brand-specific)
- Replace three separate prompts with single policy + examples:
- Single policy prompt for natural language guidelines
- Examples object with acceptable/unacceptable URLs as training set
- Update schema and documentation to match
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix broken links in content standards docs
Remove links to Property Governance and Creative Standards which don't
exist in this branch yet.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Align content standards with property protocol patterns
Address review comments:
1. Examples now use typed identifiers with language tags:
- Uses identifier schema pattern (type: domain, apple_podcast_id, rss_url, etc.)
- Added language field (BCP 47 tags like 'en', 'en-US')
- Created content-example.json schema
2. Scope fields aligned with property protocol:
- brands → brand_ids (references Brand Manifest identifiers)
- countries → countries_all (must apply in ALL listed countries)
- channels → channels_any (applies to ANY listed channel)
- Removed products field (unclear purpose)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Clarify buyer-managed scope selection model
The buyer selects the appropriate standards_id when creating a media buy.
The seller receives a reference to resolved standards - they don't need
to do scope matching themselves. Scope fields are metadata for the buyer's
internal organization, not for seller-side resolution.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Address review comments on content standards
1. Scope is targeting, not metadata:
- Clarified scope defines where standards apply
- Removed "metadata" language
2. Add CRUD tasks for standards management:
- Added list_content_standards, create_content_standards,
update_content_standards, delete_content_standards
- Organized tasks into Discovery, Management, Evaluation sections
- Created task documentation pages
3. Clarify evaluation results pattern:
- Always returns pass/fail verdict first
- Features array is optional breakdown for debugging
- Explains use cases: optimization, safety vs suitability,
debugging third-party standards (GARM, Scope3)
- Updated check-content-response and validate-content-delivery-response
schemas to use verdict + optional features pattern
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Refine content standards schema and examples
Address review comments:
1. Rename 'examples' to 'calibration':
- Better describes the purpose (training/test set for AI interpretation)
- Add support for text snippets, image/video/audio URLs
2. Create unified content-context.json schema:
- Used for both calibration examples and check_content requests
- Supports: domain, text, image_url, video_url, audio_url, rss_url,
apple_podcast_id, spotify_show_id, podcast_guid
- Optional metadata: language, title, description, categories, text_content
3. Flatten scope structure:
- Move brand_ids, countries_all, channels_any to top level
- Aligns with property protocol pattern
4. Remove fixed response time claims:
- check_content may be async with webhook callback
- Let implementations define their own SLAs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Integrate robust content-context schema from sit/adcp
Integrates comprehensive content-context schema improvements:
1. Signals array (replaces simple categories):
- Structured signals with key, value, confidence
- Supports version, source, and reasons
- Examples: iab_category, violence_score, mpaa_rating
2. Structured text_content (replaces simple string):
- Array of typed blocks: paragraph, heading, image, video, audio
- Images include alt_text, caption, dimensions, type
- Video/audio include duration, transcript, transcript_source
3. Rich metadata object:
- Open Graph, Twitter Card, JSON-LD
- Author, canonical URL, meta tags
4. Temporal fields:
- published_time, last_update_time (ISO 8601)
5. artifact_id for cross-reference tracking
6. additionalProperties: true for extensibility
Credit: https://github.com/sit/adcp/commit/ca367da
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Update changeset to list all 8 tasks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Rename check_content to calibrate_content for collaborative calibration
- Rename task to emphasize dialogue-based alignment vs runtime evaluation
- Add context_id and feedback parameters for multi-turn conversations
- Include verbose explanations with confidence scores and policy alignment
- Add workflow diagram showing Setup → Activation → Runtime phases
- Update schemas with calibrate-content-request/response
- Remove old check-content schemas
- Update related task links across all task docs
Key insight: calibrate_content is low-volume, verbose, dialogue-based;
runtime decisioning happens locally at seller for scale.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Use protocol-level context for calibration dialogue
Remove context_id and feedback from calibrate_content task - dialogue
is handled at the protocol layer via A2A contextId or MCP context_id.
Updated documentation to show how multi-turn calibration conversations
work using the existing protocol mechanisms for conversation management.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Rename content-context to content with assets array
Addresses feedback:
1. Rename "content-context" to "content" - too many "context" terms
2. Restructure to use assets array pattern like creative assets
Content is now represented as a collection of assets (text, images,
video, audio) plus metadata and signals. This aligns with the creative
asset model and avoids overloading "context" terminology.
Key changes:
- content.json replaces content-context.json
- assets array with typed blocks (text, image, video, audio)
- identifiers object for platform-specific IDs (apple_podcast_id, etc.)
- url is now the primary required field
- Updated all docs and schema references
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Rename content to artifact with property_id + artifact_id
Content adjacent to ads is now modeled as an "artifact" - identified by
property_id (using existing identifier types) plus artifact_id (string
defined by property owner). This avoids overloading "content" and enables
identification of artifacts that don't have URLs (Instagram, podcasts,
TV scenes).
Changes:
- Rename content.json to artifact.json with new required fields
- property_id uses existing identifier type schema (type + value)
- artifact_id is a string - property owner defines the scheme
- format_id optional - can reference format registry (like creative formats)
- url now optional since not all artifacts have URLs
- Update all schema references and documentation examples
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Remove signals field, add secured asset access
Address review feedback:
1. Remove signals from artifact schema and examples - the verification
agent evaluates content directly without pre-computed classifications.
This simplifies the model: send content, get responses.
2. Add secured URL access pattern for private assets - supports bearer
tokens, service accounts, and pre-signed URLs for content that isn't
publicly accessible (AI-generated images, private conversations,
paywalled content).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add artifacts page, restructure overview with strategic framework
Restructure Content Standards docs around the key strategic questions:
1. What content? → New artifacts.mdx page with full schema details
2. How much adjacency? → Define in products, negotiate in media buys
3. What sampling rate? → Negotiate coverage vs cost tradeoffs
4. How to calibrate? → Dialogue-based alignment process
Changes:
- Add standalone artifacts.mdx with asset types and secured access
- Replace ASCII workflow with mermaid sequence diagram
- Add adjacency and sampling_rate sections to overview
- Simplify policy examples (remove verbose calibration details)
- Move secured URL access documentation to artifacts page
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify artifact schema: assets required, title as asset, add variant_id
- Make assets array required (artifacts without content are meaningless)
- Remove title, language, description top-level fields (they're text assets)
- Add variant_id for A/B tests, translations, and temporal versions
- Add language field to text assets for mixed-language content
- Update all documentation examples to use new pattern
- Fix schema validation test to handle internal $defs references
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Address review comments on content standards overview
- Rename content_standards to content_standards_adjacency_definition
- Add Adjacency Units table defining: posts, scenes, segments, seconds, viewports, articles
- Clarify human-in-the-loop aspect of calibration process
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify calibrate_content response schema and examples
Address review comments:
- Remove suggestion field from features (not appropriate for calibration)
- Remove policy_alignment (redundant with features breakdown)
- Make confidence explicitly optional in docs
- Simplify A2A examples to use data-only parts (no text when calling skill)
- Update response field table to show required vs optional
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Clarify validate_content_delivery data flow: buyer as intermediary
Address review comment about who calls validate_content_delivery:
- Delivery records flow from seller → buyer → verification agent
- Buyer aggregates delivery data and knows which standards_id applies
- Verification agent works on behalf of the buyer
Changes:
- Add Data Flow section with mermaid diagram to validate_content_delivery.mdx
- Add media_buy_id field to request schema and delivery records
- Update overview mermaid diagram to show correct flow
- Remove suggestion field from response examples
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add get_media_buy_artifacts task for separate content retrieval
Content artifacts (text, images, video) are separate from delivery
metrics. This new task allows buyers to request content samples from
sellers for validation, keeping the data flow clean:
- Buyer calls get_media_buy_artifacts to get content samples
- Buyer validates samples with verification agent
- Delivery metrics stay in get_media_buy_delivery
Updates validate_content_delivery flow to reference new task.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Address review comments on validate_content_delivery schema
1. Remove redundant top-level media_buy_id - keep at record level since
records can come from multiple media buys
2. Add country and channel fields to delivery records for targeting
context validation
3. Replace creative_id with brand_context placeholder object - the
governance agent needs brand/SKU info, not opaque creative IDs.
Schema marked as TBD pending brand identifier standardization.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Address PR review comments on Content Standards Protocol
- #1/#16: Update artifact description to "content context where placements occur"
- #2: Add STANDARDS_IN_USE error code to delete_content_standards
- #4: Clarify effective_date semantics (null = not yet effective, multiple allowed)
- #5: Add note about calibration data size concerns
- #7: Document scope conflict handling in create_content_standards
- #8/#9: Rename examples to calibration for consistency
- #10: Increase validate_content_delivery response time to 60s
- #11: Clarify artifact_id is opaque/flexible
- #12/#13: Add notes about auth mechanism extraction for large artifacts
- #14/#15: Add effective_date filter and abbreviated response note to list
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add Content Standards implementation guide
Documents implementation patterns for three roles:
- Sales agents: accepting standards, calibration, validation
- Buyer agents: proxy pattern, orchestrating across publishers
- Web publishers: URL-based content with scraper/cache patterns
Also documents the content_access pattern for authenticated
URL namespace access.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix implementation guide flow for list_content_features
Clarifies that:
- Buyers call list_content_features to discover publisher capabilities
BEFORE creating standards
- Sellers don't need to call back - the standards document contains
all required features/rules
- Updated step numbering for buyer agent section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Remove list_content_features - simplify to accept-or-reject model
Content Standards Protocol should be binary: sellers either accept the
standards they can fulfill or reject what they cannot. Feature discovery
adds unnecessary complexity when we don't yet know how adjacency will
play out across different publishers.
- Remove list_content_features task and schemas
- Simplify implementation guide to focus on accept-or-reject model
- Update navigation and schema index
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix calibration and validation flows in implementation guide
- Calibration: Seller sends samples TO buyer's governance agent (not reverse)
- Validation: Governance agent implements validate_content_delivery (not seller)
- Seller's job: Implement get_media_buy_artifacts and support webhooks
- Added artifact webhook and reporting webhook requirements for sellers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add artifact webhook spec and clarify role terminology
Artifact Webhooks:
- Add artifact_webhook config to create-media-buy-request.json
- Add artifact-webhook-payload.json schema for push notifications
- Supports realtime and batched delivery modes with sampling
Role Terminology:
- Orchestrator (not "buyer agent") - DSP, trading desk, agency platform
- Sales Agent - publisher ad server, SSP
- Governance Agent - IAS, DoubleVerify, brand safety service
Implementation Guide:
- Clear roles table showing who does what
- Correct flow: brand → orchestrator → governance agent (setup) → sales agent
- Sales agent calibrates against governance agent, not orchestrator
- Sales agent pushes artifacts to orchestrator, orchestrator forwards to governance agent
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix terminology: artifacts can be push or pull
Changed "push artifacts" to "provide artifacts" since sales agents
can either push via artifact_webhook or respond to get_media_buy_artifacts
(pull).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Simplify content standards: async validation, rename fields, remove competitive separation
1. validate_content_delivery is now async
- Accept batch immediately, process in background
- Returns validation_id for status polling
2. Rename calibration → calibration_exemplars
- More descriptive name for training set
- Change acceptable/unacceptable → pass/fail for consistency
3. Remove competitive_separation
- Out of scope for content standards
- Competitive separation is about ad co-occurrence, not content adjacency
- Requires knowledge of other ads on page, which content standards doesn't have
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Extract content-standards.json and add lifecycle dates
1. Extract reusable content-standards.json schema
- Defines brand safety/suitability policies
- Can be referenced by get/list/create responses
- Includes scope, policy, calibration_exemplars, floor
2. Add termination_date for lifecycle management
- effective_date: when standard becomes active (null = draft)
- termination_date: when standard was archived (null = active)
- Lifecycle states: Draft → Active → Terminated
3. Document lifecycle states in get_content_standards docs
- Explains how to identify unused standards for cleanup
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add list_content_standards schemas using reusable content-standards.json
- list-content-standards-request.json: filters by brand, channel, country
- list-content-standards-response.json: returns array of content standards
- Response references content-standards.json via $ref, demonstrating reuse
- Supports include_terminated and include_drafts filters for lifecycle queries
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add effective_date filters and document Content Standards errors
- Add effective_before/effective_after filters to list-content-standards-request schema
- Add include_terminated/include_drafts to list_content_standards docs
- Add schema reference links to list_content_standards docs
- Document Content Standards error codes (STANDARDS_NOT_FOUND, STANDARDS_IN_USE, STANDARDS_SCOPE_CONFLICT)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Remove lifecycle complexity from Content Standards
Simplify by removing effective_date/termination_date lifecycle management:
- These are implementation details, not protocol concerns
- Governance agent returns current active standards via get_content_standards
- Cache-Control headers handle freshness, not effective_date filtering
Removed:
- effective_date, termination_date from content-standards.json schema
- effective_before, effective_after, include_terminated, include_drafts filters
- Lifecycle states documentation
The protocol should be simple: request standards, get current standards.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Refine Content Standards: URI-based floors and validation thresholds
- Change floor from enum to URI-based reference (GARM is defunct)
- floor now has url, name, and version fields
- Supports external floor definitions (e.g., Scope3 brand safety)
- Fix calibration_exemplars terminology (pass/fail, not acceptable/unacceptable)
- Add validation threshold concept to product catalog
- Sellers advertise their calibration accuracy (e.g., 95% aligned)
- Acts as contractual guarantee for brand safety compliance
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Strengthen Content Standards privacy-preserving value proposition
- Make clear this is the ONLY solution for ephemeral/sensitive content
- Add "using agents to protect privacy" framing
- Clarify where each phase runs (calibration, local execution, validation)
- Add table showing phase locations and what happens
- Add "Future: Secure Enclaves" section with TEE/containerized governance vision
- Reference IAB Tech Lab Authentic framework for real-time verification
The key insight: the execution engine runs entirely inside the publisher's
infrastructure - content never leaves. OpenAI conversations stay within their
firewall. This is the fundamental value proposition for AI-generated and
privacy-regulated content.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Fix IAB Tech Lab reference to ARTF (Agentic RTB Framework)
Update the future vision section to reference the correct IAB Tech Lab
specification - ARTF defines how service providers package containers
deployed into host infrastructure, which is exactly the model Content
Standards uses for privacy-preserving brand safety.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add pinhole interface specification for secure enclaves
The containerized governance agent needs a well-defined narrow interface:
Inbound (verification service → enclave):
- Updated models
- Policy changes and calibration exemplars
- Configuration updates
Outbound (enclave → verification service):
- Aggregated results (pass rates, drift metrics)
- Statistical summaries
- Attestation proofs
Never crosses the boundary:
- Raw content artifacts
- User data / PII
- Individual impressions
This pinhole is the interface that needs standardization for the
reference implementation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Replace ASCII art with mermaid diagram for secure enclaves
ASCII art doesn't render reliably across different fonts and screen sizes.
Mermaid diagrams are supported by Mintlify and render consistently.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add content standards create/update schemas and languages field (#806)
* feat: Add content standards create/update schemas and languages field
- Add create-content-standards-request/response.json schemas
- Add update-content-standards-request/response.json schemas for incremental updates
- Add languages field (BCP 47 tags) to content standards scope
- Reference channels enum instead of string array for type safety
- Remove version field from content standards response (keep spec clean)
- Add webhook-authentication.json and webhook-config.json schemas
- Update all content standards docs with languages examples
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Address PR feedback on content standards schemas
1. Rename languages to languages_any for consistency with countries_all/channels_any
- Clarifies OR logic: standards apply to content in ANY of listed languages
- Content in unlisted languages is not covered by these standards
2. Add URL type to calibration exemplars (alongside domain type)
- Enables page-level granularity for calibration
- Example: { "type": "url", "value": "https://espn.com/nba/story/12345" }
3. Clarify floor documentation for vendor standards
- Floors are industry-standard (GARM) or vendor-defined (IAS, DoubleVerify)
- Seller agent retrieves floor definition from URL
4. Add language to scope conflict detection docs
- Scope conflicts now consider country/channel/language combination
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Remove domain type from calibration exemplars
Domain-level references are too coarse for calibration - a domain can have
millions of pages with varying content. Calibration exemplars now support:
1. URL references - specific pages to fetch and evaluate
2. Full artifacts - pre-extracted content (text, images, video, audio)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Remove floor field and update calibration exemplars
- Remove floor field from content-standards schemas (content-standards.json,
create-content-standards-request.json, update-content-standards-request.json)
- Add documentation note that implementors MUST apply a brand safety floor,
but AdCP does not define the floor specification
- Update calibration exemplars to use URL type instead of domain type
(domain is too coarse for calibration - need specific page URLs)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Convert governance docs to relative links (#820)
Absolute links like /docs/governance/... break when docs are
synced to v2.6-rc/ on main. Converting to relative links ensures
they work in both contexts.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Mintlify callout syntax and case-insensitivity docs (#834)
- Convert `:::note` Docusaurus syntax to Mintlify `<Note>` components
- Add case-insensitivity documentation for country codes (ISO 3166-1 alpha-2)
and language codes (ISO 639-1/BCP 47)
- Document recommended formats (uppercase for countries, lowercase for languages)
- Remove orphaned webhook-config.json and webhook-authentication.json schemas
that were never referenced
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Remove redundant singular filter fields from creative-filters schema (#845)
BREAKING CHANGE: Removed `format`, `status`, and `assigned_to_package` fields.
Use array versions instead: `formats`, `statuses`, `assigned_to_packages`.
Arrays with one item work identically to the removed singular fields.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add 'archived' status to creative-status enum (#847)
* feat: Add 'archived' status to creative-status enum
- Add 'archived' to creative-status.json enum
- Document default exclusion behavior in creative-filters.json
- Update list_creatives docs with archived filtering examples
- Add 'processing' to status_summary schema for completeness
- Update data-models.mdx TypeScript types
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Remove erroneous status field from assignment response
Assignments are binary - they exist or they don't. The package/media buy
status determines delivery, not the assignment itself.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Replace approved boolean with status enum in creative-asset
Use the same status field for both input (sync_creatives) and output
(list_creatives) for consistency. The status enum values are:
- approved: finalize generative creative
- rejected: request regeneration
- processing, pending_review, archived: system-set states
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Rename package_name to buyer_ref in assignment response
Package schema has buyer_ref, not name. Updated assignment response
to match.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Add Media Channel Taxonomy (#811)
* feat: Add Media Channel Taxonomy specification
Introduces a standardized taxonomy distinguishing channels (where ads reach audiences), property types (addressable inventory), formats (how ads render), and buying models (how inventory is purchased).
- Defines 19 media channels: web, ctv, mobile_app, social, search, linear_tv, radio, streaming_audio, podcast, dooh, ooh, print, cinema, email, gaming, influencer, conversational, sponsorship, commerce_media
- Updates channels.json and property-type.json enums with new values and descriptions
- Adds comprehensive specification document with channel definitions and use cases
- Includes migration guidance mapping legacy channel values to new taxonomy
- Updates documentation examples to use new channel taxonomy
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* refactor: Rename conversational channel to ai_agents
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Clarify channel vs property type distinction and add edge cases
- Add "Understanding Channels vs Property Types" section explaining buying context
- Add desktop_app property type for Electron/Chromium wrapper applications
- Refine ai_agents description to clarify it describes buying context, not technology
- Add comprehensive edge cases section covering:
- In-app browsers (WebViews)
- Desktop apps as Chromium wrappers (Spotify, Discord)
- AI widgets on publisher websites
- Commerce vs web display ambiguity
- Search vs AI agents distinction
- Gaming vs mobile app classification
- Influencer vs social differentiation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Correct edge cases for WebViews and AI widgets
- WebViews: Ads on destination sites (cnn.com via Facebook browser) are
still web channel, not social - bought through standard web programmatic
- AI widgets: Add user intent/focus dimension, similar to OLV distinction
(peripheral vs primary focus)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: Update changeset to major (breaking change)
Replacing channel enum values is a breaking change for existing implementations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add affiliate channel to Media Channel Taxonomy
Adds affiliate as a distinct channel for performance-based publisher
partnerships including affiliate networks, comparison sites, lead gen,
coupon/deal sites, and cashback programs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Switch to planning-oriented channel taxonomy (19 channels)
Based on media planning expert feedback, channels now represent how
buyers allocate budget rather than technical substrates.
Key changes:
- Remove web, mobile_app, ai_agents (substrates, not planning buckets)
- Add display, olv (OLV = Online Video, distinct from CTV)
- Rename commerce_media → retail_media, sponsorship → product_placement
- Update examples in get_products, list_authorized_properties, and
quick reference docs to use new channel values
New 19-channel list: display, olv, social, search, ctv, linear_tv,
radio, streaming_audio, podcast, dooh, ooh, print, cinema, email,
gaming, retail_media, influencer, affiliate, product_placement
Future considerations documented: messaging, xr, ai_agents
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
* docs: Add campaign lifecycle sequence diagram to property governance (#854)
Add a mermaid sequence diagram and narrative explaining the end-to-end
workflow for property governance across three phases:
- Campaign Planning: orchestrator creates property lists, decisioning platform fetches and caches
- Bid Time: decisioning platform uses local cache only (no governance calls)
- Monitoring: webhooks notify of changes, decisioning platform re-fetches
Notes that AXE segments are an optional implementation mechanism for caching.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Document property_features for governance agent discovery (#855)
Add documentation explaining how publishers declare governance agents
in adagents.json via the property_features field, enabling buyers to
discover which agents (Scope3, TAG, OneTrust, etc.) have compliance,
sustainability, or quality data for properties.
- Add property_features field documentation to adagents.mdx
- Add governance agent discovery workflow with sequence diagram
- Document vendor extension pattern via ext blocks
- Update index.mdx to include discovery as 5th governance concern
- Add discovery section to list_property_features task doc
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add get_capabilities task for expanded capability discovery (#850)
* feat: Add get_capabilities task for expanded capability discovery
Introduces get_capabilities task replacing list_authorized_properties with
expanded capability declaration for protocol versions, execution features,
and portfolio information.
Protocol section:
- adcp_major_versions for compatibility
- features (inline_creative_management, property_list_filtering, content_standards)
Execution section:
- axe_integrations for ad exchange support
- creative_specs (VAST/MRAID versions)
- targeting with granular geo support
Geo targeting with named systems:
- Metros: nielsen_dma, uk_itl1, uk_itl2, eurostat_nuts2
- Postal: us_zip, gb_outward, ca_fsa, etc.
Product filters:
- Added regions, metros, postal_areas filters
- Added required_axe_integrations, required_features
Capability contract: If declared, seller MUST honor it.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Move get_capabilities to protocol level for cross-protocol support
Restructure get_capabilities as a protocol-level task that works across
all AdCP domain protocols, not just media-buy.
Response structure changes:
- `adcp.major_versions` - AdCP version compatibility
- `supported_protocols` - Which protocols this seller supports
- `media_buy` section for media-buy specific capabilities
- `signals` section reserved for future use
This enables buyers to discover capabilities for all protocols in a
single call, with protocol-specific details nested appropriately.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* deprecate: Agent card extension in favor of tool-based discovery
AdCP discovery now uses native MCP/A2A tool discovery:
- Presence of 'get_capabilities' tool indicates AdCP support
- Call get_capabilities for version, protocols, features, capabilities
- No need for custom agent card extensions
Deprecates adcp-extension.json - maintained for backward compatibility only.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* rename: get_capabilities → get_adcp_capabilities for unambiguous discovery
The distinctive name 'get_adcp_capabilities' ensures:
- Immediate identification of AdCP support when scanning tool lists
- No collision with other protocols' capability tools
- Self-documenting tool presence
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix: Restore v2.6-rc directory after rebase
The v2.6-rc directory was inadvertently modified during the cherry-pick
rebase. Restoring from 2.6.x branch since this content is auto-generated.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add structured geo targeting with named systems
- Update targeting.json: geo_metros and geo_postal_areas now use
structured format with explicit system specification
- Remove postal_areas from product-filters.json (too granular for
product discovery; use metros for filtering, postal for execution)
- Update get_adcp_capabilities docs to clarify:
- Product filters use coarse geography (metros)
- Targeting overlay uses fine-grained geography (postal areas)
- Capability contract: if seller declares us_zip support, buyer can
specify ZIP codes in create_media_buy targeting_overlay
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add governance protocol support to get_adcp_capabilities
Governance agents provide property data (compliance scores, brand safety
ratings, sustainability metrics). Their capabilities are now declared in
get_adcp_capabilities:
- Added 'governance' to supported_protocols enum
- Added governance.property_features array for feature definitions
- Each feature has: feature_id, type (binary/quantitative/categorical),
optional range/categories, description
- Eliminates need for separate list_property_features task
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* deprecate: list_property_features in favor of get_adcp_capabilities
- Remove list-property-features-request.json and response schemas
- Update schema index.json to remove list_property_features entries
- Update list_property_features.mdx with deprecation warning and migration guide
- Update governance tasks index to reference get_adcp_capabilities for discovery
- Update changeset to document the deprecation
Governance agents now declare their capabilities via the property_features
array in get_adcp_capabilities, eliminating the need for a separate
discovery call.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add required_targeting_systems filter to product-filters
Allows buyers to filter products to sellers that support specific
targeting systems (e.g., 'us_zip', 'nielsen_dma') without passing
actual geo values at discovery time.
This enables the pattern:
1. Discovery: Filter by capability ("must support ZIP targeting")
2. Execution: Apply actual targeting ("deliver to these ZIP codes")
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* rename: required_targeting_systems → required_geo_systems
Renamed for clarity and expanded to accept both:
- Capability names: 'geo_countries', 'geo_regions' (boolean capabilities)
- System names: 'us_zip', 'nielsen_dma' (nested system keys)
Example: required_geo_systems: ['geo_regions', 'us_zip']
Filters to sellers supporting region targeting AND ZIP code targeting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: required_geo_targeting with two-layer structure
Replaces flat `required_geo_systems` with structured `required_geo_targeting`
that cleanly separates:
- level: targeting granularity (country, region, metro, postal_area)
- system: classification taxonomy (only for levels with multiple systems)
Example:
```json
{
"required_geo_targeting": [
{ "level": "region" },
{ "level": "metro", "system": "nielsen_dma" },
{ "level": "postal_area", "system": "us_zip" }
]
}
```
This maps cleanly to capability checks:
- { level: "region" } → targeting.geo_regions === true
- { level: "metro", system: "nielsen_dma" } → targeting.geo_metros.nielsen_dma
- { level: "postal_area", system: "us_zip" } → targeting.geo_postal_areas.us_zip
Adds geo-level.json enum for the supported targeting levels.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor: Remove metros/regions from product filters
Products don't have metro-specific coverage - they have country coverage.
Product filters now use:
- `countries` for coverage filtering
- `required_geo_targeting` for capability discovery (what geo systems seller supports)
Actual metro/region/postal values are used at targeting time in create_media_buy,
not at product discovery time.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add regions/metros product filters for local inventory
Two models for product geography:
1. **Coverage filters** (for locally-bound inventory):
- `countries` - country coverage (all inventory)
- `regions` - region coverage (ISO 3166-2) for regional OOH, local TV
- `metros` - metro coverage ({ system, code }) for radio, DOOH, local TV
Use when products ARE geographically bound (radio station = DMA)
2. **Capability filters** (for digital inventory with broad coverage):
- `required_geo_targeting` - filter by seller capability
Use when products have broad coverage and you'll target at buy time
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add extensions_supported to get_adcp_capabilities response
Allows agents to declare which extension namespaces they support.
Buyers can expect meaningful data in ext.{namespace} fields from
agents that declare support.
Replaces extensions_supported from deprecated agent card extension.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add methodology_url to property_features
Allows governance agents to link to documentation explaining how
they calculate/measure a feature. Helps buyers understand and
compare methodologies across different vendors.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: Update documentation to reference get_adcp_capabilities
Replace references to deprecated list_authorized_properties with
get_adcp_capabilities throughout documentation:
- quickstart.mdx: Update auth section public operations
- intro.mdx: Add capability discovery section
- core-concepts.mdx: Update synchronous operations list
- media-buy-quick-reference.mdx: Replace task reference section
- mcp-guide.mdx: Add Protocol Tools section and discovery note
- a2a-guide.mdx: Add to Available Skills and discovery note
- security.mdx: Update low-risk operations and rate limits
- authentication.mdx: Update public operations list
- implementor-faq.mdx: Update property tag resolution guidance
- adagents.mdx: Update Learn More link
- authorized-properties.mdx: Update property tags workflow
- get_products.mdx: Update code comments
- testing.mdx: Update compliance checklist
- capability-discovery/index.mdx: Mark deprecated task
- task-reference/index.mdx: Add get_adcp_capabilities
- media-buy/index.mdx: Add get_adcp_capabilities
- governance/property/index.mdx: Reference get_adcp_capabilities
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: remove empty changeset file
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore: overhaul docs versioning for 2.6.x release
- Merge 2.6.x branch into main (Property Governance, Content Standards, etc.)
- Create dist/docs/2.5.3/ frozen snapshot of 2.5 documentation
- Update docs.json versioning: "2.6" → docs/, "2.5" → dist/docs/2.5.3/
- Add release-docs.yml workflow for future doc snapshots on release
- Remove old v2.6-rc sync workflow (no longer needed)
- Update .gitignore to allow dist/docs/
- Update pre-push hook to exclude archived docs from link check
This establishes a sustainable versioning model where:
- docs/ is always the current/latest version
- dist/docs/{version}/ contains frozen release snapshots
- Maintenance branches can release docs via the release workflow
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: bump version to 3.0.0-beta.1
Breaking changes require major version bump:
- package.json: 2.6.0 → 3.0.0-beta.1
- schema registry: adcp_version 2.6.0 → 3.0.0-beta.1
- docs.json: version label 2.6 → 3.0-beta
- dist/schemas: renamed 2.6.0 → 3.0.0-beta.1
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* chore: configure changesets for beta releases
- Enter changeset pre-release mode with 'beta' tag
- Fix release-docs workflow to handle prerelease versions:
- Extract "3.0-beta" from "3.0.0-beta.1" for docs.json labels
- Update regex to match prerelease paths like dist/docs/3.0.0-beta.1/
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* docs: add 3.0.0-beta.1 release documentation
- Update intro.mdx banner for v3.0.0-beta.1
- Add comprehensive release notes section covering:
- Media Channel Taxonomy breaking changes (19 new channels)
- Creative assignments with weighting
- Geo targeting with named systems
- get_adcp_capabilities task
- Governance Protocol (property lists, content standards)
- Unified asset discovery
- Deprecation notices and migration checklist
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Add product bundle proposals to get_products (#843) (#857)
Publishers can now return structured media plan proposals alongside
products. Proposals contain budget allocation percentages across
products, enabling:
- Recommended product bundles with allocation strategies
- Conversational refinement via proposal_id + brief
- Direct execution via create_media_buy with proposal_id + total_budget
New schemas:
- core/proposal.json - Media plan proposal with allocations
- core/product-allocation.json - Individual allocation within proposal
Updated schemas:
- get-products-request.json - Added proposal_id for refinement
- get-products-response.json - Added proposals array
- create-media-buy-request.json - Added proposal_id + total_budget mode
Closes #843
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: Sponsored Intelligence Protocol implementation (#813)
* feat: Add Sponsored Intelligence Protocol documentation
Define the SI protocol for conversational brand experiences in AI assistants.
Like VAST defines video ad serving, SI defines how to serve and interact
with brand agent endpoints.
Key concepts:
- SI Manifest: Brand declar…
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
Converts all absolute links (
/docs/governance/...) in governance docs to relative links (./artifacts,../property/index, etc.).This fixes broken links when docs are synced to
v2.6-rc/on main - absolute links would point to the wrong version.Changes
./or../relative pathsTest plan
🤖 Generated with Claude Code