Repository navigation
feat(schemas): adopt the maintained AdCP 3.1.33 and 3.2.10 compliance corpora - #3698
Conversation
… corpora SDK 16.7.0 packages the 3.1.32 and 3.2.8 corpora, so a seller cannot select --compliance-version 3.1.33 or 3.2.10, the releases hosted grading uses. Sync both signed bundles through the ordinary ADCP_REQUIRE_SIGNATURE=1 route and advance each line in place, as earlier 16.x patch adoptions did: the primary pin moves 3.2.8 -> 3.2.10 and the maintained 3.1 slot moves 3.1.32 -> 3.1.33. The retained 3.1.30 and 3.0.25 corpora are unchanged. Schema trees differ only in release identifiers and lastUpdated dates, so regenerated types change only provenance comments. Package size stays within the existing budgets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AdCP 3.2.10 gates collection_selection and owner_sold_channel_carriage on media_buy.buying_modes containing wholesale, in both domain and protocol copies. The exact census moves from 184 to 188 gated files (174 eligible); the compliance_testing count stays exactly 14. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — clean in-place compliance-corpus version adoption.
This PR advances compliance corpus versions (3.1.32→3.1.33 primary-maintained, 3.2.8→3.2.10 primary pin) consistently across version strings, generated artifacts, tests, docs, and the package files list.
Checked against repo-specific gates:
- Changeset-vs-wire-impact: The
patchchangeset is honest. COMPATIBLE_ADCP_VERSIONS gains 3.1.33/3.2.9/3.2.10 additively — no exports removed, no required-param flips, no response-shape change. Matches every prior 16.x adoption. - Witness-not-translator: The one substantive code change (3.2.10 entry in COMMERCIAL_SEMANTIC_OVERRIDES_BY_RELEASE at commercial-terms-semantics.ts:303) carries byte-identical reviewed semantics forward — no fabrication or re-shaping at a seam.
- Minor-release pathway: Additive coverage; covered by proposal-commercial-terms.test.js (3.2.10 reviewed; 3.2.9/3.2.11 deliberately unreviewed, mirroring existing 3.2.2 precedent).
- Generated-file diffs confirmed comment-only (core.generated.ts L1-2).
No Critical/High/Medium findings. high_risk false, gated_paths false, no author team gate, no prior decision. Rows 1–8 do not fire → row 9 approve.
…; resync registry types The AdCP 3.2.10 signal-marketplace specialism grades activate_signal on an unresolvable signal_agent_segment_id, expecting REFERENCE_NOT_FOUND or INVALID_REQUEST. SIGNAL_NOT_FOUND is reserved for unresolvable data-provider signal_id references. Port main's fix to the 16.x example adapter. Also regenerate the registry OpenAPI snapshot and types, which drifted from the live registry spec after the registry logo-background change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Pushed
|
There was a problem hiding this comment.
Ladon verdict: Approve
Approve.
Subsequent pass over a 3-file delta on top of a prior clean approve. The single current finding is Medium and example-only; no critical/high findings exist, no author-team gate, gated_paths is false (and review_decision is APPROVED regardless). high_risk is true only via schemas/registry/registry.yaml (modified), but the reviewer confirmed those changes are purely additive, the generated types mirror them faithfully, and the existing patch changeset holds — no medium-or-higher finding on the modified high-risk file, so row 5 does not fire. With exactly one medium finding and no escalation trigger, rows 1–8 do not match; outcome falls through to row 9.
Medium findings
- examples/hello_signals_adapter_marketplace.ts:646 — activate_signal example swaps resource-specific SIGNAL_NOT_FOUND for generic REFERENCE_NOT_FOUND on an unresolvable signal handle, with a rationale that inverts both codes' manifest text. Example-only, non-blocking.
Scope note: neither the example change nor the registry drift appears in the PR body's "What changed" list — worth a human glance but not blocking.
Medium findings
- examples/hello_signals_adapter_marketplace.ts:646 — activate_signal example swaps SIGNAL_NOT_FOUND for generic REFERENCE_NOT_FOUND on unresolvable signal handle
Why
A seller on
@adcp/sdk16.7.0 (npmlatestandadcp-3.2) cannot select--compliance-version 3.1.33: 16.7.0 packages the 3.1.32 and 3.2.8 corpora only, andadcp storyboard list --compliance-version 3.1.33fails with "Compliance cache not found". Hosted grading already uses AdCP 3.1.33 and 3.2.10. This patch packages both signed corpora so local runs can match hosted grading.Replace or add: each line advances in place
canonical_formatsandpricing_currency_filterrun under 3.1.30 but are gated behindcollect_product_pages_runnerfrom 3.1.32 on#3631's reason for adding alongside was specific to 3.1.30: it is the last 3.1 corpus where those storyboards still run on SDK 16. No such reason applies to 3.1.32. 3.1.33 carries the same four
collect_product_pages_runner-gated storyboards and adds no new requirement this SDK lacks. Its storyboard changes narrow selection to agents that actually declare a capability:product_signal_targetingnow requireswholesaleon both feeds, and the image-creative phases skip when a seller offers no image formats. It also moves delivery reporting ahead of the creative phase, and buildssync_creativesassets from the product's own format through$build_assets_from_format, which 16.x already implements. So the maintained slot advances, as it did before #3631. This also keeps the package inside the existing budgets with no cap changes.Adopter impact: explicit
--compliance-version 3.1.32or3.2.8flags now fail with the existing "Compliance cache not found" message. Move them to3.1.33and3.2.10, or stay on 16.7.0 for those exact bytes. The changeset anddocs/development/WIRE-VERSION-COMPAT.mdboth say this.Verification of the signed bundles
Synced only through the ordinary route, with no mirror,
--bundle,--protocol-commit, trust override orADCP_REQUIRE_SIGNATURE=0:Both syncs printed
sha256 verifiedandcosign signature verified. I also verified the bundles separately from the sync script, using cosign v3.1.4 checked against the sigstore release checksums:850f9ed9018548e5be6743cfb402ac8fedc4636bfe2aa75976237aa3da38e5ea764e07b0f566d95e0e0d689a7d40c7a699b8f921d7415ef34f19ac09169b5a47.sha256sidecar.tgz,.sig,.crt,.sha256)cosign verify-blob(repo identity regexp +token.actions.githubusercontent.com)release.yml@refs/heads/3.1.xrelease.yml@refs/heads/3.2.xadcontextprotocol/adcp·refs/heads/3.1.x·pushadcontextprotocol/adcp·refs/heads/3.2.x·push7237866d283c02efa627cb540625cf512d4511c95541479a368cc5b678727c0b80d7dc9bf8d8daae42620910821attempt 142621225452attempt 2v3.1.33=590bbf67…(signer commit + 1)v3.2.10=a6163fb4…(signer commit + 2)The built-in identity regexp accepts any ref under
release.yml, so I checked the certificate fields above directly instead of relying on the gate passing. The syncedcompliance/cache/3.1.33(295 files) and3.2.10(587 files) match the verified tarballs'compliance/trees byte for byte. I compared the retained3.0.25and3.1.30caches file by file against a pre-sync inventory: compliance 182 and 289 files, schemas 587 and 762 files, all byte-identical.Schema changes: none structural
With release identifiers and
lastUpdatednormalized away, the schema diffs for 3.1.32 → 3.1.33 (762 files) and 3.2.8 → 3.2.10 (1,577 files) are empty. Following #3484, I still regenerated the types for the primary pin. Every regenerated line insrc/lib/types/*andsrc/lib/server/*.generated.tsis a provenance comment (version or timestamp); there are no type changes.generate-registry-types --syncpulled unrelated live-registry drift, which I left out.What changed
ADCP_VERSIONandpackage.jsonadcp_version: 3.2.8 → 3.2.10.package.jsonfiles:compliance/cache/3.1.32→3.1.33and3.2.8→3.2.10.sync-schemas:allside sync: 3.1.32 → 3.1.33. 3.1.30 and 3.0.25 are kept.scripts/schemas-ensure.ts:MAINTAINED_3_1_SCHEMA_VERSION= 3.1.33; the comment says this slot advances in place and 3.1.30 is the retained one.scripts/check-publish-protocol-artifacts.mjs:MAINTAINED_COMPLIANCE_ROOTS= 3.0.25, 3.1.30, 3.1.33.scripts/sync-version.ts:LAST_3_1_GA_PATCH32 → 33,LAST_3_2_GA_PATCH8 → 10.src/lib/version.ts(ADCP_VERSION3.2.10;COMPATIBLE_ADCP_VERSIONSgains3.1.33,3.2.9,3.2.10),docs/migration-14.x-rc-worksheet.md,docs/llms.txt, and the generated types (comments only, see above).principal/reporting-corefixture provenance repinned tov3.2.10(a6163fb4…, bundle764e07b0…).--updatere-downloaded both files from the immutable commit and verified them; the bytes are unchanged and equal the 3.2.10 cache.src/lib/negotiation/commercial-terms-semantics.ts: adds the reviewed3.2.10entry, as fix(compliance): adopt signed AdCP 3.2.8 on SDK 16.x #3484 did for 3.2.8. The commercial-term schemas are structurally identical to 3.2.8. 3.2.9 stays unreviewed (never a primary pin, like 3.2.2).WIRE-VERSION-COMPAT.md(bundle tree, in-place advance, adopter flag migration, packaged inventory, controller siblings),CLI.md,VALIDATE-YOUR-AGENT.md..changeset/brave-corpora-advance.md:patchfor@adcp/sdk. 16.x has no.changeset/pre.json, and this is the only pending changeset.Test updates
versioned-tool-schemas,schema-bundle-compliance-controller(closure sizes re-confirmed against the real corpora: 2 for 3.1.33, 4 for 3.2.10),storyboard-account-subject-identity, both creative build-probe tests,version-sync,compliance-storyboard-index,compliance-universal-metadata,integrator-discovery-regressions,storyboard-selector-route-equivalence,canonical-compliance-storyboard-fixtures(source commit and bundle digest),proposal-commercial-terms(3.2.10 reviewed; 3.2.9 and 3.2.11 must still fail as unreviewed).check-publish-protocol-artifacts.test.js: 3.1.32 and 3.2.8 must not be infiles,sync-schemas:allmust not sync 3.1.32, and a packed 3.1.32 or 3.2.8 corpus is now rejected as an unsupported bundle.storyboard-capability-rollup.test.js): the exact count of root-capability-gated files in the primary corpus moves from 184 to 188, and the eligible count from 170 to 174. 3.2.10 adds arequires_capability: media_buy.buying_modes contains wholesalegate tocollection_selectionandowner_sold_channel_carriage, in both thedomains/andprotocols/copies. That is exactly +4 files, and I confirmed it by diffing the gated-file list between the 3.2.8 and 3.2.10 caches. Thecompliance_testingcount stays at exactly 14. All three assertions are still exact equalities, and the test gets a ledger comment like the earlier 3.2.3 and 3.2.6 entries.Results
format:check,typecheck,build,lint(0 errors),lint:boundaries,ci:doc-linksandci:docs-checkall pass.npm test: fast group 0 failures; the slow group's one failure was the census above (fixed and re-run green in isolation, 46/46). The final slow, workspace andcheck:package(publint, attw) runs will be added here when they finish.bin/adcp.js:storyboard list --compliance-version 3.1.33lists 125 storyboards and--compliance-version 3.2.10lists 214, both with no loader errors.storyboard show media_buy_seller/product_signal_targetingunder both versions loads therequires_all_capabilitiesgate (media_buy.buying_modesandsignals.discovery_modesbothcontains: wholesale).product_signal_targetingstoryboards throughrunStoryboardagainst a stub client. A brief-only signals seller, which the 3.1.32/3.2.8present: truegate would have selected, getsnot_applicablewith zero calls. A seller that declareswholesaleon both feeds passes the gate.Package size (real
npm pack --dry-run, both sides)d857f18(16.7.0)signal-marketplace/error_compliance.yaml)No budget changed.
check:package-sizeandcheck:publish-protocol-artifactspass.Scope
No manual version, lockfile or dist-tag edits. No release PR or publish. The release PR stays separate.
🤖 Generated with Claude Code