From 898ed3108c309318aeb56c165190ce6c5c53ad61 Mon Sep 17 00:00:00 2001 From: "aao-ipr-bot[bot]" <279263549+aao-ipr-bot[bot]@users.noreply.github.com> Date: Tue, 18 Aug 2026 12:07:32 +0000 Subject: [PATCH 1/2] chore(main): release 8.0.0-beta.1 --- .release-please-manifest.json | 2 +- CHANGELOG.md | 390 ++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 3 files changed, 392 insertions(+), 2 deletions(-) diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ddaced51..b3f4d4dd 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "8.0.0-beta.3" + ".": "8.0.0-beta.1" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c95cd11..40d67425 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,395 @@ # Changelog +## [8.0.0-beta.1](https://github.com/adcontextprotocol/adcp-client-python/compare/v8.0.0-beta.3...v8.0.0-beta.1) (2026-08-18) + + +### ⚠ BREAKING CHANGES + +* **protocol:** Low-level sign_request and async_sign_request calls now require an explicit signing_profile_version. +* **client:** align safety and asset APIs with JavaScript v13 ([#1032](https://github.com/adcontextprotocol/adcp-client-python/issues/1032)) +* **identity:** create_roster_account_store now requires an authorize callback. +* **creative:** FormatId is removed from the normal root API in favor of LegacyFormatId and explicit legacy modules. BuildCreativeRequest/Response and PreviewCreativeRequest/Response variants are renamed to Legacy*; ADCPClient build_creative/preview_creative and list_creative_formats move to *_legacy methods. Product and creative filters no longer expose format_ids, and generic primary execution rejects legacy-only creative tasks. +* 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). +* **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. +* read `media_buy_status` for lifecycle; `status` is now the task envelope. +* **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. +* **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. + +### docs + +* add MIGRATION_v5_to_v6 stub for the 6.0-beta line ([#823](https://github.com/adcontextprotocol/adcp-client-python/issues/823)) ([c3837af](https://github.com/adcontextprotocol/adcp-client-python/commit/c3837af96f58dc37c22dbef47a02a2bbcaad3bf2)), closes [#802](https://github.com/adcontextprotocol/adcp-client-python/issues/802) +* **migration:** add v4.0 → v4.1 migration guide ([#302](https://github.com/adcontextprotocol/adcp-client-python/issues/302)) ([01a1068](https://github.com/adcontextprotocol/adcp-client-python/commit/01a106891df33e8409bf95a63f11eec08ebbcf15)) + + +### Features + +* **a2a:** add public_url param to agent card for production deployments ([#621](https://github.com/adcontextprotocol/adcp-client-python/issues/621)) ([14d294c](https://github.com/adcontextprotocol/adcp-client-python/commit/14d294c7922ad0fa91b30ad1f03de75ff9c7b694)) +* **a2a:** auto-retain contextId + taskId across multi-turn calls ([0564635](https://github.com/adcontextprotocol/adcp-client-python/commit/056463547e88dde2919d644d2dbc32e13dea947a)) +* **a2a:** auto-retain contextId + taskId across multi-turn calls ([8a084ec](https://github.com/adcontextprotocol/adcp-client-python/commit/8a084ecd1e8cf3e31c57fbe6f6c25f673b6cbe07)) +* **a2a:** checkpoint/from_checkpoint API, harden context-id retention ([a17ffb3](https://github.com/adcontextprotocol/adcp-client-python/commit/a17ffb382aa1d777e5e98fdc26c6cc9efd4898c0)) +* **a2a:** expose peer protocol versions, add force_a2a_version pin ([3898c53](https://github.com/adcontextprotocol/adcp-client-python/commit/3898c536fb08dd088ff1074216a8c56ae727dc63)) +* **a2a:** migrate to a2a-sdk 1.0 with 0.3 wire-compat shim ([c07db7d](https://github.com/adcontextprotocol/adcp-client-python/commit/c07db7df96b1744b0660ecf367375178ef87defc)) +* **a2a:** migrate to a2a-sdk 1.0 with 0.3 wire-compat shim (Release-As: 4.1.0) ([28a4a13](https://github.com/adcontextprotocol/adcp-client-python/commit/28a4a13867adb039504fde59ceab48e2d961380a)) +* **a2a:** per-request agent-card URL resolution via callable public_url ([#650](https://github.com/adcontextprotocol/adcp-client-python/issues/650)) ([1b4f3e0](https://github.com/adcontextprotocol/adcp-client-python/commit/1b4f3e05bd075b65b334a289fa05403008918796)) +* **adagents:** add permissive property resolver ([#863](https://github.com/adcontextprotocol/adcp-client-python/issues/863)) ([7f45742](https://github.com/adcontextprotocol/adcp-client-python/commit/7f457422beec2912e10a84f7e3eed665bbc458af)) +* **adagents:** add validate_adagents_structure helper ([#708](https://github.com/adcontextprotocol/adcp-client-python/issues/708)) ([ccd1955](https://github.com/adcontextprotocol/adcp-client-python/commit/ccd19559b97417f9b6a0141e857d2c23cb78289f)) +* **adagents:** ads.txt MANAGERDOMAIN fallback discovery ([#704](https://github.com/adcontextprotocol/adcp-client-python/issues/704)) ([#705](https://github.com/adcontextprotocol/adcp-client-python/issues/705)) ([fddea1a](https://github.com/adcontextprotocol/adcp-client-python/commit/fddea1ab2f44db12fc932767b505009a457f2540)) +* **adagents:** divergence detector + ?include=properties for directory inverse-lookup ([#749](https://github.com/adcontextprotocol/adcp-client-python/issues/749) Part 3, adcp[#4894](https://github.com/adcontextprotocol/adcp-client-python/issues/4894)) ([#752](https://github.com/adcontextprotocol/adcp-client-python/issues/752)) ([1281076](https://github.com/adcontextprotocol/adcp-client-python/commit/128107638aaea1927e99db3fe67614d9e951f8c8)) +* **adagents:** fetch_agent_authorizations_from_directory for AAO inverse lookup ([#769](https://github.com/adcontextprotocol/adcp-client-python/issues/769)) ([1c4e57d](https://github.com/adcontextprotocol/adcp-client-python/commit/1c4e57d47ee774b0be8f77540df1b3b60953a175)) +* **adagents:** publisher_domains compact form, revoked_publisher_domains, streaming fetch caps (closes [#729](https://github.com/adcontextprotocol/adcp-client-python/issues/729)) ([#753](https://github.com/adcontextprotocol/adcp-client-python/issues/753)) ([352d1bb](https://github.com/adcontextprotocol/adcp-client-python/commit/352d1bb6719cfd20bf4a703d1d6bd0d1077a0c47)) +* **adcp:** support ADCP_BASE_URL env override in sync_schemas.py ([#285](https://github.com/adcontextprotocol/adcp-client-python/issues/285)) ([a2bc977](https://github.com/adcontextprotocol/adcp-client-python/commit/a2bc9770dfb86a5b2cca94b671af8cb899224ce5)) +* **adcp:** sync canonical agent skills from protocol tarball ([#275](https://github.com/adcontextprotocol/adcp-client-python/issues/275)) ([5312f05](https://github.com/adcontextprotocol/adcp-client-python/commit/5312f05df25d8b6ad240f497e88a4c15f58990a8)) +* add creative format compatibility helpers ([#887](https://github.com/adcontextprotocol/adcp-client-python/issues/887)) ([7f26ad1](https://github.com/adcontextprotocol/adcp-client-python/commit/7f26ad19d6bcef0140feeecfe8244d5975202821)) +* add FeedMirror client-side wholesale feed mirror ([#940](https://github.com/adcontextprotocol/adcp-client-python/issues/940)) ([64ce9ba](https://github.com/adcontextprotocol/adcp-client-python/commit/64ce9bae48d5c01f43d9f40bb6b15c256cbd4ce5)) +* add webhook proof-of-control helper ([#843](https://github.com/adcontextprotocol/adcp-client-python/issues/843)) ([232f7ef](https://github.com/adcontextprotocol/adcp-client-python/commit/232f7ef6d08e16234b6227ac34f5ba091043a51e)) +* add webhook URL policy and wholesale feed sender ([65f84d2](https://github.com/adcontextprotocol/adcp-client-python/commit/65f84d2ea74775c08b067bd393ab82127c558918)) +* **agents:** /claude-triage comment nudge ([5af8b47](https://github.com/adcontextprotocol/adcp-client-python/commit/5af8b4736516b986045717d62da94e700aa57cca)) +* **agents:** /claude-triage comment nudge ([d3b8b28](https://github.com/adcontextprotocol/adcp-client-python/commit/d3b8b28d8dc9cbf1ab2df86b1a0c7f619ad3c332)) +* **agents:** add Claude Code routines scaffolding ([aa23ef3](https://github.com/adcontextprotocol/adcp-client-python/commit/aa23ef3d35de8b7740924b4ae1ec6ec7b8a832a7)) +* **agents:** add Claude Code routines scaffolding ([d312abf](https://github.com/adcontextprotocol/adcp-client-python/commit/d312abff8e63af7a36b23073e33d8976dd9214aa)) +* **agents:** add silent-triage path to triage prompt ([6abb495](https://github.com/adcontextprotocol/adcp-client-python/commit/6abb49529d79a3947fd95c675c9f48852c8adff3)) +* **agents:** adopt shared .agents/roles/ layout from adcp[#4500](https://github.com/adcontextprotocol/adcp-client-python/issues/4500) ([#730](https://github.com/adcontextprotocol/adcp-client-python/issues/730)) ([fe02c17](https://github.com/adcontextprotocol/adcp-client-python/commit/fe02c173bfc5a33bfdd378f12f01bea5f2663876)) +* **agents:** commit .claude/agents/ experts for cloud routine access ([55144f2](https://github.com/adcontextprotocol/adcp-client-python/commit/55144f273513479ba64f3c95682a84ef69847815)) +* **agents:** migrate manual triage nudge to /triage slash-command-dispatch ([#267](https://github.com/adcontextprotocol/adcp-client-python/issues/267)) ([6bd434d](https://github.com/adcontextprotocol/adcp-client-python/commit/6bd434d488f480eb75f8dba075a22fcfa544d44a)) +* **agents:** Phase 3 — weekly sync workflow from adcp ([#731](https://github.com/adcontextprotocol/adcp-client-python/issues/731)) ([884873a](https://github.com/adcontextprotocol/adcp-client-python/commit/884873a12d51adafef51c298220f21dae6096d4b)) +* **agents:** security + product review fixes for triage routine ([cbafef5](https://github.com/adcontextprotocol/adcp-client-python/commit/cbafef5c76d2c59328139e743194c216a5dc5d51)) +* **agents:** switch triage nudge prefix to [@claude-triage](https://github.com/claude-triage) ([#265](https://github.com/adcontextprotocol/adcp-client-python/issues/265)) ([77bfce2](https://github.com/adcontextprotocol/adcp-client-python/commit/77bfce298e7fc879ea409dc97f6975e72511dd1e)) +* **agents:** triage bundles ready items, never splits issues ([#266](https://github.com/adcontextprotocol/adcp-client-python/issues/266)) ([2227a6b](https://github.com/adcontextprotocol/adcp-client-python/commit/2227a6bb23e4c7486388c3663f9b87611d39914f)) +* **agents:** triage default — execute when outcome is clear ([e3f8a6c](https://github.com/adcontextprotocol/adcp-client-python/commit/e3f8a6c8787f623881d3b3a2c9e8df43b126c4c5)) +* **agents:** triage defer subtypes + partial-rollout linkage rule ([#273](https://github.com/adcontextprotocol/adcp-client-python/issues/273)) ([c97aa95](https://github.com/adcontextprotocol/adcp-client-python/commit/c97aa95e1e9e8325802a71f92f807306128556e5)) +* **agents:** triage fires on comments + claude-triaging lifecycle label ([#277](https://github.com/adcontextprotocol/adcp-client-python/issues/277)) ([604d795](https://github.com/adcontextprotocol/adcp-client-python/commit/604d79587be99af4a08e815c1dddc527d3b36721)) +* **agents:** triage PR ergonomics — refs adcp[#3121](https://github.com/adcontextprotocol/adcp-client-python/issues/3121) ([#279](https://github.com/adcontextprotocol/adcp-client-python/issues/279)) ([31606eb](https://github.com/adcontextprotocol/adcp-client-python/commit/31606eb2230267fe9de7c5149ac716af239ff33a)) +* **agents:** triage prompt handles RFC/epic/scope bucket/milestone ([cac3525](https://github.com/adcontextprotocol/adcp-client-python/commit/cac35250b8a57a978bb481aa5134f38d1731fe5f)) +* **agents:** triage runs pre-PR build+test gate before expert review ([#271](https://github.com/adcontextprotocol/adcp-client-python/issues/271)) ([8fcc5ee](https://github.com/adcontextprotocol/adcp-client-python/commit/8fcc5ee220a0f4792fec9b724e7b602b99596024)) +* **agents:** triage runs pre-PR expert review on diff before opening PR ([#269](https://github.com/adcontextprotocol/adcp-client-python/issues/269)) ([46dd708](https://github.com/adcontextprotocol/adcp-client-python/commit/46dd708f7dcc6a241b655745ab281001b6a1dbc7)) +* **agents:** triage v2 — expert consultation + race + coverage ([bf6e18b](https://github.com/adcontextprotocol/adcp-client-python/commit/bf6e18bdacebdf69f959bb7c915ef34cd6333a13)) +* align media-buy responses with AdCP 3.1 ([391dae6](https://github.com/adcontextprotocol/adcp-client-python/commit/391dae6c9c8a753a790aa049970c80205a14309d)) +* allow externally managed webhook signing capabilities ([#876](https://github.com/adcontextprotocol/adcp-client-python/issues/876)) ([3c312a0](https://github.com/adcontextprotocol/adcp-client-python/commit/3c312a0dacea1c99535dac0bac68db54a6301d26)) +* **auth:** header_name + bearer_prefix_required on BearerTokenAuthMiddleware ([#545](https://github.com/adcontextprotocol/adcp-client-python/issues/545)) ([b16d18f](https://github.com/adcontextprotocol/adcp-client-python/commit/b16d18f88f4c905843e297c06341e475a89a991b)) +* **auth:** per-instance discovery_tools override for BearerTokenAuth ([#743](https://github.com/adcontextprotocol/adcp-client-python/issues/743)) ([76d0673](https://github.com/adcontextprotocol/adcp-client-python/commit/76d067344390693f811d412b7d4deea64e0e2633)) +* **auth:** per-leg header config + agent-card bearerAuth scheme ([#595](https://github.com/adcontextprotocol/adcp-client-python/issues/595)) ([52f45ef](https://github.com/adcontextprotocol/adcp-client-python/commit/52f45efbc4e2ba20bbb824e3b86b17d171d7570b)) +* **buyer-agent-registry:** caching + rate-limit + audit emission ([#380](https://github.com/adcontextprotocol/adcp-client-python/issues/380)) ([#407](https://github.com/adcontextprotocol/adcp-client-python/issues/407)) ([5a1e6b6](https://github.com/adcontextprotocol/adcp-client-python/commit/5a1e6b620c86da88259f7477f91179762c4a04e2)) +* **buyer-agent-registry:** with_caching factory auto-invalidates on mutations ([#692](https://github.com/adcontextprotocol/adcp-client-python/issues/692)) ([de65957](https://github.com/adcontextprotocol/adcp-client-python/commit/de65957e26209befd9a1e3cca34df9ca5361de50)) +* **canonical-formats:** add canonical reference resolver ([#891](https://github.com/adcontextprotocol/adcp-client-python/issues/891)) ([d5706cd](https://github.com/adcontextprotocol/adcp-client-python/commit/d5706cdbc184a48f58a8a3a6ae89f4f435b26bd1)) +* **canonical-formats:** public API + v2→v1 projection ([#741](https://github.com/adcontextprotocol/adcp-client-python/issues/741), half 1 of 2) ([#841](https://github.com/adcontextprotocol/adcp-client-python/issues/841)) ([b455e2a](https://github.com/adcontextprotocol/adcp-client-python/commit/b455e2a8dd8197499404d546dfc512da1814e7c4)) +* **canonical-formats:** v1↔v2 reverse + pixel_tracker + narrowing ([#741](https://github.com/adcontextprotocol/adcp-client-python/issues/741), half 2 of 2) ([#845](https://github.com/adcontextprotocol/adcp-client-python/issues/845)) ([37e9225](https://github.com/adcontextprotocol/adcp-client-python/commit/37e92256891892c923e303acf73a5a9fee904090)) +* **client:** ADCPClient.from_mcp_client() factory for in-process MCP transport ([#293](https://github.com/adcontextprotocol/adcp-client-python/issues/293)) ([d83aa53](https://github.com/adcontextprotocol/adcp-client-python/commit/d83aa53981c80b9e50a84b5a745e85d5837e0d1a)) +* **client:** align safety and asset APIs with JavaScript v13 ([#1032](https://github.com/adcontextprotocol/adcp-client-python/issues/1032)) ([0b8bebc](https://github.com/adcontextprotocol/adcp-client-python/commit/0b8bebc6e21a328793e578932f235bfa7a65c57e)) +* **client:** looks_like_v3_capabilities — drop the v2-downgrade footgun on capabilities-validation failure ([#475](https://github.com/adcontextprotocol/adcp-client-python/issues/475)) ([385dc80](https://github.com/adcontextprotocol/adcp-client-python/commit/385dc80f9c2043d175b7420dda7cfa3a8d387403)) +* **client:** server_version constructor scaffold (stage 7-lite) ([#674](https://github.com/adcontextprotocol/adcp-client-python/issues/674)) ([5c7acb4](https://github.com/adcontextprotocol/adcp-client-python/commit/5c7acb4be3e86d55f039e0643758605383c8c098)) +* **client:** surface structured adcp_error on TaskResult ([#675](https://github.com/adcontextprotocol/adcp-client-python/issues/675)) ([fe66335](https://github.com/adcontextprotocol/adcp-client-python/commit/fe66335006d188fdc77194403e77f08b44bfce6b)) +* **codegen:** fail consolidate on unallowlisted name collisions ([#919](https://github.com/adcontextprotocol/adcp-client-python/issues/919)) ([d9367a0](https://github.com/adcontextprotocol/adcp-client-python/commit/d9367a0b20d2884146f207b13b11e3a0820911a8)) +* **compat:** AdapterPair pattern + v2.5 sync_creatives (stage 4) ([#665](https://github.com/adcontextprotocol/adcp-client-python/issues/665)) ([0e47dcc](https://github.com/adcontextprotocol/adcp-client-python/commit/0e47dcc1cf19c2d6b31b90749af1b6733891694e)) +* **compat:** server-side shape-based v2.5 detection (stage 6) ([#673](https://github.com/adcontextprotocol/adcp-client-python/issues/673)) ([d6210cc](https://github.com/adcontextprotocol/adcp-client-python/commit/d6210cce69ae04a64536a5f35edc45d1bd0d67cc)) +* **compat:** v2.5 create_media_buy + update_media_buy adapters (stage 5c) ([#669](https://github.com/adcontextprotocol/adcp-client-python/issues/669)) ([4e3473a](https://github.com/adcontextprotocol/adcp-client-python/commit/4e3473a3a35b478bb6a6ef174af6790725d62a27)) +* **compat:** v2.5 get_products adapter (stage 5b) ([#668](https://github.com/adcontextprotocol/adcp-client-python/issues/668)) ([2025520](https://github.com/adcontextprotocol/adcp-client-python/commit/2025520985063303c162b46d68546734344f309a)) +* **compat:** v2.5 list_creative_formats + preview_creative adapters; deprecate spec_compat_hooks ([#667](https://github.com/adcontextprotocol/adcp-client-python/issues/667)) ([fec91d6](https://github.com/adcontextprotocol/adcp-client-python/commit/fec91d67cd0192b74470aa52c04688dbc34b37f4)) +* **creative:** make canonical models primary in v7 ([#994](https://github.com/adcontextprotocol/adcp-client-python/issues/994)) ([b5c6f16](https://github.com/adcontextprotocol/adcp-client-python/commit/b5c6f1644cb5ecbd9377145051092dab69e1741b)) +* **decisioning:** Account v3 projection helpers — bank-details write-only guard ([#356](https://github.com/adcontextprotocol/adcp-client-python/issues/356)) ([#366](https://github.com/adcontextprotocol/adcp-client-python/issues/366)) ([5d898b6](https://github.com/adcontextprotocol/adcp-client-python/commit/5d898b6dda23db54e56d155a1de151a14721cf56)) +* **decisioning:** Account.mode + sandbox-authority gate for comply_test_controller (Phase 1) ([#483](https://github.com/adcontextprotocol/adcp-client-python/issues/483)) ([f5cd8cf](https://github.com/adcontextprotocol/adcp-client-python/commit/f5cd8cf7f4f2e03425302b5945d109c5f90cf2f9)) +* **decisioning:** add full stack registry factory ([#862](https://github.com/adcontextprotocol/adcp-client-python/issues/862)) ([28c4f64](https://github.com/adcontextprotocol/adcp-client-python/commit/28c4f6490a89fb9af413e6d3df7328878f60d94c)) +* **decisioning:** add registry observer removal ([#861](https://github.com/adcontextprotocol/adcp-client-python/issues/861)) ([2657a8b](https://github.com/adcontextprotocol/adcp-client-python/commit/2657a8ba0c72556aea027bb5a32a3897d299944f)) +* **decisioning:** add request-scoped capabilities hook ([#869](https://github.com/adcontextprotocol/adcp-client-python/issues/869)) ([23fb317](https://github.com/adcontextprotocol/adcp-client-python/commit/23fb3176a6d88f6986f5c81f185bc2fd848f822d)) +* **decisioning:** adopt structured capabilities in v3 reference seller ([8316105](https://github.com/adcontextprotocol/adcp-client-python/commit/83161053ecda45f10b2d263e902c628a6b158ef5)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** advertise_all kwarg + handler.get_advertised_tools ([#529](https://github.com/adcontextprotocol/adcp-client-python/issues/529)) ([8b1b384](https://github.com/adcontextprotocol/adcp-client-python/commit/8b1b384f410818ae0a35ad4bcaf1a496d706f3c6)) +* **decisioning:** align AccountStore.resolution literal with JS + Tier 1 docs ([#330](https://github.com/adcontextprotocol/adcp-client-python/issues/330)) ([6490948](https://github.com/adcontextprotocol/adcp-client-python/commit/6490948ae5d9abb668775db50652c36b989a80e0)) +* **decisioning:** async (handoff) discovery for get_products / get_signals ([#930](https://github.com/adcontextprotocol/adcp-client-python/issues/930)) ([76fa4fa](https://github.com/adcontextprotocol/adcp-client-python/commit/76fa4fa26d10ffdd22aa10526e292f7a84aa8632)) +* **decisioning:** AuthInfo.from_verified_signer — bridge to RFC 9421 verifier ([#365](https://github.com/adcontextprotocol/adcp-client-python/issues/365)) ([5ae109b](https://github.com/adcontextprotocol/adcp-client-python/commit/5ae109b893cedc998ffb0fa50699cb8af7cc8839)) +* **decisioning:** boot-time capabilities response shape validation ([#422](https://github.com/adcontextprotocol/adcp-client-python/issues/422)) ([#446](https://github.com/adcontextprotocol/adcp-client-python/issues/446)) ([127f164](https://github.com/adcontextprotocol/adcp-client-python/commit/127f164faa18b51e24e050e934d9dbd41956c9e2)) +* **decisioning:** boot-time validator for declared idempotency vs wired [@wrap](https://github.com/wrap) ([#543](https://github.com/adcontextprotocol/adcp-client-python/issues/543)) ([7657ad4](https://github.com/adcontextprotocol/adcp-client-python/commit/7657ad446b9bfd449b0170be7659838e093dc363)) +* **decisioning:** BrandRights/ContentStandards/PropertyLists/CollectionLists Protocols (breadth sprint Batch 4 — FINAL) ([#335](https://github.com/adcontextprotocol/adcp-client-python/issues/335)) ([aeb2543](https://github.com/adcontextprotocol/adcp-client-python/commit/aeb25434847828928bca45644769e77e22a09905)) +* **decisioning:** built-in fields projection on get_products responses ([#503](https://github.com/adcontextprotocol/adcp-client-python/issues/503)) ([06aaf51](https://github.com/adcontextprotocol/adcp-client-python/commit/06aaf5193890f96ab5730574498346e7380aeffb)) +* **decisioning:** CampaignGovernancePlatform Protocol (breadth sprint Batch 3) ([#334](https://github.com/adcontextprotocol/adcp-client-python/issues/334)) ([2ca828a](https://github.com/adcontextprotocol/adcp-client-python/commit/2ca828a6ab84f49521b819aecd917924c02d80b0)) +* **decisioning:** composeMethod + security composer helpers ([#466](https://github.com/adcontextprotocol/adcp-client-python/issues/466)) ([ddad4b9](https://github.com/adcontextprotocol/adcp-client-python/commit/ddad4b9853fb0df022eae5be3dec5ee660b76dc7)) +* **decisioning:** comprehensive Emma DX follow-up (P0/P1/P2 + examples) ([#339](https://github.com/adcontextprotocol/adcp-client-python/issues/339)) ([985dcd9](https://github.com/adcontextprotocol/adcp-client-python/commit/985dcd9a287a89d1fb79e321f856075c3b31af71)) +* **decisioning:** create_tenant_store — opinionated multi-tenant AccountStore with fail-closed isolation ([#473](https://github.com/adcontextprotocol/adcp-client-python/issues/473)) ([8dd5dab](https://github.com/adcontextprotocol/adcp-client-python/commit/8dd5dabc06f38f7045ec000190f6c8ad6565baa7)) +* **decisioning:** createOAuthPassthroughResolver — Shape B account resolver factory ([#472](https://github.com/adcontextprotocol/adcp-client-python/issues/472)) ([defa022](https://github.com/adcontextprotocol/adcp-client-python/commit/defa022b5325d89a23c595521bd969eb2482d0dd)) +* **decisioning:** createUpstreamHttpClient + createTranslationMap ([#464](https://github.com/adcontextprotocol/adcp-client-python/issues/464)) ([7e5f2c4](https://github.com/adcontextprotocol/adcp-client-python/commit/7e5f2c4fad15ce5ce8d14b19955fafb66513e329)) +* **decisioning:** CreativeBuilderPlatform + CreativeAdServerPlatform (breadth sprint Batch 2) ([#333](https://github.com/adcontextprotocol/adcp-client-python/issues/333)) ([5921949](https://github.com/adcontextprotocol/adcp-client-python/commit/592194904ee70424d50f8421cf57812c0668a010)) +* **decisioning:** credential-leak strip on every echo path + ctx_metadata guidance ([#481](https://github.com/adcontextprotocol/adcp-client-python/issues/481)) ([52b15fa](https://github.com/adcontextprotocol/adcp-client-python/commit/52b15fa2f252b4e213f2dd2a5795dba08700019e)) +* **decisioning:** cursor-based pagination helper for list responses ([#499](https://github.com/adcontextprotocol/adcp-client-python/issues/499)) ([524c608](https://github.com/adcontextprotocol/adcp-client-python/commit/524c608fb1ea2fdf9c8c7659172bec731f4a2ff3)) +* **decisioning:** emit AGENT_SUSPENDED / AGENT_BLOCKED dedicated codes (closes [#409](https://github.com/adcontextprotocol/adcp-client-python/issues/409)) ([#748](https://github.com/adcontextprotocol/adcp-client-python/issues/748)) ([12f8ffe](https://github.com/adcontextprotocol/adcp-client-python/commit/12f8ffe7fa4318affeb2ad728296db4ac88a452b)) +* **decisioning:** F12 — auto-emit completion webhook on sync mutating responses ([#331](https://github.com/adcontextprotocol/adcp-client-python/issues/331)) ([9d29754](https://github.com/adcontextprotocol/adcp-client-python/commit/9d29754e310e370ca8b9730d61070513640d1e45)) +* **decisioning:** handoff_to_workflow — externally-completed task primitive ([#336](https://github.com/adcontextprotocol/adcp-client-python/issues/336)) ([bff48ab](https://github.com/adcontextprotocol/adcp-client-python/commit/bff48abbc26a33a7649ca0264329bcba294dc6fa)) +* **decisioning:** LazyPlatformRouter for tenant-on-first-request construction ([#552](https://github.com/adcontextprotocol/adcp-client-python/issues/552)) ([98fd456](https://github.com/adcontextprotocol/adcp-client-python/commit/98fd4566c57925da84a34cabca37281901882350)) +* **decisioning:** LazyPlatformRouter.proposal_stores= + proposal_store_factory= ([#722](https://github.com/adcontextprotocol/adcp-client-python/issues/722)) ([#724](https://github.com/adcontextprotocol/adcp-client-python/issues/724)) ([a65185e](https://github.com/adcontextprotocol/adcp-client-python/commit/a65185e83637bfe039c9d349b468a8e90cecb1ee)) +* **decisioning:** mock-mode upstream URL routing — Account.metadata['mock_upstream_url'] + DecisioningPlatform.upstream_for (Phase 2) ([#487](https://github.com/adcontextprotocol/adcp-client-python/issues/487)) ([5c605b4](https://github.com/adcontextprotocol/adcp-client-python/commit/5c605b463c2fa48bc079ed301cffc5608a5b001c)) +* **decisioning:** MockAdServer Protocol + /_debug/traffic counters ([#383](https://github.com/adcontextprotocol/adcp-client-python/issues/383)) ([#405](https://github.com/adcontextprotocol/adcp-client-python/issues/405)) ([53d8b8c](https://github.com/adcontextprotocol/adcp-client-python/commit/53d8b8cbe7be5208e3d1250a7e1068f93c33ca28)) +* **decisioning:** PgBuyerAgentRegistry — durable Tier 2 commercial-identity store ([#364](https://github.com/adcontextprotocol/adcp-client-python/issues/364)) ([fbdcb31](https://github.com/adcontextprotocol/adcp-client-python/commit/fbdcb31f2e4d18a8cff6875aa6ad5fd7b5643e5f)) +* **decisioning:** PgProposalStore + framework package derivation ([#727](https://github.com/adcontextprotocol/adcp-client-python/issues/727)) ([#732](https://github.com/adcontextprotocol/adcp-client-python/issues/732)) ([c41d4a8](https://github.com/adcontextprotocol/adcp-client-python/commit/c41d4a8e01148e71bbf7e97df95e4f241fe11bf1)) +* **decisioning:** PlatformRouter + multi-platform proof ([#477](https://github.com/adcontextprotocol/adcp-client-python/issues/477)) ([#490](https://github.com/adcontextprotocol/adcp-client-python/issues/490)) ([786e6a2](https://github.com/adcontextprotocol/adcp-client-python/commit/786e6a2708522e4b6308b91534b1f412ca58ae9d)) +* **decisioning:** PostgresTaskRegistry — durable HITL task state (v6.1) ([#361](https://github.com/adcontextprotocol/adcp-client-python/issues/361)) ([e01eef0](https://github.com/adcontextprotocol/adcp-client-python/commit/e01eef0a3f4e3d4eb3acfb66f22d9486f101d54f)) +* **decisioning:** ProductConfigStore lookup helper for create_media_buy ([#498](https://github.com/adcontextprotocol/adcp-client-python/issues/498)) ([59f3b6e](https://github.com/adcontextprotocol/adcp-client-python/commit/59f3b6e2968fb5b2ece8f745e6af386a8bf4cf2a)) +* **decisioning:** project full capability blocks via DecisioningCapabilities ([c09433c](https://github.com/adcontextprotocol/adcp-client-python/commit/c09433c2526d3a7635ea6cb7a975f840e03dc82d)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** project full get_adcp_capabilities response schema into DecisioningCapabilities ([55613f8](https://github.com/adcontextprotocol/adcp-client-python/commit/55613f8def13d0c388f131709262c9003b26add1)) +* **decisioning:** property_list resolver + intersection helper for get_products ([#500](https://github.com/adcontextprotocol/adcp-client-python/issues/500)) ([1dfdcd5](https://github.com/adcontextprotocol/adcp-client-python/commit/1dfdcd5e00242e3e79faba6f4a255fe822194cb0)) +* **decisioning:** ProposalCapabilities.auto_commit_on_put_draft ([#723](https://github.com/adcontextprotocol/adcp-client-python/issues/723)) ([#725](https://github.com/adcontextprotocol/adcp-client-python/issues/725)) ([5567e2b](https://github.com/adcontextprotocol/adcp-client-python/commit/5567e2b91e979697091641039092a8ee5c5586cf)) +* **decisioning:** ProposalManager v1 — Protocol + MockProposalManager forwarder + tenant binding ([#504](https://github.com/adcontextprotocol/adcp-client-python/issues/504)) ([fe8e5b0](https://github.com/adcontextprotocol/adcp-client-python/commit/fe8e5b0382324365a5b86bd4467853b6284f354a)) +* **decisioning:** ProposalManager v1.5 — primitives, capability validation, lifecycle helpers ([#538](https://github.com/adcontextprotocol/adcp-client-python/issues/538)-impl) ([#550](https://github.com/adcontextprotocol/adcp-client-python/issues/550)) ([c7c317e](https://github.com/adcontextprotocol/adcp-client-python/commit/c7c317eb1f466c32d696ff135de1d55d8f074889)) +* **decisioning:** re-export SignalsFeatures + ContentStandards capability sub-models ([74671d0](https://github.com/adcontextprotocol/adcp-client-python/commit/74671d0efe20fb3f1abcd28650eb8fc121163292)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** refine[] flow scaffold for get_products ([#496](https://github.com/adcontextprotocol/adcp-client-python/issues/496)) ([#505](https://github.com/adcontextprotocol/adcp-client-python/issues/505)) ([b584e70](https://github.com/adcontextprotocol/adcp-client-python/commit/b584e70e8563044434898d0b78c3ca00d3c13eea)) +* **decisioning:** retype DecisioningCapabilities.specialisms to Specialism enum union ([9fb7fc9](https://github.com/adcontextprotocol/adcp-client-python/commit/9fb7fc93a9cbc6602cffe0ee88d7d8e118390b77)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** SignalsPlatform + AudiencePlatform Protocols (breadth sprint Batch 1) ([#332](https://github.com/adcontextprotocol/adcp-client-python/issues/332)) ([c66ff72](https://github.com/adcontextprotocol/adcp-client-python/commit/c66ff72688bee46d6e34aad08840938b278dc8fe)) +* **decisioning:** state-machine helpers + typed exception classes + ref_account_id ([#465](https://github.com/adcontextprotocol/adcp-client-python/issues/465)) ([9301acf](https://github.com/adcontextprotocol/adcp-client-python/commit/9301acf01576b24ae79718a9792bee385e9d7717)) +* **decisioning:** surface capability sub-models via adcp.decisioning.capabilities ([bc5bb9a](https://github.com/adcontextprotocol/adcp-client-python/commit/bc5bb9af06a6c189aa3219221d2fac4078cc5706)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** TaskHandoff create_media_buy on_complete + on_failure hooks ([#561](https://github.com/adcontextprotocol/adcp-client-python/issues/561)) ([3072c6e](https://github.com/adcontextprotocol/adcp-client-python/commit/3072c6e0675a707ec8c933c5c20e49efb3927fff)) +* **decisioning:** Tier 2 — BuyerAgentRegistry + dispatch wire-up + AuthInfo v3 fields ([#349](https://github.com/adcontextprotocol/adcp-client-python/issues/349)) ([#359](https://github.com/adcontextprotocol/adcp-client-python/issues/359)) ([9dad22c](https://github.com/adcontextprotocol/adcp-client-python/commit/9dad22c94f15052777cddf4652b007a44d2f1136)) +* **decisioning:** Tier 3 brand-authz dispatch gate ([#350](https://github.com/adcontextprotocol/adcp-client-python/issues/350) stage 5, closes [#350](https://github.com/adcontextprotocol/adcp-client-python/issues/350)) ([#785](https://github.com/adcontextprotocol/adcp-client-python/issues/785)) ([1ad6df9](https://github.com/adcontextprotocol/adcp-client-python/commit/1ad6df907c5b81c98f079900cb8adf394bc6cbb1)) +* **decisioning:** time_budget deadline wrapper + incomplete projection on get_products ([#501](https://github.com/adcontextprotocol/adcp-client-python/issues/501)) ([bc6ad13](https://github.com/adcontextprotocol/adcp-client-python/commit/bc6ad13ee18454c2091f5d8951574761ca1c0df0)) +* **decisioning:** UserWarning when sales-* required methods missing ([#423](https://github.com/adcontextprotocol/adcp-client-python/issues/423)) ([#445](https://github.com/adcontextprotocol/adcp-client-python/issues/445)) ([5349ddc](https://github.com/adcontextprotocol/adcp-client-python/commit/5349ddc91b0299f18b96e7fb75383971c7446136)) +* **decisioning:** v6.0 DecisioningPlatform foundation (skeleton + design) ([#316](https://github.com/adcontextprotocol/adcp-client-python/issues/316)) ([3539359](https://github.com/adcontextprotocol/adcp-client-python/commit/353935951a7358ea749519a702b2bb5b54355a1c)) +* **decisioning:** warn when compliance_testing capability is declared without test_controller wired ([37f42a7](https://github.com/adcontextprotocol/adcp-client-python/commit/37f42a76402bcb4a8dbcf90a1af6cf7481fbd4e7)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** warn when supported_protocols is auto-derived from specialisms ([a0eb1e2](https://github.com/adcontextprotocol/adcp-client-python/commit/a0eb1e265562f7a5d8e0fc1ee84b76c44e157d85)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** WebhookDeliverySupervisor + SQLAlchemy A2A stores example ([#348](https://github.com/adcontextprotocol/adcp-client-python/issues/348)) ([73a7512](https://github.com/adcontextprotocol/adcp-client-python/commit/73a7512cd3d5c3fcee265455f7e54d7738c77124)) +* **decisioning:** widen DecisioningCapabilities with structured wire fields ([5a5219e](https://github.com/adcontextprotocol/adcp-client-python/commit/5a5219e2f6fb965ff489f5ae19feaaf10c953e3c)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** wire create_media_buy_store into PlatformHandler dispatch (closes [#462](https://github.com/adcontextprotocol/adcp-client-python/issues/462)) ([#773](https://github.com/adcontextprotocol/adcp-client-python/issues/773)) ([062c6f0](https://github.com/adcontextprotocol/adcp-client-python/commit/062c6f03e34dd47f818251c9b0382d3a7537b5dc)) +* **examples:** DemoStore overrides for force_create_media_buy_arm, force_task_completion, and seed_* scenarios ([#313](https://github.com/adcontextprotocol/adcp-client-python/issues/313)) ([e2a2707](https://github.com/adcontextprotocol/adcp-client-python/commit/e2a270778960a891cdb8afa8d30d00e3570afd4d)) +* **examples:** dual-emit v1 format_ids + v2 format_options on reference seller ([#847](https://github.com/adcontextprotocol/adcp-client-python/issues/847)) ([7731f53](https://github.com/adcontextprotocol/adcp-client-python/commit/7731f53dc0ec82d60938b8467b16cce63f91e1c1)), closes [#741](https://github.com/adcontextprotocol/adcp-client-python/issues/741) +* **examples:** handle @adcp/sdk@7.10.x storyboard scenarios (closes [#782](https://github.com/adcontextprotocol/adcp-client-python/issues/782)) ([#788](https://github.com/adcontextprotocol/adcp-client-python/issues/788)) ([7ef1b1a](https://github.com/adcontextprotocol/adcp-client-python/commit/7ef1b1a520b0059f6c8759f33fdb487cf727d36d)) +* **examples:** v3 reference seller — runnable Tier 2 + v3 wiring ([#357](https://github.com/adcontextprotocol/adcp-client-python/issues/357)) ([#373](https://github.com/adcontextprotocol/adcp-client-python/issues/373)) ([cda07f9](https://github.com/adcontextprotocol/adcp-client-python/commit/cda07f997ce9b5cca40f6149b439e7ac0769ddb3)) +* **handlers:** expose sync_catalogs through sales-catalog-driven specialism ([#838](https://github.com/adcontextprotocol/adcp-client-python/issues/838)) ([6fdcb77](https://github.com/adcontextprotocol/adcp-client-python/commit/6fdcb7758e6d7123ffc9493c9a1c89ea24a3fc3d)) +* **idempotency:** inject 'replayed: true' on cache hit ([#714](https://github.com/adcontextprotocol/adcp-client-python/issues/714)) ([#717](https://github.com/adcontextprotocol/adcp-client-python/issues/717)) ([b511e01](https://github.com/adcontextprotocol/adcp-client-python/commit/b511e010fff3c336a6308e01139642c1c689bbd8)) +* **migrate:** --auto-apply mode for mechanically-rewritable codemod findings ([#540](https://github.com/adcontextprotocol/adcp-client-python/issues/540)) ([d19e71e](https://github.com/adcontextprotocol/adcp-client-python/commit/d19e71e0deed2514fd87a6e30f0e8d145a2e1efb)) +* **migrate:** flag MediaBuyStatus.pending_activation split in v3-to-v4 codemod ([#523](https://github.com/adcontextprotocol/adcp-client-python/issues/523)) ([d0659c7](https://github.com/adcontextprotocol/adcp-client-python/commit/d0659c759dbc79f8086ee02a377609c172ea57a2)) +* pick up beta 3 wholesale products and signals ([#799](https://github.com/adcontextprotocol/adcp-client-python/issues/799)) ([0deeaeb](https://github.com/adcontextprotocol/adcp-client-python/commit/0deeaebfd7269d9100185e9d842dedb071f3a991)) +* **preview:** opt-in v3.1.0-beta.1 client surface ([#4761](https://github.com/adcontextprotocol/adcp-client-python/issues/4761), [#4762](https://github.com/adcontextprotocol/adcp-client-python/issues/4762), [#4763](https://github.com/adcontextprotocol/adcp-client-python/issues/4763)) ([#747](https://github.com/adcontextprotocol/adcp-client-python/issues/747)) ([35fdd47](https://github.com/adcontextprotocol/adcp-client-python/commit/35fdd47f9a3319b4325a8dc3597ab6a1a4dfc74f)) +* **protocol:** stabilize multi-version SDK 8 beta ([#1038](https://github.com/adcontextprotocol/adcp-client-python/issues/1038)) ([607b0e1](https://github.com/adcontextprotocol/adcp-client-python/commit/607b0e1e0e3c87a8c2188168486f7d98a3420555)) +* **protocol:** support AdCP 3.1.0-rc.10 ([#944](https://github.com/adcontextprotocol/adcp-client-python/issues/944)) ([65e4368](https://github.com/adcontextprotocol/adcp-client-python/commit/65e4368fa5536248e64dd554e3bae452a9ef103a)) +* **protocol:** support AdCP 3.1.0-rc.13 ([#948](https://github.com/adcontextprotocol/adcp-client-python/issues/948)) ([df06501](https://github.com/adcontextprotocol/adcp-client-python/commit/df06501f68b1be95710674f84c41efccea5d52d0)) +* **protocol:** support AdCP 3.1.0-rc.8 ([#912](https://github.com/adcontextprotocol/adcp-client-python/issues/912)) ([9782830](https://github.com/adcontextprotocol/adcp-client-python/commit/9782830499d2ac8dbec62a4070b866bfc173b804)) +* **protocol:** support AdCP 3.1.1 schemas ([22ae047](https://github.com/adcontextprotocol/adcp-client-python/commit/22ae0472a22f8e0111456d8e0660d242c77bff23)) +* **protocol:** support AdCP 3.1.10 schemas ([#1012](https://github.com/adcontextprotocol/adcp-client-python/issues/1012)) ([dbf3df8](https://github.com/adcontextprotocol/adcp-client-python/commit/dbf3df881d46421e494171b64cf4a5cf10a9103c)) +* **protocol:** support AdCP 3.1.13 schemas ([#1021](https://github.com/adcontextprotocol/adcp-client-python/issues/1021)) ([71a45b4](https://github.com/adcontextprotocol/adcp-client-python/commit/71a45b48442d5ab72d1190f44039595ba548d992)) +* **protocol:** support AdCP 3.1.8 schemas ([#992](https://github.com/adcontextprotocol/adcp-client-python/issues/992)) ([0efb159](https://github.com/adcontextprotocol/adcp-client-python/commit/0efb1590dd5efaee4f2659a46a5a839b442502c8)) +* **protocol:** support AdCP 3.2 beta lifecycle ([#1034](https://github.com/adcontextprotocol/adcp-client-python/issues/1034)) ([dece72e](https://github.com/adcontextprotocol/adcp-client-python/commit/dece72ebd9ad5133f8973f6baa5e693daabdddf5)) +* **registry:** community-mirror lifecycle + upsert client (JS [#2183](https://github.com/adcontextprotocol/adcp-client-python/issues/2183)/[#2187](https://github.com/adcontextprotocol/adcp-client-python/issues/2187) parity) ([#929](https://github.com/adcontextprotocol/adcp-client-python/issues/929)) ([11e5cda](https://github.com/adcontextprotocol/adcp-client-python/commit/11e5cda9821bc6ce3b99d031b661121caaaa2e37)) +* **registry:** update rc9 capabilities ([#916](https://github.com/adcontextprotocol/adcp-client-python/issues/916)) ([432e2a5](https://github.com/adcontextprotocol/adcp-client-python/commit/432e2a5152fc96e3d36a35e3c7f758f72a2fec4b)) +* **schemas:** bundle adcp-agents.json as adcp.schemas package, eliminate inlined test copy ([#442](https://github.com/adcontextprotocol/adcp-client-python/issues/442)) ([9a8fef1](https://github.com/adcontextprotocol/adcp-client-python/commit/9a8fef13f74371e13b39e92da9828e0e348229d4)) +* **schemas:** fetch + bundle v2.5 schemas from pinned upstream SHA (stage 4b1) ([#670](https://github.com/adcontextprotocol/adcp-client-python/issues/670)) ([bd6837f](https://github.com/adcontextprotocol/adcp-client-python/commit/bd6837fcab043b3a4cf3b6000daf2e5a92d96b6f)) +* **schemas:** patches/ post-process infra + restore [#753](https://github.com/adcontextprotocol/adcp-client-python/issues/753)/[#792](https://github.com/adcontextprotocol/adcp-client-python/issues/792) hand-edits ([#795](https://github.com/adcontextprotocol/adcp-client-python/issues/795)) ([4e6a722](https://github.com/adcontextprotocol/adcp-client-python/commit/4e6a722a70820fbdad50f38b0e15dc6b646daddb)) +* **sdk:** per-instance adcp_version pin + wire emission (Stage 2 + 3a) ([#294](https://github.com/adcontextprotocol/adcp-client-python/issues/294)) ([4aa7a6d](https://github.com/adcontextprotocol/adcp-client-python/commit/4aa7a6d1a19a6ff681b13d773e55cfb09bab495f)) +* **server:** /.well-known/adcp-agents.json discovery endpoint ([#381](https://github.com/adcontextprotocol/adcp-client-python/issues/381)) ([#406](https://github.com/adcontextprotocol/adcp-client-python/issues/406)) ([e6dfaad](https://github.com/adcontextprotocol/adcp-client-python/commit/e6dfaad8679d58f25c417c313ff054aff8b87499)) +* **server/a2a:** structured error parity with MCP — emit field/details/retry_after, catch decisioning AdcpError (closes [#530](https://github.com/adcontextprotocol/adcp-client-python/issues/530)) ([#536](https://github.com/adcontextprotocol/adcp-client-python/issues/536)) ([423d975](https://github.com/adcontextprotocol/adcp-client-python/commit/423d9758e654664a1eb8094757679d52b27f394d)) +* **server/auth:** allow_unauthenticated for network-trust deployments ([f41764e](https://github.com/adcontextprotocol/adcp-client-python/commit/f41764e2a25bc77a268c2b6519f49b64aa1e8de3)) +* **server/idempotency:** complete PgBackend for multi-worker durable replay ([#555](https://github.com/adcontextprotocol/adcp-client-python/issues/555)) ([1123458](https://github.com/adcontextprotocol/adcp-client-python/commit/11234586f87d36aa2cdf9e1bd192a60a80913788)) +* **server:** Account v3 wire fields + AccountStore.upsert/list/syncGovernance receive ResolveContext ([#469](https://github.com/adcontextprotocol/adcp-client-python/issues/469)) ([62b58dc](https://github.com/adcontextprotocol/adcp-client-python/commit/62b58dc3e211e69814a4993ab32726ed514c297e)) +* **server:** add asgi_middleware param to serve() ([#441](https://github.com/adcontextprotocol/adcp-client-python/issues/441)) ([69211a3](https://github.com/adcontextprotocol/adcp-client-python/commit/69211a3e17efc8b8fd7512e501c164e83ec9c222)) +* **server:** add force_create_media_buy_arm + force_task_completion controller scenarios ([#282](https://github.com/adcontextprotocol/adcp-client-python/issues/282)) ([9818250](https://github.com/adcontextprotocol/adcp-client-python/commit/9818250c75bc08deaf43af5c829c78eabb1cd342)) +* **server:** add spec_compat_hooks() for pre-v3 / pre-4.4 buyer compatibility ([#648](https://github.com/adcontextprotocol/adcp-client-python/issues/648)) ([30690e5](https://github.com/adcontextprotocol/adcp-client-python/commit/30690e54a0298960489e8595c3f5480a401ad00f)) +* **server:** add TenantRegistry with per-tenant health tracking ([#628](https://github.com/adcontextprotocol/adcp-client-python/issues/628)) ([ae687b6](https://github.com/adcontextprotocol/adcp-client-python/commit/ae687b6be5b0807717fd61e3a8dbb0e34ef5ac93)) +* **server:** add unknown-field policy and hook composition ([#860](https://github.com/adcontextprotocol/adcp-client-python/issues/860)) ([7b830c3](https://github.com/adcontextprotocol/adcp-client-python/commit/7b830c3ccd124729e28471ec753243cc10d8cc55)) +* **server:** AuditSink Protocol + LoggingAuditSink/SlackAlertSink reference impls ([#362](https://github.com/adcontextprotocol/adcp-client-python/issues/362)) ([66c3c57](https://github.com/adcontextprotocol/adcp-client-python/commit/66c3c57a70d29d778069665e1e0fb3b93966b1ae)) +* **server:** boot validator for webhook_signing.supported capability invariant ([#695](https://github.com/adcontextprotocol/adcp-client-python/issues/695)) ([7e9a734](https://github.com/adcontextprotocol/adcp-client-python/commit/7e9a73491feeacc9b1b595178c01733c88a2da1f)) +* **server:** CallableSubdomainTenantRouter for DB-backed tenant lookups ([#544](https://github.com/adcontextprotocol/adcp-client-python/issues/544)) ([80876c1](https://github.com/adcontextprotocol/adcp-client-python/commit/80876c165fa492799c804f44def23d12289a36ac)) +* **server:** createMediaBuyStore — opt-in targeting_overlay echo for property-lists / collection-lists sellers ([#474](https://github.com/adcontextprotocol/adcp-client-python/issues/474)) ([4ba19fc](https://github.com/adcontextprotocol/adcp-client-python/commit/4ba19fc199ca715adc54d885c00b6a33b90ca94f)) +* **server:** createRosterAccountStore — Shape C explicit AccountStore for publisher-curated rosters ([#471](https://github.com/adcontextprotocol/adcp-client-python/issues/471)) ([7f919cc](https://github.com/adcontextprotocol/adcp-client-python/commit/7f919cc0c13c219b2a183adeb14caaa14964901d)) +* **server:** default MCP streamable-http to stateful with idle eviction ([#636](https://github.com/adcontextprotocol/adcp-client-python/issues/636)) ([3173a54](https://github.com/adcontextprotocol/adcp-client-python/commit/3173a545ade4c97a7da593279604359f48e40eff)) +* **server:** default validation=strict in serve() — wire-conformance by default ([#439](https://github.com/adcontextprotocol/adcp-client-python/issues/439)) ([a29b61f](https://github.com/adcontextprotocol/adcp-client-python/commit/a29b61f944732cdee8bff3f11310a67035349edb)) +* **server:** expose RequestContext.transport and current_transport ContextVar ([#627](https://github.com/adcontextprotocol/adcp-client-python/issues/627)) ([20e5d53](https://github.com/adcontextprotocol/adcp-client-python/commit/20e5d53fa6eff6d7ea047c62d5a2a02e7f9a2c8e)) +* **server:** harden MCP session lifecycle ([#908](https://github.com/adcontextprotocol/adcp-client-python/issues/908)) ([caa2735](https://github.com/adcontextprotocol/adcp-client-python/commit/caa273531422f20298192f5dd7e33f36b8e02db4)) +* **server:** introduce ServeConfig dataclass to consolidate serve() kwargs ([#437](https://github.com/adcontextprotocol/adcp-client-python/issues/437)) ([07db849](https://github.com/adcontextprotocol/adcp-client-python/commit/07db849d51e95df4809dd47d404fa95c5469e5b1)) +* **server:** lazy idempotency backend wrapper (JS [#2136](https://github.com/adcontextprotocol/adcp-client-python/issues/2136) parity) ([#928](https://github.com/adcontextprotocol/adcp-client-python/issues/928)) ([1ee6f5b](https://github.com/adcontextprotocol/adcp-client-python/commit/1ee6f5b2613766160fb87a3fbc7b184bbb82ee8a)) +* **server:** MCP error responses populate structuredContent.adcp_error (closes [#509](https://github.com/adcontextprotocol/adcp-client-python/issues/509)) ([#525](https://github.com/adcontextprotocol/adcp-client-python/issues/525)) ([b50a87a](https://github.com/adcontextprotocol/adcp-client-python/commit/b50a87ad63a5f00d53e03398d8ee7d9b055879d2)) +* **server:** negotiate media buy version handling and update actions ([#871](https://github.com/adcontextprotocol/adcp-client-python/issues/871)) ([5a89d86](https://github.com/adcontextprotocol/adcp-client-python/commit/5a89d86ffaf006ce79352eeb05365517b6f7791c)) +* **server:** on_startup / on_shutdown hooks on serve(transport='both') ([#713](https://github.com/adcontextprotocol/adcp-client-python/issues/713)) ([aca625e](https://github.com/adcontextprotocol/adcp-client-python/commit/aca625edf18b7f62f44c829a2317fc770a72ee05)) +* **server:** pre-adapter validation against legacy schema (stage 4b2) ([#671](https://github.com/adcontextprotocol/adcp-client-python/issues/671)) ([4ef032b](https://github.com/adcontextprotocol/adcp-client-python/commit/4ef032b2c153296616ab51ab0fe06489be5587ab)) +* **server:** pre-validation request hook for spec-default injection ([#614](https://github.com/adcontextprotocol/adcp-client-python/issues/614)) ([#629](https://github.com/adcontextprotocol/adcp-client-python/issues/629)) ([05d4cd8](https://github.com/adcontextprotocol/adcp-client-python/commit/05d4cd8617440aaa638086ffa5cabc0bf61b403f)) +* **server:** public register_handler_tools seam + advertised_tools class attr ([#318](https://github.com/adcontextprotocol/adcp-client-python/issues/318)) ([d96822a](https://github.com/adcontextprotocol/adcp-client-python/commit/d96822a64b54289c23e143b39d5e95808b65c1c2)) +* **server:** response_enhancer callback (JS [#2161](https://github.com/adcontextprotocol/adcp-client-python/issues/2161) parity) ([#933](https://github.com/adcontextprotocol/adcp-client-python/issues/933)) ([659cd7c](https://github.com/adcontextprotocol/adcp-client-python/commit/659cd7cb525db1a1aa5a1556eccdcea91baecc42)) +* **server:** route validation by wire adcp_version (stage 3) ([#664](https://github.com/adcontextprotocol/adcp-client-python/issues/664)) ([d2ffac7](https://github.com/adcontextprotocol/adcp-client-python/commit/d2ffac70d9a71d1360ad2e1056acdcdf5381df45)) +* **server:** SubdomainTenantRouter middleware for multi-tenant deployments ([#355](https://github.com/adcontextprotocol/adcp-client-python/issues/355)) ([#368](https://github.com/adcontextprotocol/adcp-client-python/issues/368)) ([1e27dad](https://github.com/adcontextprotocol/adcp-client-python/commit/1e27dad86787cfa09155e937fa0c3b2e7d169911)) +* **server:** synthesize host:* siblings for bare allowed_hosts ([#537](https://github.com/adcontextprotocol/adcp-client-python/issues/537)) ([2733423](https://github.com/adcontextprotocol/adcp-client-python/commit/2733423bb8286ee809f9003804de096ce9fd9e0f)) +* **server:** TenantRegistry.as_platform() adapter for serve() integration ([#649](https://github.com/adcontextprotocol/adcp-client-python/issues/649)) ([0e396ca](https://github.com/adcontextprotocol/adcp-client-python/commit/0e396ca778ea0a4def1f44d315b0d69b6cc00443)) +* **server:** transport="both" — host MCP and A2A on a single binary ([#354](https://github.com/adcontextprotocol/adcp-client-python/issues/354)) ([#370](https://github.com/adcontextprotocol/adcp-client-python/issues/370)) ([1d5d907](https://github.com/adcontextprotocol/adcp-client-python/commit/1d5d9074bc4868a6573fe1e2d862a660767dfab7)) +* **signing:** async_resolve_agent — bootstrap to JWKS via brand.json ([#389](https://github.com/adcontextprotocol/adcp-client-python/issues/389)) ([0d78bd1](https://github.com/adcontextprotocol/adcp-client-python/commit/0d78bd137391207313281f5abf0f364c5200e85e)) +* **signing:** BrandAuthorizationResolver (Tier 3, [#350](https://github.com/adcontextprotocol/adcp-client-python/issues/350) stages 1-3) ([#770](https://github.com/adcontextprotocol/adcp-client-python/issues/770)) ([9028a88](https://github.com/adcontextprotocol/adcp-client-python/commit/9028a880adbd1b16b5fbc67f8b0c58f124f0add1)) +* **signing:** close 4 SSRF gaps and add opt-in port hardening (foundation audit) ([84b837e](https://github.com/adcontextprotocol/adcp-client-python/commit/84b837e0e093dff041254781bb12b4a416150bd2)) +* **signing:** default replay store, signed-fetch preset, migration guide ([#272](https://github.com/adcontextprotocol/adcp-client-python/issues/272)) ([52019b8](https://github.com/adcontextprotocol/adcp-client-python/commit/52019b8942383ca9ec79a4bd4c0f7579f7aa1ffc)) +* **signing:** drain three foundation-audit deferreds ([#298](https://github.com/adcontextprotocol/adcp-client-python/issues/298), [#299](https://github.com/adcontextprotocol/adcp-client-python/issues/299), [#300](https://github.com/adcontextprotocol/adcp-client-python/issues/300)) ([072998a](https://github.com/adcontextprotocol/adcp-client-python/commit/072998a8fd7b33097b7e6ab0496c2ecadf33a691)) +* **signing:** SigningProvider Protocol for KMS-backed signing ([#283](https://github.com/adcontextprotocol/adcp-client-python/issues/283)) ([#323](https://github.com/adcontextprotocol/adcp-client-python/issues/323)) ([4de648e](https://github.com/adcontextprotocol/adcp-client-python/commit/4de648e27f0df522269e9cfb28a5b40aa8138527)) +* **signing:** v3-identity Tier 1 — BrandJsonJwksResolver + CapabilityCache (port from JS) ([#345](https://github.com/adcontextprotocol/adcp-client-python/issues/345)) ([a016eca](https://github.com/adcontextprotocol/adcp-client-python/commit/a016eca80bfa9ee3db90d62045a847cb29004c8a)) +* **signing:** verifier key_origins check + IDNA-2008 canonicalization (closes [#776](https://github.com/adcontextprotocol/adcp-client-python/issues/776), [#777](https://github.com/adcontextprotocol/adcp-client-python/issues/777)) ([#789](https://github.com/adcontextprotocol/adcp-client-python/issues/789)) ([31354b4](https://github.com/adcontextprotocol/adcp-client-python/commit/31354b4d813116d55e255c2b5f28fa599a09b0e7)) +* **signing:** verify_from_agent_url — single-call resolver+verifier factory ([#401](https://github.com/adcontextprotocol/adcp-client-python/issues/401)) ([5931921](https://github.com/adcontextprotocol/adcp-client-python/commit/5931921a483fa2b1126e13c71da2e882812a16f7)) +* **storyboards:** require full proposal_finalize chain after @adcp/sdk@6.10.0 ([#565](https://github.com/adcontextprotocol/adcp-client-python/issues/565)) ([b1fe9d5](https://github.com/adcontextprotocol/adcp-client-python/commit/b1fe9d572253cab28ce6362d0bee7abb8ffb7fed)) +* support AdCP 3.1 Beta 4 ([1bae6e8](https://github.com/adcontextprotocol/adcp-client-python/commit/1bae6e895a125080158b06f758803ed17a071a25)) +* **test-controller:** add seed_creative_format scenario; advertise force_session_status in capabilities ([#315](https://github.com/adcontextprotocol/adcp-client-python/issues/315)) ([ce7e9ab](https://github.com/adcontextprotocol/adcp-client-python/commit/ce7e9ab2c9569a69a39601b224278c0b7a349b1e)) +* **testing:** add build_test_client async context manager ([#554](https://github.com/adcontextprotocol/adcp-client-python/issues/554)) ([5f038e5](https://github.com/adcontextprotocol/adcp-client-python/commit/5f038e5cc442173ed3e2726e38f856610d898473)) +* **testing:** add SellerA2AClient for in-process A2A handler testing ([#694](https://github.com/adcontextprotocol/adcp-client-python/issues/694)) ([2d1ae2f](https://github.com/adcontextprotocol/adcp-client-python/commit/2d1ae2faa7cb6526b56a9311db3667eff9cb6f89)) +* **testing:** add SellerTestClient for in-process handler testing ([#666](https://github.com/adcontextprotocol/adcp-client-python/issues/666)) ([965eeda](https://github.com/adcontextprotocol/adcp-client-python/commit/965eeda0b8253580da923c5b322618ea6d6d1aa6)) +* **testing:** adopter type-checking test suite with zero-ignore contract ([#634](https://github.com/adcontextprotocol/adcp-client-python/issues/634)) ([20e496c](https://github.com/adcontextprotocol/adcp-client-python/commit/20e496c1cf49ae3febf5d3f85930d4c962dd5238)) +* **testing:** extend build_asgi_app with full serve-layer kwargs ([#626](https://github.com/adcontextprotocol/adcp-client-python/issues/626)) ([8679a95](https://github.com/adcontextprotocol/adcp-client-python/commit/8679a9565b43d9bc3cda3bde032ac666684c5845)) +* **testing:** forward pre_validation_hooks through build_asgi_app ([#655](https://github.com/adcontextprotocol/adcp-client-python/issues/655)) ([2df49c0](https://github.com/adcontextprotocol/adcp-client-python/commit/2df49c03d4c34902c0869a6f25e65488ad303968)) +* **testing:** make SellerA2AClient event drain configurable ([#829](https://github.com/adcontextprotocol/adcp-client-python/issues/829)) ([62515d8](https://github.com/adcontextprotocol/adcp-client-python/commit/62515d85fe3753dcbfde8737c33f42a4a7829bb1)) +* **testing:** make_request_context + build_asgi_app helpers ([#535](https://github.com/adcontextprotocol/adcp-client-python/issues/535)) ([6869976](https://github.com/adcontextprotocol/adcp-client-python/commit/68699763e917980f6d7ad75e4a1364a2dc188715)) +* **testing:** reference UpstreamRecorder middleware for query_upstream_traffic ([#939](https://github.com/adcontextprotocol/adcp-client-python/issues/939)) ([5ca5758](https://github.com/adcontextprotocol/adcp-client-python/commit/5ca5758faecce74e84d948b18c94732319a687c1)) +* **testing:** storyboard runner matrix entry for v3 reference seller ([#410](https://github.com/adcontextprotocol/adcp-client-python/issues/410)) ([#426](https://github.com/adcontextprotocol/adcp-client-python/issues/426)) ([f047c23](https://github.com/adcontextprotocol/adcp-client-python/commit/f047c23616250dc12631a953e9c0f0b65b502af6)) +* **translation:** list known keys in TranslationMap KeyError ([#768](https://github.com/adcontextprotocol/adcp-client-python/issues/768)) ([7545424](https://github.com/adcontextprotocol/adcp-client-python/commit/75454245f1752d232fa7e52a38c8f201e9cbd3fe)) +* type RegistryClient.create_adagents return as CreateAdagentsResponse ([#937](https://github.com/adcontextprotocol/adcp-client-python/issues/937)) ([8e6018b](https://github.com/adcontextprotocol/adcp-client-python/commit/8e6018baa66f129696a6c80875c42b12c113de98)) +* **types,decisioning:** close salesagent migration export gaps ([#511](https://github.com/adcontextprotocol/adcp-client-python/issues/511)) ([97a52e8](https://github.com/adcontextprotocol/adcp-client-python/commit/97a52e8412319e1693415af21dec47fcf788b3fd)) +* **types:** Account v3 projection helpers — bank-details write-only guard ([#371](https://github.com/adcontextprotocol/adcp-client-python/issues/371)) ([e4415e3](https://github.com/adcontextprotocol/adcp-client-python/commit/e4415e3f7aec181100b8b2581d71e0a54d1a4728)) +* **types:** auto-enforce publisher-selector XOR at Pydantic parse time (closes [#759](https://github.com/adcontextprotocol/adcp-client-python/issues/759)) ([#761](https://github.com/adcontextprotocol/adcp-client-python/issues/761)) ([e973864](https://github.com/adcontextprotocol/adcp-client-python/commit/e9738644b2016f57ebd55345fc7cc06775aa5a03)) +* **types:** default serialize_as_any=True in AdCPBaseModel.model_dump ([#639](https://github.com/adcontextprotocol/adcp-client-python/issues/639)) ([3160ace](https://github.com/adcontextprotocol/adcp-client-python/commit/3160ace6fed398b738d24d3d101e82a54caedc93)), closes [#615](https://github.com/adcontextprotocol/adcp-client-python/issues/615) +* **types:** disambiguated aliases for high-traffic colliding type names ([#941](https://github.com/adcontextprotocol/adcp-client-python/issues/941)) ([6c058f0](https://github.com/adcontextprotocol/adcp-client-python/commit/6c058f03f8bbbd791774d9599d3713883b643a51)) +* **types:** lazy, typed public surface with curated partial modules ([#963](https://github.com/adcontextprotocol/adcp-client-python/issues/963)) ([cad9840](https://github.com/adcontextprotocol/adcp-client-python/commit/cad9840e2662ee063f0df385ada07e289a2b2cf7)) +* **types:** narrow discriminated-union errors (Stability AI Emma P2) ([#340](https://github.com/adcontextprotocol/adcp-client-python/issues/340)) ([ad8b520](https://github.com/adcontextprotocol/adcp-client-python/commit/ad8b5206c6ef7eac088f335b00902a16c4eacd3d)) +* **types:** regenerate schemas + inject Literal-discriminator defaults ([27468aa](https://github.com/adcontextprotocol/adcp-client-python/commit/27468aa358295bdfdeb10af722e422aa6eef9d6b)) +* **types:** regenerate schemas + inject Literal-discriminator defaults ([a4bd6d8](https://github.com/adcontextprotocol/adcp-client-python/commit/a4bd6d85bb7ab8799096d58c2f37414f7f7c995f)) +* **types:** SchemaVariant marker + mypy plugin for cross-class overrides ([#710](https://github.com/adcontextprotocol/adcp-client-python/issues/710)) ([#718](https://github.com/adcontextprotocol/adcp-client-python/issues/718)) ([0b53cc9](https://github.com/adcontextprotocol/adcp-client-python/commit/0b53cc9187cbe40da28db666d31030ebd6ff0d83)) +* **types:** Sequence[T] on response-only list fields for covariant adoption ([#635](https://github.com/adcontextprotocol/adcp-client-python/issues/635)) ([19be8db](https://github.com/adcontextprotocol/adcp-client-python/commit/19be8dbff689066b85e7145447f1ef582b710bfb)) +* **types:** widen extension-point list[X] to Sequence[X] ([#624](https://github.com/adcontextprotocol/adcp-client-python/issues/624)) ([#640](https://github.com/adcontextprotocol/adcp-client-python/issues/640)) ([96ccfd4](https://github.com/adcontextprotocol/adcp-client-python/commit/96ccfd48da0a1d1f86a23119b2313a0fe5338416)) +* **v3-ref-seller:** broaden sales surface + sync_accounts + invoice_recipient ([#408](https://github.com/adcontextprotocol/adcp-client-python/issues/408)) ([f1e325b](https://github.com/adcontextprotocol/adcp-client-python/commit/f1e325bd9682e2792d9234ceb5adb31b8d77ab48)) +* **v3-ref-seller:** enable server validation + declare account.supported_billing ([#402](https://github.com/adcontextprotocol/adcp-client-python/issues/402)) ([ac7a61f](https://github.com/adcontextprotocol/adcp-client-python/commit/ac7a61fae0f41b2bf51b5e560edc118437f07638)) +* **v3-ref-seller:** translator pattern with JS mock-server upstream ([#447](https://github.com/adcontextprotocol/adcp-client-python/issues/447)) ([4185ced](https://github.com/adcontextprotocol/adcp-client-python/commit/4185cedce4cb27dbe6cfc0e104398d6811a48ccc)) +* **validation:** ADCP_VALIDATION_MODE env var + outputSchema on tools/list ([#391](https://github.com/adcontextprotocol/adcp-client-python/issues/391)) ([fa35bfb](https://github.com/adcontextprotocol/adcp-client-python/commit/fa35bfb5f4a17d97df6ce038e8b15cb54e88334e)) +* **validation:** oneOf near-miss validator hints + issues[].hint on every VALIDATION_ERROR ([#476](https://github.com/adcontextprotocol/adcp-client-python/issues/476)) ([9985086](https://github.com/adcontextprotocol/adcp-client-python/commit/9985086c23cbab80cf67348e0c84177f749f733f)) +* **validation:** per-version validator loader (stage 2 of versioned validation) ([#659](https://github.com/adcontextprotocol/adcp-client-python/issues/659)) ([6311a9a](https://github.com/adcontextprotocol/adcp-client-python/commit/6311a9a8ea4b14af9c2abc6991231e21585cbea7)) +* **validation:** schema-driven validation with client hooks and opt-in server middleware ([5cbac87](https://github.com/adcontextprotocol/adcp-client-python/commit/5cbac871e222eaf037346632fd4ddf1354bfd6ee)) +* **validation:** schema-driven validation with client hooks and opt-in server middleware ([a38ff57](https://github.com/adcontextprotocol/adcp-client-python/commit/a38ff57c934eded647ac84a470bb79a4a1b8bca6)) +* **validation:** validate_publisher_properties_item accepts Pydantic models ([#756](https://github.com/adcontextprotocol/adcp-client-python/issues/756)) ([01c6491](https://github.com/adcontextprotocol/adcp-client-python/commit/01c649119b3af5b8d39ce2e018559a01a6e96540)) +* **webhook:** PgWebhookDeliverySupervisor — Postgres-backed multi-worker delivery ([#360](https://github.com/adcontextprotocol/adcp-client-python/issues/360)) ([5f1f3a0](https://github.com/adcontextprotocol/adcp-client-python/commit/5f1f3a0fca2162547dda0c24c6f4723daced6b0b)) +* **webhooks:** create_mcp_webhook_payload returns McpWebhookPayload ([#632](https://github.com/adcontextprotocol/adcp-client-python/issues/632)) ([9eb962c](https://github.com/adcontextprotocol/adcp-client-python/commit/9eb962c38eb06e9e76290dcd0830edefd0c6a778)) +* **webhooks:** HMAC/bearer/Docker/Standard Webhooks delivery modes ([#482](https://github.com/adcontextprotocol/adcp-client-python/issues/482)) ([5d2c220](https://github.com/adcontextprotocol/adcp-client-python/commit/5d2c2208016b2355fbd0350a9ce039398abffb8d)) +* **webhooks:** public to_wire_dict() serialization seam ([#602](https://github.com/adcontextprotocol/adcp-client-python/issues/602)) ([6a06e88](https://github.com/adcontextprotocol/adcp-client-python/commit/6a06e888a6114c083d6bcf76c53b56d8433e3f99)) +* **webhooks:** replace `domain` kwarg with typed `protocol` (AdcpProtocol enum) ([#637](https://github.com/adcontextprotocol/adcp-client-python/issues/637)) ([fdd4053](https://github.com/adcontextprotocol/adcp-client-python/commit/fdd405386e8a6d08c55d6b3f43c1b619b6541c86)) + + +### Bug Fixes + +* **a2a:** address expert-review feedback on 1.0 migration ([7e54b97](https://github.com/adcontextprotocol/adcp-client-python/commit/7e54b97859321b8c9ed43bd87e899820cafcfc3d)) +* **adagents:** disable follow_redirects on ads.txt MANAGERDOMAIN fetch ([#754](https://github.com/adcontextprotocol/adcp-client-python/issues/754)) ([76a679f](https://github.com/adcontextprotocol/adcp-client-python/commit/76a679fdf2f9aa7fd3d1ccfe36340e9750a95d15)) +* **adagents:** follow safe well-known redirects ([fbb91c1](https://github.com/adcontextprotocol/adcp-client-python/commit/fbb91c113bfeb003f0c182ae0f6457fc65df07ba)) +* **adagents:** inline-resolution path for publisher_properties selectors + publisher_domains[] fan-out ([#750](https://github.com/adcontextprotocol/adcp-client-python/issues/750)) ([659135f](https://github.com/adcontextprotocol/adcp-client-python/commit/659135f4c18af31d74bf2c7ef90cdb610b741011)) +* **adagents:** pin DNS to close rebinding TOCTOU on SSRF gate ([#920](https://github.com/adcontextprotocol/adcp-client-python/issues/920)) ([51de333](https://github.com/adcontextprotocol/adcp-client-python/commit/51de3336dc0a6a79d3dbfbfc51462a9c67ffc266)), closes [#757](https://github.com/adcontextprotocol/adcp-client-python/issues/757) +* **adagents:** raise AdagentsAccessBlockedError on 403 + cf-mitigated: challenge ([#837](https://github.com/adcontextprotocol/adcp-client-python/issues/837)) ([bc4111f](https://github.com/adcontextprotocol/adcp-client-python/commit/bc4111f7f26b63a08b5d2e324abbbc7a39b6dbe1)) +* **adagents:** resolve-and-validate gate against DNS-based SSRF ([#757](https://github.com/adcontextprotocol/adcp-client-python/issues/757), partial) ([#760](https://github.com/adcontextprotocol/adcp-client-python/issues/760)) ([969f373](https://github.com/adcontextprotocol/adcp-client-python/commit/969f373873cd187bc08e542122c71bd76a4072a2)) +* **adcp:** skip eager httpx.AsyncClient alloc in WebhookSender.__aenter__ on owned-client path ([#301](https://github.com/adcontextprotocol/adcp-client-python/issues/301)) ([4bd45d1](https://github.com/adcontextprotocol/adcp-client-python/commit/4bd45d1c059ceeddfd184793a3f477f915c98446)), closes [#300](https://github.com/adcontextprotocol/adcp-client-python/issues/300) +* **agents:** already-engaged check + tighten label creation ([02baa89](https://github.com/adcontextprotocol/adcp-client-python/commit/02baa891ad0ccfd6ec392ae0350dd07671d65a0c)) +* **agents:** triage already-engaged + ship-more (missed in [#259](https://github.com/adcontextprotocol/adcp-client-python/issues/259)) ([ca42d29](https://github.com/adcontextprotocol/adcp-client-python/commit/ca42d2911bc07108e726bc6227e666ff97eb6724)) +* **agents:** webhook-miss sweep grace period (no double-fire) ([#280](https://github.com/adcontextprotocol/adcp-client-python/issues/280)) ([3a5f1c2](https://github.com/adcontextprotocol/adcp-client-python/commit/3a5f1c2a25f59ae485f90a5aa47c3e7119ad11ad)) +* allow owned signals discovery without activation ([#792](https://github.com/adcontextprotocol/adcp-client-python/issues/792)) ([46ae0c9](https://github.com/adcontextprotocol/adcp-client-python/commit/46ae0c9cc3a817c9630f232e6eb5fcc8dbe175a2)) +* **auth:** populate ctx.auth_principal from bearer ContextVar ([#574](https://github.com/adcontextprotocol/adcp-client-python/issues/574)) ([6c49b31](https://github.com/adcontextprotocol/adcp-client-python/commit/6c49b319b3a994eee475f45c8122b96bc10cf984)) +* **ci:** add --extra dev to pre-commit mypy hook so types-protobuf stubs are present ([#431](https://github.com/adcontextprotocol/adcp-client-python/issues/431)) ([254d0e2](https://github.com/adcontextprotocol/adcp-client-python/commit/254d0e2173c300598919e9fc1203fe141e934e7c)) +* **ci:** add concurrency group to cancel superseded runs on force-push ([#444](https://github.com/adcontextprotocol/adcp-client-python/issues/444)) ([272fb01](https://github.com/adcontextprotocol/adcp-client-python/commit/272fb0106a1b85ab40f5621e7dcd209a4cffca10)), closes [#413](https://github.com/adcontextprotocol/adcp-client-python/issues/413) +* **ci:** align pre-commit mypy with CI — install mypy in uv dev group ([#427](https://github.com/adcontextprotocol/adcp-client-python/issues/427)) ([d3d8f7b](https://github.com/adcontextprotocol/adcp-client-python/commit/d3d8f7bb048b9c328550003d10aa4705f6e21a93)) +* **ci:** block agent PR title prefixes ([#893](https://github.com/adcontextprotocol/adcp-client-python/issues/893)) ([79a979d](https://github.com/adcontextprotocol/adcp-client-python/commit/79a979dd2fc27c351c9c5d08a63fefa4cd372be6)) +* **ci:** harden privileged workflows ([#1003](https://github.com/adcontextprotocol/adcp-client-python/issues/1003)) ([688b3e4](https://github.com/adcontextprotocol/adcp-client-python/commit/688b3e4c6f4551f7f04d4ce68f6a69a5ee943523)) +* **ci:** pre-install @adcp/client + bump readiness window for v3 storyboard ([#448](https://github.com/adcontextprotocol/adcp-client-python/issues/448)) ([6b89599](https://github.com/adcontextprotocol/adcp-client-python/commit/6b89599ca25a948f378c2df214e8d4a7c8f6791f)) +* **ci:** v3 reference seller storyboard job actually asserts on results ([#693](https://github.com/adcontextprotocol/adcp-client-python/issues/693)) ([27a5866](https://github.com/adcontextprotocol/adcp-client-python/commit/27a58661d661dfe2dbea7f84b9108a98dacd8ffe)) +* **client:** add extra_headers escape hatch for multi-tenant servers ([#585](https://github.com/adcontextprotocol/adcp-client-python/issues/585)) ([66b7456](https://github.com/adcontextprotocol/adcp-client-python/commit/66b745692cb5e3d1099424efdaed8e4ab0faa3a3)) +* **client:** preserve agent_uri trailing slash; widen MCP URL fallbacks ([#582](https://github.com/adcontextprotocol/adcp-client-python/issues/582)) ([1db3ce3](https://github.com/adcontextprotocol/adcp-client-python/commit/1db3ce3d585bdc8af2425078981b53e69f1f49ce)) +* **client:** preserve canonical format options ([#1006](https://github.com/adcontextprotocol/adcp-client-python/issues/1006)) ([96396b9](https://github.com/adcontextprotocol/adcp-client-python/commit/96396b93bdd6680c2ba06207ad18f61de744620c)) +* **codegen:** preserve regenerated response aliases ([#854](https://github.com/adcontextprotocol/adcp-client-python/issues/854)) ([56d65fd](https://github.com/adcontextprotocol/adcp-client-python/commit/56d65fd1187a90ed9128a691a359e862eea00e13)) +* **codegen:** rewrite compact ConfigDict extra in place ([#935](https://github.com/adcontextprotocol/adcp-client-python/issues/935)) ([4d3303f](https://github.com/adcontextprotocol/adcp-client-python/commit/4d3303f6e51f77fead2b932d967febeb6708c7a8)) +* **compat:** extract hostname from brand_manifest URLs with paths ([#679](https://github.com/adcontextprotocol/adcp-client-python/issues/679)) ([6bb2c26](https://github.com/adcontextprotocol/adcp-client-python/commit/6bb2c2624fd044bec443281b88f636388754b9ec)), closes [#677](https://github.com/adcontextprotocol/adcp-client-python/issues/677) +* **compat:** handle inline BrandManifest object in v2.5 adapters ([#685](https://github.com/adcontextprotocol/adcp-client-python/issues/685)) ([edd7d0a](https://github.com/adcontextprotocol/adcp-client-python/commit/edd7d0a62ebb5ca06b285ba9a0db3d264de0e53a)) +* **compat:** warn on non-standard brand_manifest path in inline-object branch ([#688](https://github.com/adcontextprotocol/adcp-client-python/issues/688)) ([840e6b3](https://github.com/adcontextprotocol/adcp-client-python/commit/840e6b30ec42c09e9a9de3592b0756fb1f776053)), closes [#687](https://github.com/adcontextprotocol/adcp-client-python/issues/687) +* **compat:** warn when brand_manifest non-standard path is flattened to domain ([#686](https://github.com/adcontextprotocol/adcp-client-python/issues/686)) ([0568d2e](https://github.com/adcontextprotocol/adcp-client-python/commit/0568d2eafea58a66b96ebd38afef218558f06edf)) +* **decisioning:** address expert review — major_versions passthrough, supported_protocols default, nested re-exports ([b72b744](https://github.com/adcontextprotocol/adcp-client-python/commit/b72b74485a5fb1c6800bc2659e0ec22740c90fc0)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** apply 3.10 mock-target fix to second compliance_testing test ([d086aa8](https://github.com/adcontextprotocol/adcp-client-python/commit/d086aa88d8a709a7e8a5b2876b9079dba540fc8f)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** async-safe create_adcp_server_from_platform ([#700](https://github.com/adcontextprotocol/adcp-client-python/issues/700)) ([#719](https://github.com/adcontextprotocol/adcp-client-python/issues/719)) ([056714f](https://github.com/adcontextprotocol/adcp-client-python/commit/056714f8669aad0c3dd2f0a1b545a3d8c1682826)) +* **decisioning:** disable sync task webhooks by default ([#1020](https://github.com/adcontextprotocol/adcp-client-python/issues/1020)) ([46c464a](https://github.com/adcontextprotocol/adcp-client-python/commit/46c464a33780bbce2424438cab99e5cf900df899)) +* **decisioning:** fire legacy-field DeprecationWarnings at construction ([679709b](https://github.com/adcontextprotocol/adcp-client-python/commit/679709b1a269cbe4510264dad0c8bb8588ab48ee)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** gate async-completion webhook on SPEC_WEBHOOK_TASK_TYPES ([#932](https://github.com/adcontextprotocol/adcp-client-python/issues/932)) ([c23b406](https://github.com/adcontextprotocol/adcp-client-python/commit/c23b406493870a671322d5d3656ff18f71f4fee9)), closes [#931](https://github.com/adcontextprotocol/adcp-client-python/issues/931) +* **decisioning:** handle Specialism|str union in create_media_buy_store ([6f3faa0](https://github.com/adcontextprotocol/adcp-client-python/commit/6f3faa0447c328ca82ee29e03e52ee6a4f2a5140)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** handler shims for every non-sales wire tool ([#337](https://github.com/adcontextprotocol/adcp-client-python/issues/337)) ([a51c5a4](https://github.com/adcontextprotocol/adcp-client-python/commit/a51c5a49d99132a51f1b95721f5d4329110fe164)) +* **decisioning:** mock target Python 3.10 import-resolution compat ([40b4517](https://github.com/adcontextprotocol/adcp-client-python/commit/40b4517f57054e3fa1115c1e8d2d0a4e1d2abdcc)), closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485) +* **decisioning:** post-[#484](https://github.com/adcontextprotocol/adcp-client-python/issues/484) capabilities-projection polish (closes [#485](https://github.com/adcontextprotocol/adcp-client-python/issues/485)) ([87bacfb](https://github.com/adcontextprotocol/adcp-client-python/commit/87bacfbe708b5eca8f56b151572541c934bb7f97)) +* **decisioning:** project malformed-JSON 2xx responses to AdcpError ([#836](https://github.com/adcontextprotocol/adcp-client-python/issues/836)) ([c547dfe](https://github.com/adcontextprotocol/adcp-client-python/commit/c547dfe66148d393f705443f8a4c2dac50f6e749)), closes [#453](https://github.com/adcontextprotocol/adcp-client-python/issues/453) +* **decisioning:** re-validate params through platform method's stricter subclass annotation ([#597](https://github.com/adcontextprotocol/adcp-client-python/issues/597)) ([3d269f5](https://github.com/adcontextprotocol/adcp-client-python/commit/3d269f5c2ddd1624e6f6caf0a370214b4ab1751d)) +* **decisioning:** TaskHandoff registry.fail/complete echo request context ([#569](https://github.com/adcontextprotocol/adcp-client-python/issues/569)) ([b73b899](https://github.com/adcontextprotocol/adcp-client-python/commit/b73b8999c229287a5c1ba3364b17b4233c2aa438)) +* **decisioning:** three Emma cross-cutting findings + matrix runner ([#341](https://github.com/adcontextprotocol/adcp-client-python/issues/341)) ([4938ee1](https://github.com/adcontextprotocol/adcp-client-python/commit/4938ee1f913c37ecd5ac3b6f2c9a368b0364e405)) +* **decisioning:** Tier 2 codes → spec-conformant PERMISSION_DENIED ([#375](https://github.com/adcontextprotocol/adcp-client-python/issues/375)) ([#393](https://github.com/adcontextprotocol/adcp-client-python/issues/393)) ([870e98a](https://github.com/adcontextprotocol/adcp-client-python/commit/870e98ad6657a0dd2214d695765e3b5bc6b7228b)) +* **decisioning:** Tier 2 expert-review fix-pack ([#372](https://github.com/adcontextprotocol/adcp-client-python/issues/372)) ([9605f44](https://github.com/adcontextprotocol/adcp-client-python/commit/9605f44518c79c544d3ff1539395234c3f8b73a8)) +* **decisioning:** timing-oracle defense on PERMISSION_DENIED branches ([#772](https://github.com/adcontextprotocol/adcp-client-python/issues/772)) ([#774](https://github.com/adcontextprotocol/adcp-client-python/issues/774)) ([c23c9d5](https://github.com/adcontextprotocol/adcp-client-python/commit/c23c9d524ed6ba390cce0ad224d809408160a8ef)) +* **decisioning:** update v3 reference seller smoke tests for Specialism|str union ([09c5669](https://github.com/adcontextprotocol/adcp-client-python/commit/09c5669d1f1f9669adc3a21b47c47e63169528ab)), closes [#479](https://github.com/adcontextprotocol/adcp-client-python/issues/479) +* **decisioning:** wire sync_accounts/list_accounts dispatch to AccountStore Protocols ([#610](https://github.com/adcontextprotocol/adcp-client-python/issues/610)) ([dabf4fb](https://github.com/adcontextprotocol/adcp-client-python/commit/dabf4fb77cb8d64ff1984aa52ae74aac6230b8a1)) +* **decisioning:** wire-path dispatch + F12 silent no-op (Emma sales-direct P0s) ([#338](https://github.com/adcontextprotocol/adcp-client-python/issues/338)) ([50c985e](https://github.com/adcontextprotocol/adcp-client-python/commit/50c985eda951fa9a720ad9c5ff0bb758efdd812f)) +* **decisioning:** wrap pydantic.ValidationError from delegates as INVALID_REQUEST ([#656](https://github.com/adcontextprotocol/adcp-client-python/issues/656)) ([976ab4f](https://github.com/adcontextprotocol/adcp-client-python/commit/976ab4f611c93fcfe461cb5e5028b1a13bb90f0a)) +* **deps:** add types-protobuf to pip dev extras ([801ac16](https://github.com/adcontextprotocol/adcp-client-python/commit/801ac1688309497d71823163098a7449e5c082e4)) +* **deps:** bump a2a-sdk to >=1.0.2,<1.1 ([#586](https://github.com/adcontextprotocol/adcp-client-python/issues/586)) ([2fd640c](https://github.com/adcontextprotocol/adcp-client-python/commit/2fd640ce762eaaa0370869a01355da1f4afb8e35)) +* **deps:** re-pin a2a-sdk<1.0.2, add protobuf>=6 floor + matrix canary ([#588](https://github.com/adcontextprotocol/adcp-client-python/issues/588)) ([1e16d6f](https://github.com/adcontextprotocol/adcp-client-python/commit/1e16d6f3523aee060d1912c9608127caed4190ea)) +* **examples/multi_platform_seller:** align mocks with wire contract; storyboard gate now blocking ([#508](https://github.com/adcontextprotocol/adcp-client-python/issues/508)) ([863bb93](https://github.com/adcontextprotocol/adcp-client-python/commit/863bb933f88d12b987bc64aeff109636986c639a)) +* **examples/multi_platform_seller:** list_creatives populates query_summary (closes [#510](https://github.com/adcontextprotocol/adcp-client-python/issues/510)) ([#521](https://github.com/adcontextprotocol/adcp-client-python/issues/521)) ([c7cfe6f](https://github.com/adcontextprotocol/adcp-client-python/commit/c7cfe6fb05622cb68fb194f24dfef4dea8fc317b)) +* **examples:** close last 5 storyboard fixture-dependent failures ([#319](https://github.com/adcontextprotocol/adcp-client-python/issues/319)) ([#322](https://github.com/adcontextprotocol/adcp-client-python/issues/322)) ([d92cfb1](https://github.com/adcontextprotocol/adcp-client-python/commit/d92cfb13839fa26a4ab69ae2db941c752db054a1)) +* **examples:** seed_product complete defaults + format_ids agent_url normalization ([#319](https://github.com/adcontextprotocol/adcp-client-python/issues/319)) ([#321](https://github.com/adcontextprotocol/adcp-client-python/issues/321)) ([046b15e](https://github.com/adcontextprotocol/adcp-client-python/commit/046b15e429b40412a284d50e9d28bf884355c80f)) +* **examples:** seller_agent.py AdCP 3.0.1 storyboard compliance (items 1-6 of [#304](https://github.com/adcontextprotocol/adcp-client-python/issues/304)) ([#310](https://github.com/adcontextprotocol/adcp-client-python/issues/310)) ([04966d7](https://github.com/adcontextprotocol/adcp-client-python/commit/04966d7183811238d57e28a3aebc63e6de135a32)) +* expose requested AdCP version resolver ([#855](https://github.com/adcontextprotocol/adcp-client-python/issues/855)) ([f1d88bc](https://github.com/adcontextprotocol/adcp-client-python/commit/f1d88bc8746beb372f8155f494942006291f8d78)) +* **handlers:** sync MEDIA_BUY_STATE_MACHINE with spec v3 enum ([#289](https://github.com/adcontextprotocol/adcp-client-python/issues/289)) ([54fd18b](https://github.com/adcontextprotocol/adcp-client-python/commit/54fd18b45cbef587db0d6ce48531c5b35e3c302b)) +* harden media buy response normalization ([5defa15](https://github.com/adcontextprotocol/adcp-client-python/commit/5defa15a51ad12cb89b0efbded726dbc2568bf40)) +* harden media buy response normalization ([532459a](https://github.com/adcontextprotocol/adcp-client-python/commit/532459aed2fb4e5da9be58bdee43585529e5dbbf)) +* **idempotency:** @IdempotencyStore.wrap supports arg-projected methods ([#567](https://github.com/adcontextprotocol/adcp-client-python/issues/567)) ([1abdae6](https://github.com/adcontextprotocol/adcp-client-python/commit/1abdae676c8f3bcf2bef48ea5a6d192a5da7de92)) +* **identity:** enforce tenant and credential isolation ([#1001](https://github.com/adcontextprotocol/adcp-client-python/issues/1001)) ([95a3a6e](https://github.com/adcontextprotocol/adcp-client-python/commit/95a3a6e0540bd89ce6a34c055072ca96ef21513e)) +* **migrate:** per-symbol replacement for generated_poc reach-ins ([#329](https://github.com/adcontextprotocol/adcp-client-python/issues/329)) ([100680b](https://github.com/adcontextprotocol/adcp-client-python/commit/100680beba6ea99d5bca606d4582c4e7b6559d34)) +* **packaging:** trim prerelease schema bundles ([2db8bd1](https://github.com/adcontextprotocol/adcp-client-python/commit/2db8bd12461136d280c23906bb34b3d8c9cbd5d9)) +* preserve full sync_accounts request for account stores ([#796](https://github.com/adcontextprotocol/adcp-client-python/issues/796)) ([2b7ad01](https://github.com/adcontextprotocol/adcp-client-python/commit/2b7ad01dc19f0d7146dcb6a6dd5734e3ed7220d5)) +* **protocol:** pin AdCP 3.1 stable ([9cc9fa6](https://github.com/adcontextprotocol/adcp-client-python/commit/9cc9fa6a5a312accd8cb81b700efd55b7dc99e18)) +* **protocol:** support AdCP 3.1.14 schemas ([#1026](https://github.com/adcontextprotocol/adcp-client-python/issues/1026)) ([a2d4f07](https://github.com/adcontextprotocol/adcp-client-python/commit/a2d4f07fcedc965348f31502cfc7d961e9b58b01)) +* **protocol:** support AdCP 3.1.15 schemas ([#1028](https://github.com/adcontextprotocol/adcp-client-python/issues/1028)) ([28af948](https://github.com/adcontextprotocol/adcp-client-python/commit/28af948335347dfb5a9f67991c2b8636e3f0802b)) +* **release:** compare normalized prerelease versions ([#1015](https://github.com/adcontextprotocol/adcp-client-python/issues/1015)) ([87140b4](https://github.com/adcontextprotocol/adcp-client-python/commit/87140b4aa76b67d26b57a5abb13d21dad06e0b47)) +* **release:** harden version 7 for stable release ([6fca33c](https://github.com/adcontextprotocol/adcp-client-python/commit/6fca33c9f13af41b1b3b698792e54437fc52e445)) +* **security:** harden external sinks and callbacks ([#1002](https://github.com/adcontextprotocol/adcp-client-python/issues/1002)) ([e27c6a7](https://github.com/adcontextprotocol/adcp-client-python/commit/e27c6a7a8b9831806540f69101f2ad4e33c3a162)) +* **security:** harden SDK auth transports ([a2610a5](https://github.com/adcontextprotocol/adcp-client-python/commit/a2610a5b4f8e0d0d1d500fc3908be1d6862b0764)) +* seller SDK version compatibility ([#852](https://github.com/adcontextprotocol/adcp-client-python/issues/852)) ([e4b716d](https://github.com/adcontextprotocol/adcp-client-python/commit/e4b716d05462eabf49262222376e8ad7d95198c1)) +* send AAO directory pagination cursor as cursor ([#811](https://github.com/adcontextprotocol/adcp-client-python/issues/811)) ([da91183](https://github.com/adcontextprotocol/adcp-client-python/commit/da9118338856e78d00f08d12b0fd3178d819cfe5)) +* **server:** A2A auth middleware populates current_principal contextvars ([#592](https://github.com/adcontextprotocol/adcp-client-python/issues/592)) ([5430942](https://github.com/adcontextprotocol/adcp-client-python/commit/543094270f97685034e7e390199e1909222a451b)) +* **server:** Authorization: Bearer always accepted; legacy headers additive ([#720](https://github.com/adcontextprotocol/adcp-client-python/issues/720)) ([#721](https://github.com/adcontextprotocol/adcp-client-python/issues/721)) ([dd6503e](https://github.com/adcontextprotocol/adcp-client-python/commit/dd6503ecf36094d2e00ec042b26ac1f8465f344e)) +* **server:** BearerTokenAuthMiddleware now populates ctx.auth_info for bearer flows ([#579](https://github.com/adcontextprotocol/adcp-client-python/issues/579)) ([901aa53](https://github.com/adcontextprotocol/adcp-client-python/commit/901aa53e6b86b3d8bde92ff4a434cd19dbc9f1f3)) +* **server:** centralize pre-validation hooks and attribute chain failures ([#938](https://github.com/adcontextprotocol/adcp-client-python/issues/938)) ([3859131](https://github.com/adcontextprotocol/adcp-client-python/commit/3859131159b7e2bedc2ead3dc1dcd7dbc766ac9a)), closes [#859](https://github.com/adcontextprotocol/adcp-client-python/issues/859) [#882](https://github.com/adcontextprotocol/adcp-client-python/issues/882) +* **server:** comply_test_controller returns dict to fix controller_detected: false ([#317](https://github.com/adcontextprotocol/adcp-client-python/issues/317)) ([9244d46](https://github.com/adcontextprotocol/adcp-client-python/commit/9244d464e756dcef969ebdb3f9b49369c06a1f58)) +* **server:** echo request context on AdcpError error envelopes ([#560](https://github.com/adcontextprotocol/adcp-client-python/issues/560)) ([2e351b0](https://github.com/adcontextprotocol/adcp-client-python/commit/2e351b0d20c73c8483deeaa4c0efa89d3c453af7)) +* **server:** emit WWW-Authenticate on every 401 (RFC 6750 §3) [#712](https://github.com/adcontextprotocol/adcp-client-python/issues/712) ([#715](https://github.com/adcontextprotocol/adcp-client-python/issues/715)) ([ce707d3](https://github.com/adcontextprotocol/adcp-client-python/commit/ce707d3b2a08e7b2a73ecbee53b361821e393dba)) +* **server:** fix streamable-http ASGI error, host binding, and AdCP 3.0.1 scenario gaps ([#296](https://github.com/adcontextprotocol/adcp-client-python/issues/296)) ([6be0232](https://github.com/adcontextprotocol/adcp-client-python/commit/6be02328be979ccd32ac2914d8b5e04c0923dd02)) +* **server:** guard stateful MCP sessions ([#904](https://github.com/adcontextprotocol/adcp-client-python/issues/904)) ([cb11a95](https://github.com/adcontextprotocol/adcp-client-python/commit/cb11a95487c067d9a844f2e954de95dfab7d55d5)) +* **server:** preserve Starlette lifespan when public_url is callable ([#680](https://github.com/adcontextprotocol/adcp-client-python/issues/680)) ([8632847](https://github.com/adcontextprotocol/adcp-client-python/commit/86328470ff9b53f6837368edd14851c16032efa7)), closes [#676](https://github.com/adcontextprotocol/adcp-client-python/issues/676) +* **server:** project postal capabilities by AdCP version ([#952](https://github.com/adcontextprotocol/adcp-client-python/issues/952)) ([d395cbb](https://github.com/adcontextprotocol/adcp-client-python/commit/d395cbb0056c705e327dbcb7d2416b828ecd1161)) +* **server:** protocol-polish follow-ups from PR [#341](https://github.com/adcontextprotocol/adcp-client-python/issues/341) ([#342](https://github.com/adcontextprotocol/adcp-client-python/issues/342)) ([5a37adc](https://github.com/adcontextprotocol/adcp-client-python/commit/5a37adca7364f8c0892d991540444caf024eda0c)) +* **server:** register /.well-known/agent.json alias route in create_a2a_server ([#613](https://github.com/adcontextprotocol/adcp-client-python/issues/613)) ([2989101](https://github.com/adcontextprotocol/adcp-client-python/commit/29891019daa7e5c201045f69affd982e41cd459c)) +* **server:** strip None-valued asset fields from dict-based response builder output ([#631](https://github.com/adcontextprotocol/adcp-client-python/issues/631)) ([c02ea84](https://github.com/adcontextprotocol/adcp-client-python/commit/c02ea842ada85570b1c953d2f0ec989cba61b8de)), closes [#622](https://github.com/adcontextprotocol/adcp-client-python/issues/622) +* **server:** unify divergent host normalizers behind one helper ([#997](https://github.com/adcontextprotocol/adcp-client-python/issues/997)) ([6fb1b72](https://github.com/adcontextprotocol/adcp-client-python/commit/6fb1b72d45ec8adfc2be93c5232464d6ff1c69e3)) +* **signing:** Argus follow-ups on [#789](https://github.com/adcontextprotocol/adcp-client-python/issues/789) — IDNA + IP literals, Protocol contract, misconfig warnings, diagnostic hygiene ([#798](https://github.com/adcontextprotocol/adcp-client-python/issues/798)) ([fcb64fc](https://github.com/adcontextprotocol/adcp-client-python/commit/fcb64fcfae8b42822bdf92c289dcb771191419c4)) +* **signing:** block CGNAT and 6to4 relay ranges in SSRF validation ([#974](https://github.com/adcontextprotocol/adcp-client-python/issues/974)) ([0207429](https://github.com/adcontextprotocol/adcp-client-python/commit/020742979cabb5e721ab33c41caddb6b9849074a)) +* **signing:** canonicalize both origins in the brand.json jwks gate ([#998](https://github.com/adcontextprotocol/adcp-client-python/issues/998)) ([b7ef1df](https://github.com/adcontextprotocol/adcp-client-python/commit/b7ef1dfcff2bf116e1c18586fd26a497669cdc41)) +* **signing:** idna-normalize hosts in etld+1 binding ([#995](https://github.com/adcontextprotocol/adcp-client-python/issues/995)) ([827e4f4](https://github.com/adcontextprotocol/adcp-client-python/commit/827e4f4e9c259137e92124b0f309233685c43d51)), closes [#988](https://github.com/adcontextprotocol/adcp-client-python/issues/988) +* **signing:** preserve a trailing empty query in [@target-uri](https://github.com/target-uri) ([#987](https://github.com/adcontextprotocol/adcp-client-python/issues/987)) ([afa0454](https://github.com/adcontextprotocol/adcp-client-python/commit/afa0454598320a118f8753b79737f0a320b7afe2)) +* **signing:** reject malformed authorities, convert IDN hosts to A-labels ([#985](https://github.com/adcontextprotocol/adcp-client-python/issues/985)) ([be233e4](https://github.com/adcontextprotocol/adcp-client-python/commit/be233e4b514f6cd34d3aadd3311675821b2e8290)) +* **signing:** reject malformed structured-field input at step 1 ([#993](https://github.com/adcontextprotocol/adcp-client-python/issues/993)) ([6518c2d](https://github.com/adcontextprotocol/adcp-client-python/commit/6518c2d88d0bd5055caeb39350a24a3b34c45abc)) +* **signing:** validate-before-sign symmetry in deliver() + HMAC SSRF coverage + 4.1 migration notes ([bc8da3a](https://github.com/adcontextprotocol/adcp-client-python/commit/bc8da3aa52a8eae61fab20da6a57359dfb96a2f2)) +* **testing:** make a2a_compat_shim resilient to wrong a2a-sdk in /tmp worktrees ([#433](https://github.com/adcontextprotocol/adcp-client-python/issues/433)) ([c5c581d](https://github.com/adcontextprotocol/adcp-client-python/commit/c5c581dedb591d37565f52fff69d5f5e13619164)) +* **triage:** drop apostrophe from MODE text (port of adcp[#3325](https://github.com/adcontextprotocol/adcp-client-python/issues/3325)) ([#287](https://github.com/adcontextprotocol/adcp-client-python/issues/287)) ([2efa423](https://github.com/adcontextprotocol/adcp-client-python/commit/2efa4238006b2feccfa253099d1cc6bf4dd07b84)) +* **types:** add update media buy response coercion ([#864](https://github.com/adcontextprotocol/adcp-client-python/issues/864)) ([c111ba6](https://github.com/adcontextprotocol/adcp-client-python/commit/c111ba6a04467c06eb8d8a57d814bdb0b91d93da)) +* **types:** CreateMediaBuy handler return type covers all 3 branches + add Submitted alias ([#575](https://github.com/adcontextprotocol/adcp-client-python/issues/575)) ([f7960ed](https://github.com/adcontextprotocol/adcp-client-python/commit/f7960ed5778e6d96299eaa7246afa8a03682de9f)) +* **types:** derive response arms from schemas ([#922](https://github.com/adcontextprotocol/adcp-client-python/issues/922)) ([70abb5a](https://github.com/adcontextprotocol/adcp-client-python/commit/70abb5aca884a5af3b9339b3d9da73832bf22034)) +* **types:** generate schema enums as StrEnum ([#915](https://github.com/adcontextprotocol/adcp-client-python/issues/915)) ([6ad4fe4](https://github.com/adcontextprotocol/adcp-client-python/commit/6ad4fe4e7db413b4be15c797d34d5d9670abdc7e)) +* **types:** open Format.assets discriminated union with UnknownFormatAsset fallback arm (issue [#742](https://github.com/adcontextprotocol/adcp-client-python/issues/742)) ([#744](https://github.com/adcontextprotocol/adcp-client-python/issues/744)) ([7904f85](https://github.com/adcontextprotocol/adcp-client-python/commit/7904f85ca0a9241977fb70e782a687425a4a7565)) +* **types:** resolve capability sub-models via field annotation, not numbered names ([#745](https://github.com/adcontextprotocol/adcp-client-python/issues/745)) ([b63c7e6](https://github.com/adcontextprotocol/adcp-client-python/commit/b63c7e6bf4df453ad40760e70fd638080deecdfa)) +* **types:** support AdCP 3.1 beta 7 ([3eee8d5](https://github.com/adcontextprotocol/adcp-client-python/commit/3eee8d52101f5fe062c0d8de9f8fd9f26c4e5d51)) +* **types:** update AdCP rc4 schemas ([71c45e5](https://github.com/adcontextprotocol/adcp-client-python/commit/71c45e588d9626962f45e0e303cff665f2780727)) +* **types:** widen canceled Literal[True]=True to Literal[True]|None=None on request types ([#643](https://github.com/adcontextprotocol/adcp-client-python/issues/643)) ([120ae3b](https://github.com/adcontextprotocol/adcp-client-python/commit/120ae3b690f3ec5ae70d0f825ff4e19506205ead)) +* **v3-ref-seller:** run alembic upgrade head at boot ([#421](https://github.com/adcontextprotocol/adcp-client-python/issues/421)) ([#733](https://github.com/adcontextprotocol/adcp-client-python/issues/733)) ([ffa3c8c](https://github.com/adcontextprotocol/adcp-client-python/commit/ffa3c8c49ebaba3735721c92176086807782cdbf)) +* **validation:** address code + security review feedback ([5bf9434](https://github.com/adcontextprotocol/adcp-client-python/commit/5bf9434da477140768a9aa55cde493e89adfcf0e)) +* **validation:** bundle schemas before wheel builds ([0cdcf29](https://github.com/adcontextprotocol/adcp-client-python/commit/0cdcf29b6902961b9b81150049fda9eb3628130e)) +* **webhooks:** add canceled/rejected/auth-required to A2A status map; fail fast on unknowns ([#606](https://github.com/adcontextprotocol/adcp-client-python/issues/606)) ([89f9491](https://github.com/adcontextprotocol/adcp-client-python/commit/89f949105fa99c9fd2da4e0d3bef207be4471242)) +* **webhooks:** bracket and structurally validate DockerLocalhostRewrite rewrite_to ([#996](https://github.com/adcontextprotocol/adcp-client-python/issues/996)) ([013c06c](https://github.com/adcontextprotocol/adcp-client-python/commit/013c06cf30aa62046a2ce2f316057f577c214f1a)) +* **webhooks:** correct type annotations for extract_webhook_result_data and payload builders ([#600](https://github.com/adcontextprotocol/adcp-client-python/issues/600)) ([e624b5c](https://github.com/adcontextprotocol/adcp-client-python/commit/e624b5c4e72754f0f5b3fd6b6bebc8abddefef5e)) +* **webhooks:** promote McpWebhookPayload.token from extras shim to typed field ([#835](https://github.com/adcontextprotocol/adcp-client-python/issues/835)) ([3832433](https://github.com/adcontextprotocol/adcp-client-python/commit/383243357e30c9fdb0b67a69b354676ace38efe7)), closes [#638](https://github.com/adcontextprotocol/adcp-client-python/issues/638) +* **webhooks:** reject unknown AdCP status in create_a2a_webhook_payload ([#605](https://github.com/adcontextprotocol/adcp-client-python/issues/605)) ([37d2cda](https://github.com/adcontextprotocol/adcp-client-python/commit/37d2cdacc609f7506d1c3556f2b5aa4b7fd95153)) + + +### Performance Improvements + +* **ci:** cache ~/.npm + drop per-invocation npx for storyboard runners ([#450](https://github.com/adcontextprotocol/adcp-client-python/issues/450)) ([386cb15](https://github.com/adcontextprotocol/adcp-client-python/commit/386cb15071673a7340a54b31db07bd07ac448300)) +* **server:** lazy-load Pydantic schema generation to fix storyboard readiness flake ([#435](https://github.com/adcontextprotocol/adcp-client-python/issues/435)) ([8664ea3](https://github.com/adcontextprotocol/adcp-client-python/commit/8664ea37a4468646a1caef3238d7eb3d3b28a9f5)) +* **types:** defer pydantic core-schema builds to cut import memory ([#959](https://github.com/adcontextprotocol/adcp-client-python/issues/959)) ([f418961](https://github.com/adcontextprotocol/adcp-client-python/commit/f4189611740fdc4eaf4e7e514a16e6f17d07598e)) + + +### Reverts + +* **preview:** remove opt-in v3.1 preview surface ([#747](https://github.com/adcontextprotocol/adcp-client-python/issues/747)) ([#755](https://github.com/adcontextprotocol/adcp-client-python/issues/755)) ([6947870](https://github.com/adcontextprotocol/adcp-client-python/commit/6947870bb2d3a5746ab174b3dee747a50e9c63fc)) + ## [8.0.0-beta.3](https://github.com/adcontextprotocol/adcp-client-python/compare/v8.0.0-beta.2...v8.0.0-beta.3) (2026-08-18) SDK 8 beta release notes are cumulative. Adopters upgrading from SDK 7 should diff --git a/pyproject.toml b/pyproject.toml index 15ef81bc..5e0e3fdc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "adcp" -version = "8.0.0b3" +version = "8.0.0-beta.1" description = "Official Python client for the Ad Context Protocol (AdCP)" authors = [ {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"} From 16569d07de9d7ebe7448735e28ce68a332c2a4f6 Mon Sep 17 00:00:00 2001 From: "aao-ipr-bot[bot]" Date: Tue, 18 Aug 2026 12:07:47 +0000 Subject: [PATCH 2/2] chore: normalize prerelease version to PEP 440 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5e0e3fdc..43cb94eb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "adcp" -version = "8.0.0-beta.1" +version = "8.0.0b1" description = "Official Python client for the Ad Context Protocol (AdCP)" authors = [ {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"}