feat: generic agents array in brand.json#1973
Merged
Merged
Conversation
Replace named agent fields (brand_agent, rights_agent) with a typed agents array on both house and brand objects. Supports brand, rights, measurement, governance, creative, buying, and signals agent types. Establishes brand.json as the canonical source for public agent discovery — the AAO registry becomes an aggregator of crawled brand.json files, not an independent registry. Refs #1972 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
c9fa376 to
0f0faa3
Compare
bokelley
added a commit
that referenced
this pull request
Apr 7, 2026
PR #1973 added a generic agents array to brand.json. Update accountability docs and performance-standard schema to reference the agents array with type: 'measurement' instead of the deprecated named brand_agent/rights_agent fields. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bokelley
added a commit
that referenced
this pull request
Apr 8, 2026
* feat: structured measurement terms and cancellation policy for guaranteed buys Add measurement_terms schema as a negotiation surface for media buys: billing measurement vendor, IVT threshold, and viewability floor. Sellers declare defaults on products, buyers propose overrides at create_media_buy, sellers accept/reject/adjust. Agreed terms on confirmed packages enforce creative verification tag requirements. Add cancellation_policy schema for guaranteed products to declare notice periods and penalties. Extract viewability standard enum from inline delivery-metrics into reusable viewability-standard.json. Add TERMS_REJECTED error code for measurement terms negotiation. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: add changeset for measurement terms Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: clarify IO cancellation_policy is seller-populated The insertion order is seller-generated, so cancellation_policy there represents seller-set overrides for a specific deal (e.g., shorter notice period for a key advertiser), not buyer-proposed terms. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove cancellation_policy from insertion-order Cancellation policy originates on the product. The IO is generated from products via proposals — having a second place to set cancellation terms is redundant and confusing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: remove measurement_terms from insertion-order The IO is a legal signing wrapper around a committed proposal. Measurement terms are negotiated per-package at create_media_buy, not at IO signing time. Products and packages are the right surfaces. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: structured cancellation penalty types Replace free-text penalty_description with structured penalty object. Four types: percent_remaining (with rate), full_commitment, fixed_fee (with amount), none. Eliminates interpretation disputes and makes penalties machine-readable for buyer agents. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: performance guarantees array and makegood policy Replace fixed viewability field with performance_guarantees array that supports any rate-based metric: viewability, completion_rate, brand_safety, attention_score. Each guarantee has a metric, min_rate, optional standard, and vendor. Add makegood_policy with closed menu of three remedies: additional_delivery, credit, invoice_adjustment. Seller declares which remedies they support; proposes from the menu when a breach occurs; buyer accepts or disputes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: promote performance_guarantees to peer of measurement_terms Performance guarantees (viewability, IVT, completion rate, brand safety, attention score) are the deal terms. Measurement terms (billing vendor, makegood policy) are the counting and resolution mechanics. These are separate concerns and should be separate fields. IVT is now a guaranteed metric like viewability, not a special case. Single threshold field with floor/ceiling direction determined by metric. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * refactor: align naming with IAB Standard Terms and Conditions Rename to match IAB T&Cs v3.0 terminology: - performance_guarantees → performance_standards (Section XI) - penalty → cancellation_fee (Section XII) - performance-guarantee.json → performance-standard.json - guaranteed-metric.json → performance-standard-metric.json The IAB deliberately avoids "guarantee" (implies legal warranty) and "penalty" (implies punitive damages). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat: required_performance_standards filter on get_products Buyers can now filter products at discovery time by performance standard requirements: "only show me products where DoubleVerify can measure viewability at 70% MRC." Products that cannot meet the threshold or do not support the specified vendor are excluded. Follows the existing required_features and required_geo_targeting filter pattern. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: accountability lifecycle and IO as signing wrapper Add accountability.mdx documenting the full lifecycle: discovery with required_performance_standards filter, product defaults, refinement, buy creation negotiation, confirmed package as contract, creative enforcement, and breach/makegood resolution. Clarify insertion-order.json: the IO is a signing wrapper, not a negotiation surface. All deal terms live on products and packages. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: cross-reference accountability from existing pages Add brief mentions and links to the accountability page from: - media-buy overview (agency language table) - media-products (after delivery measurement providers) - media-buys creation (package model bullets) No new content — just cross-references to avoid doc sprawl. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: measurement agents and content standards relationship Position vendor field as discovery point for measurement agents via brand.json. Clarify relationship between content standards (what was delivered) and performance standards (how well). Reference issue #1972 for measurement agent interface follow-up. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: trailing comma in insertion-order.json Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: vendor field as brand.json discovery key for measurement agents The vendor's brand.json is where their measurement agent will be advertised, consistent with brand_agent and rights_agent. This positions the schema correctly for issue #1972 without requiring changes when the agent interface lands. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: update vendor discovery to reference brand.json agents array PR #1973 added a generic agents array to brand.json. Update accountability docs and performance-standard schema to reference the agents array with type: 'measurement' instead of the deprecated named brand_agent/rights_agent fields. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (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
agentsarray to brand.json for both house and brand objects, replacing the pattern of adding named agent fields per agent typebrand-agent-typeenum: brand, rights, measurement, governance, creative, buying, signalsbrand_agentandrights_agentnamed fields (backward compatible — both still validate)Design decisions
What's NOT in this PR
This is part 1 of #1972. Part 2 (measurement agent task interface — live rate queries) depends on this.
Server-side changes (crawler, registry, brand-manager) to consume the new
agentsarray are a follow-up.Test plan
npm run test:schemaspasses — all 452 schemas valid, refs resolvenpm run test:json-schemapasses — all 218 schema examples validatebrand_agentstill validate (backward compat)agentsarray validates against variant 3🤖 Generated with Claude Code