Skip to content

feat(sdk): add version-pinned server and model surfaces - #1048

Merged
bokelley merged 1 commit into
mainfrom
versioned-sdk-test-builder
Aug 19, 2026
Merged

feat(sdk): add version-pinned server and model surfaces#1048
bokelley merged 1 commit into
mainfrom
versioned-sdk-test-builder

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • add first-class AdCP version pinning to DecisioningPlatform server surfaces and keep MCP/A2A advertisement and dispatch aligned
  • add schema-derived, version-scoped typing stubs with typed nested objects, unions, required fields, local references, and runtime JSON Schema validation
  • add one in-process test builder for MCP, A2A, or both transports, including auth and topology coverage
  • expose collision-safe public response aliases and make the v3-to-v4 import codemod exact and newline-safe

Validation

  • implementation, protocol, and security expert reviews
  • uv run python -m pytest -q (6550 passed, 40 skipped, 9 deselected, 1 xfailed)
  • make lint
  • make typecheck-all
  • make validate-generated
  • full pre-commit suite

Closes #1045
Closes #1046
Closes #1047
Refs #911

@bokelley
bokelley marked this pull request as ready for review August 19, 2026 12:10

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve — additive, well-tested SDK PR with no blocking or medium findings.

Checked:

  • Semver signal: Public surface is additive only (version-pinned server surfaces, in-process MCP/A2A/both test builder, generated .pyi stubs, collision-safe migration aliases). feat: is the correct signal — no removals, renames, required→optional flips, or response-shape breaks.
  • a2a_server change: Real fix — a2a resolves the handler pin once and threads it to both discovery (get_tools_for_handler adcp_version) and unnegotiated dispatch (default_unnegotiated_adcp_version), matching MCP and staying backward-compatible for handlers without get_adcp_version.
  • High-risk flag: true, but all entries are (modified) with no medium-or-higher concerns on those files. Per arbiter rules, (modified) sensitive files with no medium finding are presumed safe — no escalation on the flag alone.
  • Type-system layering / generated-code / credentials gates: no violations surfaced.

Findings: two Low latent items only, both omitted from blocking evaluation:

  • v3_to_v4.py:517 — codemod from_match.start(1) indexing nuance
  • generate_versioned_stubs.py:490 — empty TypedDict body for non-identifier-only keys

Decision table: no critical/high (row 1 no), gated_paths false (row 2 no), no (deleted) (row 3 no), no medium data-loss/schema/infra (row 4 no), no medium on modified high-risk (row 5 no), no prior escalate (row 6 no), no team gate (row 7 no), fewer than three medium (row 8 no) → row 9 approve.

@bokelley
bokelley enabled auto-merge (squash) August 19, 2026 12:24
@bokelley
bokelley merged commit c044aba into main Aug 19, 2026
28 checks passed
@bokelley
bokelley deleted the versioned-sdk-test-builder branch August 19, 2026 12:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant