You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e1263e7
Browse filesBrowse the repository at this point in the historyBrowse files
***protocol:** 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.
9
+
***decisioning:** create_property_list / update_property_list fail with INVALID_REQUEST on mixed-case, trailing-dot or URL-shaped domain identifiers, and MCPPropertyListFetcher fails a resolution carrying one. get_products / list_products fail with INTERNAL_ERROR when a product advertises an undeclared measurement_window. get_adcp_capabilities truncates oversized publisher_domains / data_provider_domains. PrincipalService accepts "3.3" async versions by default.
10
+
***compat:** a 3.3 request the 3.2 contract cannot express (a webhook without authentication, a minute-level daypart) now fails with ADCPVersionConversionError / UNSUPPORTED_FEATURE before sending. Earlier SDK 10 betas sent some of these to the peer invalid, for example when the request carried start_time "asap".
***examples:** serve the AdCP 3.3 property breakdowns from injected rows in the reference seller ([#1715](https://github.com/adcontextprotocol/adcp-client-python/issues/1715)) ([a998b82](https://github.com/adcontextprotocol/adcp-client-python/commit/a998b82242d262ad45ffded430a8386111cbceec)), closes [#1669](https://github.com/adcontextprotocol/adcp-client-python/issues/1669)
17
+
***protocol:** adopt the signed AdCP 3.3.0-beta.2 bundle ([#1732](https://github.com/adcontextprotocol/adcp-client-python/issues/1732)) ([3e23bec](https://github.com/adcontextprotocol/adcp-client-python/commit/3e23becd8a2cb392ba9cd4df343f0a9a05456394))
***reporting:** accept reporting subscriptions on sync_principal and track what they owe ([#1698](https://github.com/adcontextprotocol/adcp-client-python/issues/1698)) ([04238b2](https://github.com/adcontextprotocol/adcp-client-python/commit/04238b2a5a18732bddecf03ac925eccb39db2538))
20
+
***reporting:** add buyer client helpers and a tracker for reporting subscriptions ([#1699](https://github.com/adcontextprotocol/adcp-client-python/issues/1699)) ([8a7f482](https://github.com/adcontextprotocol/adcp-client-python/commit/8a7f48206a695e3c5dc3cc7ca46aea1df3c02609))
***reporting:** compute owed reporting-subscription periods and their capabilities ([#1696](https://github.com/adcontextprotocol/adcp-client-python/issues/1696)) ([58e825a](https://github.com/adcontextprotocol/adcp-client-python/commit/58e825a2c0f802b85edd1eba1a9e3aa7f2f160eb))
23
+
***reporting:** persist reporting-subscription engine state through a CAS store ([#1722](https://github.com/adcontextprotocol/adcp-client-python/issues/1722)) ([10643c7](https://github.com/adcontextprotocol/adcp-client-python/commit/10643c7fb31f22ef24956c6841c23f6315da698a)), closes [#1695](https://github.com/adcontextprotocol/adcp-client-python/issues/1695)
***signing:** accept any well-formed adcp_use purpose in keygen ([#1708](https://github.com/adcontextprotocol/adcp-client-python/issues/1708)) ([612f97a](https://github.com/adcontextprotocol/adcp-client-python/commit/612f97af9afd66512dc97289d4e8c7f299bcc4e7))
26
+
27
+
28
+
### Bug Fixes
29
+
30
+
***codegen:** find generated classes by name, and derive emitted envelope bases from the bundle ([#1705](https://github.com/adcontextprotocol/adcp-client-python/issues/1705)) ([50fe9e8](https://github.com/adcontextprotocol/adcp-client-python/commit/50fe9e8fc73ebc21635e3636d49fd3cbf512a35e)), closes [#1680](https://github.com/adcontextprotocol/adcp-client-python/issues/1680)
31
+
***examples:** stop zero-filling impressions and flat multi-standard viewability in the reference seller ([#1709](https://github.com/adcontextprotocol/adcp-client-python/issues/1709)) ([a63836f](https://github.com/adcontextprotocol/adcp-client-python/commit/a63836f21dbe138d5ce021f9fab7e0a8954dbe20)), closes [#1669](https://github.com/adcontextprotocol/adcp-client-python/issues/1669)
***types:** defer the import-time model rebuilds that cost adcp.client 560 MiB RSS ([#1713](https://github.com/adcontextprotocol/adcp-client-python/issues/1713)) ([ab39d63](https://github.com/adcontextprotocol/adcp-client-python/commit/ab39d63e0333f94fb6879a8419e6680fdf4ccfb4))
34
+
***webhooks:** drop aggregated_totals from media_buy_delivery webhook results ([#1716](https://github.com/adcontextprotocol/adcp-client-python/issues/1716)) ([875a4fe](https://github.com/adcontextprotocol/adcp-client-python/commit/875a4fed49cba9b92aa92d2007c6c69f3467cc94)), closes [#1669](https://github.com/adcontextprotocol/adcp-client-python/issues/1669)
Copy file name to clipboardExpand all lines: MIGRATION_v9_to_v10.md
+4-2Lines changed: 4 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,11 +9,13 @@ the SDK-relevant inventory is [docs/adcp-3.3-sdk-inventory.md](docs/adcp-3.3-sdk
9
9
10
10
| Change | Update your integration |
11
11
| --- | --- |
12
-
| The wire pin is AdCP `3.3.0-beta.1`|`get_adcp_version()` returns `3.3.0-beta.1`; the SDK speaks `adcp_version: "3.3-beta.1"` by default and advertises `3.0`, `3.1`, `3.2`, `3.3-beta.1` and the `3.2-rc.7` alias. A stable `"3.3"` is not an accepted pin until the protocol's 3.3 GA. `10.0.0-beta.0` and `10.0.0-beta.1` pinned `3.3.0-beta.0`; that beta is no longer advertised or accepted as an `adcp_version` pin (`ConfigurationError`), and a `3.3-beta.0` peer is negotiated like any other unserved prerelease (down to `3.2`). Re-pin to `3.3-beta.1`, or omit the pin. Pin `adcp_version="3.2"` on a server whose handlers must keep running on the 3.2 contract (see "A server pin governs its handlers" below). On a client, `adcp_version` is a negotiation ceiling; its application models remain current. Generated types, bundled schemas and the versioned validators follow the 3.3 bundle. |
12
+
| The wire pin is AdCP `3.3.0-beta.2`|`get_adcp_version()` returns `3.3.0-beta.2`; the SDK speaks `adcp_version: "3.3-beta.2"` by default and advertises `3.0`, `3.1`, `3.2`, `3.3-beta.2` and the `3.2-rc.7` alias. A stable `"3.3"` is not an accepted pin until the protocol's 3.3 GA. `10.0.0-beta.0` and `10.0.0-beta.1` pinned `3.3.0-beta.0`, and `10.0.0-beta.2` pinned `3.3.0-beta.1`; neither beta is advertised or accepted as an `adcp_version` pin any more (`ConfigurationError`), and a `3.3-beta.0`or `3.3-beta.1`peer is negotiated like any other unserved prerelease (down to `3.2`). Re-pin to `3.3-beta.2`, or omit the pin. Pin `adcp_version="3.2"` on a server whose handlers must keep running on the 3.2 contract (see "A server pin governs its handlers" below). On a client, `adcp_version` is a negotiation ceiling; its application models remain current. Generated types, bundled schemas and the versioned validators follow the 3.3 bundle. |
13
13
| AdCP 3.3.0-beta.1 adds account requests, media-buy issues and reporting subscriptions | New tasks are wired through `ADCPClient` / `ADCPMultiAgentClient`, `ADCPHandler` (each returns `not_supported()` until overridden), the MCP and A2A adapters, the MCP tool list and the CLI: `request_account` (experimental `account.requests`; it opens, matches or, with `account_id`, changes an account, guarded by `revision`), `report_media_buy_issue` and `get_media_buy_issue`. `RequestAccountRequest` / `Response`, `ReportMediaBuyIssueRequest` / `Response` and `GetMediaBuyIssueRequest` / `Response` are exported from `adcp.types`. `list_accounts` gains `include_requests`, `request_ids` and `requests_pagination`, returning `account_requests[]` and `account_requests_pagination`. Experimental principal-level `reporting_subscriptions` land on `sync_principal` / `get_principal`, with `subscription_coverage[]` on `get_reporting_status`, `configuration_tasks[]` on `media_buy.reporting_delivery`, the `ReportingDimension` enum and the `principal.changed` reason `reporting_subscription_changed`. `sync_accounts` is unchanged and stays supported. Generated class names that the generator numbers can renumber with the bundle; import the semantic names from `adcp.types` rather than a numbered class from a domain module. |
14
+
| AdCP 3.3.0-beta.2 withdraws definition pins, purchase rights and installment selection |adcontextprotocol/adcp#8537 moves all three to 4.0, so their generated types leave `adcp.types.domains.*`, `adcp.types._generated` and `adcp.types.error_details`: `DefinitionPin*`, `DefinitionPinReferenceKind`, `ReferenceDefinitionChangedDetails` (and `ErrorCode.REFERENCE_DEFINITION_CHANGED`), `DriftedPin`, `RightsScope`, `InstallmentChangeSet`, `commercial_terms.definition_pins`, `purchases[].rights` / `installments`, `installment_changes` and the `definition_changed` refinement reason. `TestControllerStore.definition_pin_probe` and the `definition_pin_probe` controller scenario are removed. Delete code that builds or reads them; a seller stops listing `media_buy.purchase_rights` and `media_buy.installment_selection` in `experimental_features`. |
15
+
| AdCP 3.3.0-beta.2 adds separate-account outcomes, seller offers and measurement provenance | `RequestAccountRequest.allow_separate_account` (default `false`) lets a change request resolve as `created` (a new account carrying the change) or `matched` (an account the caller already holds), and the new correctable error code `ACCOUNT_CHANGE_REQUIRES_NEW_ACCOUNT` reports a change the seller would take only on a new account. Experimental seller offers add `proposal_initiator`, `offer_reason` on `list_proposals` rows and the `proposal.offered` notification (`ProposalOfferedWebhook`); experimental measurement provenance adds `CollectionMechanism`, `counting_mechanisms` and `vendor_metric_provenance[]` (`VendorMetricProvenance`). The reporting-subscription fields settled after beta.1 (`standard_dimensions`, `unmapped_dimensions`, `inactive_intervals`, `prior_versions[].configuration`, per-offering `offering_id`, `previous_timezone`) are now generated. `principal_kind` and `expected_principal_kind` are deprecated. `NotificationConfig.product_payload_view` loses its schema default: it is `None` when unset, and a product subscription's dump no longer adds `product_payload_view: "legacy"` (absent means legacy); read `config.product_payload_view or "legacy"`. These are generated types, imported from their domain packages (for example `adcp.types.domains.core.ProposalOfferedWebhook`); no task was added. |
14
16
| A server that restricts `supported_versions` runs on its newest listed release | Any server (`create_mcp_server`, `create_a2a_server`, `serve`, `MCPToolSet`, `ADCPAgentExecutor`, `create_tool_caller`, `PlatformHandler`, `create_adcp_server_from_platform`) with `supported_versions=["3.2"]` and no `adcp_version` runs its handlers on 3.2, instead of raising because the SDK default is outside the list. Pass `adcp_version` explicitly to choose another listed release. |
15
17
|`server_version` pins keep wire precision |`ADCPClient(server_version=...)` and `get_server_version()` keep a 3.x pin at release precision: `"3.1.0-beta.1"` reads back as `"3.1-beta.1"` (SDK 9 reported the bundle key, `"3.1.0-beta.1"`). Stable pins still collapse (`"3.0.7"` → `"3.0"`). |
16
-
| A server pin governs its handlers | Handlers run on one *application version*: the server's `adcp_version` pin, else the newest release in its `supported_versions`, else the packaged `3.3-beta.1`. Every dispatch path (MCP, A2A, `create_tool_caller`, the Decisioning dispatcher) converts a buyer's request to that release before validation, unknown-field policy and typed parsing, and converts the handler's response back to the buyer's release: up to `3.3-beta.1`, unchanged for a same-release buyer, or down to 3.1 / 3.0. `resolve_requested_adcp_version(params)` inside a handler returns the application version; `ToolContext.application_adcp_version` reports it directly, and `ToolContext.resolved_adcp_version` still reports the buyer's negotiated version. A 3.2-pinned seller's dict handlers therefore see exactly 3.2 payloads, its requests and responses are validated against the 3.2 schemas (with strict validation, a response its own 3.2 contract refuses fails before conversion), and a conversion the target schema refuses fails as `ADCPVersionConversionError` / `VERSION_UNSUPPORTED` instead of reaching the peer invalid. Typed handler parameters (`params: GetProductsRequest`) and typed responses still use the generated 3.3 classes: they are additive supersets of 3.2, so a 3.2 payload parses into them unchanged and dumps back as the same 3.2 payload, but a field 3.3 added reads as unset (its model default) on a 3.2 server. The unpinned default is unchanged: handlers receive `3.3-beta.1`. |
18
+
| A server pin governs its handlers | Handlers run on one *application version*: the server's `adcp_version` pin, else the newest release in its `supported_versions`, else the packaged `3.3-beta.2`. Every dispatch path (MCP, A2A, `create_tool_caller`, the Decisioning dispatcher) converts a buyer's request to that release before validation, unknown-field policy and typed parsing, and converts the handler's response back to the buyer's release: up to `3.3-beta.2`, unchanged for a same-release buyer, or down to 3.1 / 3.0. `resolve_requested_adcp_version(params)` inside a handler returns the application version; `ToolContext.application_adcp_version` reports it directly, and `ToolContext.resolved_adcp_version` still reports the buyer's negotiated version. A 3.2-pinned seller's dict handlers therefore see exactly 3.2 payloads, its requests and responses are validated against the 3.2 schemas (with strict validation, a response its own 3.2 contract refuses fails before conversion), and a conversion the target schema refuses fails as `ADCPVersionConversionError` / `VERSION_UNSUPPORTED` instead of reaching the peer invalid. Typed handler parameters (`params: GetProductsRequest`) and typed responses still use the generated 3.3 classes: they are additive supersets of 3.2, so a 3.2 payload parses into them unchanged and dumps back as the same 3.2 payload, but a field 3.3 added reads as unset (its model default) on a 3.2 server. The unpinned default is unchanged: handlers receive `3.3-beta.2`. |
17
19
|`UniversalMacro` is a union | AdCP 3.3 adds the parameterized `GDPR_CONSENT_<gvl_id>` family, so `adcp.types.UniversalMacro` is now a `RootModel` over the closed enum (`UniversalMacro3`) and the pattern string (`UniversalMacro4`). Replace `UniversalMacro.MEDIA_BUY_ID` with `UniversalMacro3.MEDIA_BUY_ID` (or compare strings), and read `.root` on a parsed value. |
18
20
| The experimental identity preview is the generated 3.3 surface |`adcp.types.experimental_identity` keeps every name (`AgentOnboarding`, `BuyerOnboardingPosture`, `PrincipalRelationship`, `TrustRecord`, `GetPrincipalResponse`, ...) but binds the generated 3.3 types. `adcp.types._identity_preview`, `adcp.signing._identity_schemas` and `scripts/generate_identity_preview.py` are gone. `RequestSigning.profiles` is `list[Profile]` (an enum) rather than `list[str]`; `PrincipalChangedWebhook.reason` is the generated `Reason` enum, which now includes `relationship_changed` and `relationship_expiring`. `AgentOnboardingRequirement.kind` stays open (`AgentOnboardingRequirementKind | str`). `adcp.signing.validate_identity_value` validates against the pinned bundle; `identity_schema_bundle()` is removed. |
19
21
|`reporting_webhook.operation_id` is a generated field | The field, its constraints and its never-null marker come from the 3.3 schema. The SDK 9 runtime patch is gone; nothing changes on the wire. |
0 commit comments