feat: structured measurement terms and cancellation policy#1962
Open
feat: structured measurement terms and cancellation policy#1962
Conversation
…teed 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>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
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>
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>
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>
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>
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>
Contributor
Author
|
linked to #1964 |
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>
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>
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>
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>
…gotiation # Conflicts: # static/schemas/source/enums/error-code.json
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>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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>
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>
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
measurement_termsschema as a negotiation surface for guaranteed media buys: billing measurement vendor, IVT threshold, and viewability floorcancellation_policyschema for guaranteed products to declare notice periods and penaltiesviewability-standard.jsonenum from inline definition indelivery-metrics.jsonTERMS_REJECTEDerror code for measurement terms negotiationbrand-ref(domain-based, e.g.{ "domain": "doubleverify.com" }) — no free-text ambiguityNegotiation flow
measurement_termsdefaults on productscreate_media_buyTERMS_REJECTED), or adjuststracker_script/tracker_pixelrequirementsKey design decisions
cancellation_policyis not a negotiation surface — seller declares, buyer accepts by creating the buyviewability.vendoris required (not optional) to enforce tracker tag obligationspricing_model), not what the metric isTest plan
node scripts/build-schemas.cjsbuilds successfully (81 bundled schemas)🤖 Generated with Claude Code