{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "AdCP 3.2 canonical format classification vectors",
  "description": "Realistic, fictional publisher-spec descriptions with the expected buyer-deliverable canonical classification. Classification follows the creative payload and rendering responsibility, not the richness of placement behavior.",
  "version": "3.2",
  "vectors": [
    {
      "id": "docking_video_buyer_upload",
      "publisher_spec": "A video begins in the article player and docks into a corner while the reader scrolls. The buyer supplies an MP4 file and landing URL; the publisher owns the player and docking behavior.",
      "expected": {
        "format_kind": "video_hosted"
      },
      "must_not_classify_as": ["custom", "responsive_creative"],
      "reason": "The buyer deliverable is a hosted video file. Docking is placement or renderer behavior, not creative structure."
    },
    {
      "id": "docking_video_third_party_tag",
      "publisher_spec": "A video begins inline and docks while scrolling. The buyer supplies a third-party JavaScript tag URL; the third party renders and measures the experience.",
      "expected": {
        "format_kind": "display_tag"
      },
      "must_not_classify_as": ["video_hosted", "custom"],
      "reason": "Anything delivered as an opaque third-party display tag is display_tag even when the rendered behavior includes video or multiple states."
    },
    {
      "id": "responsive_component_assembly",
      "publisher_spec": "The buyer supplies a logo, hero image, headline, body, call to action, and landing URL. The publisher composes and rearranges those components across viewport sizes.",
      "expected": {
        "format_kind": "responsive_creative"
      },
      "must_not_classify_as": ["image", "html5"],
      "reason": "The seller algorithmically composes multiple buyer assets; this is not a single responsive image or a buyer-supplied HTML bundle."
    },
    {
      "id": "responsive_static_image",
      "publisher_spec": "The buyer supplies one image and landing URL. The image may scale within a declared aspect-ratio and dimension range; no components are rearranged.",
      "expected": {
        "format_kind": "image"
      },
      "must_not_classify_as": ["responsive_creative"],
      "reason": "Responsive sizing alone does not make a creative responsive_creative; the buyer payload is still one image."
    },
    {
      "id": "seller_rendered_scroll_states",
      "publisher_spec": "One masthead placement expands inline and later collapses into a sticky scroll state. The buyer supplies separate artwork for each state and a shared landing URL.",
      "expected": {
        "format_kind": "seller_rendered_stateful_display"
      },
      "must_not_classify_as": ["image", "responsive_creative", "custom"],
      "reason": "The buyer deliverable has multiple deterministic seller-rendered states, which AdCP 3.2 represents directly as seller_rendered_stateful_display."
    },
    {
      "id": "coordinated_multi_placement_bundle",
      "publisher_spec": "One manifest supplies a masthead, page skin, and preroll together. The buyer supplies component-specific artwork plus a shared video and call to action.",
      "expected": {
        "format_kind": "coordinated_placements"
      },
      "must_not_classify_as": ["image", "seller_rendered_stateful_display", "custom"],
      "reason": "Several declared placements supplied atomically with shared assets form coordinated_placements rather than one stateful display unit. Inventory exclusivity is expressed separately on Product."
    },
    {
      "id": "buyer_html_bundle",
      "publisher_spec": "The buyer uploads a ZIP containing index.html, JavaScript, images, clickTag support, and a backup image. The publisher unpacks and hosts it.",
      "expected": {
        "format_kind": "html5"
      },
      "must_not_classify_as": ["display_tag"],
      "reason": "A buyer-supplied bundle hosted by the seller is html5; display_tag is reserved for opaque externally served markup or URLs."
    }
  ]
}
