feat(optimization-goal): vendor_metric kind for vendor-attested optimization (#4644)#4668
Merged
Merged
Conversation
…ization (#4644) Adds end-to-end (vendor, metric_id) binding for vendor-attested measurement. Same shape across discovery, capability, commitment, optimization, and reporting surfaces. Schema additions: - core/vendor-metric-optimization.json — per-product capability declaration - optimization-goal.json — kind: "vendor_metric" oneOf branch - product.json — vendor_metric_optimization reference alongside metric_optimization Three-precondition rejection rule on goal acceptance: 1. Discovery: metric_id in vendor's published measurement.metrics[] 2. Capability: (vendor, metric_id) in product's vendor_metric_optimization 3. Reporting coherence: matching committed_metrics entry on the package Deprecates attention_seconds and attention_score in the metric enum (both optimization-goal.json and product.json metric_optimization). Slated for removal at next major. Docs: new kind: vendor_metric section in conversion-tracking/index.mdx; target-kinds and strategy tables updated; migration doc reflects routing. Opens as draft for 7-day WG comment window before merge. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…will you / did you Adds a canonical reference section to optimization-reporting.mdx showing how every optimization metric flows through capability → commitment → optimization → delivery surfaces, with separate tables for standard and vendor-attested metric flows. Cross-references from conversion-tracking (kind: vendor_metric section) and measurement/taxonomy.mdx point at this as the single source of truth. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Schema: - uniqueItems on supported_metrics and supported_targets arrays - Soften discovery precondition MUST→SHOULD this minor (vendor adoption catching up; tightens to MUST next minor) — protocol+product experts agreed it was unenforceable today without round-trip + caching story - Mirror MAY-reject deprecation prose on product.json metric_optimization for symmetry with optimization-goal.json - One-line note that preconditions are seller-runtime, not validator-time - maximize_value exclusion rationale documented in capability schema Docs: - Rename heading "The metric lifecycle — from capability to reporting" → "Metric lifecycle" (em-dash broke Mintlify slug generation); update both deep-link anchors - Replace stale "Target attention" example using deprecated attention_seconds with the vendor_metric Adelaide example - "All target kinds across both goal types" → "three goal kinds" - Release-notes 3.1 gains a parallel sub-entry for #4668 vendor_metric kind - Glossary Optimization Goal entry now covers all three kinds - Discovery precondition wording in conversion-tracking and optimization-reporting matches the schema's SHOULD-this-minor framing Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- New "Worked example: Adelaide attention end-to-end" section in optimization-reporting.mdx showing all four surfaces assembled — product capability, package committed_metrics + optimization_goals, delivery vendor_metric_values, missing_metrics. Makes the abstract lifecycle tables concrete. - Remove Scope3 emissions example from "Choosing a strategy" — the current spec doesn't support minimize-direction semantics, and the example as written implied behavior the spec doesn't promise. Replaced with a Kantar brand lift example (no-target maximize). Polarity caveat documented in the kind: vendor_metric section pointing at WG question #4644. - Replace use-case list intro to drop emissions; one-line note that minimize-direction is under WG discussion. - Tier 2 line in taxonomy.mdx now references vendor_metric_optimization and kind: vendor_metric on the optimization side. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…rity prose - Lower measurable_impressions in worked example from 845000 (~85%) to 420000 (~42%) to reflect realistic Adelaide-on-CTV coverage today (30-60%); add brief note that buyers should compute coverage before reasoning about reported value. - Restore "emissions (Scope3, Good-Loop)" to the kind: vendor_metric intro use-case list with inline pointer to the polarity caveat in the same section. The schema-correct example just lives in a different table; the use case is still real. - Soften polarity caveat: drop reference to measurement.metrics[] for polarity interpretation (no polarity field exists there today); the caveat now correctly points at "the vendor's metric definition" as the seller-side interpretation source. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Draft — open for 7-day WG comment window before merge. Measurement vendors (DV, IAS, Adelaide, Kantar, Scope3, retail-media partners) invited to raise extension needs while the shape is still flexible.
Summary
Closes #4644. Adds `kind: "vendor_metric"` to the optimization-goal discriminator so buyers can bind goals to a specific vendor + metric_id end-to-end. Today's `metric` enum includes `attention_seconds` and `attention_score` as if seller-native, but DV/IAS/Adelaide/TVision/Lumen each define attention differently — a vendor-agnostic goal is unverifiable. This PR adds the proper vendor-bound shape and deprecates the vendor-agnostic enum values for removal at the next major.
The new shape is structurally parallel to the existing `event` kind (which binds buyer-attested conversion events) — same precedent, just for vendor-attested measurement instead.
What changed
Three-precondition rejection rule
Sellers MUST reject `vendor_metric` goals failing the capability or reporting-coherence preconditions; sellers SHOULD verify the discovery precondition:
Symmetry across surfaces
Same `(vendor, metric_id)` key everywhere:
What this unblocks
Test plan
WG comment window — explicit asks
While this PR is in draft, would especially like feedback on:
Defaults given here are conservative; happy to add to the design before merge if anyone raises a concrete adopter need.
Resolved on review
🤖 Generated with Claude Code