Repository navigation
Version Packages (beta) - #8801
aao-release-bot[bot] wants to merge 1 commit into
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
b7fed8b to
3737b94
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
3737b94 to
74a2802
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
74a2802 to
9329204
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
9329204 to
ff9a8a8
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
ff9a8a8 to
12660a9
Compare
… snapshots from the Fly image (#8814) The 3.3.0-beta.6 Version Packages PR (#8801) fails both production Docker builds: /app measures 7,524 MiB against the 7,424 MiB budget. The growth is the release itself. Its schema bundle is 144 MiB, and every file carries a versioned $id, so it cannot be hard-linked to beta.5. Compliance adds 10 MiB and the archive 27 MiB. Main was already within about 1 MiB of the budget locally, so the next release had nowhere to go. Two runtime retention fixes, with the budget unchanged: - Protocol tarballs were 934 MiB of the image. #8752 offloaded CDN-verified archives only outside the required schema closure, but archive bodies have no runtime reader besides the /protocol download route, which already redirects offloaded archives to the R2 CDN. Offload every versioned archive that R2 discovery lists and whose bytes match. A required release's archive that R2 does not list yet, such as the release a Version Packages build is cutting, stays local; any other missing archive still fails the build. latest.tgz, sidecars and the discovery inventory stay local. - update-release-docs-nav only ever added dist/docs allowlist rules, so superseded snapshots (3.1.31, 3.3.0-beta.3, 3.3.0-beta.4) were still copied into the image. Regenerate the allowlist from docs.json on every release and add a test that fails when the committed .dockerignore drifts from navigation. Released artifacts in Git and on the CDN are unchanged. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
12660a9 to
fa0f9a2
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
fa0f9a2 to
2f0d61f
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
2f0d61f to
e8c5e18
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
c2d3b00 to
87ee108
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
87ee108 to
14a37d3
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
14a37d3 to
bd6d45b
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
bd6d45b to
cca34b7
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
cca34b7 to
30effde
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
30effde to
f785ebc
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
f785ebc to
cfab0d1
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
cfab0d1 to
edd6cbc
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
edd6cbc to
e28379d
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
e28379d to
358bd16
Compare
|
HOLD: generated release branch requires human reconciliation/review. Automation is preparing a leased update. The PR must remain Draft. |
358bd16 to
75528d4
Compare
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
mainis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmain.Releases
adcontextprotocol@3.3.0-beta.6
Minor Changes
b7907ee: An origin-only
authorized_agents[].urlinadagents.jsonnow authorizes the agent at that origin, whatever its path (adcp#8862). An entry whose canonical form has the root path and no query, such ashttps://agent.example.com, matches any agent URL with the same canonical origin, includinghttps://agent.example.com/mcp. An entry with a path still matches only that canonical URL, so path-mounted agents on a shared host stay distinct. This alignsadagents.jsonwith the accepted DR-0023 (an agent's identity is its origin, one agent per origin), under whichauthorized_agents[].urlalready matched a Web Bot Auth signer by canonical origin. Matching only widens: no entry that authorized an agent under 3.2 stops authorizing it. Validators, TMP providers and registries that checkauthorized_agents[].urlmust apply the origin-only rule. Updated:docs/reference/url-canonicalization.mdx, the Agent URL matching section ofdocs/governance/property/adagents.mdx, the TMP sync-time validation, theauthorized-agent-base.jsonurldescription, both 3.3 migration guides, and R0 inspecs/agent-identity-3-3.md.7dd93fe: Move the experimental
available_installment_statuses(media_buy.installment_lifecycle, feat(schema): installment lifecycle and proof of publication on by_installment rows #8116) fromcore/reporting-capabilities.jsontocore/canonical-reporting-capabilities.json(adcp#8501). The definition,x-status: experimentalandx-added-in: 3.3.0are unchanged.core/reporting-capabilities.jsonis used only by the deprecatedget_productsproduct, and 3.3 adds no field that exists only on a deprecated task. The canonical product's reporting capabilities, returned bylist_products,request_proposalsandrefine_proposals, already carrysupports_installment_breakdown, and the opened schema (DR-0036) now takes the status list beside it.This changes 3.3.0-beta.0 through beta.5. The betas are immutable. A seller built from one declares
available_installment_statuseson the canonical product'sreporting_capabilitiesand stops sending it on aget_productsproduct. The installment lifecycle docs and experimental status page say where it lives.49c7231: Keep
core/sla-window.jsonat its 3.2.8 shape and move business time onto the creative review SLA (adcp#8501, entries 11 and 12).sla-windowstays closed with the commercial terms until 4.0 (DR-0036), and 3.3.0-beta.1 addedclockandbusiness_calendar_idto it, so a strict 3.2 validator rejected a 3.3 SLA. The signed terms usesla-windowthroughchange_terms[].processing_sla, and 3.2.8 says sellers include weekends and non-working periods in the maximum, so the signed SLA stays elapsed time.clockandbusiness_calendar_idnow live oncore/creative-review-sla.json.creative_policy.review_slakeeps business time:clockdefaults toelapsed,clock: "business"requires abusiness_calendar_idthat resolves toget_adcp_capabilities.business_calendars[], and the calendar and snapshot rules are unchanged. The schema no longer composessla-window. It definesresponse_maxandcompletion_maxitself, keepscompletion_maxrequired, and is open.Every other SLA is elapsed time, as in 3.2. An action's
slaonallowed_actions[]andavailable_actions[], a change term'sprocessing_sla, andcore/escalation-sla.jsonrejectclockandbusiness_calendar_id.escalation-slaloses theclock: "elapsed"it accepted in the betas.This changes 3.3.0-beta.1 through beta.5. The betas are immutable. A seller or SDK built from one stops sending
clockandbusiness_calendar_idanywhere exceptcreative_policy.review_slaand thereview_slaon a creative action. The 3.3 release notes, What's new, the 3.2 to 3.3 migration guide, and the service commitments page are updated.db87715: Add the optional creative.supports_registry_policy_enforcement capability and
gate the creative/policy_backed_rejections storyboard on explicit support, so
sellers that do not publish registry policies in enforced_policies report that
coverage as not applicable instead of failing it. A creative library alone does
not imply support, and a seller that publishes a policy must still enforce it.
The reference seller advertises the flag on the 3.3 contract.
3cf5f53:
image_carouselgains an optionalcard_image_sizesparameter (adcp#8911): a list of accepted logical{ width, height }pairs for card images, the same shape asnative_in_feed'smain_image_sizes. Each image card'smediamust match one listed pair exactly; a larger image at the same ratio does not match. When thecardsslot declarespixel_ratios, the intrinsic size is the matched pair times the selected ratio. All card images in one creative match pairs of the same aspect ratio. The field does not constrain video card media. Whencard_aspect_ratiois also declared, every listed pair must have that ratio within 1%; a declaration where they disagree is invalid. Additive and optional: existing declarations are unchanged, and a seller that omits the field leaves card pixel size unconstrained beyondcard_aspect_ratio.2dc672e: Open the schemas that were meant to be open (working-group decision of 2026-11-09, DR-0036). Closing a schema only breaks validators that hard-code it, so opening one is not a protocol break.
additionalPropertiesgoes fromfalsetotrueat 747 of the 859 closed locations in the 3.3 source. Nothing else in those schemas changes, and every payload that was valid stays valid. This includes the capability blocks and containers that fix(schemas): open the capability blocks and containers 3.3 extends, against DR-0019 (#8501) #8772 opened (daypart windows, the targeting overlay requirement and support containers, and the spot and canonical reporting capabilities), folded in here with thanks to Konstantin Mirin. Thesync_creativesassignoperation opens too. Itsoperationconst keeps the branches apart, so it doesn't need fix(schemas): open the capability blocks and containers 3.3 extends, against DR-0019 (#8501) #8772's named exception. From fix(schemas): open the capability blocks and containers 3.3 extends, against DR-0019 (#8501) #8772, booleandemographicson the overlay schemas is also deprecated as the 3.2 shorthand for{ "age": true }. Senders MUST send the object form, receivers MUST accepttrue, and only support withgender: truesatisfies agenderrequirement. 4.0 removes the boolean form.112 locations stay closed: most for a structural reason, and the commercial terms as a hold until 4.0.
oneOfforms told apart by key presence:a2ui/bound-value.jsonand thebrand.jsondocument forms.commercial-terms,product-purchase,change-term,change-term-constraints,sla-window,bidding-policy, and the canonical measurement terms, performance standard, reporting commitment, pricing option and budget allocation.qualifierobjects and forecast dimensions.canonical-installment-refand the JWS response-payload envelope.catalog-item-reference-not-found-error, the per-agentPERMISSION_DENIEDandBILLING_NOT_PERMITTED_FOR_AGENTdetails, theget_principalrecognized, unconfigured and failed results and thesync_principalfailed result, and the error objects of theget_reporting_statuslookup_unavailablefailure.proposal-budget-constraint, the strict peer ofbudget-range, is held until 4.0 with the commercial terms.trust.json, on the signature-verification fetch path, and the declarativeplacement-presentationframe.patternProperties).Where closure also rejected a specific field the protocol defines elsewhere, the opened schema names it in
not: { anyOf: [{ required: [...] }] }, as fix(schemas): reopen the 3.2 proposal-flow schemas closed against DR-0019 #8531 did forcanonical-product. For example,trackersandlanding_page_urlstayassign-only, hold entries carry noexpires_at, and delivery-ready webhooks carry no access token. Each node with a named rejection says in its description what it rejects and why, since generated types can't expressnot.The additive-minor check now flags an added property only where the schema stays closed. It still fails on removals, renames, retypes, removed enum values, tightened bounds, new required names, and closing an open schema. The closed-anywhere-in-the-major rule and the reopening corrections are gone, and the baseline keeps 4 entries, each with its resolution.
Generated types change. A generator that reads
additionalPropertiesnow treats the opened objects as open: json-schema-to-typescript gives them an index signature, and Pydantic models stop forbidding extra fields. A strict validator built from the 3.2 schemas still rejects 3.3 fields on these objects, so send a 3.3 field only to a 3.3 peer. The next 3.2.x patch (fix(schemas): open schemas that were closed by accident (3.2.x backport) #8864) opens the same locations that 3.2 has, all but one: it keepsget-reporting-status-response.json#/oneOf/1/oneOf/0closed, as 3.2 published it.3bd51b8: State that a seller accepts a creative that conforms to the format option it targets (adcp#8918).
sync_creativesgains a "Format conformance" rule. A seller MUST NOT refuse, with a conformance code (CREATIVE_SIZE_MISMATCH,CREATIVE_VALUE_NOT_ALLOWED,CREATIVE_VALIDATION_FAILED_GENERIC, orVALIDATION_ERROR/INVALID_REQUESTagainst the assets), a creative on the grounds of a declared parameter that the creative satisfies, and MUST NOT enforce a narrower value than the one declared.cta_values, thectaslot takes free text andCREATIVE_VALUE_NOT_ALLOWEDdoes not apply.technical_requirements_complete: truethe seller holds no undeclared limit either, so a creative that conforms to every parameter is accepted. Without that assertion the omitted constraint stays undeclared, as before.CREATIVE_REJECTEDfor content, brand-safety and accessibility review,POLICY_VIOLATIONfor seller advertising policy, and validation codes for corrupt or unfetchable assets.CREATIVE_VALUE_NOT_ALLOWEDdescription and thecta_valuesdescriptions on thenative_in_feedandimagecanonicals now say the same. The canonical-formats and creative-formats docs carry the rule beside technical completeness.media_buy_seller/declared_format_option_acceptance(3.3, required bymedia_buy_seller, gated oncreative.has_creative_library). It seeds anative_in_feedoption that declares a 336x280main_image, a 90-character title limit, nocta_valuesandtechnical_requirements_complete: true, then expectssync_creativesto accept a creative built exactly to it, with a free-text CTA and no icon.This tightens a seller obligation in the 3.3 beta. A seller that refused declared sizes or enforced an undeclared CTA list was already contradicting its own declaration; it now fails the new scenario.
63d996b: Require experimental TMP Context Match caches in AdCP 3.3 to partition by
trusted evaluation namespace as well as request hash, re-authorize warm hits,
and bypass caching when the required context cannot be established. Keep
provider model-deployment changes under the existing cache_ttl policy, state
the stale-entry window, and recommend lowering TTL before such deployments.
The 3.1.22 emergency privacy and request-partitioning corrections remain in
force; no published 3.1 or 3.2 release artifact changes.
7ce107a: Add
3gp,mpeg, andm4vto thecontainersenum of the video asset requirements (core/requirements/video-asset-requirements.json), so a seller that accepts those files can declare them. Three additive enum values: no existing value changes, and clients already tolerate unknown enum values. Proposed for 3.3 by consent (adcp#8107).3deb1cf: Keep 3.3 additions off the deprecated
create_media_buyandupdate_media_buytasks (adcp#8501). Both are compatibility tasks that buyers are moving off, so 3.3 adds nothing to them: a field that exists only there is one more gap for every migration. Six fields that the 3.3 betas added to them are removed from them. Where a live task (buy_products,accept_proposal,control_media_buy,get_media_buys,sync_creativesassignment_operations) has the same field, it stays there unchanged.This is a beta-to-beta change. No stable release carried these fields. The betas are immutable, so a buyer, seller, or SDK built from a beta bundle has them to remove. The schemas are open, so a seller on the later schema ignores them like any unknown field rather than rejecting the request.
predecessor_media_buy_idandlineage_reason(experimentalmedia_buy.lineage, feat(media-buy): forward-only lineage for renewal and replacement buys #8038, from3.3.0-beta.0). Removed from thecreate_media_buyrequest, with their paireddependencies. They stay on thebuy_productsandaccept_proposalrequests, onget_media_buysreadback and itspredecessor_media_buy_idfilter, and oncore/media-buy.json.artifact_webhook.signing_profile(experimental, docs(security): add the Web Bot Auth request-signing profile #7894, from3.3.0-beta.0). Removed from thecreate_media_buyrequest, with its rule against sending it next toauthentication. No live task hasartifact_webhook, so it lives nowhere: anartifact_webhookwithoutauthenticationis signed withadcp/webhook-signing/v1.signing_profilestays onpush_notification_config,reporting_webhook, and the notification configurations, andwebhook_signing.profilesno longer listsartifact_webhook.start_requires_all_creatives_approved(feat(media-buy): define creative approval startup policy #8485, from3.3.0-beta.1). Removed frommedia-buy/package-request.json(create_media_buypackages andupdate_media_buynew_packages),media-buy/package-update.json, andcore/package.json(the package readback in their responses). It stays oncontrol_media_buypackage controls (media-buy/package-control.json),get_media_buyspackage readback, theupdate_creative_start_policyavailable action, andmedia_buy.features.creative_start_policy, whose description now names onlycontrol_media_buy.target_audiences[](experimentalmedia_buy.audience_evidence_targets, feat(media-buy): experimental target_audiences in audience_evidence_requirements #8215, from3.3.0-beta.1). Removed frommedia-buy/package-request.json, with itsdependenciesentry. With theget_productsfilters copy withdrawn in the same release, no 3.3 wire form remains: sellers stop listing the feature id, andcore/audience-evidence-target.jsonandenums/audience-evidence-relationship.jsonare removed, along with theirindex.jsonregistrations andtests/audience-evidence-targets.test.cjs. The stable inlinerelationshipenums on audience evidence are unchanged. The design and its matching rules are kept under the 4.0 checkpurchase_target_audiences_required_in_4_0, whose detection no longer depends on the retired feature id.trackersandlanding_page_urlon package creative assignments (feat(creative): add assignment-scoped measurement trackers #8220, feat(creative): support assignment landing page overrides #8180, from3.3.0-beta.0). Removed fromcore/creative-assignment.json, which onlycreate_media_buyandupdate_media_buyrequests and their package readback use. They stay onsync_creativesassignment_operationsassign, read back onlist_creativesandget_media_buys, which defines its own assignment rows.creative.supports_assignment_trackersandcreative.supports_assignment_landing_pagenow name onlysync_creatives.billing_measurement.counting_mechanisms[](experimentalmedia_buy.measurement_provenance, feat(schema): experimental collection-mechanism vocabulary for counting_mechanisms and measurement_provenance #7940, from3.3.0-beta.2). Removed fromcore/measurement-terms.json, which onlyget_productsproducts andcreate_media_buyandupdate_media_buypackages use, so this covers all three tasks. It lives nowhere in 3.3; the canonical commercial terms, held closed until 4.0, gain it then (canonical_counting_mechanisms_required_in_4_0, whose design notes now record it).vendor_metric_provenance[]andenums/collection-mechanism.jsonstay.expected_confirmation_atstays on everysubmittedresponse,create_media_buyincluded. The training agent stops echoing the start gate oncreate_media_buyandupdate_media_buypackages. It ignores assignmenttrackersandlanding_page_urlon their creative assignments and does not echo assign-set ones in their responses.get_media_buysstill reads back whatsync_creativesassignset. The 3.3 release notes, What's new, the 3.2 to 3.3 migration guide, and the 3.3 beta page list the removals under "Withdrawn from the deprecated tasks".18da1a4: Withdraw the 3.3 additions to the deprecated
get_productstask and the deprecatedsync_creativesassignments[]row, and move execution readiness tolist_products(adcp#8501, entries 20–25 and theget_productsrows of the deprecated-task table). 3.3 adds no field that exists only on a deprecated task. Where a live task lacks the capability, it moves there or waits for 4.0.All of these shipped in 3.3 betas and are removed after
3.3.0-beta.5. This is a beta-to-beta change, not a change to a stable release. The betas are immutable, so a seller or SDK built from a beta bundle has the surfaces below to remove.Exact-package forecasts on
get_products(feat(media-buy): forecast exact packages before booking #8468, beta.1 to beta.5). Removed:refine[].package,media-buy/package-forecast-input.json, the request rule tyingpackagetobuying_mode: "refine"and to non-finalize entries, andrefinement_applied[]result_product_id,resolved_start_timeandresolved_end_timewith theirappliedrule.refinement_appliedis optional again for every request. The forecast has no 3.3 home; where it belongs on the compact lifecycle is an open working-group question.get_productsfilters.target_audiences(feat(media-buy): experimental target_audiences in audience_evidence_requirements #8215, experimental, beta.1 to beta.5). Removed fromcore/product-filters.json, with itsdependenciesentry. It is planned forlist_productsoffer_filtersandbuy_productspurchases in 4.0 (purchase_target_audiences_required_in_4_0).Collection cards on
get_products(feat(schema): experimental collection objects in product and proposal responses #8141, experimental, beta.0 to beta.5). Removed: theinclude_collectionsrequest flag, the response-levelcollectionsarray and itsdependenciesentry, thecollectionsbranch ofget-products-rejected.json, andinclude_collectionsin thewholesale_feed_versionscope.list_products,request_proposalsandrefine_proposalskeep both.Execution readiness (feat(schema): add experimental per-account execution readiness #7934, experimental, beta.1 to beta.5) moves to
list_products.include_execution_readinessleaves theget_productsrequest and theexecution_readinessmap leaves its response. Both are added to the openlist_productsrequest and response, with the same shape and rules; the map is versioned independently offeed_versionand is absent on anunchangedoutcome. Themedia_buy.execution_readinessstoryboard now driveslist_products.binding_fieldnow names thebuy_productspaths,purchases[].optimization_goals[].event_sources[].event_source_idandpurchases[].catalog_ids[], instead of the legacycreate_media_buypackages[]paths, andexecution_requirementsdocuments the purchase binding beside the legacy one.price_adjustmentsonget_productspricing options (feat(schema): selection-dependent price_adjustments on fixed-price pricing options #7955, experimental, beta.1 to beta.5). Removed from thecpm,vcpm,cpc,cpcv,cpv,cppandflat_rateoptions with theirdependencies, along withpricing-options/price-adjustments.json,error-details/price-adjustments-mismatch.json, the product rule that a placement-selection row requiresoverlay_support.placement_selection, theprice_adjustments_resolutionverifier constraint onproduct-purchase.json, and theprice-adjustmentstest vectors. A seller stops listingmedia_buy.price_adjustments. The design is kept for the canonical pricing option in 4.0 (canonical_price_adjustments_required_in_4_0).sync_creativesassignments[]landing_page_urlandtrackers(feat(creative): support assignment landing page overrides #8180, feat(creative): add assignment-scoped measurement trackers #8220, beta.0 to beta.5). Removed from the deprecated row, which now rejects them by name. Theassignment_operationsassignoperation keeps both.The consumed changesets for these PRs stay in
.changeset/pre/as history. The 3.3 release notes, What's new, the 3.2 to 3.3 migration guide, and the 3.3 beta page say what to remove under "Withdrawn from the deprecated tasks".Patch Changes
b195f57: Compliance storyboards now check that sellers never author
operator_fee(adcp#8367).media_buy_seller/product_filter_behaviorchecksget_productspricing_options[].eligible_adjustments[]andpricing_options[].price_breakdown.adjustments[].kind.media_buy_seller/total_budget_redistributioncheckscreate_media_buypackages[].price_breakdown.adjustments[].kindandupdate_media_buyaffected_packages[].price_breakdown.adjustments[].kind. The checks pass when a seller returns no breakdown oreligible_adjustments. They are advisory until runner capability version 17.0.0 and then become required.total_budget_redistributionnow declaresrequires: field_excludes_runner, which the storyboard schema mandates forfield_excludes.c951012: Docs: DR-0036 records the decision of the 2026-11-09 working-group session. Schemas are open within a major. A schema is closed only for a structural reason:
oneOfbranch disjointness, a closed key set or vocabulary, or a signed or binding payload. Opening a 3.x schema that was closed without such a reason is a correction, so 3.3 opens those schemas and a 3.2.x patch does too. Once opened, a schema takes additions in later minors. The versioning page no longer says closed schemas stay closed until the next major. DR-0019 is superseded. DR-0032 and DR-0033, proposed in docs(governance): DR-0032 and DR-0033, revised against DR-0036 #8519 and never ratified, are recorded as withdrawn in favor of the versioning rules. No schema changes.Docs: a deprecation needs no minimum notice period before its removal in the next major. A deprecated feature is never removed within the major that deprecated it. The next major may remove it with no minimum notice, because removals are what a major is for. The previous major's support window of at least 12 months after the successor's GA protects implementers. The 6-month deprecation notice is gone from the versioning page, the cadence table, the specification lifecycle, and the pages that cited it. Experimental surfaces keep their 6-week notice within a major. Brian O'Kelley ruled this on 2026-11-10, and it is open for working-group comment on RFC RFC: AdCP 4.0 — a fast, cleanup-first major (scope, principles, schedule) #8756 until 2026-12-04.
5541479: Stop the
dependency_impairmentanddependency_impairment_cardinalitystoryboards from failing sellers whose selected format option is not an image format (adcp#8770). Both storyboards send a fixed 300x250 image creative against the first product's first format option. When that option is adisplay_tag,video_vastor other non-image kind, the creative phases are now skipped instead of failing a seller that correctly refuses an image it does not accept. Image sellers run the storyboards unchanged.3bb0710: Build legacy inline creative manifests from the captured format's exact required slots, preserving the legacy wire and preflighting both manifests before any purchase.
eede511: Loosen seventeen over-specified URL patterns to
^https://(adcp#8398). Nine attestation URLs (core/attestation-capabilities.json,attestation-evaluation.json,attestation-issuer.json,attestation-reference.json,attestation-subject.json,product-audience-evidence-requirements.json) dropped a pattern that refused userinfo and fragments. Eight reporting URIs (core/reporting-canonical-content-digest.json,reporting-delivery-capabilities.json,reporting-delivery-offering.json,reporting-reliability-statistics.json,reporting-revision.json) dropped a lexical private-address denylist that could not see DNS or redirects. Every value the old patterns accepted still validates. The fetch-time SSRF rules (the attestation fetch contract andsafe_schema_fetch) are unchanged, and the descriptions no longer claim the schema enforces them. The origin-shaped patterns,governance/accepted-governance-agents.json, andreference-renderer.source_repositoryare unchanged.8f159e4: Gate
product_signal_targetingandcross_path_targeting_provenanceon wholesale support in bothmedia_buy.buying_modesandsignals.discovery_modes. A seller that advertises only brief discovery no longer runs them. Their negative probes now cascade-skip when product discovery fails, instead of sending an unresolved$context.product_id.9395a3e: Docs: Python
adcp10.0.0b13 is on PyPI, adopting the signed3.3.0-beta.5bundle and negotiating only3.3-beta.5. The 3.3 beta program page, the beta checkpoint table, and Choose your SDK now name it, with its install command andadcp-reporting-storage0.2.0b3 for Reliable Reporting storage.e64e858: Docs: refresh the 3.3 release notes, What's new, the 3.2 to 3.3 migration guide, and the 3.3 beta program page through
3.3.0-beta.5. Adds beta.4 and beta.5 to the checkpoint and wire-pin tables, with curated sections. Beta.4 covers the reporting-subscription coverage fixes and probe reset,replacethat transfers assignment settings, tracker-slot limits,BUDGET_TOO_LOWdetails,creative.supports_provenance,opportunityon explicit-package buys, undefined-property reporting, and the new storyboards. Beta.5 covers match keys, the stablesales-fixed-ratespecialism, and the bundled Public Suffix List. The SDK guidance now records that@adcp/sdk17.0.0-beta.18 and later and Pythonadcp10.0.0b12 support beta.4, and the in-review tables reflect the 3.3.0 milestone as of 2026-11-08.e9c2162: Stop signed functional storyboard requests from exhausting the per-keyid cap that the signed-requests
rate_abusevector grades (adcp#8877). Functional dispatch intest-kits/signed-requests-runner.yamlsigned withtest-ed25519-2026, the same keyid vector 020-rate-abuse caps at 100 for the test counterparty, so a full compliance run could hit the cap before the signed-requests vectors started and fail them withrequest_signature_rate_abuse. Functional dispatch now signs with a dedicatedtest-functional-2026Ed25519 key that no conformance vector uses, published in the request-signingkeys.jsonand declared inrunner_signing_keys. Therate_abuseblock now states that agents MAY lower the per-keyid cap to the grading target for the vector 020 keyid (test-ed25519-2026) only, and MUST NOT apply the lowered cap to the functional-dispatch keyid. Sellers that register the runner signing keys individually rather than loading the publishedkeys.jsonmust addtest-functional-2026to their test counterparty. Sellers that configure one global per-keyid cap on their replay store (as the SDK reference stores take, e.g.maxEntriesPerKeyid: 100) must scope the lowered cap totest-ed25519-2026, for example with a keyid-aware wrapper, or functional storyboards hit the cap ontest-functional-2026instead.9db8225: Docs: the public test agent's opt-in 3.3 preview moves to
3.3-beta.4, the beta that@adcp/sdk17.0.0-beta.18 and later negotiate. The 3.3 beta program page and the quickstart name the new pin, and the page notes that3.3.0-beta.5is published but no SDK negotiates it yet. The preview now follows the beta the current SDK prerelease negotiates rather than the latest published beta. The beta tracker records that supported match keys merged in feat(media-buy): declare supported match keys for cross-publisher frequency capping #8446.4942cab: Docs: the public test agent's opt-in 3.3 preview moves to
3.3-beta.5, the beta that@adcp/sdk17.0.0-beta.21 and later negotiate. The 3.3 beta program page and the quickstart name the new pin. The SDK guidance and the beta checkpoint table record that@adcp/sdk17.0.0-beta.21 and later bundle3.3.0-beta.5, and that 17.0.0-beta.18 through 17.0.0-beta.20 bundle beta.4. Python adoption of beta.5 is in flight.fc3c5bd: Docs: state the rules for what changes between releases at the top of the versioning page. A minor only adds, a replaced field is emitted alongside its replacement until the next major, and removals and breaking changes happen in a major. A fourth rule keeps a field off a mutating request in a minor when an older seller that ignores it would commit to something different, unless the field ships behind a capability the seller declares. Removes text from that page that told SDKs what to do or described translating between versions, and corrects one sentence in the
create_media_buyreference that said new keys could join a closed schema in a minor. Wire behavior is unchanged.7ec4059: Stop the
webhook_emissionstoryboard from failing sellers whosecreate_media_buycompletes synchronously. When the primary trigger returns the media buy inline, the storyboard now checks that no task webhook arrives for it and skips the emitted-webhook phases. It still grades the webhook-signing JWKS of a synchronous seller that declareswebhook_signing.supported: true. Triggers that returnsubmitted, orworkingwithout amedia_buy_id, are still graded on signed webhook delivery. Aworkingresponse that carriesmedia_buy_idis classified as synchronous, and its completion webhook failssynchronous_trigger_silence, until the runner reads the task status (Storyboard runner: create_media_buy context extractor records media_buy_id from interim task envelopes adcp-client#3682).50fafb3: Stop
product_coverage_filtersandportfolio_routing_scopefrom failing sellers that declare only brief/refine buying modes. Theget_productscoverage phase ofproduct_coverage_filtersnow requires wholesale inmedia_buy.buying_modes, and itslist_productsphase runs independently. Inportfolio_routing_scope, the wholesale read that checks returned channels against the declared allowlist moves to its own phase, which runs only for sellers that declare wholesale, so brief-only sellers are no longer sent a wholesale request they cannot serve.