6.3.0-beta.10 (2026-06-12)
- protocol: support AdCP 3.1.0-rc.13
- server: project native postal capabilities to legacy booleans for AdCP 3.0 callers
- schemas: stamp primary latest fallback caches with the requested prerelease version
6.3.0-beta.9 (2026-06-07)
- RegistryClient.create_adagents now returns a CreateAdagentsResponse Pydantic model instead of dict[str, Any]. Callers using subscript access (result["success"], result["data"]) must switch to attribute access (result.success, result.data). The model matches the /api/adagents/create wire contract (adcp#5385).
- add FeedMirror client-side wholesale feed mirror (#940) (64ce9ba)
- codegen: fail consolidate on unallowlisted name collisions (#919) (d9367a0)
- decisioning: async (handoff) discovery for get_products / get_signals (#930) (76fa4fa)
- protocol: support AdCP 3.1.0-rc.10 (#944) (65e4368)
- registry: community-mirror lifecycle + upsert client (JS #2183/#2187 parity) (#929) (11e5cda)
- server: lazy idempotency backend wrapper (JS #2136 parity) (#928) (1ee6f5b)
- server: response_enhancer callback (JS #2161 parity) (#933) (659cd7c)
- testing: reference UpstreamRecorder middleware for query_upstream_traffic (#939) (5ca5758)
- type RegistryClient.create_adagents return as CreateAdagentsResponse (#937) (8e6018b)
- types: disambiguated aliases for high-traffic colliding type names (#941) (6c058f0)
- adagents: pin DNS to close rebinding TOCTOU on SSRF gate (#920) (51de333), closes #757
- codegen: rewrite compact ConfigDict extra in place (#935) (4d3303f)
- decisioning: gate async-completion webhook on SPEC_WEBHOOK_TASK_TYPES (#932) (c23b406), closes #931
- server: centralize pre-validation hooks and attribute chain failures (#938) (3859131), closes #859 #882
- types: derive response arms from schemas (#922) (70abb5a)
6.3.0-beta.8 (2026-06-05)
- server: Debug endpoints now fail closed when enable_debug_endpoints=True unless callers pass debug_validate_request= or explicitly set debug_public=True for local/test deployments.
- protocol: support AdCP 3.1.0-rc.8 (#912) (9782830)
- registry: update rc9 capabilities (#916) (432e2a5)
- server: harden MCP session lifecycle (#908) (caa2735)
6.3.0-beta.7 (2026-05-30)
- client: add explicit MCP Streamable HTTP session termination helper (#903)
- server: expose opt-in MCP session debug snapshots (#903)
- server:
enable_debug_endpoints=Truenow fails closed unless callers also passdebug_validate_request=or explicitly opt into unauthenticated local/test access withdebug_public=True.
- server: debug endpoints are no longer exposed unauthenticated by default; use a validator such as an
X-Debug-Tokencheck for network-reachable deployments.
6.3.0-beta.6 (2026-05-28)
- validation: bundle schemas before wheel builds (0cdcf29)
6.3.0-beta.5 (2026-05-28)
- add creative format compatibility helpers (#887) (7f26ad1)
- canonical-formats: add canonical reference resolver (#891) (d5706cd)
6.3.0-beta.4 (2026-05-26)
6.2.0-beta.4 (2026-05-26)
- decisioning: add request-scoped capabilities hook (#869) (23fb317)
- server: negotiate media buy version handling and update actions (#871) (5a89d86)
- support AdCP 3.1 Beta 4 (#872) (1bae6e8)
6.2.0-beta.3 (2026-05-26)
- adagents: add permissive property resolver (#863) (7f45742)
- decisioning: add full stack registry factory (#862) (28c4f64)
- decisioning: add registry observer removal (#861) (2657a8b)
- handlers: expose sync_catalogs through sales-catalog-driven specialism (#838) (6fdcb77)
- server: add unknown-field policy and hook composition (#860) (7b830c3)
- adagents: raise AdagentsAccessBlockedError on 403 + cf-mitigated: challenge (#837) (bc4111f)
- decisioning: project malformed-JSON 2xx responses to AdcpError (#836) (c547dfe), closes #453
- expose requested AdCP version resolver (#855) (f1d88bc)
- types: add update media buy response coercion (#864) (c111ba6)
- webhooks: promote McpWebhookPayload.token from extras shim to typed field (#835) (3832433), closes #638
6.1.1-beta.2 (2026-05-25)
- codegen: preserve regenerated response aliases (#854) (56d65fd)
- seller SDK version compatibility (#852) (e4b716d)
6.1.0-beta.2 (2026-05-24)
- read
media_buy_statusfor lifecycle;statusis now the task envelope.
- add webhook proof-of-control helper (#843) (232f7ef)
- align media-buy responses with AdCP 3.1 (391dae6)
- canonical-formats: public API + v2→v1 projection (#741, half 1 of 2) (#841) (b455e2a)
- canonical-formats: v1↔v2 reverse + pixel_tracker + narrowing (#741, half 2 of 2) (#845) (37e9225)
- examples: dual-emit v1 format_ids + v2 format_options on reference seller (#847) (7731f53), closes #741
6.1.0-beta.1 (2026-05-23)
- add webhook URL policy and wholesale feed sender (65f84d2)
6.0.0-beta.1 (2026-05-23)
- add MIGRATION_v5_to_v6 stub for the 6.0-beta line (#823) (c3837af), closes #802
- types: refresh import-architecture references (closes #807) (#828) (169bc80)
5.7.0 (2026-05-22)
- adagents: divergence detector + ?include=properties for directory inverse-lookup (#749 Part 3, adcp#4894) (#752) (1281076)
- adagents: fetch_agent_authorizations_from_directory for AAO inverse lookup (#769) (1c4e57d)
- adagents: publisher_domains compact form, revoked_publisher_domains, streaming fetch caps (closes #729) (#753) (352d1bb)
- decisioning: emit AGENT_SUSPENDED / AGENT_BLOCKED dedicated codes (closes #409) (#748) (12f8ffe)
- decisioning: Tier 3 brand-authz dispatch gate (#350 stage 5, closes #350) (#785) (1ad6df9)
- decisioning: wire create_media_buy_store into PlatformHandler dispatch (closes #462) (#773) (062c6f0)
- examples: handle @adcp/sdk@7.10.x storyboard scenarios (closes #782) (#788) (7ef1b1a)
- pick up beta 3 wholesale products and signals (#799) (0deeaeb)
- preview: opt-in v3.1.0-beta.1 client surface (#4761, #4762, #4763) (#747) (35fdd47)
- schemas: patches/ post-process infra + restore #753/#792 hand-edits (#795) (4e6a722)
- signing: BrandAuthorizationResolver (Tier 3, #350 stages 1-3) (#770) (9028a88)
- signing: verifier key_origins check + IDNA-2008 canonicalization (closes #776, #777) (#789) (31354b4)
- translation: list known keys in TranslationMap KeyError (#768) (7545424)
- types: auto-enforce publisher-selector XOR at Pydantic parse time (closes #759) (#761) (e973864)
- validation: validate_publisher_properties_item accepts Pydantic models (#756) (01c6491)
- adagents: disable follow_redirects on ads.txt MANAGERDOMAIN fetch (#754) (76a679f)
- adagents: inline-resolution path for publisher_properties selectors + publisher_domains[] fan-out (#750) (659135f)
- adagents: resolve-and-validate gate against DNS-based SSRF (#757, partial) (#760) (969f373)
- allow owned signals discovery without activation (#792) (46ae0c9)
- decisioning: timing-oracle defense on PERMISSION_DENIED branches (#772) (#774) (c23c9d5)
- preserve full sync_accounts request for account stores (#796) (2b7ad01)
- signing: Argus follow-ups on #789 — IDNA + IP literals, Protocol contract, misconfig warnings, diagnostic hygiene (#798) (fcb64fc)
5.6.0 (2026-05-19)
- types: open Format.assets discriminated union with UnknownFormatAsset fallback arm (issue #742) (#744) (7904f85)
- types: resolve capability sub-models via field annotation, not numbered names (#745) (b63c7e6)
5.5.0 (2026-05-14)
- agents: adopt shared .agents/roles/ layout from adcp#4500 (#730) (fe02c17)
- agents: Phase 3 — weekly sync workflow from adcp (#731) (884873a)
- decisioning: PgProposalStore + framework package derivation (#727) (#732) (c41d4a8)
5.4.0 (2026-05-13)
- decisioning: LazyPlatformRouter.proposal_stores= + proposal_store_factory= (#722) (#724) (a65185e)
- decisioning: ProposalCapabilities.auto_commit_on_put_draft (#723) (#725) (5567e2b)
- idempotency: inject 'replayed: true' on cache hit (#714) (#717) (b511e01)
- server: on_startup / on_shutdown hooks on serve(transport='both') (#713) (aca625e)
- types: SchemaVariant marker + mypy plugin for cross-class overrides (#710) (#718) (0b53cc9)
- decisioning: async-safe create_adcp_server_from_platform (#700) (#719) (056714f)
- server: Authorization: Bearer always accepted; legacy headers additive (#720) (#721) (dd6503e)
- server: emit WWW-Authenticate on every 401 (RFC 6750 §3) #712 (#715) (ce707d3)
5.3.0 (2026-05-12)
- adagents: add validate_adagents_structure helper (#708) (ccd1955)
- adagents: ads.txt MANAGERDOMAIN fallback discovery (#704) (#705) (fddea1a)
- buyer-agent-registry: with_caching factory auto-invalidates on mutations (#692) (de65957)
- server: boot validator for webhook_signing.supported capability invariant (#695) (7e9a734)
- testing: add SellerA2AClient for in-process A2A handler testing (#694) (2d1ae2f)
- testing: add SellerTestClient for in-process handler testing (#666) (965eeda)
- types: Sequence[T] on response-only list fields for covariant adoption (#635) (19be8db)
- ci: v3 reference seller storyboard job actually asserts on results (#693) (27a5866)
- compat: extract hostname from brand_manifest URLs with paths (#679) (6bb2c26), closes #677
- compat: handle inline BrandManifest object in v2.5 adapters (#685) (edd7d0a)
- compat: warn on non-standard brand_manifest path in inline-object branch (#688) (840e6b3), closes #687
- compat: warn when brand_manifest non-standard path is flattened to domain (#686) (0568d2e)
- server: preserve Starlette lifespan when public_url is callable (#680) (8632847), closes #676
5.2.0 (2026-05-11)
- client: server_version constructor scaffold (stage 7-lite) (#674) (5c7acb4)
- client: surface structured adcp_error on TaskResult (#675) (fe66335)
- compat: AdapterPair pattern + v2.5 sync_creatives (stage 4) (#665) (0e47dcc)
- compat: server-side shape-based v2.5 detection (stage 6) (#673) (d6210cc)
- compat: v2.5 create_media_buy + update_media_buy adapters (stage 5c) (#669) (4e3473a)
- compat: v2.5 get_products adapter (stage 5b) (#668) (2025520)
- compat: v2.5 list_creative_formats + preview_creative adapters; deprecate spec_compat_hooks (#667) (fec91d6)
- schemas: fetch + bundle v2.5 schemas from pinned upstream SHA (stage 4b1) (#670) (bd6837f)
- server: pre-adapter validation against legacy schema (stage 4b2) (#671) (4ef032b)
- server: route validation by wire adcp_version (stage 3) (#664) (d2ffac7)
- validation: per-version validator loader (stage 2 of versioned validation) (#659) (6311a9a)
5.1.0 (2026-05-11)
- a2a: per-request agent-card URL resolution via callable public_url (#650) (1b4f3e0)
- server: add spec_compat_hooks() for pre-v3 / pre-4.4 buyer compatibility (#648) (30690e5)
- server: TenantRegistry.as_platform() adapter for serve() integration (#649) (0e396ca)
- testing: forward pre_validation_hooks through build_asgi_app (#655) (2df49c0)
5.0.0 (2026-05-10)
- types: callers passing
affected_packagesinto a function typeddef f(x: list[Package])will see a mypy error and need to migrate toSequence[Package]. Runtime behavior is unchanged; the change is annotation-only. - types: Subclasses that add fields without Field(exclude=True) will now have those fields appear in model_dump() output where they were previously dropped by Pydantic's declared-schema firewall. Audit each subclass and mark internal fields with Field(exclude=True). To restore the prior behavior at a specific call site, pass serialize_as_any=False explicitly.
- webhooks:
domainkwarg removed fromcreate_mcp_webhook_payloadandWebhookSender.send_mcp. Migrate toprotocol(kebab-case string orAdcpProtocolenum value). - webhooks:
create_mcp_webhook_payloadreturns a Pydantic model, not a dict;task_typeis now required.
- a2a: add public_url param to agent card for production deployments (#621) (14d294c)
- server: add TenantRegistry with per-tenant health tracking (#628) (ae687b6)
- server: default MCP streamable-http to stateful with idle eviction (#636) (3173a54)
- server: expose RequestContext.transport and current_transport ContextVar (#627) (20e5d53)
- server: pre-validation request hook for spec-default injection (#614) (#629) (05d4cd8)
- testing: adopter type-checking test suite with zero-ignore contract (#634) (20e496c)
- testing: extend build_asgi_app with full serve-layer kwargs (#626) (8679a95)
- types: default serialize_as_any=True in AdCPBaseModel.model_dump (#639) (3160ace), closes #615
- types: widen extension-point list[X] to Sequence[X] (#624) (#640) (96ccfd4)
- webhooks: create_mcp_webhook_payload returns McpWebhookPayload (#632) (9eb962c)
- webhooks: replace
domainkwarg with typedprotocol(AdcpProtocol enum) (#637) (fdd4053)
- server: register /.well-known/agent.json alias route in create_a2a_server (#613) (2989101)
- server: strip None-valued asset fields from dict-based response builder output (#631) (c02ea84), closes #622
- types: widen canceled Literal[True]=True to Literal[True]|None=None on request types (#643) (120ae3b)
- types: document Field(exclude=True) and @model_serializer for nested wire isolation (#630) (4912af9)
4.6.1 (2026-05-10)
4.6.0 (2026-05-09)
- decisioning: re-validate params through platform method's stricter subclass annotation (#597) (3d269f5)
- webhooks: add canceled/rejected/auth-required to A2A status map; fail fast on unknowns (#606) (89f9491)
- webhooks: correct type annotations for extract_webhook_result_data and payload builders (#600) (e624b5c)
- webhooks: reject unknown AdCP status in create_a2a_webhook_payload (#605) (37d2cda)
4.5.0 (2026-05-07)
4.4.3 (2026-05-05)
4.4.2 (2026-05-05)
4.4.1 (2026-05-05)
- client: add extra_headers escape hatch for multi-tenant servers (#585) (66b7456)
- deps: bump a2a-sdk to >=1.0.2,<1.1 (#586) (2fd640c)
4.4.0 (2026-05-04)
- auth: header_name + bearer_prefix_required on BearerTokenAuthMiddleware (#545) (b16d18f)
- buyer-agent-registry: caching + rate-limit + audit emission (#380) (#407) (5a1e6b6)
- client: looks_like_v3_capabilities — drop the v2-downgrade footgun on capabilities-validation failure (#475) (385dc80)
- decisioning: Account v3 projection helpers — bank-details write-only guard (#356) (#366) (5d898b6)
- decisioning: Account.mode + sandbox-authority gate for comply_test_controller (Phase 1) (#483) (f5cd8cf)
- decisioning: adopt structured capabilities in v3 reference seller (8316105), closes #479
- decisioning: advertise_all kwarg + handler.get_advertised_tools (#529) (8b1b384)
- decisioning: align AccountStore.resolution literal with JS + Tier 1 docs (#330) (6490948)
- decisioning: AuthInfo.from_verified_signer — bridge to RFC 9421 verifier (#365) (5ae109b)
- decisioning: boot-time capabilities response shape validation (#422) (#446) (127f164)
- decisioning: boot-time validator for declared idempotency vs wired @wrap (#543) (7657ad4)
- decisioning: BrandRights/ContentStandards/PropertyLists/CollectionLists Protocols (breadth sprint Batch 4 — FINAL) (#335) (aeb2543)
- decisioning: built-in fields projection on get_products responses (#503) (06aaf51)
- decisioning: CampaignGovernancePlatform Protocol (breadth sprint Batch 3) (#334) (2ca828a)
- decisioning: composeMethod + security composer helpers (#466) (ddad4b9)
- decisioning: comprehensive Emma DX follow-up (P0/P1/P2 + examples) (#339) (985dcd9)
- decisioning: create_tenant_store — opinionated multi-tenant AccountStore with fail-closed isolation (#473) (8dd5dab)
- decisioning: createOAuthPassthroughResolver — Shape B account resolver factory (#472) (defa022)
- decisioning: createUpstreamHttpClient + createTranslationMap (#464) (7e5f2c4)
- decisioning: CreativeBuilderPlatform + CreativeAdServerPlatform (breadth sprint Batch 2) (#333) (5921949)
- decisioning: credential-leak strip on every echo path + ctx_metadata guidance (#481) (52b15fa)
- decisioning: cursor-based pagination helper for list responses (#499) (524c608)
- decisioning: F12 — auto-emit completion webhook on sync mutating responses (#331) (9d29754)
- decisioning: handoff_to_workflow — externally-completed task primitive (#336) (bff48ab)
- decisioning: LazyPlatformRouter for tenant-on-first-request construction (#552) (98fd456)
- decisioning: mock-mode upstream URL routing — Account.metadata['mock_upstream_url'] + DecisioningPlatform.upstream_for (Phase 2) (#487) (5c605b4)
- decisioning: MockAdServer Protocol + /_debug/traffic counters (#383) (#405) (53d8b8c)
- decisioning: PgBuyerAgentRegistry — durable Tier 2 commercial-identity store (#364) (fbdcb31)
- decisioning: PlatformRouter + multi-platform proof (#477) (#490) (786e6a2)
- decisioning: PostgresTaskRegistry — durable HITL task state (v6.1) (#361) (e01eef0)
- decisioning: ProductConfigStore lookup helper for create_media_buy (#498) (59f3b6e)
- decisioning: project full capability blocks via DecisioningCapabilities (c09433c), closes #479
- decisioning: project full get_adcp_capabilities response schema into DecisioningCapabilities (55613f8)
- decisioning: property_list resolver + intersection helper for get_products (#500) (1dfdcd5)
- decisioning: ProposalManager v1 — Protocol + MockProposalManager forwarder + tenant binding (#504) (fe8e5b0)
- decisioning: ProposalManager v1.5 — primitives, capability validation, lifecycle helpers (#538-impl) (#550) (c7c317e)
- decisioning: re-export SignalsFeatures + ContentStandards capability sub-models (74671d0), closes #485
- decisioning: refine[] flow scaffold for get_products (#496) (#505) (b584e70)
- decisioning: retype DecisioningCapabilities.specialisms to Specialism enum union (9fb7fc9), closes #479
- decisioning: SignalsPlatform + AudiencePlatform Protocols (breadth sprint Batch 1) (#332) (c66ff72)
- decisioning: state-machine helpers + typed exception classes + ref_account_id (#465) (9301acf)
- decisioning: surface capability sub-models via adcp.decisioning.capabilities (bc5bb9a), closes #479
- decisioning: TaskHandoff create_media_buy on_complete + on_failure hooks (#561) (3072c6e)
- decisioning: Tier 2 — BuyerAgentRegistry + dispatch wire-up + AuthInfo v3 fields (#349) (#359) (9dad22c)
- decisioning: time_budget deadline wrapper + incomplete projection on get_products (#501) (bc6ad13)
- decisioning: UserWarning when sales-* required methods missing (#423) (#445) (5349ddc)
- decisioning: v6.0 DecisioningPlatform foundation (skeleton + design) (#316) (3539359)
- decisioning: warn when compliance_testing capability is declared without test_controller wired (37f42a7), closes #485
- decisioning: warn when supported_protocols is auto-derived from specialisms (a0eb1e2), closes #485
- decisioning: WebhookDeliverySupervisor + SQLAlchemy A2A stores example (#348) (73a7512)
- decisioning: widen DecisioningCapabilities with structured wire fields (5a5219e), closes #479
- examples: v3 reference seller — runnable Tier 2 + v3 wiring (#357) (#373) (cda07f9)
- migrate: --auto-apply mode for mechanically-rewritable codemod findings (#540) (d19e71e)
- migrate: flag MediaBuyStatus.pending_activation split in v3-to-v4 codemod (#523) (d0659c7)
- schemas: bundle adcp-agents.json as adcp.schemas package, eliminate inlined test copy (#442) (9a8fef1)
- server: /.well-known/adcp-agents.json discovery endpoint (#381) (#406) (e6dfaad)
- server/a2a: structured error parity with MCP — emit field/details/retry_after, catch decisioning AdcpError (closes #530) (#536) (423d975)
- server/idempotency: complete PgBackend for multi-worker durable replay (#555) (1123458)
- server: Account v3 wire fields + AccountStore.upsert/list/syncGovernance receive ResolveContext (#469) (62b58dc)
- server: add asgi_middleware param to serve() (#441) (69211a3)
- server: AuditSink Protocol + LoggingAuditSink/SlackAlertSink reference impls (#362) (66c3c57)
- server: CallableSubdomainTenantRouter for DB-backed tenant lookups (#544) (80876c1)
- server: createMediaBuyStore — opt-in targeting_overlay echo for property-lists / collection-lists sellers (#474) (4ba19fc)
- server: createRosterAccountStore — Shape C explicit AccountStore for publisher-curated rosters (#471) (7f919cc)
- server: default validation=strict in serve() — wire-conformance by default (#439) (a29b61f)
- server: introduce ServeConfig dataclass to consolidate serve() kwargs (#437) (07db849)
- server: MCP error responses populate structuredContent.adcp_error (closes #509) (#525) (b50a87a)
- server: SubdomainTenantRouter middleware for multi-tenant deployments (#355) (#368) (1e27dad)
- server: synthesize host:* siblings for bare allowed_hosts (#537) (2733423)
- server: transport="both" — host MCP and A2A on a single binary (#354) (#370) (1d5d907)
- signing: async_resolve_agent — bootstrap to JWKS via brand.json (#389) (0d78bd1)
- signing: v3-identity Tier 1 — BrandJsonJwksResolver + CapabilityCache (port from JS) (#345) (a016eca)
- signing: verify_from_agent_url — single-call resolver+verifier factory (#401) (5931921)
- storyboards: require full proposal_finalize chain after @adcp/sdk@6.10.0 (#565) (b1fe9d5)
- testing: add build_test_client async context manager (#554) (5f038e5)
- testing: make_request_context + build_asgi_app helpers (#535) (6869976)
- testing: storyboard runner matrix entry for v3 reference seller (#410) (#426) (f047c23)
- types,decisioning: close salesagent migration export gaps (#511) (97a52e8)
- types: Account v3 projection helpers — bank-details write-only guard (#371) (e4415e3)
- types: narrow discriminated-union errors (Stability AI Emma P2) (#340) (ad8b520)
- v3-ref-seller: broaden sales surface + sync_accounts + invoice_recipient (#408) (f1e325b)
- v3-ref-seller: enable server validation + declare account.supported_billing (#402) (ac7a61f)
- v3-ref-seller: translator pattern with JS mock-server upstream (#447) (4185ced)
- validation: ADCP_VALIDATION_MODE env var + outputSchema on tools/list (#391) (fa35bfb)
- validation: oneOf near-miss validator hints + issues[].hint on every VALIDATION_ERROR (#476) (9985086)
- webhook: PgWebhookDeliverySupervisor — Postgres-backed multi-worker delivery (#360) (5f1f3a0)
- webhooks: HMAC/bearer/Docker/Standard Webhooks delivery modes (#482) (5d2c220)
- auth: populate ctx.auth_principal from bearer ContextVar (#574) (6c49b31)
- ci: add --extra dev to pre-commit mypy hook so types-protobuf stubs are present (#431) (254d0e2)
- ci: add concurrency group to cancel superseded runs on force-push (#444) (272fb01), closes #413
- ci: align pre-commit mypy with CI — install mypy in uv dev group (#427) (d3d8f7b)
- ci: pre-install @adcp/client + bump readiness window for v3 storyboard (#448) (6b89599)
- decisioning: address expert review — major_versions passthrough, supported_protocols default, nested re-exports (b72b744), closes #479
- decisioning: apply 3.10 mock-target fix to second compliance_testing test (d086aa8), closes #485
- decisioning: fire legacy-field DeprecationWarnings at construction (679709b), closes #485
- decisioning: handle Specialism|str union in create_media_buy_store (6f3faa0), closes #479
- decisioning: handler shims for every non-sales wire tool (#337) (a51c5a4)
- decisioning: mock target Python 3.10 import-resolution compat (40b4517), closes #485
- decisioning: post-#484 capabilities-projection polish (closes #485) (87bacfb)
- decisioning: TaskHandoff registry.fail/complete echo request context (#569) (b73b899)
- decisioning: three Emma cross-cutting findings + matrix runner (#341) (4938ee1)
- decisioning: Tier 2 codes → spec-conformant PERMISSION_DENIED (#375) (#393) (870e98a)
- decisioning: Tier 2 expert-review fix-pack (#372) (9605f44)
- decisioning: update v3 reference seller smoke tests for Specialism|str union (09c5669), closes #479
- decisioning: wire-path dispatch + F12 silent no-op (Emma sales-direct P0s) (#338) (50c985e)
- examples/multi_platform_seller: align mocks with wire contract; storyboard gate now blocking (#508) (863bb93)
- examples/multi_platform_seller: list_creatives populates query_summary (closes #510) (#521) (c7cfe6f)
- idempotency: @IdempotencyStore.wrap supports arg-projected methods (#567) (1abdae6)
- migrate: per-symbol replacement for generated_poc reach-ins (#329) (100680b)
- server: BearerTokenAuthMiddleware now populates ctx.auth_info for bearer flows (#579) (901aa53)
- server: echo request context on AdcpError error envelopes (#560) (2e351b0)
- server: protocol-polish follow-ups from PR #341 (#342) (5a37adc)
- testing: make a2a_compat_shim resilient to wrong a2a-sdk in /tmp worktrees (#433) (c5c581d)
- types: CreateMediaBuy handler return type covers all 3 branches + add Submitted alias (#575) (f7960ed)
- ci: cache ~/.npm + drop per-invocation npx for storyboard runners (#450) (386cb15)
- server: lazy-load Pydantic schema generation to fix storyboard readiness flake (#435) (8664ea3)
- adcp: document git worktree isolation pattern for parallel agents (#428) (117d4f2)
- adcp: fix a2a-sdk 1.0.x symbol guidance in v3→v4 migration guide (#524) (57cb4e5), closes #514
- agents: add parallel agent coordination protocol to CLAUDE.md (#430) (abf0d65)
- decisioning: adopter guide for declaring capabilities (f2e8f9a), closes #479
- examples: Alembic migration scaffold for v3 reference seller (#390) (3035c25)
- examples: expand hello_seller.py to full 9-method sales-non-guaranteed surface (#531) (7d21302)
- examples: webhook wiring recipe — handler-authoring section + expanded hello_seller + new with_webhooks example (#551) (6cf71cb)
- migration: anchor v3→v4 adopter numbers to v4.0 release, point to live codemod (#522) (11732c8)
- proposals: product architecture — layered model + two-platform composition (#502) (69c585c)
- proposals: ProposalManager v1.5 design — session cache, finalize, expires_at, capability validation, recipe lifecycle (#538) (8ea85ad)
- proposals: when to use which proposal surface (#533) (a9fd18a)
4.3.0 (2026-04-30)
- server: public register_handler_tools seam + advertised_tools class attr (#318) (d96822a)
- signing: SigningProvider Protocol for KMS-backed signing (#283) (#323) (4de648e)
- examples: close last 5 storyboard fixture-dependent failures (#319) (#322) (d92cfb1)
- examples: seed_product complete defaults + format_ids agent_url normalization (#319) (#321) (046b15e)
4.2.0 (2026-04-30)
- examples: DemoStore overrides for force_create_media_buy_arm, force_task_completion, and seed_* scenarios (#313) (e2a2707)
- sdk: per-instance adcp_version pin + wire emission (Stage 2 + 3a) (#294) (4aa7a6d)
- server: add force_create_media_buy_arm + force_task_completion controller scenarios (#282) (9818250)
- test-controller: add seed_creative_format scenario; advertise force_session_status in capabilities (#315) (ce7e9ab)
- examples: seller_agent.py AdCP 3.0.1 storyboard compliance (items 1-6 of #304) (#310) (04966d7)
- server: comply_test_controller returns dict to fix controller_detected: false (#317) (9244d46)
- server: fix streamable-http ASGI error, host binding, and AdCP 3.0.1 scenario gaps (#296) (6be0232)
4.1.0 (2026-04-30)
- migration:
FormatId.__name__and__qualname__change from"FormatId"to"FormatReferenceStructuredObject"because AdCP 3.0.1 polished the schema title oncore/format-id.json. The publicadcp.FormatIdalias keeps working —Format(format_id= FormatId(...))andisinstance(x, FormatId)are unchanged. Two niche cases break: pickledFormatIdinstances from 4.0 fail to unpickle on 4.1, and snapshot tests / log scrapers asserting on__name__see the rename. See MIGRATION_v4.0_to_v4.1.md. - a2a:
ADCPClient.pending_task_idis nowADCPClient.active_task_id(same forA2AAdapter). The constructor'scontext_id=kwarg andreset_context()now raiseTypeError(wasValueError) on non-A2A protocols — the string value is fine, the operation doesn't apply to MCP.
- a2a: checkpoint/from_checkpoint API, harden context-id retention (a17ffb3)
- a2a: expose peer protocol versions, add force_a2a_version pin (3898c53)
- a2a: migrate to a2a-sdk 1.0 with 0.3 wire-compat shim (c07db7d)
- a2a: migrate to a2a-sdk 1.0 with 0.3 wire-compat shim (Release-As: 4.1.0) (28a4a13)
- adcp: support ADCP_BASE_URL env override in sync_schemas.py (#285) (a2bc977)
- adcp: sync canonical agent skills from protocol tarball (#275) (5312f05)
- agents: /claude-triage comment nudge (5af8b47)
- agents: /claude-triage comment nudge (d3b8b28)
- agents: add Claude Code routines scaffolding (aa23ef3)
- agents: add Claude Code routines scaffolding (d312abf)
- agents: add silent-triage path to triage prompt (6abb495)
- agents: commit .claude/agents/ experts for cloud routine access (55144f2)
- agents: migrate manual triage nudge to /triage slash-command-dispatch (#267) (6bd434d)
- agents: security + product review fixes for triage routine (cbafef5)
- agents: switch triage nudge prefix to @claude-triage (#265) (77bfce2)
- agents: triage bundles ready items, never splits issues (#266) (2227a6b)
- agents: triage default — execute when outcome is clear (e3f8a6c)
- agents: triage defer subtypes + partial-rollout linkage rule (#273) (c97aa95)
- agents: triage fires on comments + claude-triaging lifecycle label (#277) (604d795)
- agents: triage PR ergonomics — refs adcp#3121 (#279) (31606eb)
- agents: triage prompt handles RFC/epic/scope bucket/milestone (cac3525)
- agents: triage runs pre-PR build+test gate before expert review (#271) (8fcc5ee)
- agents: triage runs pre-PR expert review on diff before opening PR (#269) (46dd708)
- agents: triage v2 — expert consultation + race + coverage (bf6e18b)
- client: ADCPClient.from_mcp_client() factory for in-process MCP transport (#293) (d83aa53)
- signing: close 4 SSRF gaps and add opt-in port hardening (foundation audit) (84b837e)
- signing: default replay store, signed-fetch preset, migration guide (#272) (52019b8)
- signing: drain three foundation-audit deferreds (#298, #299, #300) (072998a)
- validation: schema-driven validation with client hooks and opt-in server middleware (5cbac87)
- validation: schema-driven validation with client hooks and opt-in server middleware (a38ff57)
- a2a: address expert-review feedback on 1.0 migration (7e54b97)
- adcp: skip eager httpx.AsyncClient alloc in WebhookSender.aenter on owned-client path (#301) (4bd45d1), closes #300
- agents: already-engaged check + tighten label creation (02baa89)
- agents: triage already-engaged + ship-more (missed in #259) (ca42d29)
- agents: webhook-miss sweep grace period (no double-fire) (#280) (3a5f1c2)
- deps: add types-protobuf to pip dev extras (801ac16)
- handlers: sync MEDIA_BUY_STATE_MACHINE with spec v3 enum (#289) (54fd18b)
- signing: validate-before-sign symmetry in deliver() + HMAC SSRF coverage + 4.1 migration notes (bc8da3a)
- triage: drop apostrophe from MODE text (port of adcp#3325) (#287) (2efa423)
- validation: address code + security review feedback (5bf9434)
- migration: add v4.0 → v4.1 migration guide (#302) (01a1068)
- readme: note AAO IPR Policy requirement for contributors (43d77f9)
- readme: note AAO IPR Policy requirement for contributors (ba03ecb)
4.0.0 (2026-04-22)
- types: rename Asset content types to Content
- server: pluggable TaskStore on A2A — unblock production A2A adoption
- server: expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety
- types: AssetsNN semantic aliases + format_category shim + downstream smoke
- sdk: ResolvedBrand.brand_manifest removed. Use .brand. CreateMediaBuyRequest.brand_manifest removed. Use brand. BrandManifest, FormatCategory, DeliverTo, PromotedProducts, PromotedOfferings, Pricing, PackageStatus imports now raise ImportError. See MIGRATION_v3_to_v4.md.
- webhooks: ADCPClient webhook verification now requires raw_body to be passed through from the HTTP handler. Callers that relied on the implicit re-serialize-from-payload fallback will start seeing ADCPWebhookSignatureError until they plumb the raw body through from their framework's pre-parse hook. Fix path:
- webhooks: get_adcp_signed_headers_for_webhook now signs the compact-separator JSON form of the payload. Callers that previously hand-serialized spaced JSON and POSTed it with content= will see signature mismatches after this change. The fix is to also serialize with separators=(",", ":") or switch to httpx json= which already uses that form.
- serve(mount=...) kwarg removed.
Budget.authority_levelis removed. Migrate toreallocation_threshold/reallocation_unlimitedonplan.budget, and setplan.human_review_requiredfor decisions affecting data subjects. See the rc.4 migration section in README.md.
- A2A server support in serve() (d0c3015)
- A2A server support in serve() (4e5db4f), closes #175
- a2a: auto-retain contextId + taskId across multi-turn calls (0564635)
- a2a: auto-retain contextId + taskId across multi-turn calls (8a084ec)
- ADCP 3.0 server DX helpers, type guards, and schema sync (de4a079)
- ADCP 3.0 server DX helpers, type guards, and schema sync to latest (bf0d81d)
- AdCP RFC 9421 request-signing profile (ba53961)
- add collection_list and sync_governance task methods (2dbeac1)
- address PR review — real-world transforms and SDK error types (cfaa9c5)
- AssetsNN aliases, format_category shim, MCP adoption hooks — unblock salesagent (ed7d30a)
- auto-inject context passthrough in create_tool_caller (4d4fe5e)
- bump to 4.0.0b1 with test fixtures updated for new schema shape (dcd6709)
- bundle-based schema sync + Sigstore verify + 4.0.0b1 on latest (755071a)
- error translation helper for multi-transport servers (7825ed6)
- error translation helper for multi-transport servers (#176) (88126d1)
- examples: add seller_agent.py reference impl (40341c9)
- idempotency_key auto-injection, typed errors, and capability gate (af9dd2d)
- idempotency_key auto-injection, typed errors, and capability gate (12cc983)
- implement AdCP RFC 9421 request-signing profile (fc995e9)
- MCP response + error extraction per AdCP spec (d991b1e)
- MCP response + error extraction per AdCP spec (896beb8)
- mcp: auto-generate sync_governance inputSchema from Pydantic (ac1edb3)
- mcp: inline $defs in generated inputSchema (closes #208) (8eaeb4d)
- mcp: inline $defs in generated inputSchema (closes #208) (ffa58e5)
- migrate+types: v3->v4 codemod, strict-validation flag, version helpers, subclass test (0f50d39)
- migrate+types: v3->v4 codemod, strict-validation flag, version helpers, subclass test (32bfbeb)
- salesagent review feedback - typed error codes, state machine export, missing types (8ef8161)
- schemas: regen for AdCP 3.0 GA — custom pricing + experimental_features (4dfaffe)
- schemas: regen for AdCP 3.0 GA — custom pricing + experimental_features (db913ba), closes #204
- sdk: 4.0 beta cleanup — version wiring, brand_manifest drop, migration guide (ebaab12)
- server+migrate: round-1 feedback followups (dbbc390)
- server+migrate: round-1 feedback followups (0fe9cb5)
- server: AccountAwareToolContext + multi-tenant contract doc (69fd3da)
- server: AccountAwareToolContext + multi-tenant contract doc (3747939)
- server: context_factory, tenant_id, DISCOVERY_TOOLS — unblock MCP adoption (2203c1d)
- server: DISCOVERY_METHODS + document tools/list pre-auth posture (closes #222) (a26c948)
- server: DISCOVERY_METHODS + lock tools/list pre-auth posture (closes #222) (ba2de29)
- server: gate tools/list on method overrides (#220) (816d22c)
- server: gate tools/list on method overrides (closes #220) (fc1a788)
- server: idempotency middleware per AdCP #2315 spec (101713c)
- server: idempotency middleware per AdCP #2315 spec (f708ed2)
- server: middleware parity, auth, A2A parser hook, startup log (549d190)
- server: middleware parity, auth, A2A parser hook, startup log (c9d7bbc)
- server: per-skill middleware hook in ADCPAgentExecutor (#226) (4e95764)
- server: per-skill middleware hook in ADCPAgentExecutor (closes #226) (6f9bd26)
- server: pluggable PushNotificationConfigStore on A2A (#225) (ea21864)
- server: pluggable PushNotificationConfigStore on A2A (closes #225) (4f64c8d)
- server: pluggable TaskStore on A2A — unblock production A2A adoption (69ebccd)
- server: propagate caller_identity from transport into ToolContext (b4a4c93)
- server: propagate caller_identity from transport into ToolContext (1f3cf8f)
- server: request-body size cap middleware (closes #239) (21249a5)
- server: request-body size cap middleware (closes #239) (9ccf960)
- server: thread ToolContext through TestControllerStore (closes #227) (a4c6489)
- server: thread ToolContext through TestControllerStore (closes #227) (a0d89e3)
- server: typed handler params via Pydantic annotation (closes #214) (dcc2c87)
- server: typed handler params via Pydantic annotation (closes #214) (4e86e1a)
- server: TypeVar-bound ADCPHandler for typed ToolContext subclasses (#223) (d737527)
- server: TypeVar-bound ADCPHandler for typed ToolContext subclasses (closes #223) (e1eb923)
- server: wire idempotency errors to wire + capability helper + DX polish (5b8f353)
- signing: async revocation-list + JWKS fetchers (55a8fd4)
- signing: async revocation-list + JWKS fetchers (1c2e676)
- signing: auto-sign outgoing requests via ADCPClient signing kwarg (551aaf8)
- signing: auto-sign outgoing requests via ADCPClient signing kwarg (c07c946)
- signing: full-wire e2e + DX fixes from integrator walkthrough (a44896b)
- signing: generate_signing_keypair() programmatic API (closes #217) (dd2b961)
- signing: generate_signing_keypair() programmatic API (closes #217) (c6d5505)
- signing: IP-pinned httpx transport closes DNS-rebinding TOCTOU (9a7ee9c)
- signing: IP-pinned httpx transport closes DNS-rebinding TOCTOU (1fa0820)
- signing: keygen --encrypt flag and adcp-keygen entry point (01c0c5d)
- signing: live revocation-list fetcher with signed JWS verification (249b79d)
- signing: live revocation-list fetcher with signed JWS verification (fbe3e90)
- signing: module rename + keygen --encrypt + adcp-keygen entry point (7bce09a)
- signing: PostgreSQL-backed PgReplayStore for multi-instance verifiers (8118033)
- signing: PostgreSQL-backed PgReplayStore for multi-instance verifiers (3ad3951)
- strip bogus Literal['reuse'] subclasses from datamodel-codegen (3684227)
- switch ADCP_VERSION to latest, remap aliases for schema redesign (253be88)
- sync rc.4 schemas + wire update_rights task (67119bf)
- sync rc.4 schemas + wire update_rights task (6c0e0e9)
- sync schemas from protocol bundle with Sigstore verification (66b9fb1)
- ToolAnnotations and agent-facing descriptions for all 56 MCP tools (66729ee)
- types: AssetsNN semantic aliases + format_category shim + downstream smoke (f5c6b18)
- types: regenerate schemas + inject Literal-discriminator defaults (27468aa)
- types: regenerate schemas + inject Literal-discriminator defaults (a4bd6d8)
- types: rename <Type>Asset content types to <Type>Content (7d0679f)
- webhooks: adcp.webhooks.deliver() + A2A artifacts conformance (493f219)
- webhooks: adcp.webhooks.deliver() one-shot legacy-auth dispatcher (3bf663d)
- webhooks: add from_pem and sign_legacy_webhook helpers (19a8ab3)
- webhooks: RFC 9421 signing + idempotency_key + sender/receiver UX (63732c8)
- webhooks: RFC 9421 signing + required idempotency_key + sender/receiver UX (c640b8c)
- CI failures - noqa F401 on guard re-exports, dynamic model_rebuild (378ac50)
- CI failures and review findings (9089711)
- CI lint - sort imports in types/init.py, pin ADCP_VERSION (cfbdca1)
- CI lint (noqa F401 re-exports) and pin ADCP_VERSION to 3.0.0-rc.3 (5959e7b)
- example: derive port and AGENT_URL from ADCP_PORT env (1df2306)
- harness,server: surface partial/failing storyboards, reuse port on rerun, default list_creatives timestamps (3b27001)
- idempotency: honor new required Idempotency.supported field in strict gate (9ff08c9)
- make ergonomic codegen resilient to datamodel-codegen variant suffix shifts (138179b)
- migrate+types: PR #247 expert-review followups (ac505c0)
- mypy override errors in subclass handlers (d35bc63)
- mypy valid-type in generated code, subclass handler param types (eb4e027)
- noqa F401 on new re-exports (TRANSIENT_CODES, MEDIA_BUY_STATE_MACHINE, PaginationResponse) (b4059c5)
- resolve CI failures from latest-tracking regeneration (8b49e1a)
- sdk: remove stray noqa, correct capabilities_response docstring (05ac689)
- sdk: SDK cheap fixes for DX Stream B1 (e67e8ed)
- sdk: three cleanups from round-4 validator findings (d7e93f7)
- seller: declare compliance_testing block and add missing force_creative_status scenario (5de1c61)
- server: expert-review followups — tenant-scoped idempotency, A2A context_factory, ContextVar safety (5f053af)
- server: PR #230 expert-review followups — cross-tenant isolation + hardening (bb2bc67)
- server: PR #232 expert-review followups — scope_provider injection, loud anonymous fallback, SSRF/secret-storage docs (5d3eff8)
- server: PR #233 expert-review followups — security docs + retry/transform tests (afbbfac)
- server: PR #234 expert-review followups — TypeVar tests & docs (df5898c)
- server: PR #237 expert-review followups (a415786)
- server: PR #238 expert-review followups (a198656)
- server: PR #238 review round 2 — MCP field surfacing + custom-validator doc (4d4e2e7)
- server: PR #241 expert-review followups (ce189f8)
- server: PR #244 expert-review followups (6af9a7d)
- server: PR #245 code-review followups — fail loudly on silent-skip paths (a0a3077)
- server: Threat 3 merge-blocker on advertised-tools gate (11abb3b)
- signing: PR #206 reviewer fixes — IDN normalization, HTTPS_PROXY, fail-closed reuse (b432b03)
- signing: PR #243 expert-review followups (e616307)
- signing: round-2 review — harden identifier check, drop invalid SQL (4ea1d8f)
- signing: round-2 review — harden issuer/Last-Modified, slide next_update on 304 (8dbcbc5)
- sort TYPE_CHECKING imports in base.py and mcp_tools.py (I001) (71f7448)
- suppress E501 in mcp_tools.py (tool descriptions are long strings) (9eea1d9)
- webhooks,seller,signals: round-6 P1+P2 DX fixes (6e51519)
- webhooks: align deliver() with canonical compact-separator on-wire form (92240d5)
- webhooks: re-apply compact-separator signer after rebase onto 3.0 GA (166aa1b)
- webhooks: sign compact-separator JSON to match httpx wire format (1c2a527)
- webhooks: verifier fails closed when raw_body missing (adcp#2478) (9a906a9)
- creative: fix NameError in build_creative fallback (afe6afb)
- creative: remove anti-patterns from build-creative-agent skill (9e42039)
- design: FastMCP native registration investigation (#209) (d32694f)
- design: FastMCP native registration investigation (closes #209) (ba3cb73)
- fix DX gaps in skill docs from real-world agent builds (dc63f8b)
- generative-seller: fix invalid enums and document generative tools (99e9f2e)
- link upstream codegen bug in post_generate_fixes (ee6f52c)
- retail: fix invalid capability enum and storyboard invocation (249acb1)
- seller,retail: teach proposal refine schema and webhook emission (9723eef)
- seller: correct invalid schema claims and serve() signature (f3a77c6)
- seller: replace false compliance_testing auto-wire with explicit kwarg (8d74805)
- signals,generative: correct idempotency.wrap decorator usage (3ba41e6)
- signals,seller: round-2 validator findings (2b941d0)
- signals: tighten signal_ids filter, idempotency, validation command (e0fb6d6)
- skills,examples: align webhook + proposal examples with real SDK and schema (a9e2a63)
- skills: round-8 DX polish — scope seller, self-contain signals (3686e38)
- skills: round-8 DX polish — scope seller, self-contain signals (8b5075c)
- mark 4.0 breaking change for release-please (8d0c430)
First 4.0 beta. See MIGRATION_v3_to_v4.md for upgrade instructions and before/after examples.
- Removed types (no replacement stubs):
BrandManifest,FormatCategory,DeliverTo,PromotedProducts,PromotedOfferings,Pricing,PackageStatus. These were removed upstream from the AdCP spec. Inline any dict payloads, or use the spec-current replacements (BrandReferenceforBrandManifest;MediaBuyStatusfor the formerPackageStatus). ResolvedBrand.brand_manifestfield removed. UseResolvedBrand.brand. The cross-populate validator that mirroredbrand↔brand_manifestis gone.CreateMediaBuyRequest.brand_manifest→brand, matching the spec. The request now takes aBrandReference, not an inline brand manifest dict.- Numbered discriminated-union classes renumbered.
Assets5…Assets14from 3.x now correspond to higher-numbered variants (Assets57…Assets149depending on the response). Import via semantic aliases fromadcp.types(e.g.,CreateMediaBuySuccessResponse) instead of numbered classes. RawAssets*imports are unsupported — they are code-generation artifacts and will shift again. - Asset-content types renamed
<Type>Asset→<Type>Content(issue #221). The payload-describing types (AudioAsset,CssAsset,HtmlAsset,ImageAsset,JavascriptAsset,TextAsset,UrlAsset,VideoAsset,WebhookAsset) are renamed toAudioContent,CssContent,HtmlContent,ImageContent,JavascriptContent,TextContent,UrlContent,VideoContent,WebhookContent. This disambiguates payload types from the slot-describing<Type>FormatAssetfamily (VideoContentdescribes what a creative delivers;VideoFormatAssetis a slot inside a format definition). The old names are no longer exported fromadcp.types. SeeMIGRATION_v3_to_v4.mdfor a search-and-replace.
__version__is now sourced from installed distribution metadata (importlib.metadata.version("adcp")) so it always matchespyproject.toml.- Added top-level re-exports:
TargetingOverlay,AdvertiserIndustry,KellerType,BrandSource. Any generated type not on the top-level surface is available fromadcp.types—adcp.types.generated_poc.*is internal and not supported for direct import.
3.12.0 (2026-04-16)
- skill-based agent generation with storyboard validation (e0eef4c)
- skill-based agent generation with storyboard validation (d9d8778)
- authorization_type takes precedence over stale properties key (3fc9ed0)
- resolve property_ids and property_tags in get_all_properties() (ef55dcb)
- resolve property_ids and property_tags in get_all_properties() (eca6bd7), closes #172
- SSRF protections for authoritative_location redirects (6d1c962)
3.11.0 (2026-04-04)
- ADCP 3.0.0-rc3 spec + full registry support (c3f6937)
- implement ADCP 3.0.0-rc3 spec with full registry support (edc9578)
- remove all backward-compat type stubs for clean 3.0.0 surface (a45cdf5)
- add backward-compat FormatCategory/FormatType enum stub (756ed50)
- clean up formatting in registry_sync and property_registry (44a1914)
- remove accidental cursor file, add to .gitignore (2650f8e)
- remove stale buyer_campaign_ref from MCP tool schemas (3c7a2c8)
3.10.0 (2026-03-17)
- add feature capability validation API (supports/require) (d550c08)
- add RC2 governance support and full spec coverage (523ea20)
- feature capability validation API (supports/require) (f86f6c4)
- filter MCP tools by handler type, add webhook replay protection (ae7f378)
- address PR review feedback (FieldModel collision, handler boilerplate, deprecation aliases) (b9eac61)
- replace TypeAdapter with model_validate, tighten slug regex (103d616)
- require webhook headers when secret configured, restrict unknown handler tools (12f1080)
- walk MRO for tool filtering, add tool name validation (39985e5)
3.9.1 (2026-03-16)
- flatten validation-only oneOf schemas for consumer subclassing (3171a95)
- flatten validation-only oneOf schemas to single subclassable classes (c242a7d)
3.9.0 (2026-03-13)
- add raw_body support for verification and use Unix timestamps (4a663e5), closes #151
- set AdCPBaseModel extra='ignore' and remove obsolete generate_models.py (#157) (21077d9)
- unwrap RootModel unions for consumer subclassing (#156) (8fd7b92)
- use default JSON separators for webhook HMAC signing (2223f6e)
- use default JSON separators for webhook HMAC signing (0dd495f), closes #151
3.8.0 (2026-03-01)
3.7.0 (2026-02-28)
3.6.0 (2026-02-23)
3.5.0 (2026-02-22)
3.4.0 (2026-02-20)
- add brand and property registry lookup methods (#130) (9bfb0fb), closes #129
- export PromotedOfferingsRequirement and PromotedOfferingsAssetRequirements, sync latest schemas (#133) (9216ea7)
- sync ADCP schemas to latest, add brand compat and AAO member API (#132) (0dca021)
3.3.0 (2026-02-12)
3.2.0 (2026-02-04)
3.1.0 (2026-01-26)
3.0.0 (2026-01-26)
- CpmAuctionPricingOption, CpmFixedRatePricingOption, VcpmAuctionPricingOption, VcpmFixedRatePricingOption have been consolidated into CpmPricingOption and VcpmPricingOption respectively.
2.19.0 (2026-01-14)
- fix PackageRequest schema inconsistency in adcp (de2b4bf)
- sync schemas with ADCP 2.6 package updates (a6c55db)
2.18.0 (2026-01-09)
- add deprecated field metadata injection and CLI warnings (8947090)
- add format asset utilities and deprecation warnings for assets_required migration (c3c379a)
- upgrade to AdCP protocol 2.6.0 (245a7d3)
- rename format_ to format in FieldModel enum (1a6ab9a)
- resolve import sorting lint error in generated _ergonomic.py (45350d1)
- resolve linter errors (import sorting, line length) (4a53e33)
- shorten comment line to pass lint (7a2e30e)
2.17.0 (2025-12-30)
2.16.0 (2025-12-21)
2.15.0 (2025-12-21)
2.14.0 (2025-12-19)
- add IPR agreement workflow using centralized AdCP signatures (#101) (a33c5d6)
- update schemas (436f754)
- update webhook handling (874d170)
- apply PR suggestion (cecc2dc)
- drop --collapse-root-models option from type gen. Regenerate types (6cba9ef)
- format (aabb322)
- format (1dca6f1)
- format (83da78d)
- handle all authorization types in get_properties_by_agent (#100) (934f437)
- regenerate schemas (4ab4f53)
- tests (e1664aa)
- update MCP SDK to >=1.23.2 for streaming stability (#94) (3c25822)
- update verify signature function to work with timestamp (aaa7c8b)
- utility functions (bc47233)
2.13.0 (2025-12-07)
2.12.2 (2025-11-29)
- handle BaseExceptionGroup with CancelledError during cleanup (#89) (940e6ee)
- handle ExceptionGroup and CancelledError in MCP error flow (#87) (27ff0ae)
- use official A2A SDK for spec-compliant client implementation (#90) (d1b55cf)
2.12.1 (2025-11-24)
2.12.0 (2025-11-22)
2.11.1 (2025-11-21)
2.11.0 (2025-11-21)
2.10.0 (2025-11-20)
2.9.0 (2025-11-20)
- add missing AdCP protocol methods to CLI and client (#71) (f9432a3)
- integrate AdCP schema improvements (PR #222 + #223) (#73) (d61ca33)
2.8.0 (2025-11-19)
2.7.0 (2025-11-19)
- export FormatId, PackageRequest, PushNotificationConfig, and PriceGuidance from stable API (#68) (654f882)
2.6.0 (2025-11-19)
2.5.0 (2025-11-18)
2.4.1 (2025-11-18)
2.4.0 (2025-11-18)
2.3.0 (2025-11-17)
2.2.0 (2025-11-16)
2.1.0 (2025-11-16)
2.0.0 (2025-11-15)
1.6.1 (2025-11-13)
- context field for custom injected types (e37c095)
- context field for custom injected types (8e96c6e)
- mypy failures (c186472)
- ruff check (b8296e5)
1.6.0 (2025-11-13)
- add adagents.json validation and discovery (#42) (4ea16a1)
- add AdCPBaseModel with exclude_none serialization (#40) (c3cd590)
1.5.0 (2025-11-13)
1.4.1 (2025-11-11)
1.4.0 (2025-11-10)
1.3.1 (2025-11-10)
1.3.0 (2025-11-10)
1.2.1 (2025-11-09)
1.2.0 (2025-11-08)
1.1.0 (2025-11-07)
1.0.5 (2025-11-07)
1.0.4 (2025-11-07)
1.0.3 (2025-11-07)
1.0.2 (2025-11-06)
1.0.1 (2025-11-06)
1.0.0 (2025-11-06)
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- All client methods now require typed request objects. The legacy kwargs API has been removed for a cleaner, more type-safe interface.
- update PyPI setup guide with correct secret name and current status (085b961)
0.1.2 (2025-11-05)
- correct secret name from PYPI_API_TOKEN to PYPY_API_TOKEN (0b7599d)
0.1.1 (2025-11-05)
- remove deprecated package-name parameter from release-please config (28d8154)
- add automated versioning and PyPI publishing (e7f8bbb)
- add comprehensive PyPI publishing setup guide (dcc8135)