feat: broadcast TV support for 3.0#2046
Merged
Merged
Conversation
…easurement windows Add foundational broadcast/linear TV support to prevent ext divergence before 3.0. Closes #2036, #2037, #2038, #2039. - Ad-ID industry identifiers on creative assets and manifests (shared industry-identifier.json schema) - Broadcast spot reference formats (15s, 30s, 60s) — video only, no VAST/trackers - Agency estimate number on media buys and packages (with MCP tool parity) - Measurement maturation windows (Live/C3/C7) on reporting capabilities - Measurement window reference on billing measurement terms - Broadcast TV channel documentation and docs.json navigation - maxLength constraints on all new string fields Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update format count assertions from 54 to 57 and add broadcast_spot_15s, broadcast_spot_30s, broadcast_spot_60s to expected format categories. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Apr 10, 2026
- Add broadcast TV brief example to example-briefs.mdx - Add broadcast measurement terms example to accountability.mdx (measurement_window, agency_estimate_number) - Add broadcast measurement vendors (VideoAmp, Comscore) to vendor identity list - Add broadcast measurement windows section to optimization-reporting.mdx - Add broadcast data freshness note to get_media_buy_delivery.mdx - Add broadcast seller storyboard (product discovery → buy → creative sync → delivery → reconciliation) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move measurement_terms into packages with correct billing_measurement nesting - Use brand-ref object for vendor (domain: videoamp.com) instead of bare string - Convert assets from array to object-keyed format matching creative-asset schema - Use VideoAmp consistently as measurement vendor (matches example brief) - Fix expected_delay_minutes guidance in optimization-reporting - Fix cross-references in get_media_buy_delivery (point to accountability and reporting) - Align example brief budget to $400K matching storyboard packages Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…hema The video-asset-requirements schema was missing fields for GOP structure, scan type, moov atom, audio codecs, loudness, and other broadcast/CTV-critical constraints. Reference formats and docs used invented field names that didn't match the schema, making mechanical validation impossible. - Extend video-asset-requirements.json with 12 new structured fields - Rename all reference format requirements to match schema field names (acceptable_formats→containers, acceptable_codecs→codecs, duration_seconds→ min/max_duration_ms, min_bitrate_mbps→min_bitrate_kbps, etc.) - Update broadcast.mdx, ctv.mdx, and video.mdx format examples to match Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add $schema annotations to format definition examples in broadcast.mdx (1 snippet) and ctv.mdx (2 snippets) so they are validated by test:json-schema against format.json. Also update video.mdx requirement field names to match the schema (containers, codecs, min_duration_ms, etc.) for consistency, though video.mdx examples are not yet testable due to pre-existing gaps in their asset definitions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fix all video.mdx format and manifest examples to pass schema validation: - Add name field and $schema to all 12 format definitions - Add $schema to all 5 manifest examples - Add item_type/required to all format assets - Fix requirement field names to match video-asset-requirements schema - Replace macro URLs with .example URIs for URI format validation - Add prores to video codecs enum (used by Roku/Hulu CTV formats) Validated block count: 219 → 239 (+20 new testable snippets) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… tests
Change category from media_buy_seller to media_buy_broadcast_seller so
listStoryboards('media_buy_seller') returns only the base seller storyboard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… tests Fix expected_delay_minutes from 21600 (15 days) to 1440 (24 hours) in broadcast.mdx reporting_capabilities example. This field represents initial data availability (live overnight ratings), not C7 maturation. Per-window timelines use expected_availability_days instead. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ker transparency Three changes to close protocol gaps identified during broadcast review: 1. Add is_final and measurement_window to by_package in delivery response. Buyers now know whether delivery data is provisional or closed, and which measurement window it represents. Works for any channel with data that matures (broadcast C3/C7, podcast download windows, IVT filtering stages). 2. Document third-party tracker support inference from format definitions. If a format has no impression_tracker asset slot, third-party measurement pixels cannot be attached. Broadcast formats are the clearest example. 3. Remove supported_macros from broadcast reference formats (no runtime macro expansion on pre-rendered spot files). Drop lsd from standard measurement window examples (Nielsen-internal, rarely surfaces in buying). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move tracker transparency from broadcast-only doc to core format documentation (formats.mdx) and creative enforcement section (accountability.mdx). Buyer agents need to check format assets for tracker slots before proposing performance standards that require creative-level verification — this applies across all channels, not just broadcast. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Map each step to existing comply scenarios so the storyboard can run against the automated test harness: full_sales_flow, create_media_buy, media_buy_lifecycle, creative_lifecycle, creative_sync, reporting_flow. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both code review and security review flagged that audio_codecs items were bare strings with no enum, inconsistent with other array fields in the schema (codecs, audio_channels, containers all use enums). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ents, tracker transparency Add what's-new section for the rc.3 release covering: - Broadcast TV support (Ad-ID, measurement windows, spot formats, agency estimate number) - Delivery data completeness (is_final, measurement_window on packages) - Structured video requirements (schema-aligned field names) - Third-party tracker transparency (format-level inference) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rement progression Add window_update to delivery notification_type enum — distinct from adjusted (correction within same window). window_update signals planned measurement progression: C3 superseding live, C7 superseding C3. Add supersedes_window field on per-package delivery data to indicate which prior window's data is being replaced. Full lifecycle example in optimization-reporting.mdx showing the three-stage progression (live → C3 → C7) with actual JSON payloads. Updated broadcast storyboard delivery and reconciliation steps to reference these fields. Closes #2040. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This was referenced Apr 12, 2026
Storyboards are loaded from @adcp/client at runtime, not from docs/storyboards/. All storyboard changes (broadcast seller, generative, bug fixes) moved to adcontextprotocol/adcp-client#499 for proper sync. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…eative-reqs # Conflicts: # docs/storyboards/campaign_governance_conditions.yaml # docs/storyboards/campaign_governance_delivery.yaml # docs/storyboards/campaign_governance_denied.yaml # docs/storyboards/creative_sales_agent.yaml # docs/storyboards/creative_template.yaml # docs/storyboards/media_buy_catalog_creative.yaml # docs/storyboards/media_buy_governance_escalation.yaml # docs/storyboards/media_buy_guaranteed_approval.yaml # docs/storyboards/media_buy_non_guaranteed.yaml # docs/storyboards/media_buy_proposal_mode.yaml # docs/storyboards/media_buy_seller.yaml # docs/storyboards/media_buy_state_machine.yaml # docs/storyboards/schema.yaml # docs/storyboards/signal_marketplace.yaml # docs/storyboards/signal_owned.yaml
This was referenced Apr 15, 2026
4 tasks
bokelley
pushed a commit
that referenced
this pull request
May 14, 2026
) Close IACET Element 5 gap in A1 by noting C3/C7 measurement windows in the 20-channels bullet. Add broadcast delivery reporting to S1 "What you'll demonstrate" and extend lab exercise 8 to cover get_media_buy_delivery window interpretation. Add broadcast measurement window scenario to B3 exercises. Renumber migration from 423 (conflict on main) to 466. Depends on broadcast TV protocol PR #2046 (merged 2026-04-14). Closes #2047 https://claude.ai/code/session_01QyYuKotWrS4sqbuHRLktjX
bokelley
added a commit
that referenced
this pull request
May 14, 2026
) * docs(certification): broadcast TV training content for A1, S1, B3 (#2047) Close IACET Element 5 gap in A1 by noting C3/C7 measurement windows in the 20-channels bullet. Add broadcast delivery reporting to S1 "What you'll demonstrate" and extend lab exercise 8 to cover get_media_buy_delivery window interpretation. Add broadcast measurement window scenario to B3 exercises. Renumber migration from 423 (conflict on main) to 466. Depends on broadcast TV protocol PR #2046 (merged 2026-04-14). Closes #2047 https://claude.ai/code/session_01QyYuKotWrS4sqbuHRLktjX * chore(migration): renumber 466_broadcast_delivery_criteria → 477 Slot 466 was claimed by 466_adcp_state.sql while this branch was sitting. Next free slot at rebase time is 477. SQL contents unchanged. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude <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.
Summary
Adds broadcast/linear TV support to the protocol and strengthens creative format validation across all channels. Based on feedback from Greg at O-N-X about real broadcast buying workflows.
Broadcast protocol support
industry_identifierswith sharedindustry-identifier.jsonschema) — Ad-ID industry identifier on creative assets #2036agency_estimate_number, peer topo_number) — Agency Estimate Number on media buys #2038Structured video requirements
video-asset-requirements.jsonwith 12 fields: GOP structure, scan type, moov atom, audio codecs/channels/loudness, ProRes codecacceptable_formats→containers,duration_seconds→min/max_duration_ms, etc.)Documentation
docs/creative/channels/broadcast.mdx)measurement_window, vendor identity (VideoAmp/Comscore), measurement windows section in optimization-reporting, data freshness note in delivery reportingStoryboard
media_buy_broadcast_seller.yaml) — 5 phases: product discovery → buy with estimate number → creative sync with Ad-ID → delivery with measurement windows → reconciliationMCP tool parity
agency_estimate_numberadded tocreate_media_buyMCP tool definitionParent epic: #1919
Test plan
npm run build:schemas— schemas compile (463 schemas, 81 bundled)npm run test:schemas— 7/7 schema validation tests passnpm run test:json-schema— 239/239 doc JSON examples validatenpm run test:unit— 563/563 unit tests pass (including schema drift detection)npm run typecheck— TypeScript compilation clean🤖 Generated with Claude Code