chore(deps): bump AdCP to 3.0.6 + close end-to-end gaps for guaranteed worked example#1510
Merged
Merged
Conversation
…d worked example Bumps `ADCP_VERSION` to 3.0.6 to pull in two upstream fixture fixes: adcontextprotocol/adcp#3989 (sandbox:true on inventory_list_targeting account blocks; closes adcp-client#1415 from the fixture side) and adcontextprotocol/adcp#3990 (task_completion.media_buy_id path on sales_guaranteed/create_media_buy; closes adcp-client#1417 from the fixture side). adcp-client#1416 closed earlier in Phase 4. Surfacing 3.0.6 against hello_seller_adapter_guaranteed turned up three latent SDK gaps that prevented the storyboard from passing unfiltered: 1. tasks_get registered only under the underscore tool name. Buyer-side TaskExecutor.getTaskStatus calls the spec's slash form `tasks/get` via ProtocolClient.callTool. Now registered under both names so spec-name callers reach the handler. Fixes the 30s `tasks/get poll timed out` failure on every HITL flow. 2. tasks_get input schema accepted only {account_id} and rejected the natural-key {brand, operator, sandbox} arm — same shape gap Phase 2 fixed for comply_test_controller. Schema now matches the full canonical AccountReference. 3. AgentClient (the public client from multiClient.agent(id)) didn't expose its underlying TaskExecutor. The storyboard runner's pollTaskCompletion checks client.executor and silently fell back to webhook-only racing — which times out for fixtures whose push URL doesn't address a runner-controlled webhook. Added @internal executor getter on AgentClient that proxies to SingleAgentClient.executor. hello_seller_adapter_guaranteed (worked example): - accounts.resolve(undefined, ctx) auth-derived fallback so the framework's tenant boundary on tasks/get can resolve a tenant from ctx.authInfo alone. Without it, every HITL poll fails REFERENCE_NOT_FOUND. - taskRegistry hoisted out of the serve() factory so tasks survive across requests. - createMediaBuy HITL bypass yields to the buyer's push_notification_config. Sandbox-mode + push-config goes through HITL (matching the sales_guaranteed storyboard's narrative); sandbox-mode + no-push still bypasses for cascade scenarios. - getMediaBuyDelivery.by_package[] now includes pricing_model, rate, currency per AdCP 3.0.6's tightened required fields. Allowlists: - hello-seller-adapter-guaranteed: EXPECTED_FAILURES = []. Storyboard passes unfiltered. - hello-seller-adapter-non-guaranteed: #1415 entry dropped; #1416 retained — the SDK helper exists, the non-guaranteed example hasn't been migrated to assertMediaBuyTransition yet. Test plan: - npm run test:lib — 6022/6022 pass - All 7 hello-adapter test files green - Live storyboard run against the boots: 30/30 scenarios pass on guaranteed, no allowlist filter - npm run format:check — clean Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pulls in 4 commits: - feat(mock-server+adapter): audio creative-template TTS/mix/master (#1508) - docs(skills): pivot to fork-matrix; collapse build-*-agent SKILL.md (#1496) - feat(server): ConformanceClient Socket Mode primitive (#1506) - fix(conformance): get_media_buys enricher resolves account via resolveAccount(options) (#1489) Conflict resolution: - src/lib/version.ts: regenerated by sync-version against ADCP 3.0.6. - test/examples/hello-seller-adapter-guaranteed.test.js: kept the post-3.0.6 EXPECTED_FAILURES = [] state. The #1505 entry main added (update→get echo gap surfaced once the get_media_buys account-resolution fix landed) is closed end-to-end by 3.0.6's fixture sandbox-namespace alignment + main's runner-side resolveAccount(options) fix (#1489). Verified by running the storyboard unfiltered: all scenarios pass. - test/examples/hello-seller-adapter-non-guaranteed.test.js: same #1505 entry was added on main and is no longer needed post-3.0.6. Kept the #1416 (NOT_CANCELLABLE) entry — that's a non-guaranteed-specific gap. Verified post-merge: - npm run build clean - npm run test:lib — 5999/5999 pass - All 8 hello-adapter test files green (incl. multi-tenant which main added) - npm run format:check clean Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pulls in 2 commits: - fix(testing/storyboard): symmetric account resolution on update_media_buy enricher (closes #1505) (#1509) - fix(adapters): declare output slot in creative formats per creative-manifest.json:14 (#1511) Conflict resolution: - test/examples/hello-seller-adapter-guaranteed.test.js: main re-added a #1417 entry. 3.0.6 closes #1417 from the fixture side (adcp#3990) and the storyboard runs unfiltered against 3.0.6, so the post-bump state remains EXPECTED_FAILURES = []. - test/examples/hello-seller-adapter-non-guaranteed.test.js: kept the longer-form `reason` text on the #1416 entry — explains both the SDK helper status (shipped in #1427) and the non-guaranteed adopter gap (not yet wired) so the next reader knows where the work belongs. Verified post-merge: - npm run build clean - npm run test:lib — 6027/6027 pass - 6/6 hello-adapter tests for the modified files green - npm run format:check clean Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CI's drift check (`npm run generate-types:all`) caught that the AdCP 3.0.6 bump didn't include the regenerated derivatives: - src/lib/types/core.generated.ts — refreshed via json-schema-to-typescript off schemas/cache/3.0.6/ - src/lib/types/manifest.generated.ts — adcp_version field flipped from 3.0.5 to 3.0.6, and GOVERNANCE_DENIED / GOVERNANCE_UNAVAILABLE description prose updated per upstream's wire-placement guidance expansion in 3.0.6 Both are auto-generated from `schemas/cache/3.0.6/` — no semantic SDK changes, just the regenerated outputs CI expected. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pulls in 4 commits: - docs(skills): close three #1496 follow-up review items + seller adapter format slot sweep (#1515) - docs(migration): add recipe #10b for derived-mode account_id refusal (#1492) (#1512) - fix(codegen): preserve asset_type discriminator on Individual*Asset slot types (closes #1498) (#1514) - fix(examples): wire assertMediaBuyTransition into hello_seller_adapter_non_guaranteed (closes #1499) (#1513) Conflict resolution: - src/lib/types/core.generated.ts: kept the 3.0.6 generation header from HEAD; ran `npm run generate-types:all` against the local mirror to pull in main's #1514 codegen fix (asset_type discriminator preserved on Individual*Asset slots) layered on top of 3.0.6 schemas. - test/examples/hello-seller-adapter-non-guaranteed.test.js: kept main's empty allowlist + new helper-shape conditional. Main's #1513 closes #1416 by actually wiring `assertMediaBuyTransition` into the non-guaranteed adapter — superseding the follow-up note my branch carried. Verified post-merge: - npm run build clean - 6/6 hello-adapter tests for the modified files green - npm run format:check clean Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ion expansion CI's `Validate agent docs are in sync` step caught that the 3.0.6 bump expanded the GOVERNANCE_DENIED / GOVERNANCE_UNAVAILABLE description fields in the manifest, and the auto-generated agent docs hadn't been re-emitted to match. - docs/llms.txt — refreshed from src/lib/types/manifest.generated.ts - docs/TYPE-SUMMARY.md — same Both auto-generated by `npm run generate-agent-docs`. No semantic SDK changes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This was referenced May 3, 2026
bokelley
added a commit
that referenced
this pull request
May 3, 2026
…itations (#1526) * chore(version): add 3.0.6 to COMPATIBLE_ADCP_VERSIONS + bump 3.0.5 → 3.0.6 schema citations PR #1510 bumped ADCP_VERSION to 3.0.6 but didn't add 3.0.6 to the COMPATIBLE_ADCP_VERSIONS literal union in scripts/sync-version.ts. Callers passing { adcpVersion: '3.0.6' } fell through to the (string & {}) escape hatch — still accepted at runtime, but no editor completion. Closes the gap by appending '3.0.6' to the list; src/lib/version.ts regenerated via npm run sync-version. Plus 4 schema-citation bumps so user-facing surfaces line up with the pinned version: - skills/cross-cutting.md (§ Spec reference) - skills/SHAPE-GOTCHAS.md (§7 signal_type) - examples/hello_seller_adapter_social.ts (audience.json comment) - src/lib/server/decisioning/runtime/from-platform.ts (account-ref.json comment) docs/migration-6.6-to-6.7.md 3.0.5 references are historical (the migration target was 3.0.5) and stay unchanged. Local tracking issues filed for the upstream spec gaps the team is waiting on: - adcp-client#1523 (waits on adcp#4015 — audio variant phase for creative_template storyboard) - adcp-client#1525 (waits on adcp#4021 — output_only flag on format.assets[]) Both upstream issues remain OPEN. Validated: fork-matrix 23/23, typecheck + format clean. Pure additive at wire and type level — COMPATIBLE_ADCP_VERSIONS extends backward compat, no existing strings change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * fix(adapter): repoint hello_seller_adapter_social comment to existing schema code-reviewer caught a pre-existing broken schema citation in examples/hello_seller_adapter_social.ts:188. The comment cited /schemas/3.0.6/core/audience.json — a file that has never existed in either 3.0.5 or 3.0.6. The surrounding prose describes SyncAudiencesRow's matched_count + effective_match_rate fields, which actually live at schemas/cache/3.0.6/media-buy/sync-audiences-response.json. Repointed. Pure comment-only fix. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Merged
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
Bumps the SDK's pinned
ADCP_VERSIONfrom 3.0.5 to 3.0.6 and runs thehello_seller_adapter_guaranteedstoryboard suite unfiltered, end-to-end, for the first time. Surfacing 3.0.6 turned up three latent SDK gaps; this PR closes them.Spec sync
3.0.6 ships our two upstream fixture PRs:
adcontextprotocol/adcp#3989—media_buy_seller/inventory_list_targetingaddssandbox: trueon every account block. Closes SDK: opinionated MediaBuyStore + auto-echo for targeting_overlay #1415 from the fixture side; SDK side shipped viacreateMediaBuyStoreauto-echo (PR feat(server): createMediaBuyStore — opt-in targeting_overlay echo (#1415) #1424).adcontextprotocol/adcp#3990—sales_guaranteed/create_media_buyusestask_completion.media_buy_idforcontext_outputs.path. Closes Storyboard runner: can't capture context_outputs.path from HITL task completion artifact #1417 from the fixture side; SDK side shipped via runner'stask_completion.<path>prefix (PR feat(runner): task_completion. path prefix on context_outputs (#1417) #1426).#1416 (NOT_CANCELLABLE) closed earlier in Phase 4 (
assertMediaBuyTransitionwired into the guaranteed adapter).SDK fixes for the round-trip
tasks_getregistered only under the underscore name. Buyer-sideTaskExecutor.getTaskStatuscalls the spec's slash formtasks/getviaProtocolClient.callTool. Framework now registers under bothtasks/get(spec) andtasks_get(legacy alias). Fixes the 30stasks/get poll timed outfailure on every HITL flow.tasks_getinput schema only accepted{account_id}and rejected the natural-key{brand, operator, sandbox}arm — same shape gap Phase 2 fixed forcomply_test_controller. Now matches the full canonicalAccountReference.AgentClientdidn't exposeexecutor. The storyboard runner'spollTaskCompletionaccessesclient.executor; onAgentClient(the public client returned bymultiClient.agent(id)) it was undefined, socanPollwas always false and the runner fell back to webhook-only racing — which times out for fixtures whosepush_notification_config.urldoesn't address a runner-controlled webhook. Added an@internalexecutorgetter that proxies to the wrappedSingleAgentClient.Hello seller-guaranteed adapter (worked example)
accounts.resolve(undefined, ctx)auth-derived fallback so the framework's tenant boundary ontasks/getresolves a tenant fromctx.authInfoalone. Returns the production singleton (matching the account that owned the original task).taskRegistryhoisted out of theserve()factory so HITL tasks survive across requests.createMediaBuyHITL bypass yields to the buyer'spush_notification_config. Sandbox-mode + push-config goes through HITL (matchingsales_guaranteed's narrative); sandbox-mode without push-config still bypasses for cascade scenarios.getMediaBuyDelivery.by_package[]now includespricing_model,rate,currencyper AdCP 3.0.6's tightened required fields.Allowlists
hello-seller-adapter-guaranteed.test.js—EXPECTED_FAILURES = []. Storyboard passes unfiltered against 3.0.6.hello-seller-adapter-non-guaranteed.test.js—#1415dropped (3.0.6 closes it).#1416retained: the SDK helper exists, the non-guaranteed worked example hasn't been migrated toassertMediaBuyTransitionyet — follow-up.Test plan
npm run buildcleannpm run test:lib— 6022/6022 passtest/examples/hello-*.test.jsfiles greensales_guaranteed, no allowlist filternpm run format:checkcleanRefs
🤖 Generated with Claude Code