-
Notifications
You must be signed in to change notification settings - Fork 25
Add Content Standards Protocol #621
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
Conversation
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>
- 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>
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>
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>
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>
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>
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>
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: sit@ca367da 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
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>
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>
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>
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>
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>
…t_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>
- 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>
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>
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>
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>
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>
static/schemas/source/content-standards/get-content-standards-response.json
Show resolved
Hide resolved
static/schemas/source/content-standards/get-content-standards-response.json
Outdated
Show resolved
Hide resolved
static/schemas/source/content-standards/get-content-standards-response.json
Outdated
Show resolved
Hide resolved
- #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>
Resolved conflicts: - docs.json: Integrated Content Standards into Governance Protocol [3.0] structure - static/schemas/source/index.json: Merged content-standards tasks into governance section 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>
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>
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>
- 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>
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>
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>
…ompetitive 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>
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>
- 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_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>
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>
- 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>
- 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>
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>
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>
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>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we have a request/response schema for this task @bokelley ?
| ```json | ||
| { | ||
| "scope": { | ||
| "brand_ids": ["nike"], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Brand manifest doesn't contain it, so how do you pair content standards with a media buy?
| "additionalProperties": true | ||
| }, | ||
| "artifact_webhook": { | ||
| "$comment": "Webhook configuration for content artifact delivery - enables governance validation. Same authentication structure as reporting_webhook.", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If it's the same, it should be extracted to a new schema file.
Summary
Adds the Content Standards Protocol - draft governance protocol for content safety and suitability rules.
docs/governance/content-standards/static/schemas/source/content-standards/list_content_features,get_content_standards,list_content_standards,check_contentDraft for AdCP 3.0 - Part of the AAO Governance Working Group initiatives.
Test plan
mintlify devnpm test🤖 Generated with Claude Code