Skip to content

Latest commit

 

History

History
1440 lines (908 loc) · 166 KB

File metadata and controls

1440 lines (908 loc) · 166 KB

Changelog

6.3.0-beta.10 (2026-06-12)

Features

  • protocol: support AdCP 3.1.0-rc.13
  • server: project native postal capabilities to legacy booleans for AdCP 3.0 callers

Bug Fixes

  • schemas: stamp primary latest fallback caches with the requested prerelease version

6.3.0-beta.9 (2026-06-07)

⚠ BREAKING CHANGES

  • 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).

Features

  • 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)

Bug Fixes

  • 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)

⚠ BREAKING CHANGES

  • 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.

Features

Bug Fixes

  • types: generate schema enums as StrEnum (#915) (6ad4fe4)

6.3.0-beta.7 (2026-05-30)

Features

  • client: add explicit MCP Streamable HTTP session termination helper (#903)
  • server: expose opt-in MCP session debug snapshots (#903)

Breaking changes

  • server: enable_debug_endpoints=True now fails closed unless callers also pass debug_validate_request= or explicitly opt into unauthenticated local/test access with debug_public=True.

Security

  • server: debug endpoints are no longer exposed unauthenticated by default; use a validator such as an X-Debug-Token check for network-reachable deployments.

Bug Fixes

  • server: guard stateful MCP sessions (#904) (cb11a95)
  • types: update AdCP rc4 schemas (71c45e5)

6.3.0-beta.6 (2026-05-28)

Bug Fixes

  • validation: bundle schemas before wheel builds (0cdcf29)

6.3.0-beta.5 (2026-05-28)

Features

  • add creative format compatibility helpers (#887) (7f26ad1)
  • canonical-formats: add canonical reference resolver (#891) (d5706cd)

Bug Fixes

  • ci: block agent PR title prefixes (#893) (79a979d)
  • types: support AdCP 3.1 beta 7 (3eee8d5)

6.3.0-beta.4 (2026-05-26)

Features

  • allow externally managed webhook signing capabilities (#876) (3c312a0)

6.2.0-beta.4 (2026-05-26)

Features

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Bug Fixes

  • codegen: preserve regenerated response aliases (#854) (56d65fd)
  • seller SDK version compatibility (#852) (e4b716d)

6.1.0-beta.2 (2026-05-24)

⚠ BREAKING CHANGES

  • read media_buy_status for lifecycle; status is now the task envelope.

Features

  • 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

Bug Fixes

  • harden media buy response normalization (5defa15)
  • harden media buy response normalization (532459a)

6.1.0-beta.1 (2026-05-23)

Features

  • add webhook URL policy and wholesale feed sender (65f84d2)

6.0.0-beta.1 (2026-05-23)

Features

  • testing: make SellerA2AClient event drain configurable (#829) (62515d8)

Bug Fixes

  • send AAO directory pagination cursor as cursor (#811) (da91183)

Documentation

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Reverts

Documentation

  • agents: behaviour → behavior (Argus smoke test) (#766) (e7c0815)

5.6.0 (2026-05-19)

Features

  • auth: per-instance discovery_tools override for BearerTokenAuth (#743) (76d0673)

Bug Fixes

  • 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)

Documentation

  • decisioning: document AccountStore.resolve() as the multi-tenant encoding seam (#739) (0b30743)

5.5.0 (2026-05-14)

Features

  • 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)

Bug Fixes

Documentation

  • response-extension import path guidance for context-specific schema variants (#644) (61fb835)

5.4.0 (2026-05-13)

Features

  • 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)

Bug Fixes

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Features

  • 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)

Features

  • 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)

Bug Fixes

  • decisioning: wrap pydantic.ValidationError from delegates as INVALID_REQUEST (#656) (976ab4f)

5.0.0 (2026-05-10)

⚠ BREAKING CHANGES

  • types: callers passing affected_packages into a function typed def f(x: list[Package]) will see a mypy error and need to migrate to Sequence[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: domain kwarg removed from create_mcp_webhook_payload and WebhookSender.send_mcp. Migrate to protocol (kebab-case string or AdcpProtocol enum value).
  • webhooks: create_mcp_webhook_payload returns a Pydantic model, not a dict; task_type is now required.

Features

  • 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 domain kwarg with typed protocol (AdcpProtocol enum) (#637) (fdd4053)

Bug Fixes

  • 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)

Documentation

  • types: document Field(exclude=True) and @model_serializer for nested wire isolation (#630) (4912af9)

4.6.1 (2026-05-10)

Bug Fixes

  • decisioning: wire sync_accounts/list_accounts dispatch to AccountStore Protocols (#610) (dabf4fb)

4.6.0 (2026-05-09)

Features

  • webhooks: public to_wire_dict() serialization seam (#602) (6a06e88)

Bug Fixes

  • 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)

Documentation

  • contributing: document PR title format to prevent silent CHANGELOG drops (#580) (2c5ec64)

4.5.0 (2026-05-07)

Features

  • auth: per-leg header config + agent-card bearerAuth scheme (#595) (52f45ef)

Bug Fixes

  • client: preserve agent_uri trailing slash; widen MCP URL fallbacks (#582) (1db3ce3)

4.4.3 (2026-05-05)

Bug Fixes

  • server: A2A auth middleware populates current_principal contextvars (#592) (5430942)

4.4.2 (2026-05-05)

Bug Fixes

  • deps: re-pin a2a-sdk<1.0.2, add protobuf>=6 floor + matrix canary (#588) (1e16d6f)

4.4.1 (2026-05-05)

Bug Fixes

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Performance Improvements

  • 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)

Documentation

  • 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)

Features

  • server: public register_handler_tools seam + advertised_tools class attr (#318) (d96822a)
  • signing: SigningProvider Protocol for KMS-backed signing (#283) (#323) (4de648e)

Bug Fixes

  • examples: close last 5 storyboard fixture-dependent failures (#319) (#322) (d92cfb1)
  • examples: seed_product complete defaults + format_ids agent_url normalization (#319) (#321) (046b15e)

Documentation

  • handler-authoring: expand with salesagent migration production patterns (#326) (ce4c5df)

4.2.0 (2026-04-30)

Features

  • 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)

Bug Fixes

  • 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)

⚠ BREAKING CHANGES

  • migration: FormatId.__name__ and __qualname__ change from "FormatId" to "FormatReferenceStructuredObject" because AdCP 3.0.1 polished the schema title on core/format-id.json. The public adcp.FormatId alias keeps working — Format(format_id= FormatId(...)) and isinstance(x, FormatId) are unchanged. Two niche cases break: pickled FormatId instances 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_id is now ADCPClient.active_task_id (same for A2AAdapter). The constructor's context_id= kwarg and reset_context() now raise TypeError (was ValueError) on non-A2A protocols — the string value is fine, the operation doesn't apply to MCP.

Features

  • 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)

Bug Fixes

  • 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)

Documentation

  • 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)

⚠ BREAKING CHANGES

  • 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_level is removed. Migrate to reallocation_threshold / reallocation_unlimited on plan.budget, and set plan.human_review_required for decisions affecting data subjects. See the rc.4 migration section in README.md.

Features

  • 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)

Bug Fixes

  • 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)

Documentation

  • 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)

Miscellaneous Chores

  • mark 4.0 breaking change for release-please (8d0c430)

[4.0.0b1] — 2026-04-20

First 4.0 beta. See MIGRATION_v3_to_v4.md for upgrade instructions and before/after examples.

Breaking changes

  • 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 (BrandReference for BrandManifest; MediaBuyStatus for the former PackageStatus).
  • ResolvedBrand.brand_manifest field removed. Use ResolvedBrand.brand. The cross-populate validator that mirrored brandbrand_manifest is gone.
  • CreateMediaBuyRequest.brand_manifestbrand, matching the spec. The request now takes a BrandReference, not an inline brand manifest dict.
  • Numbered discriminated-union classes renumbered. Assets5…Assets14 from 3.x now correspond to higher-numbered variants (Assets57…Assets149 depending on the response). Import via semantic aliases from adcp.types (e.g., CreateMediaBuySuccessResponse) instead of numbered classes. Raw Assets* 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 to AudioContent, CssContent, HtmlContent, ImageContent, JavascriptContent, TextContent, UrlContent, VideoContent, WebhookContent. This disambiguates payload types from the slot-describing <Type>FormatAsset family (VideoContent describes what a creative delivers; VideoFormatAsset is a slot inside a format definition). The old names are no longer exported from adcp.types. See MIGRATION_v3_to_v4.md for a search-and-replace.

Non-breaking

  • __version__ is now sourced from installed distribution metadata (importlib.metadata.version("adcp")) so it always matches pyproject.toml.
  • Added top-level re-exports: TargetingOverlay, AdvertiserIndustry, KellerType, BrandSource. Any generated type not on the top-level surface is available from adcp.typesadcp.types.generated_poc.* is internal and not supported for direct import.

3.12.0 (2026-04-16)

Features

  • skill-based agent generation with storyboard validation (e0eef4c)
  • skill-based agent generation with storyboard validation (d9d8778)

Bug Fixes

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Features

  • 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)

Bug Fixes

  • 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)

Bug Fixes

  • 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)

Features

  • add RootModel getattr proxy and minimal sales agent example (#150) (f1c3990), closes #145 #148

Bug Fixes

  • 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)

Features

Bug Fixes

  • resolve CI failures from GetSignalsRequest union alias (#144) (f135651)

3.7.0 (2026-02-28)

Features

3.6.0 (2026-02-23)

Features

  • sync upstream schemas and add get_media_buys (#136) (3625a2b)

3.5.0 (2026-02-22)

Features

  • sync upstream catalog schemas and add catalog type support (#134) (9de1eda)

3.4.0 (2026-02-20)

Features

  • 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)

Features

  • sync ADCP schema to 3.0.0-beta.3 with new operations and forecasting (#127) (bb611c3)

3.2.0 (2026-02-04)

Features

3.1.0 (2026-01-26)

Features

  • export PricingOption and other union type aliases from main package (#121) (a1c61e7), closes #120

3.0.0 (2026-01-26)

⚠ BREAKING CHANGES

  • CpmAuctionPricingOption, CpmFixedRatePricingOption, VcpmAuctionPricingOption, VcpmFixedRatePricingOption have been consolidated into CpmPricingOption and VcpmPricingOption respectively.

Features

  • add V3 protocol support (Governance, Content Standards, SI, CLI) (#117) (dfec179)

2.19.0 (2026-01-14)

Features

  • fix PackageRequest schema inconsistency in adcp (de2b4bf)
  • sync schemas with ADCP 2.6 package updates (a6c55db)

2.18.0 (2026-01-09)

Features

  • 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)

Bug Fixes

  • 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)

Features

  • add protocol field extraction for A2A responses (#110) (ae71b65)

2.16.0 (2025-12-21)

Features

  • extend type ergonomics to response types (#106) (d31c4d8)

2.15.0 (2025-12-21)

Features

  • improve type ergonomics for library consumers (#103) (75dec68)

2.14.0 (2025-12-19)

Features

  • add IPR agreement workflow using centralized AdCP signatures (#101) (a33c5d6)
  • update schemas (436f754)
  • update webhook handling (874d170)

Bug Fixes

  • 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)

Features

  • add str methods and filter params tests (#92) (6358542)

2.12.2 (2025-11-29)

Bug Fixes

  • 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)

Bug Fixes

  • correct ADCP_VERSION packaging for PyPI (#85) (161656d)

2.12.0 (2025-11-22)

Features

  • align A2A adapter with canonical response format (#83) (f7062f2)

2.11.1 (2025-11-21)

Bug Fixes

  • trigger release for PropertyTag/PropertyId schema updates (#81) (f9556c5)

2.11.0 (2025-11-21)

Features

  • sync AdCP schema updates and simplify type architecture (#78) (58e0d24)

2.10.0 (2025-11-20)

Features

  • add create_media_buy, update_media_buy, and build_creative to SimpleAPI (#74) (5545071)

2.9.0 (2025-11-20)

Features

2.8.0 (2025-11-19)

Features

  • expose all types through stable public API (#69) (3abef14)

2.7.0 (2025-11-19)

Features

  • export FormatId, PackageRequest, PushNotificationConfig, and PriceGuidance from stable API (#68) (654f882)

Bug Fixes

  • trigger 2.6.1 release for import boundary enforcement (#66) (ee8017a)

2.6.0 (2025-11-19)

Features

  • complete semantic alias coverage for discriminated unions (#63) (ab49c98)

2.5.0 (2025-11-18)

Features

  • Add API reference documentation with pdoc3 (#59) (6f7fdf1)

Bug Fixes

  • resolve Package type name collision with semantic aliases (#62) (b4028b7)

2.4.1 (2025-11-18)

Bug Fixes

  • remove stale generated files and improve type generation (#58) (574ec90)

2.4.0 (2025-11-18)

Features

  • Add is_fixed discriminator to pricing types (#56) (e47ff66)

2.3.0 (2025-11-17)

Features

  • Add publisher authorization discovery API (#54) (e7d0696)

Bug Fixes

  • Move email-validator to runtime dependencies (#51) (6ce1535)

2.2.0 (2025-11-16)

Features

  • Add semantic type aliases for discriminated unions (#49) (d776bc6)

2.1.0 (2025-11-16)

Features

  • Add ergonomic type aliases and public API exports (#47) (5c63dec)

2.0.0 (2025-11-15)

⚠ BREAKING CHANGES

Features

  • Migrate to datamodel-code-generator for type generation (#45) (8844d69)

1.6.1 (2025-11-13)

Bug Fixes

  • 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)

Features

  • add adagents.json validation and discovery (#42) (4ea16a1)
  • add AdCPBaseModel with exclude_none serialization (#40) (c3cd590)

1.5.0 (2025-11-13)

Features

  • generate type adcp context field (38600f2)
  • generate type adcp context field (92e90c9)

1.4.1 (2025-11-11)

Bug Fixes

  • handle MCP error responses without structuredContent (#34) (52956bc)

1.4.0 (2025-11-10)

Features

  • add ergonomic .simple accessor to all ADCPClient instances (#32) (5404325)

1.3.1 (2025-11-10)

Bug Fixes

  • export no-auth test helpers from main module (#30) (fb2459d)

1.3.0 (2025-11-10)

Features

1.2.1 (2025-11-09)

Documentation

  • add Python version requirement note to README (#25) (b2e5233)

1.2.0 (2025-11-08)

Features

  • improve type generation with discriminated union support (#21) (54da596)

1.1.0 (2025-11-07)

Features

  • batch preview API with 5-10x performance improvement (#18) (813df8a)

Bug Fixes

  • improve MCP adapter cleanup on connection failures (#19) (40d83f3)

1.0.5 (2025-11-07)

Bug Fixes

  • return both message and structured content in MCP responses (#16) (696a3aa)

1.0.4 (2025-11-07)

Bug Fixes

  • handle Pydantic TextContent objects in MCP response parser (#14) (6b60365)

1.0.3 (2025-11-07)

Bug Fixes

  • parse list_creative_formats response into structured type (#12) (15b5395)

1.0.2 (2025-11-06)

Bug Fixes

  • correct tool name in list_creative_formats method (#10) (d9eff68)

1.0.1 (2025-11-06)

Bug Fixes

  • use correct PYPY_API_TOKEN secret for PyPI publishing (#8) (b48a33a)

1.0.0 (2025-11-06)

⚠ BREAKING CHANGES

  • 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.

Features

  • complete Python AdCP SDK with typed API and auto-generated types (#5) (bc8ebc9)

Bug Fixes

  • correct PyPI API token secret name (#6) (eae30ce)

Reverts

  • restore correct PYPY_API_TOKEN secret name (#7) (330f484)

Documentation

  • update PyPI setup guide with correct secret name and current status (085b961)

0.1.2 (2025-11-05)

Bug Fixes

  • correct secret name from PYPI_API_TOKEN to PYPY_API_TOKEN (0b7599d)

0.1.1 (2025-11-05)

Bug Fixes

  • remove deprecated package-name parameter from release-please config (28d8154)

0.1.0 (2025-11-05)

Features

  • add automated versioning and PyPI publishing (e7f8bbb)

Documentation

  • add comprehensive PyPI publishing setup guide (dcc8135)