You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Filed off the SDK-team implementor review on #3307 (creative formats canonical / canonical-formats).
Problem
The canonical-formats base schema is intentionally permissive: additionalProperties: true everywhere, x-canonical-policy-required-params-not-enforced on /schemas/formats/canonical/_base.json, no required parameter fields on any canonical. This is correct for the canonical (it's a loose contract — products narrow it) but it means JSON Schema validation passes on almost any conformant-shaped declaration.
The current "fixtures validate" evidence is Schroedinger conformance: the fixtures pass because they were authored against the schema, not because adopters' independent emissions would. Until we have a conformance harness that exercises:
Build a canonical-formats storyboard track in the compliance harness (storyboard infrastructure already exists for other AdCP surfaces). Scope:
Producer storyboards: emit a product with format_ids + format_options (agreeing), format_ids only, format_options only, format_kind: "custom" (must have v2_only: true), divergent dual-emission (negative — must be flagged by consumer).
Consumer storyboards: read each producer-shape, assert the SDK projects/warns correctly (silent-loss-of-inventory must be caught).
format_schema fetch storyboards: serve a digest-matched schema, a digest-mismatched schema, an invalid-JSON-Schema body, a $ref-out-of-sandbox schema. Assert SDK responses (resolved / hard-fail / hard-fail / hard-fail with structured warning).
runtime_status skip-gate: assert declared_only entries are skipped gracefully, not failed.
Why this is GA-blocking, not 3.1-beta-blocking
The schema work is shippable as beta. The conformance harness is the artifact that lets us promote individual canonicals from preview to stable under the rubric in _base.json#status (2 adopters × 90 days no breakage). Without it, promotion is on vibes.
Filed off the SDK-team implementor review on #3307 (creative formats canonical / canonical-formats).
Problem
The canonical-formats base schema is intentionally permissive:
additionalProperties: trueeverywhere,x-canonical-policy-required-params-not-enforcedon/schemas/formats/canonical/_base.json, no required parameter fields on any canonical. This is correct for the canonical (it's a loose contract — products narrow it) but it means JSON Schema validation passes on almost any conformant-shaped declaration.The current "fixtures validate" evidence is Schroedinger conformance: the fixtures pass because they were authored against the schema, not because adopters' independent emissions would. Until we have a conformance harness that exercises:
format_schemafetch contract (digest mismatch, $ref sandbox, invalid-schema handling) per IR3validate_inputthree-wayresult_kinddiscrimination across all 12 format_kind variantsruntime_statusskip-gating (compliance storyboards SHOULD gracefully skipdeclared_only)synthesis_nondeterministic×*_sourcecompatibility rules from_base.json…we don't actually know whether independent v2 emitters and consumers agree.
What this issue tracks
Build a
canonical-formatsstoryboard track in the compliance harness (storyboard infrastructure already exists for other AdCP surfaces). Scope:format_ids+format_options(agreeing),format_idsonly,format_optionsonly,format_kind: "custom"(must havev2_only: true), divergent dual-emission (negative — must be flagged by consumer).format_schemafetch storyboards: serve a digest-matched schema, a digest-mismatched schema, an invalid-JSON-Schema body, a $ref-out-of-sandbox schema. Assert SDK responses (resolved / hard-fail / hard-fail / hard-fail with structured warning).validate_inputstoryboards: per-canonical positive (validated_pass), per-canonical negative (validated_fail with violations), nondeterministic (unvalidatable_nondeterministic).runtime_statusskip-gate: assertdeclared_onlyentries are skipped gracefully, not failed.Why this is GA-blocking, not 3.1-beta-blocking
The schema work is shippable as beta. The conformance harness is the artifact that lets us promote individual canonicals from
previewtostableunder the rubric in_base.json#status(2 adopters × 90 days no breakage). Without it, promotion is on vibes.Dependencies
Out of scope here
sponsored_placement(IR5 — separate issue)Tracking: gates 3.1 GA promotion rubric for individual canonicals.