Repository navigation
feat(protocol)!: adopt the signed AdCP 3.3.0-beta.2 bundle - #1732
Conversation
Pin src/adcp/ADCP_VERSION to 3.3.0-beta.2 from the audited, cosign-verified release (schemas/releases/3.3.0-beta.2.json, source commit 53e7677df65a from the Fulcio certificate, bundle sha256 d75dc901...). Resync the schema cache, packaged compliance inputs and request-signing vectors with --require-signed-release, regenerate types and the public API snapshot. Beta.2 adds request_account's allow_separate_account with created/matched change outcomes and the ACCOUNT_CHANGE_REQUIRES_NEW_ACCOUNT error code, the settled reporting-subscription fields, experimental seller offers and measurement provenance. adcontextprotocol/adcp#8537 withdrew definition pins, purchase rights and installment selection from 3.3: their generated types leave the tree, ReferenceDefinitionChangedDetails and DefinitionPinReferenceKind leave adcp.types.error_details, and the definition_pin_probe test-controller scenario is removed. The wheel ships the 3.3.0-beta.2 schemas and compliance tree; the beta.1 trees stay in the repository as history and are pruned from distributions. BREAKING CHANGE: the SDK no longer advertises or accepts AdCP 3.3-beta.1. get_supported_adcp_versions() is ('3.0', '3.1', '3.2', '3.3-beta.2', '3.2-rc.7'); an adcp_version pin of "3.3-beta.1" / "3.3.0-beta.1" raises ConfigurationError, and a peer that advertises only 3.3-beta.1 among the 3.3 line is negotiated like any other unserved prerelease (down to 3.2). Re-pin to 3.3-beta.2 or omit the pin. The definition-pin, purchase-rights and installment-selection types and TestControllerStore.definition_pin_probe are removed. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — clean adoption of the signed AdCP 3.3.0-beta.2 bundle.
The PR introduces new schema cache files under schemas/** (all added) plus paired regeneration of domains/** with the ADCP_VERSION bump. The breaking surface removals (DefinitionPin*, DefinitionPinReferenceKind, ReferenceDefinitionChangedDetails, ErrorCode.REFERENCE_DEFINITION_CHANGED, DriftedPin, RightsScope, InstallmentChangeSet, RightUse.paid_amplification/content_reuse, TestControllerStore.definition_pin_probe) carry the required semver signal — feat(protocol)! plus a BREAKING CHANGE footer — and are documented in MIGRATION_v9_to_v10.md and inventory §12; the public_api_snapshot diff matches exactly. Asset unions (format.py) and the forward-compat/aliases/ergonomic layer are untouched. Beta.1 pruning keeps its cache as source history, and adoption/conversion-sweep/downgrade tests assert beta.0 and beta.1 rejection.
Decision-table walkthrough:
- No critical/high/medium findings (rows 1, 4, 5, 8 do not fire).
- gated_paths is false (row 2 n/a).
- high_risk is true, but every high_risk_reasons entry is
(added)— new scaffolding, no deletions or modifications, so rows 3 and 5 do not fire. New files matching high-risk globs are normal regeneration/adoption work, not escalation-worthy on the flag alone. - No no-auto-approve team match (row 7 n/a) and no prior decision (row 6 n/a).
No row 1–8 triggers → row 9 → approve.
AdCP 3.3.0-beta.2 drops the schema default on notification-config product_payload_view and states it in prose: absent means legacy. The generated field now defaults to None, so the serializer that re-added the default on product subscriptions would have emitted an explicit null. Emit the view only when one is set, and update the wire-default tests and docs. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — clean delta, no blocking or medium findings.
The schema cache additions under schemas/cache/3.3.0-beta.2/** are all new files (high_risk flag fires on (added) only — normal scaffolding, not escalation-worthy). The single code change at src/adcp/types/base.py:902-905 adds an if view is not None guard so an unset product_payload_view stays absent rather than serializing an explicit null under 3.3.0-beta.2. Reviewer confirms absent-means-legacy on both the 3.2 (schema default) and 3.3-beta.2 (prose) ends — a droppable field with a valid pathway back per the minor-release wire-change rule. Docs and both wire-default tests match the new behavior, satisfying the pathway-test requirement.
Gate checks: gated_paths is false; review_decision is APPROVED; no no-auto-approve team match; prior decision was approve. No critical/high/medium findings surfaced. With rows 1–8 of the decision table unmatched, this falls through to row 9 = approve.
Adopts the signed AdCP 3.3.0-beta.2 release on
next(SDK 10 beta line), following #1691.Breaking change:
3.3-beta.1is droppedThe SDK no longer advertises or accepts AdCP
3.3-beta.1. This matches how3.3-beta.0and the 3.2 release candidates were dropped once superseded.get_supported_adcp_versions()→('3.0', '3.1', '3.2', '3.3-beta.2', '3.2-rc.7')adcp_version="3.3-beta.1"/"3.3.0-beta.1"now raisesConfigurationError.3.3-beta.1for the 3.3 line is negotiated like any other unserved prerelease, down to3.2.3.3-beta.1(the SDK10.0.0-beta.2default) should re-pin to3.3-beta.2or remove the pin.The commit is
feat(protocol)!:with aBREAKING CHANGE:footer. Onnext, release-please still only bumps the beta number.Release pin
schemas/releases/3.3.0-beta.2.jsonrecords the four artifacts' sizes and sha256. They were cosign-verified (Verified OK) againstrelease.yml@refs/heads/main.d75dc90192a2d13ffae2103f30bd505040a7ff0a40f8a7946d82730428dd6e8a.53e7677df65ab0abd045b47257c93040952f687dcomes from the Fulcio certificate (OIDs1.3.6.1.4.1.57264.1.3/.13). Thev3.3.0-beta.2tag (fa39ca87) is its "Version Packages" child, the same layout as beta.1.scripts/sync_schemas.py --require-signed-release, then ran the full regeneration chain and the public API snapshot:fix_schema_refs,bundle_schemas, versioned stubs/bases,generate_types,consolidate_exports,generate_ergonomic_coercionmake validate-generatedchecks are clean.What beta.2 changes in the SDK
request_account:allow_separate_account(defaultfalse) and thecreated/matchedchange outcomes. The new correctable error codeACCOUNT_CHANGE_REQUIRES_NEW_ACCOUNTtakes its recovery from the pinnedenumMetadata, with no hand-maintained table to update.standard_dimensions/unmapped_dimensionsinactive_intervalsprior_versions[].configurationoffering_idongaps[]/timezone_cutovers[]/excluded[]previous_timezoneproposal_initiator,offer_reasonandProposalOfferedWebhook.CollectionMechanism,counting_mechanismsandVendorMetricProvenance.DefinitionPin*,DefinitionPinReferenceKind,ReferenceDefinitionChangedDetails,DriftedPin,RightsScope,InstallmentChangeSetErrorCode.REFERENCE_DEFINITION_CHANGED,definition_changedadcp.types.error_detailsdrops the two pin names.TestControllerStore.definition_pin_probeand thedefinition_pin_probescenario are removed.notification-config.jsonproduct_payload_view: beta.2 removes the schema default, and the docs now say that an absent value meanslegacy.None.AdCPBaseModel's serializer used to re-add the default on product subscriptions. It would now have emitted an explicitnull, so it emits the view only when one is set.docs/reporting-status-notifications.mdand the migration guide are updated.WebhookSenderstill sendslegacyon product notifications when no view is configured.Note for the reporting-subscriptions stack (#1699 and follow-ups)
adcp.types._reporting_subscription_previewis onnextand still runs. Its_add_fieldcalls now no-op, because every field it adds is generated. The generatedInactiveIntervalreplaces itsReportingSubscriptionInactiveIntervalon the model. Its_replace_fieldondimensionsstill applies. Nothing breaks, and I left the preview module,reporting/subscriptions/wire.pyand the reporting tests that validate beta.1 projections unchanged. The stack's rebase can remove them.Packaging
_schemas/3.3.0-beta.2and_compliance/3.3.0-beta.2.Test fallout
test_adcp_3_3_0_beta_2_adoption.py. It has the signed identity values (4632 manifest files, 242 provenance files, 1757 schemas) and asserts that beta.0 and beta.1 are rejected.RIGHTS_CHANNEL_VIOLATIONinstead of the withdrawnREFERENCE_DEFINITION_CHANGED.Docs
MIGRATION_v9_to_v10.md: the pin and breaking note, plus rows for the withdrawals and the new surface.docs/adcp-3.3-sdk-inventory.md: a new §12, with the withdrawn rows struck through.RELEASING.md,docs/cross-version-conversion.mdanddocs/agent-identity-3-3-migration.md.Local verification
mypy --strictadopter checks, pyright adopter checks and the type-ignore contract.product_payload_viewfix): 15,519 passed, 0 failed.product_payload_viewdefault (the CI failure on the first push). It is fixed and its tests pass.BREAKING CHANGE: the SDK no longer advertises or accepts AdCP 3.3-beta.1. An adcp_version pin of 3.3-beta.1 or 3.3.0-beta.1 raises ConfigurationError, and a peer that advertises only 3.3-beta.1 for the 3.3 line negotiates down to 3.2. Re-pin to 3.3-beta.2 or omit the pin. The definition-pin, purchase-rights and installment-selection types and TestControllerStore.definition_pin_probe are removed.
🤖 Generated with Claude Code