Skip to content

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 04:23

Added

  • CTV Ad Portfolio support for the VAST 2.0 extension path. The pull
    request that landed vast_4.4.xsd on 2026-07-17 also added
    extensions/ctv_ad_portfolio.md and extensions/ctv_qrcode.md, which
    deliver the same six formats through VAST 2.0 rather than 4.x. That path
    had no coverage: none of the AdCOM value or QR checks were reachable, and
    the generic extension rules reported IAB's own examples as defective.
    Six new rules for the container's own failure modes:
    VAST-2.0-ctv-portfolio-creative-id-required (the binding that fails
    silently when an ad has multiple creatives),
    VAST-2.0-ctv-portfolio-creative-id-unmatched,
    VAST-2.0-ctv-portfolio-mediafiles-required,
    VAST-2.0-ctv-portfolio-mediafiles-empty,
    VAST-2.0-ctv-portfolio-no-renderable-asset and
    VAST-2.0-ctv-portfolio-no-duration. Catalog: 212 to 218 rules.

  • Format-to-Signal consistency, two rules that read the AdCOM signals as a
    set rather than one at a time: VAST-4.4-adcom-pos-format-mismatch and
    VAST-4.4-adcom-playbackmethod-format-mismatch. plcmt, pos and
    playbackmethod can each sit inside its own enumeration and still describe
    two formats at once, which is invisible to the per-value rules: plcmt=5
    (Pause) with pos=12 (a Squeezeback layout) passed all three. The scope is
    the container that carries the signals, so both encodings are covered: the
    whole <Extensions> block on 4.x, the single
    <Extension type="ctv_ad_portfolio"> on 2.0. Catalog: 218 to 220 rules.

    Both stay quiet where the guidance hedges. pos is checked for the four
    formats with a published value set, never for In-Scene, whose table cell
    reads "NA", and never for pos=0, AdCOM "unknown". playbackmethod is
    checked only against the two rows the reference table states outright, 8/9
    Pause and 10/11 Screensaver, in both directions; the other three rows read
    "typically 1 or 2", which is advice rather than a constraint, so an Overlay
    declaring an autoplay method is not reported. An out-of-range plcmt
    suppresses both, since VAST-4.4-adcom-plcmt-value has already reported it
    and the pairing would be guesswork.

  • explain_rule in the MCP server returns fix guidance for the CTV Ad
    Portfolio rules instead of the generic fallback.

Fixed

  • VAST-2.0-extension-misplaced-element no longer fires inside a
    standardised IAB extension container. <Extension type="ctv_ad_portfolio"> carries MediaFiles, Duration,
    TrackingEvents, Icons and AdParameters by design, because it exists
    to give VAST 2.0 a NonLinear delivery model it never had.
  • Version inference ignores elements inside those containers. A conforming
    2.0 tag carrying a SIMID InteractiveCreativeFile in its extension was
    reported as VAST-2.0-version-mismatch, which is the one thing the
    extension is designed to do.
  • VAST-4.4-adcom-attr-not-motion accepts 19 and 20. AdCOM 1.0-202607 added
    19 Contains advertiser QR Code and 20 Support alpha channel transparency
    alongside the three motion attributes, and IAB's own examples declare 19.
  • The media rules only apply when the extension is the delivery vehicle. A
    creative that renders from a native StaticResource and uses the container
    only to declare AdCOM signals is conforming.

All five VAST 2.0 examples published in the two extension documents now
validate clean.

Changed

  • VS Code extension 0.10.0 and Chrome extension 0.9.0 pick up the new rules.
    The vastlint.vastVersion setting offers 4.4, which the CLI has accepted
    since 0.10.0.
  • specs/vast_4.4_reference.md covers the VAST 2.0 extension path, the
    Format-to-Signal cross-check and its deliberate gaps, and corrects the
    attr=20 entry in its list of defects in IAB's published examples: AdCOM
    1.0-202607 defines 20, so it was never a defect.