Repository navigation
Embedded Sales Agent asks for 9.0 GA #1441
Description
Everything the Embedded Sales Agent (scope3data/embedded-sales-agent) would like settled before 9.0.0 ships, from its move to 9.0.0b1. Of ESA's 46 open feedback items, 9.0.0b1 resolves 30 and partly resolves 3; about 25 ESA workarounds can be deleted. These are what remain.
Correctness: please land before GA
- get_named_validator returns one validator shared across threads; concurrent validation fails with _RefResolutionError #1434:
get_named_validatorshares one validator across threads; concurrent validation fails. It crashed ESA in production, and the fix is small. Landed via fix(validation): isolate cached validators across threads #1442. - bug(reporting): one stored configuration whose account context fails to resolve stops the whole service from starting #1271 (PR fix(reporting): isolate account initialization and recovery failures #1405): one configuration whose account context fails to resolve stops the whole reporting service from starting. Landed via fix(reporting): isolate account initialization and recovery failures #1405.
- bug(reporting): producer reads a period at close, ignoring the offering's expected_availability_lag #1256 (PR fix(reporting): wait for declared source availability before acquisition #1406) and bug(reporting): every scheduled read lands at the period boundary, so all feeds hit the source in the same minute #1257: the producer ignores
expected_availability_lag, and every scheduled read lands on the period boundary. Reporting already needs a maintenance migration in 9.0, so these should ship with it rather than in a later minor. Landed via fix(reporting): wait for declared source availability before acquisition #1406 (availability) and fix(reporting): bind source consumers and stagger automatic reads #1445 (staggering). - Format.canonical_parameters drops format_kind and params on the 3.1 line (generated ProductFormatDeclaration ignores the oneOf branches) #1275 / ProductFormatDeclaration and Format are the same class, while the schema's 16-arm union is exported as LegacyProductFormatDeclaration #1401:
ProductFormatDeclarationdropsformat_kind/paramson the 3.1 line. The beta notes already list it as pre-GA; fixing it after GA breaks the canonical-format types again. Landed via fix(types): preserve 3.1 canonical parameters in legacy catalogs #1444 (release/7.x) and fix(sdk): address SDK 9 GA type and server migration gaps #1443 (main).
API shape: cheaper to change before GA
- reporting: slice requests don't carry the owning consumer_id #1431: slice requests don't carry the owning
consumer_id. Landed via fix(reporting): bind source consumers and stagger automatic reads #1445. - bug(versioning): 8.0.0 servers reject every 8.0.0rc3 client (3.2-rc.7) and sellers have no supported way to bridge it #1279: a supported way to narrow served versions (for example
serve(supported_versions=...)that also gatesdetect_wire_version), so sellers don't patchSUPPORTED_WIRE_VERSIONS. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443. - ReportingWebhook cannot supply required McpWebhookPayload operation_id #1092 / adcp#7885: make
reporting_webhook.operation_idspec rather than opt-in once adcp#7897 releases. - server: agent-card discovery returns 403 to cross-origin browser fetches when allowed_origins is set #1436: agent-card discovery returns 403 to cross-origin browser fetches when
allowed_originsis set. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443. - types: ship a strict canonical format_kind validator alongside the open string #1438: a strict canonical
format_kindvalidator alongside the open string. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443. - types: ergonomics after the RootModel change (cached union validation, list roots, alias names) #1437: cached union validation, list roots that are still
RootModel, and inconsistent union alias names. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443. - reporting: replace an all-empty pre-ownership ledger without the archive ceremony #1439: replace an all-empty pre-ownership reporting ledger without the archive ceremony. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443.
Docs
- docs: add MIGRATION_v8_to_v9.md covering behavior changes not in the topic guides #1440:
MIGRATION_v8_to_v9.md, including the credential-carrier change (bug(auth): MCP leg accepts conflicting Authorization and alias tokens that the A2A leg rejects as ambiguous #1305), the A2A Host default, Origin on discovery, and the strict-validation changes. Landed via fix(sdk): address SDK 9 GA type and server migration gaps #1443.
Spec
- adcp#7993: backport
macro-bearing-urlto 3.1.x so%%MACRO%%VAST tags validate at 3.1. Released and verified in AdCP 3.1.27 via adcp#8004 and adcp#8007; SDK synchronization merged in fix(validation): sync signed 3.1.27 macro URL schemas #1454 after exact-head expert approval and all 46 active CI checks passed.
SDK completion (2026-10-07)
SDK fixes are merged after expert review and green CI: #1442 (validator concurrency), #1444 (7.x format-declaration backport), #1406 (source availability), #1443 (9.0 API, canonical types, server policy and migration documentation), #1405 (startup/recovery isolation), and #1445 (source consumer identity and automatic read staggering). The issues addressed by these PRs are closed. #1445 passed all 49 checks on its approved commit; all 13 serial PostgreSQL/installed-artifact regressions also passed.
SDK 9 beta release (2026-10-08)
The SDK 9 fixes above are published in 9.0.0-beta.2 (PyPI 9.0.0b2). All 35 CI jobs on the exact tagged commit passed, and the published wheel and source distribution match the checked official build.
3.1 macro URL dependency completed (2026-10-08)
The backport is published in AdCP 3.1.27. Release run 37772270281 passed; all four official CDN assets match the reviewed signed tuple, and official synchronization reproduces all 762 current SDK cache files byte for byte.
SDK #1454 merged as 7d610e1ae1f6aedd5b9290857052e86c209b634c after expert approval of exact head 3dd1c2ae5c03cc7d3dbd41d1154109f2b8c23d2c and all 46 active CI checks passed (CI). The merged main tree matches the reviewed head. It preserves the exact 3.1.15 source contract for durable purchase continuations and keeps the primary 3.2.1 pin. Local validation passed 12,142 unit tests, 3,792 conformance/integration tests and 81 workflow tests; fresh wheel and source installs each passed all 191 macro URL, internationalized URL and retained-source regressions. The SDK synchronization is on main and will ship in the next SDK release.
The docs runtime repair merged in adcp#8026 after all 54 active checks passed.
Remaining protocol dependency
- adcp#7897: publish the operation-ID protocol release, then synchronize the SDK's signed schemas and make
reporting_webhook.operation_idstandard (ReportingWebhook cannot supply required McpWebhookPayload operation_id #1092). The schema change merged in adcp#7895 and adcp#7885 is closed, but #7897 remains draft and latest released 3.2.3 omits the field. Retain the documented fix(types): restore opt-in reporting correlation on AdCP 3.2 #1349 interim agreement until publication and schema synchronization.
This tracker remains open only for the operation-ID protocol release and subsequent SDK schema synchronization.
Activity
bokelley commentedon Oct 7, 2026
Triage
Classification: tracking/meta — pre-9.0.0 GA checklist
Bucket(s): docs (verified); cross-repo label absent from this repo (gap noted below)
Status: ready-for-human
Milestone: (omit — maintainer should assign to the 9.0.0 milestone explicitly)
What the experts said:
My take: This is a well-organized 9.0.0 pre-GA coordination tracker filed by a contributor: 13 items across correctness, API shape, docs, and cross-repo spec, with several items having active open PRs (#1405, #1406, #1401) ready for review or merge. The mix of breaking-API changes, cross-repo spec dependencies (adcp#7993, adcp#7885), and multi-domain scope makes milestone sequencing a human call.
Items with open PRs (highest-value review targets):
expected_availability_lag)ProductFormatDeclarationdropsformat_kind/paramson 3.1 line)Items without PRs yet: #1434 (thread-safety, production impact — correctness critical), #1431, #1279, #1436, #1438, #1437, #1439, #1440, adcp#7993 (cross-repo).
Recommended next step for the milestone owner: milestone the individual issues to 9.0.0, merge the three open PRs above, then use this checklist as the GA gate. adcp#7993 needs a spec decision before the Python side can close.
Label gap:
cross-repolabel does not exist in this repo; cross-repo items noted in the comment body only.Triaged by Claude Code. Session: https://claude.ai/code/session_01GUsdLbPQ3zQMvLNiutEaPX
Generated by Claude Code
bokelley commentedon Oct 8, 2026
Status after 9.0.0b2. ESA now runs on b2 (scope3data/embedded-sales-agent#652).
Landed in b2: #1434, #1271, #1256, #1257, #1275/#1401, #1431, #1279 (per-instance
supported_versions), #1436, #1437, #1438, #1439, #1440. With #1431, ESA dropped itstenant:account:principalledger key and the response rewrite. Withvalidate_union,require_canonical_format_kindandreplace_empty_legacy_reporting, it deleted or replaced its own versions.Still open for GA:
reporting_webhook.operation_idas spec rather than opt-in, once adcp#7897 releases.macro-bearing-urlto 3.1.x.replace_empty_legacy_reporting, a rollback path for the owned ledger, and the declaration-to-Formatpublishing pattern.bokelley commentedon Oct 11, 2026
Status after 9.0.0-beta.3. ESA stays on beta.2 for now (scope3data/embedded-sales-agent#652).
targeting_overlay(for example an emptyfrequency_cap) raisesKeyError: "Invalid error type: 'anyOf'"instead ofValidationError, which turns an invalid buyer request into an internal error. This is a regression from fix(codegen): name the JSON Schema keyword an injected check enforces #1435 combined with the targeting-overlay error normalization.ProductFormatDeclarationgrading storedparams. ESA publishes stored declarations throughFormat; notes on 9.0 adoption follow-ups: sync empty-ledger replacement, owned-ledger rollback, declaration-to-Format publishing #1449.Still open for GA: #1475, #1092 / adcp#7885, #1449.