Repository navigation
Description
Customer problem
A seller offering only guaranteed inventory can correctly return a submitted task for create_media_buy and pass the sales_guaranteed IO approval storyboard, yet fail the inherited media_buy_seller baseline. The 3.x core flow and several mandatory scenarios use non-guaranteed fixtures or require an immediately issued media_buy_id. This prevents a complete media-buy grade for a valid guaranteed-only seller. The goTom seller is currently seeking a green core badge; its 20-minute owner attempt passed 51/51 reached core scenarios but timed out overall, so an extended complete run should be tried first.
Required design
- Publish a versioned, delivery-mode-aware
media_buy_sellerbaseline. Discover the chosen product'sdelivery_typebefore create. - Preserve direct synchronous create and follow-on assertions for non-guaranteed products. For guaranteed products, exercise submitted task → sandbox approval or bounded completion →
get_task_status→ exact buy ID/status readback. - Keep immediate negative preflight checks immediate. Use capability gates only for genuinely optional behavior; missing approval controller coverage must be reported as incomplete rather than
not_applicable. - Adapt every inherited scenario that requires a buy ID, including the core flow and other mandatory non-guaranteed fixture scenarios. Do not fix only the five scenarios listed by the specialist manifest.
- Add a bounded per-step task polling budget or deterministic controller completion. The SDK runner currently defaults to 30 seconds globally.
- Test guaranteed-only, mixed-catalog, and non-guaranteed-only training sellers end to end. The guaranteed-only agent must be able to reach a complete passing media-buy grade without weakening the synchronous path.
Published 3.1 bundles are immutable. If this needs to help 3.1 sellers, release a new 3.1.x patch through the supported backport flow and roll the hosted SDK/cache forward; do not edit old dist/compliance versions in place.
Activity
bokelley commentedon Oct 1, 2026
Triage
Classification: Feature request / spec-adjacent enablement
Bucket(s): compliance-suite, media-buy
Status: ready-for-human
Milestone: 3.1.x
What the experts said:
delivery_type: non_guaranteedfixtures and capturesmedia_buy_idunconditionally incontext_outputs; asubmittedresponse has nomedia_buy_id. Fix splits: new additivemedia_buy_seller_guaranteedbaseline is patch-eligible (3.1.x); modifying the basecreate_buyphase is not (3.2.0). No wire or schema changes needed — the protocol already supports all three create-media-buy response arms.sales_guaranteedspecialism covers the IO-approval loop but not the base baseline failure. Base-flow modification cascades into 50+$context.media_buy_idreferences — that's repurposing existing step logic, not additive. Per-step polling budget is an adcp-client SDK concern, not a storyboard YAML change.My take: The conformance gap is real. A guaranteed-only seller cannot pass the base
media_buy_sellerbaseline today regardless of how well their implementation conforms to the spec. The issue also recommends trying an extended run for the goTom seller first — that should happen before committing to either option.Option A — 3.1.x patch: new additive guaranteed baseline (patch-eligible)
Unblocks goTom on 3.1.x now; base
media_buy_sellermodification deferred to 3.2.0.Option B — 3.2.0: delivery-mode-aware base flow (not patch-eligible)
Unified fix; all conformant sellers (guaranteed-only, mixed, non-guaranteed-only) pass the same base baseline; ships after 3.2 GA.
@bokelley — once the extended run for goTom completes, your call: Option A (ship a separate guaranteed-only baseline as a 3.1.x patch now) or wait for Option B in 3.2.0?
Triaged by Claude Code. Session: https://claude.ai/code/session_019Ed9zLXUXMFiGmyoebC9LJ
Generated by Claude Code
fix(media-buy): harden delivery-mode gates and cover the declaration …
bokelley commentedon Oct 6, 2026
WG decision brief (3.3)
Decided (2026-10-19): #7973 is held to 3.4. It stays a draft as the 3.4 candidate; 3.3 keeps the docs note. Option B (scenario adaptation) and the SDK default-resolution fix are the 3.4 path.
Problem. A guaranteed-only seller returns a
submittedtask for everycreate_media_buy, so it has nomedia_buy_idfor the follow-on checks in the inheritedmedia_buy_sellerbaseline, which also uses non-guaranteed fixtures. It can passsales-guaranteedand still never get a complete media-buy grade. Who is pulling: goTom was named, but the public record says delivery mode is not what blocks them. Their 20-min owner run passed 51/51 core scenarios (68/74 storyboards, audit-only; #7854), and the 2026-10-02 hosted run was core 58/59 with the single failure unrelated (#7889). The run-time blocker was fixed by #7854. I could not confirm with goTom whether their seller is guaranteed-only. I read 51/51 as "sells whatever the runner seeds".Evidence (training seller made faithfully guaranteed-only): 16 of 56 base storyboards fail (23 steps): hard-coded non-guaranteed fixtures,
submittedarm with nomedia_buy_id, or discovery asserting non-guaranteed products. No adopter failure has been reported.Proposed shape — draft #7973, a ready option, not a request to merge (additive; changeset +
status: proposedDR; CI green):{ "media_buy": { "supported_delivery_types": ["guaranteed"] } }Optional, schema default
["guaranteed","non_guaranteed"](absent = today's behavior). It gates 35 inherited scenarios and the basenot_applicablefor a seller that declares guaranteed-only, and adds amedia_buy_seller_guaranteedbaseline (submitted → controller completion →get_task_status→ readback → delivery) selected only for that seller. Result on the training sellers: guaranteed-only 0 failed steps (was 23), mixed unchanged, non-guaranteed-only unchanged by the gates.Risks stated plainly (expert review): (1) gates rely on the runner resolving the schema default; with no 3.3 schema root, or a capabilities response with no
media_buyblock, an undeclared seller silently gradesnot_applicableon ~35 scenarios (reproduced; SDK-side fix needed); (2) coverage for guaranteed-only sellers drops from 189 to 106 passing inherited steps, so it is a reduced-coverage profile, not parity; (3) the MUST-reject-undeclared-mode rule is attestation-only; a mixed seller could declare guaranteed-only to dodge scenarios.Open questions for the WG
$context.media_buy_idrefs) is the complete fix. Pick: (a) ship feat(media-buy): declare delivery modes and grade guaranteed-only sellers on a matching baseline #7973 in 3.3, or (b) hold to 3.4 and do B. Recommend (b): no adopter has failed, and it freezes a schema field and a MUST into 3.3 on a synthetic seller. 3.3 keeps the docs note and a call for a guaranteed-only publisher to run the suite.not_applicable? Yes, using the existingmissing_test_controllerskip (never a complete grade). A newincompletereason is a runner-output-contract + SDK change. Recommend defer that to 3.4.UNSUPPORTED_FEATURE(no new code).Out of scope / deferred. Adapting scenario bodies (3.4 Option B, which removes the temporary gates); the SDK default-resolution fix for an absent
media_buyblock; anincompleteskip reason; per-step polling budget (SDK repo); any change tosales-guaranteed/sales-non-guaranteedclaims.bokelley commentedon Oct 31, 2026
Decided on 2026-10-19 (#7852 (comment)): #7973 (delivery-mode declaration and guaranteed baseline) is held to 3.4, so this moves to 3.4. Objections by Fri 2026-11-06.
Only the docs grading note and the resumable, bounded full verification from #7854 (3.3.0-beta.0) landed in 3.3. The milestone stays 3.3.0 for now; it will be moved after Nov 6. #8452 overlaps the declaration part.