Skip to content

feat(server): separate default and maximum AdCP versions - #2854

Merged
bokelley merged 2 commits into
mainfrom
zurich-v2
Sep 7, 2026
Merged

feat(server): separate default and maximum AdCP versions#2854
bokelley merged 2 commits into
mainfrom
zurich-v2

Conversation

@bokelley

@bokelley bokelley commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Summary

  • separate the unversioned default served AdCP release from the maximum supported release
  • preserve the immutable SDK-selected release across standard, custom-tool, discovery, resolver, deferred, and task handlers
  • add an executable official-MCP compatibility-matrix lane proving unversioned 3.1 and explicit 3.2 callers can share one server

Validation

  • npm run format:check
  • npm run typecheck
  • npm run build:lib
  • node --test --test-timeout=180000 --test-force-exit test/lib/media-buy-lifecycle-compatibility.test.js (9/9)
  • focused server and adapter suites (435 tests)

Local full-suite note

The broad local batched runner exposed two VM-only harness signals: an inherited DATABASE_URL changed a CLI scaffold expectation (the file passes 11/11 with it unset), and one unrelated batch reported cancellations with zero assertion failures. GitHub Actions runs in a clean, authoritative CI environment.


Open workspace in Conductor

aao-secretariat[bot]
aao-secretariat Bot previously approved these changes Sep 7, 2026

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

Checked: PR #2854 separates a server's default served AdCP release (defaultAdcpVersion) from its supported ceiling (adcpVersion) and threads an immutable servedAdcpVersion across handler, custom-tool, DecisioningPlatform, task-handoff, and resolver contexts plus a new responseEnhancer argument.

  • Witness-preserving: unset default reproduces historical newest-advertised selection — no fabrication/re-shaping at seams.
  • Construction validation is fail-closed with three gates; immutability and handoff threading implemented correctly.
  • Minor changeset present and correctly classified for the src/lib/** surface change.

No Critical, High, or Medium findings. gated_paths is false and there is no no-auto-approve team match, so review_decision: REVIEW_REQUIRED does not gate. high_risk is false. No escalation triggers fire; falls through to row 9.

@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 — clean pass, no blocking or medium findings.

What I checked

  • Reviewer surfaced no critical/high/medium/low findings this run.
  • High-risk flag is true only via src/lib/protocols/mcp-modern.ts (modified) matching src/lib/protocols/**. Per the high-risk reading rules, a modified sensitive file with no medium-or-higher finding is presumed safe — not an escalation trigger on the flag alone.
  • The delta refines MCP discovery: _meta.adcp_version version-signaling gated to major>=3 in SingleAgentClient/mcp-modern, plus a fail-open guard in create-adcp-server so externally-registered tools stay discoverable while the primary toolAvailableForRelease gate still applies. No wire-shape fabrication/normalization (witness-not-translator preserved).
  • Changeset present (.changeset/quiet-versions-select.md), satisfying the changeset-vs-wire-impact requirement for src/lib/** edits.
  • Tests exercise the delta.

Gate checks

  • gated_paths: false → row 2 does not fire despite review_decision: REVIEW_REQUIRED.
  • No no-auto-approve team match → row 7 does not fire.
  • No (deleted) high-risk reasons → rows 3/6 do not fire.
  • Prior decision was approve, so sticky escalation (row 6) is inapplicable.

No rows 1–8 fire → row 9 → approve.

@bokelley
bokelley merged commit 5b109e7 into main Sep 7, 2026
56 of 58 checks passed
@bokelley
bokelley deleted the zurich-v2 branch September 7, 2026 02:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant