Repository navigation
Conversation
Pin src/adcp/ADCP_VERSION to 3.3.0-beta.3 from the cosign-verified release (schemas/releases/3.3.0-beta.3.json; bundle sha256 ba61919c..., source commit d5f8de38 from the Fulcio certificate under release.yml@refs/heads/main). Resync the schema cache, compliance inputs and request-signing vectors, regenerate the types, and package the full-version bundle key (`_schemas/3.3.0-beta.3`, `_compliance/3.3.0-beta.3`, `schemas/cache/3.3.0-beta.3` in pyproject.toml and MANIFEST.in). Fixes #1560. Beta.3 is the first bundle that composes core/protocol-envelope.json into every task response (adcontextprotocol/adcp#8547). Generated responses derive from ProtocolEnvelope and carry status, task_id, timestamp, adcp_version and the other envelope fields. Fixes #1678 and #1680: - The restore_response_variant_aliases emitter identified a submitted arm by a local `status: const submitted`. #8547 moves that const and the required task_id into core/task-submitted.json, so eight response modules (create/update_media_buy, build_creative, sync_creatives, sync_audiences, sync_catalogs, preview_creative, get_creative_features) lost TaskSubmitted, the const and the required id. The emitter now recognises an arm that composes task-submitted and declares both. - A scalar that tightens a shared definition (the controller's task_id maxLength 128 beside core/task-id.json) was losing its bound in the generator. A prep pass merges the bound into the scalar before generation. - The task-message lattice pins for the residue of responses without an envelope are now empty, and stay as assertions. Version gating (matches adcontextprotocol/adcp-client#3493): `status` is required on 3.3 responses, including list_products and decline_proposals, which have none under 3.2.x. uses_task_status_envelope(tool, version) reads the served release's own response schema for whether it composes the envelope, so the answer follows the release, not a version string or a hard-coded tool list. A 3.3 server fills `status: completed` and validates with it; a 3.2.x server neither requires nor emits it (the typed model's default is not sent); convert_payload supplies it going up and drops it, recorded as a loss, going down. Nothing is stripped for any other tool or release. Other adoption work: the reporting-subscription preview patch module now only widens the extensible reporting-dimension vocabulary, since every field it added is generated; the comply_test_controller `reporting_subscription_probe` scenario is wired (store method and parameter validation); the error-code count, the replayed default, the governance response fixtures and the adoption tests follow the bundle. BREAKING CHANGE: the SDK no longer advertises or accepts AdCP 3.3-beta.2. get_supported_adcp_versions() is ('3.0', '3.1', '3.2', '3.3-beta.3', '3.2-rc.7'); an adcp_version pin of "3.3-beta.2" / "3.3.0-beta.2" raises ConfigurationError, and a peer that advertises only 3.3-beta.2 among the 3.3 line is negotiated like any other unserved prerelease (down to 3.2). Re-pin to 3.3-beta.3 or omit the pin. A response's `task_id` is the TaskId scalar and `message` is TaskMessage; `replayed` may be false and defaults to False; governance responses no longer accept `status` as a decision (use `verdict` / `outcome_state`). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Ladon cannot review this PR until merge conflicts are resolved. |
|
Reproduced the protocol repo's Generate Python SDK job (
One difference from the real job: it uses the PR bundle built from a protocol PR head, not the published tarball, and checks out 🤖 Generated with Claude Code |
|
Closing as superseded. While this branch was open, #1754 / #1755 / #1756 landed the same adoption on
Not carried over, on purpose: The local reproduction of the protocol repo's "Generate Python SDK" job in the comment above was run on this branch; I will repeat it against 🤖 Generated with Claude Code |
Summary
Adopts the signed AdCP
3.3.0-beta.3bundle onnext(the pre-release line; RELEASING.md routes draft-spec work there, and the protocol repo's "Generate Python SDK" job already checks outnext).schemas/releases/3.3.0-beta.3.jsonpins sha256ba61919ca0c9d67874604fbbca8945c133eaceed65da1ac962f78d94d7879f00. I verified the.sha256sidecar and rancosign verify-blobagainst identityrelease.yml@refs/heads/main. Source commitd5f8de38is read from the Fulcio certificate. The tagv3.3.0-beta.3points at the Version Packages commita6106149, and the signed workflow ran on the docs commit after it; the same split as noted in the test comment.pyproject.tomlpackage data andMANIFEST.innow name3.3.0-beta.3(_schemas,_compliance,schemas/cache) and prune beta.2 from distributions.ProtocolEnvelope(status,task_id,timestamp,adcp_version, ...). Two real generator problems surfaced against the real layout, both fixed generically, not per-schema (details below). The task-message lattice residue pins are now empty.uses_task_status_envelope(tool, version)reads the served release's own response schema for whether it composesprotocol-envelope. 3.3 requires and emitsstatusonlist_products/decline_proposals; 3.2.x neither requires nor emits it (the typed model'scompleteddefault is not sent);convert_payloadsupplies it going up and drops it, recorded as a loss, going down. No other tool or release is touched.Generator fixes
restore_response_variant_aliasesre-emits eight response modules from raw schema JSON and recognised a submitted arm only by a localstatus: const submitted. Under #8547 that const and the requiredtask_idlive incore/task-submitted.json, soCreateMediaBuyResponse3and seven siblings silently lostTaskSubmitted, the const and the required id. The emitter now recognises an arm that composestask-submitted. (Rawdatamodel-code-generatoroutput was already correct, so this one is in the post-generation pass.)comply_test_controllertask_id,maxLength: 128besidecore/task-id.json) lost its bound. A small prep pass merges a scalar's own bound into the plain scalar its loneallOf$refnames; two schemas are affected today.Behavior notes for review
BREAKING CHANGEandMIGRATION_v9_to_v10.md.TaskId/TaskMessagescalars on responses: adopters constructTaskId("task_1")(domain pathadcp.types.domains.core.task_id), same convention asPropertyTag.status="approved"/"accepted"and only validated because the model allowed extras;statusis now the typed task status, so those tests useverdict/outcome_state.reporting_subscription_probecontroller scenario (store method + param validation)._reporting_subscription_preview.pynow only widens the extensible reporting-dimension vocabulary; every field it added is generated.blackpre-commit hook (SKIP=black). It pins 24.10 and reformats unrelated lines that the repo's committed style (newer black) disagrees with; CI runs ruff, not black. ruff, mypy, bandit and the other hooks ran.Test plan
pytest tests: 20,800 passed, 0 failed, 2,829 skipped, 1 xfailedmake typecheck-all(mypy src,mypy --strictadopter fixtures, pyright, type-ignore contract)make lint,make validate-generated(regeneration equality)tests/test_response_status_gating.py(26 tests), generator-safety and submitted-arm contract testsFixes #1560. Fixes #1678. Fixes #1680.
🤖 Generated with Claude Code