fix(storyboards): make list_formats_integrity actually send format_ids (closes #2848)#2885
Merged
Conversation
…mats_integrity (closes #2848) The @adcp/client (≤5.11) list_creative_formats request builder returns {} and the runner only forwards envelope fields from sample_request. The storyboard's `format_ids: ["$context.product_format_id"]` therefore never reached the wire and the seller answered with its full unfiltered catalog, making the round-trip assertion fail by coincidence rather than because the seller substituted formats. Use the runner's context_inputs (applied after the builder) to inject the captured {agent_url, id} object at format_ids[0]; document context_inputs in the storyboard schema as a temporary bridge tied to adcontextprotocol/adcp-client#797. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…t#789 The upstream fix landed (PR #789, closing #780) — issue #797 was a duplicate and is now closed. Update the storyboard YAML, schema doc, and changeset to reference the merged PR so the removal trigger is "@adcp/client release that ships #789" instead of an open issue. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Address docs-expert feedback on #2885: - Lead the context_inputs field doc with the prohibition ("do NOT use unless …") instead of the preference, and name the observable symptom (unfiltered agent response) an author can diagnose from. - Add an inline YAML snippet in the schema doc so authors don't have to navigate to the media-buy worked example to see the shape. - Call out that context_inputs silently no-ops on a missing key (distinct from $context.<name>'s loud unresolved_substitution), so the default path has better failure modes. - Acknowledge dependency-aware multi-instance dispatch as a legitimate non-workaround use so the framing isn't "escape hatch only." - State type-preservation behavior explicitly. - Cross-reference from the sample_request field definition and the substitution-syntax section so authors land on context_inputs instead of scrolling past the field definitions. - Pin the inline comment to the currently-published @adcp/client 5.10.0 (not 5.11, which is unreleased) so the version claim doesn't drift when 5.11 ships. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Contributor
Author
|
Expert review (ad-tech-protocol-expert + docs-expert) ran on the diff. Addressed in-scope feedback in
Out-of-scope follow-ups flagged by the reviewers (not blockers for #2848; will file separately if confirmed):
None of these change the correctness of this fix. |
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
media_buy_seller / list_formats_integritystoryboard step asserts the seller round-trips aformat_idfilter verbatim, but the assertion was failing because the filter never reached the wire — the@adcp/client(≤5.11)list_creative_formatsrequest builder returns{}and only envelope fields (context,ext,idempotency_key,push_notification_config) survive the runner's merge. The seller responded with its full unfiltered catalog andformats[0].format_idhappened to bedisplay_static≠ the capturedsponsored_product. Training-agent filter logic was already correct.context_inputs(applied after the builder runs) to inject the captured{agent_url, id}object atformat_ids[0]. This is the documented escape hatch for "builder strips body fields"; first in-repo use, so the storyboard schema doc gets a correspondingcontext_inputsblock tied to list_creative_formats request builder ignores sample_request — format_ids filter never reaches the wire adcp-client#797.creative_fate_after_cancellationsync_creatives shape) was already fixed by fix(storyboards): use literal creative_id in creative_fate reassign (closes #2850) #2867 / Storyboard YAML: creative_fate_after_cancellation reassign step resolves $context.creative_id to undefined, stripping required creatives[] #2850.Test plan
npm run build:compliance— cleannpm run typecheck— cleanscoping,branch-sets,contradictions,context-entity,auth-shape,test-kits,sample-request-schema) — passADCP_COMPLIANCE_DIR=dist/compliance/latest run-storyboards.ts --filter media_buy_seller(legacy dispatch) — 14/14 clean, 73 passedTRAINING_AGENT_USE_FRAMEWORK=1 ADCP_COMPLIANCE_DIR=… run-storyboards.ts --filter media_buy_seller—list_formats_integritynow passes; remaining failures on framework path are pre-existing session-state issues unrelated to media_buy_seller: format_id round-trip (substitution observer) + creative_fate_after_cancellation sync_creatives shape #2848.Follow-up
context_inputsand rely onsample_request.format_idsonce list_creative_formats request builder ignores sample_request — format_ids filter never reaches the wire adcp-client#797 ships and we bump the SDK pin.🤖 Generated with Claude Code