feat(storyboards): refs_resolve validation on media_buy_seller (closes #2597)#2601
Conversation
…ller
Document the refs_resolve check primitive in storyboard-schema.yaml and
wire it onto the list_formats step of media_buy_seller. Every format_id
returned on products is asserted to resolve to a format in this agent's
list_creative_formats response, matched on {agent_url, id}. Scope filtering
via $agent_url enforces integrity only for refs on the agent under test;
third-party refs (format_ids pointing at a different creative agent)
surface as observations rather than failures.
Without this check, broken format_id references are silent until
sync_creatives fails at runtime — after the media buy is already committed.
Closes #2597.
Runtime support ships in @adcp/client 5.7.0 (adcp-client#671).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
@adcp/client 5.8.0 is out with refs_resolve (adcp-client#671 merged). Installed and verified end-to-end against the reference test agent:
One real issue surfaced during the probe: on the reference MCP agent, every ref falls out-of-scope because That fix is runner-side and orthogonal to this PR — the storyboard wiring here is correct. Marking ready. |
…on follow-up - Changeset: 5.7.0 → 5.8.0 (actual release containing refs_resolve runtime) - storyboard-schema.yaml: note adcp-client#710 canonicalization work on $agent_url so authors understand the MCP out-of-scope behavior observed during verification is a known runner-side refinement, not a spec gap Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
Ran through protocol / code / security expert review. Findings actioned: Landed in this PR (commit 9f25acf):
Dismissed (false-positive):
Runner follow-ups filed:
This PR is self-contained and correctly wires the check. The runner refinements land separately in adcp-client and flow through on next release. |
# Conflicts: # package-lock.json # package.json
# Conflicts: # package-lock.json # package.json
Summary
refs_resolvecross-step validation primitive instoryboard-schema.yaml— sets up the contract for asserting that refs in a source set (e.g.products[*].format_ids[*]) resolve to members of a target set (e.g.formats[*].format_id), matched on declaredmatch_keys.list_formatsstep ofmedia_buy_seller. Everyformat_idreturned on products must resolve to a format in this agent'slist_creative_formatsresponse. Scope filter via$agent_urlenforces integrity only for refs on the agent under test; third-party refs surface as observations, not failures.format_idreferences are silent untilsync_creativesfails at runtime — after the media buy is committed.Closes #2597.
Blocked on
adcp-client#671 —
refs_resolveruntime implementation, shipping in@adcp/client5.7.0. Our existing^5.5.0range already permits 5.7.0, so nopackage.jsonbump is needed; CI picks it up onnpm installonce published. Marked draft until 5.7.0 is released — at that point the refs_resolve validation will execute instead of returningUnknown validation check.Test plan
@adcp/client5.7.0 ships: runserver/tests/manual/storyboard-validation.ts --storyboard media_buy_selleragainst the reference test agent and confirm the new check executes (pass expected — test agent's format_ids should resolve)format_idand confirm the check names the bad{agent_url, id}inactual.missingFollow-ups (separate)
list_creative_formatson third-partyagent_urls) is deferred — currently those refs warn. Gating on a test-kit flag is the natural next step.🤖 Generated with Claude Code