Skip to content

spec(creative): reconcile VAST version requirements and compatibility resolution #6763

Description

@bokelley

Problem

AdCP 3.2 beta currently has contradictory VAST-version contracts:

  • formats/canonical/video_vast.json defines singular params.vast_version.
  • docs/creative/channels/video.mdx shows plural
    params.vast_versions: ["3.0", "4.0", "4.1", "4.2"].
  • The same video documentation later says format requirements use singular
    vast_version and requires document, asset, format, and seller capability to
    match.
  • get_adcp_capabilities.execution.creative_specs.vast_versions is plural and
    seller-wide.
  • A VAST asset correctly declares one exact vast_version.

Because canonical format schemas are permissive, the plural documentation
example can validate while the schema silently ignores the field. An
implementation following the schema can expose only one accepted version per
format option; an implementation following the docs can expose an unenforced
list. This prevents interoperable version resolution.

References:

Proposed resolution

Use different cardinality at the two layers:

  • Asset: singular vast_version — the exact version the supplied VAST URL
    or inline document declares.
  • Product format option: plural vast_versions[] — the accepted set for
    that product/player/execution path.
  • Agent capabilities: plural vast_versions[] — the seller-wide ceiling,
    never sufficient by itself to prove one product accepts every version.

Deprecate singular format-option vast_version as a one-element alias if
needed for 3.x compatibility. Do not relabel or synthesize an asset at a newer
version merely because the destination supports it.

Normative compatibility rule

A VAST asset is version-compatible only when:

asset.vast_version
  ∈ product.format_option.params.vast_versions
  ∩ seller.execution.creative_specs.vast_versions

When a pre-binding creative has multiple VAST source variants, candidate
versions are intersected with those two accepted sets. The buyer selects one,
or a seller with an explicit deterministic-resolution capability returns the
selected version. Highest-compatible is a useful default only after the
intersection is known.

VAST_VERSION_MISMATCH should report:

  • the asset's declared version;
  • the product-accepted versions;
  • the seller-wide versions; and
  • the selected format option.

Version roster

The single enum source remains authoritative: 2.0, 3.0, 4.0, 4.1, 4.2, and
4.3 in the current 3.2 beta. Product and capability arrays must reference it
rather than restating version strings or ranges.

Acceptance criteria

  • Schema, documentation, examples, SDK types, and validation prose agree on
    singular asset version vs. plural accepted versions.
  • Product format options can declare more than one accepted version without
    sibling-option duplication.
  • The compatibility intersection is normative and tested.
  • VAST_VERSION_MISMATCH returns all three relevant version sets/values.
  • Examples cover a seller whose platform ceiling is 4.2 but one product
    accepts only 3.0/4.0.
  • Conformance vectors include 4.3 and reject unsupported/relabelled assets.

Compatibility

Additive with a deprecated singular alias; otherwise changing the format param
name needs explicit 3.x migration handling.

Metadata

Metadata

Assignees

No one assigned

    Labels

    claude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.creativeneeds-wg-reviewBlocked on a working-group decision — surface in WG meeting agendasrfcProtocol change — auto-adds to roadmap boardspec / protocol

    Type

    No type

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions