Summary
The storyboard runner currently appears to choose schema/storyboard semantics from the installed JS SDK package line, rather than from an explicit buyer-requested AdCP version and/or exact seller capability metadata.
This makes 3.0 and 3.1 compatibility hard to validate against the same seller:
- A 3.0 storyboard should emit no version marker, because exact version negotiation did not exist for those clients. Sellers should treat an omitted version as legacy 3.0 compatibility.
- A 3.1 storyboard should explicitly opt in to 3.1 semantics, so adaptive sellers can return the 3.1 shape.
- The runner should not infer "3.0 vs 3.1" only from whichever
@adcp/sdk package line happened to be installed.
Why this matters
In 3.1 beta, create/update media-buy responses split protocol envelope status from media-buy lifecycle status:
{
"status": "completed",
"media_buy_status": "pending_creatives"
}
A legacy 3.0 buyer/storyboard expects lifecycle status at top-level status:
{
"status": "pending_creatives"
}
One unversioned response cannot satisfy both contracts. The seller needs to know whether the buyer is asking for 3.0 compatibility or 3.1 semantics.
Repro / observed behavior
Against a local Sales Agent using Python SDK adcp==6.1.0b2:
python adcp package: 6.1.0b2
get_adcp_spec_version(): 3.1.0-beta.3
The agent capabilities currently advertise only:
{
"adcp": {
"major_versions": [3]
}
}
Running the default storyboard runner used @adcp/sdk 7.10.2 (AdCP 3.0.12) and failed both MCP and A2A on 3.0 status expectations:
3.0 MCP: 25 passed, 2 failed, 32 skipped; schemas: 3.0.12
3.0 A2A: 25 passed, 2 failed, 32 skipped; schemas: 3.0.12
media_buy_seller/pending_creatives_to_start/create_buy_no_creatives:
Status is pending_creatives because no creatives supplied at /status
expected=pending_creatives actual=completed
Running the beta storyboard runner used @adcp/sdk 8.1.0-beta.9 (AdCP 3.1.0-beta.3) and the status/media_buy_status issue disappeared:
3.1 MCP: 37 passed, 1 failed, 52 skipped; schemas: 3.1.0-beta.3
3.1 A2A: 37 passed, 1 failed, 52 skipped; schemas: 3.1.0-beta.3
The remaining 3.1 failure is unrelated local seller policy about duplicate product IDs across packages.
Expected behavior
The runner should make version intent explicit:
- 3.0 storyboards should send no exact version marker / no new 3.1 negotiation field. This preserves legacy behavior for buyers that predate exact version negotiation.
- 3.1 storyboards should send an explicit 3.1 marker on requests, or otherwise execute through a versioned negotiation path that an adaptive seller can observe.
- If a seller advertises exact supported versions, the runner should use that to select compatible storyboards/schemas or at least report a clear mismatch.
- The runner should distinguish "seller supports major v3" from "seller supports the exact 3.1 beta shape".
Notes
This is separate from #1961. That issue was about beta runner post-processing injecting a synthetic status. This issue is about version selection/negotiation across 3.0 and 3.1 storyboards.
Summary
The storyboard runner currently appears to choose schema/storyboard semantics from the installed JS SDK package line, rather than from an explicit buyer-requested AdCP version and/or exact seller capability metadata.
This makes 3.0 and 3.1 compatibility hard to validate against the same seller:
@adcp/sdkpackage line happened to be installed.Why this matters
In 3.1 beta, create/update media-buy responses split protocol envelope status from media-buy lifecycle status:
{ "status": "completed", "media_buy_status": "pending_creatives" }A legacy 3.0 buyer/storyboard expects lifecycle status at top-level
status:{ "status": "pending_creatives" }One unversioned response cannot satisfy both contracts. The seller needs to know whether the buyer is asking for 3.0 compatibility or 3.1 semantics.
Repro / observed behavior
Against a local Sales Agent using Python SDK
adcp==6.1.0b2:The agent capabilities currently advertise only:
{ "adcp": { "major_versions": [3] } }Running the default storyboard runner used
@adcp/sdk 7.10.2 (AdCP 3.0.12)and failed both MCP and A2A on 3.0 status expectations:Running the beta storyboard runner used
@adcp/sdk 8.1.0-beta.9 (AdCP 3.1.0-beta.3)and the status/media_buy_status issue disappeared:The remaining 3.1 failure is unrelated local seller policy about duplicate product IDs across packages.
Expected behavior
The runner should make version intent explicit:
Notes
This is separate from #1961. That issue was about beta runner post-processing injecting a synthetic
status. This issue is about version selection/negotiation across 3.0 and 3.1 storyboards.