Repository navigation
feat(training-agent): serve the AdCP 3.3 beta as an opt-in preview (#8181) - #8689
Merged
Merged
Conversation
…8181) The hosted training agent serves the published 3.3.0-beta.3 bundle to callers that pin "3.3-beta.3" exactly, so the experimental 3.3 surfaces it implements (account requests, grants and the sandbox clock, principal-level reporting subscriptions) can be exercised against it. - The preview is listed in adcp.supported_versions on every tenant route and the v5 /mcp route. Only an exact pin is served it: unpinned, major-only and release-pinned callers (including "3.3" and later) and other 3.3 prereleases negotiate exactly as before. - Preview requests go to their own SDK registry, configured with the preview as its ceiling. Stable requests stay on a registry configured as if the preview did not exist, because the SDK shapes every response down from its ceiling. A shared ceiling turned a 3.0 check_governance status: "approved" into "completed". - Preview responses validate against the committed, immutable dist/schemas/3.3.0-beta.3 bundle, registered on first use. main's schemas match beta.3 structurally, and @adcp/sdk 17.0.0-beta.11 and later negotiate exactly "3.3-beta.3". Custom sales tools echo the preview. - TRAINING_AGENT_DISABLE_ADCP_PREVIEW=1 turns the preview off at the next restart; the agent then negotiates exactly as before. - Candidate mode (ADCP_STORYBOARD_CANDIDATE_VERSION_MODE) replaces the preview and keeps its single-registry behavior. - Docs: the 3.3 beta program page explains how to pin the preview, and the quickstart points to it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Ladon verdict: Approve
Approve — opt-in 3.3-beta.3 hosted preview added to the public test agent, served only to an exact adcp_version/_meta.adcp_version pin via a separate preview registry; stable callers untouched.
Checked:
- No
static/schemas/source/**change → no spec drift, no oneOf regression. - No existing
dist/**artifact mutated — committeddist/schemas/3.3.0-beta.3/index.jsonis read-only; immutability preserved. - Changeset present (patch), additive/exact-pin-only, not Breaking-class —
highestSupportedReleasefilters the preview (task-handlers.ts:371) and stable routes exclude the pin (types.ts:865), so unpinned/major-only callers never upgrade onto it. - Routing switches to previewHolder only on
requestPinsPreview(router.ts:548); kill switch collapses to pre-preview behavior, test-covered. - Operability:
ensurePreviewSchemaBundle(schema-compat.ts:331) lazy/memoized/no external I/O; rejection-caching matches existing idiom.
high_risk is true only because docs/reference/3-3-beta.mdx was modified; no medium-or-higher finding on that file, so the modification is presumed safe (no escalation on the flag alone). No critical/high/medium findings. gated_paths=false. No no-auto-approve team match. Prior decision: none. Falls through to row 9 → approve.
This was referenced Nov 2, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
First slice of #8181. The hosted reference training agent now serves the AdCP 3.3 beta as an opt-in preview to callers that pin it exactly, so the experimental 3.3 surfaces it already implements can be exercised against
test-agent.adcontextprotocol.org. Hold policy,extend_holdand response collections are still open in #8181.Which preview, and why
It serves
3.3-beta.3, the wire value of the published3.3.0-beta.3bundle.static/schemas/sourceis structurally identical tov3.3.0-beta.3. Only twodescriptionstrings changed since the tag, so what the agent emits matches what was published.dist/schemas/3.3.0-beta.3. That bundle is registered with the SDK on first preview use, because the pinned@adcp/sdk17.0.0-beta.8 packages3.3.0-beta.1, which differs from beta.3 in 616 schema files.@adcp/sdk17.0.0-beta.11 and later bundle beta.3 and negotiate exactly3.3-beta.3. Checked end to end: a beta.12 buyer selects the preview, callsrequest_accountand readsauthorization.authorized_at. A 3.2.7 buyer stays on 3.2.Negotiation by caller type
adcp_version: "3.3-beta.3""3.2","3.1","3.0", prerelease pins the agent already listed"3.3","3.4"(release pins above 3.2)"3.3-beta.1","3.3-beta.4")adcp_major_versiononly/mcp, 3.2 on tenant routes)Capability discovery lists
"3.3-beta.3"inadcp.supported_versionson every tenant route and on/mcp. Per versioning.mdx, a buyer reads the list and then pins.Design: a separate registry for the preview
The SDK shapes every response down from its configured ceiling (
downgradeResponse(fromVersion: adcpVersion, ...)). A first version raised the shared ceiling to the preview (as candidate mode does). That projected every stable response through the 3.3 schema: a 3.0check_governancestatus: "approved"came back as"completed".Preview requests now go to their own registry, whose ceiling is the preview. Exact pins on
tools/callarguments, or ontools/listparams or_meta(as@adcp/sdksends it), are routed there. Everything else stays on the stable registry, configured as on main. The preview registry is built on first use; production prewarms it after the stable registry is up.tools/list, and a media-buy flow at five pins on/sales/mcpand/mcp) matches main byte for byte, except the addedsupported_versionsentry. With the kill switch, it matches main exactly.Experimental 3.3 surfaces at the preview pin (sales)
account.requests):request_account, andaccount_requestsonlist_accounts.authorization.authorized_at/regranted_atandrevisionon accounts.media_buy.reporting_subscriptions).reporting_subscription_probesandbox clock, andsales-fixed-rate.request_accountis registered in the preview registry only, so a stable caller still gets "Tool request_account not found", as today.list_accounts,request_account,get_principal, ...) now echoadcp_versionwhen served at the preview. Stable responses are unchanged.Production safety
TRAINING_AGENT_DISABLE_ADCP_PREVIEW=1(ortrue). It's read at startup, so it takes effect on the next restart (for examplefly secrets set, no deploy). The process then negotiates exactly as main.resolveAccountis reference-aware: provisioned natural keys resolve, an unprovisioned natural key on a discovery task getsACCOUNT_NOT_FOUND, andaccount_idreferences keep the sandbox's synthetic-account posture. Tested at both pins.verify-training-agent-runtime-assetsnow also checks that the image carriesdist/schemas/3.3.0-beta.3.Candidate mode
ADCP_STORYBOARD_CANDIDATE_VERSION_MODE=1keeps its single-registry behavior. The candidate replaces the hosted preview, and the kill switch doesn't apply to it.Tests
The new tests fail on main.
server/tests/unit/training-agent-preview-version.test.ts:3.3-beta.1;tools/list,request_account,list_accounts, controller scenarios);server/tests/unit/training-agent-preview-kill-switch.test.ts: with the switch set, nothing advertises, serves or registers the preview.served-release-shape.test.ts(fix(training-agent): withhold 3.3 fields from callers pinned below 3.3 #8496) now drives every route's flow at the preview too. Every response must echo3.3-beta.3and validate against the published beta.3 bundle.Verification
npm run typecheck,npm run test:unit,npm run test:schemas: pass.npm run test:server-unit -- --shard=N/3:training-agent-creative33-buyer.test.ts(fixture video 404), which fails identically on main's sources.idempotency-cold-bootneeds Postgres, which wasn't available locally.property_list_reference_resolutionand other step failures are the same ones main has.npm run test:external-smokeagainst the deployed agent passes. This is read-only; the deployed agent changes only after deploy.3.3-beta.3. Identical with the kill switch set.@adcp/sdk17.0.0-beta.12 buyer pinned to3.3.0-beta.3selects the preview against the local agent. A 3.2.7 buyer stays on 3.2.Upstream
adcontextprotocol/adcp-client#3597 covers three SDK points:
supported_versionsthat include its own beta.Docs: the 3.3 beta program page gains "Try the preview on the public test agent". It also corrects which SDK versions bundle beta.3, and the quickstart points to it. A patch changeset covers the protocol-scoped docs page.
🤖 Generated with Claude Code