Version Packages (beta)#4920
Conversation
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
6cf65cd to
cd424e5
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
cd424e5 to
8b15336
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
8b15336 to
fabd53a
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
fabd53a to
663034e
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
663034e to
2771692
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
2771692 to
0fab5a3
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
0fab5a3 to
e2e4619
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
e2e4619 to
cc1dea7
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
cc1dea7 to
563c84d
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
563c84d to
fb7a31c
Compare
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
3d950c4 to
667cc79
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
667cc79 to
6586156
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
6586156 to
5a0340a
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
5a0340a to
c56fdd5
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
c56fdd5 to
b13c58f
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
b13c58f to
402c703
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
402c703 to
47b98e6
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
47b98e6 to
c941779
Compare
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
c941779 to
2dbe569
Compare
There was a problem hiding this comment.
Argus is not auto-reviewing this PR because it modifies the review workflow itself (.github/workflows/ai-review.yml). Running with the PR head's modified prompt/workflow is a prompt-injection vector. A human reviewer should review and merge this PR; Argus will resume on subsequent PRs once these changes land on main.
There was a problem hiding this comment.
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final gh pr review). A human reviewer should take this PR.
This is an automated message from the Argus AI review workflow.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm 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.1.0-beta.4
Minor Changes
d08dcea: Clarify durable
sync_accounts.accounts[].notification_configs[]semantics:omitted means unchanged,
[]clears the account's subscribers, and a non-emptyarray replaces the account-scoped set keyed by
subscriber_id.The account-level subscription surface remains limited to account-anchored
resource events already defined in
notification-type.json; it does not defineaccount.*lifecycle events. Account status changes remain observable throughlist_accountspolling or the one-shotsync_accounts.push_notification_configasync-result channel.
Standardize endpoint proof-of-control for active durable webhook configs,
including the challenge payload and response schemas, auth-mode binding,
paused-config behavior, retry guidance, and failure semantics.
2c5196b: spec(3.1): clarify publisher-scoped placements and product format-option selectors.
Adds public placement catalog support in
adagents.json, keeps seller-private routing fields out of public placement schemas, and introduces structured publisher-scopedplacement_refsfor creative assignment. Product placement IDs remain publisher-scoped; omittedpublisher_domainis only a legacy single-publisher fallback.Renames the beta buy-side canonical-format selector from
capability_*toformat_option_*.FormatOptionRefnow selects publisher-catalog-backed options by{scope: "publisher", publisher_domain, format_option_id}and product-local options by{scope: "product", format_option_id}in the package's target product context. Pre-GAcapability_ids/capability_idrequest fields are rejected instead of silently accepted.5015802: Add
IMPRESSION_IDuniversal macro for impression-level deduplicationA general-purpose per-impression identifier macro that buyers, measurement vendors, verification services, and TMP can use for per-impression dedup, cross-vendor reconciliation, pixel-retry detection, and (in TMP) cross-identity exposure dedup. Closes the gap where TMP context-only impressions had no impression_id available (no
{TMPX}→ no buyer-side decode-time mint).Format is implementation choice — UUID, ULID, snowflake, or any collision-resistant scheme. Three-layer minting hierarchy: (1) publisher first-party code, (2) ad-decision layer (Prebid TMP module, ad server, SSP), (3) buyer impression tracker at
{TMPX}decode (TMP-specific fallback). Each lower layer MUST defer to whatever an upstream layer already minted.Documents the Prebid TMP module pattern using the
tmp_impression_idGAM targeting key and the optional reuse ofadUnit.transactionIdwhen Prebid'senableTIDsconfig is on. No router changes; preserves TMP's identity↔context structural separation by keeping minting at the publisher/decision-layer join.1b6831e: Add product-scoped
included_signals,signal_targeting_options,signal_targeting_rules, and package-leveltargeting_overlay.signal_targeting_groupsfor explicit buy-time selection of seller-offered signals. Signals are referenced withsignal_refusingscope: "product"for product-local signal options,scope: "data_provider"withdata_provider_domainfor signals from a published adagents.json signal catalog, orscope: "signal_source"for source-native signals that are not catalog-published.included_signalsdescribes non-selectable signals already bundled into or planned into the product. Sellers can expose their wholesale signal catalog throughget_signals, omit inlinesignal_targeting_optionson wholesale products that use that feed, declare product-specific options or overrides throughProduct.signal_targeting_options, and buyers can apply selected signals oncreate_media_buywith the selected signalpricing_option_idand optional seller execution handle without overloading first-party audience fields.signal_targeting_groupsprovides the portable Boolean baseline for all signal selection: top-leveloperator: "all"with child groups usingoperator: "any"for include groups andoperator: "none"for exclusion groups. Product-scoped signal pricing is authoritative for product composition, and free or bundled signals may omitpricing_options. Updates media-buy and signals docs plus targeting-overlay echo vectors.Product signal listings share one signal-ref-plus-definition shape. Product-local signal refs require inline
nameandvalue_type; data-provider and signal-source refs can be reference-only because the authoritative definition lives at the referenced catalog or source.signal_targeting_rules.resolution_modeldistinguishes direct targeting from seller-planned resolution. Usedirect_targetingwhen selected signals are applied as package targeting predicates, andseller_plannedwhen selected signals are inputs to seller-managed planning against product-specific inventory, timing, availability, reach, or pacing constraints.This also relaxes
get_signals.signals[].data_providerandpricing_optionsso source-native, free, bundled, or caller-hidden pricing cases can omit those fields; buyers should not assume every discovered signal has a data-provider display name or standalone price.The legacy
SignalId/signal_id.sourceshape is deprecated in favor ofSignalRef. New payloads should usesignal_reffor response identity andsignal_refsfor exact lookup/refinement;signal_idandsignal_idsremain as deprecated compatibility fields for older clients. During this minor-version migration window, legacysignal_idremains accepted on signal listings, audience selectors, legacy flat signal targeting, and wholesale signal events. Legacytargeting_overlay.signal_targetingalso remains schema-valid but deprecated; new package-level selection should usetargeting_overlay.signal_targeting_groups.952787c: Add vendor_metric optimization-goal storyboard coverage (issue compliance: add vendor_metric optimization-goal storyboard coverage #4933). New storyboard exercises the 3.1 vendor_metric goal contract: positive acceptance when all preconditions are met, and negative paths for capability mismatch and reporting-coherence mismatch. Training-agent fixtures now surface vendor_metric_optimization on products.
Patch Changes
1ebc729: Add 3.0 storyboard compatibility checks for the training agent and release flow.
b23d1eb: Add 3.1 compliance storyboards for
reach_windowandviewability.viewed_secondsin delivery reporting.reach_buy_flow.yamlnow covers cumulative, period, and rollingreach_windowdelivery rows, including the requiredperiodshape for period and rolling windows. It also adds a permanent advisory for reach rows that omitreach_window, which remain schema-valid but are not safe for buyers to sum or average across reporting periods.delivery_reporting.yamlnow includes a viewability-capable vCPM video buy and verifies that simulated delivery reports surfaceviewability.viewed_secondsalongside measurable impressions, viewable rate, and the viewability standard.comply-test-controller-request.jsonand the controller docs now declare typedsimulate_deliveryparams forreach,frequency,reach_window, andviewabilityso storyboard examples have a schema-grounded controller contract.The training-agent controller now persists those simulated metrics and returns them through
get_media_buy_delivery, keeping the reference sandbox aligned with the new storyboard coverage.b45e693: media-buy: add
PROPOSAL_NOT_FOUNDcompliance coverage for unknown proposal references.The training agent now returns the canonical
PROPOSAL_NOT_FOUNDerror withcorrectablerecovery for unknownproposal_idreferences inget_productsrefine/finalize and
create_media_buy, and prevalidates proposal refinementsbefore applying finalize side effects.
7e7a451: Add compliance storyboard coverage for
refine[]finalize-exclusivity andMULTI_FINALIZE_UNSUPPORTED.New scenario
media_buy_seller/refine_finalize_exclusivitytests the three normative negative cases clarified in issue get_products refine[]: clarify mixed-action semantics when finalize is included #4107:refine[]call — rejected withINVALID_REQUEST.INVALID_REQUEST(schema-invalid input).MULTI_FINALIZE_UNSUPPORTED/INVALID_REQUEST(branch set).bf5b22a:
sync_accounts notification_configs: clarifysubscriber_idas the stable diff key and upsert semantics.The existing "declarative replace semantics" language was silent on the match key used when diffing a sent
notification_configs[]against persisted state. This left implementers to infer thatsubscriber_idis the key — which is the only coherent reading, but thenotification-config.jsonfield description said "duplicates are rejected witherrors[]" without scoping that to within-request uniqueness, creating an apparent contradiction.Normative changes (description-only; no wire format change):
notification-config.json—subscriber_id.description: clarifies that the rejection-on-duplicate rule applies to sending two entries with the samesubscriber_idwithin a singlesync_accountsrequest array. A subsequentsync_accountscall that includes an entry whosesubscriber_idalready exists in persisted state upserts (replaces) that subscriber's active config — the seller MUST NOT create a duplicate.subscriber_idis now explicitly named as the stable match key for the per-account diff.sync-accounts-request.json—notification_configs.description: adds "usingsubscriber_idas the stable match key" to the declarative-replace sentence, plus an explicit "seller MUST NOT merge the new array with persisted state — entries in persisted state whosesubscriber_iddoes not appear in the sent array are removed."docs/accounts/tasks/sync_accounts.mdx— prose section on account-level webhook subscriptions updated to reflect the same semantics.These semantics match the reference implementation in Salesagent PR Fix missing spacing in web chat after tool use #561, which passes against Python SDK 6.1.0 beta models.
Closes Clarify sync_accounts notification_configs replacement semantics #4977.
12434c4: Add admin Slack support for deterministic outreach logging, persisted conversation learnings, and contact creation.
fe6d7e6: Add a media-buy canonical-formats scenario that seeds a dual-emitted product and verifies the seeded
get_productsresponse carries matching v1format_idsand v2format_options.Also refresh the canonical get_products response fixture so it satisfies the current 3.1 response envelope and cache-scope requirements.
1c50227: Adds explicit cutover tooling for the R2-backed artifact CDN Worker. No package release is needed.
88ce610: Wires release and deploy workflows to publish protocol artifacts to the R2-backed CDN bucket. No package release is needed.
de24f51: PR 4 of the Unify compliance state: every storyboard run writes to one canonical path (heartbeat + Addie + dashboard tests) #4247 unification stack. Replaces direct reads of
agent_contexts.last_test_*with a view that derives them fromagent_compliance_runs— the canonical source PR fix(addie): owner evaluate_agent_quality writes to canonical compliance state #4250 unified onto.What changes.
agent_compliance_runs.triggered_org_id(nullable). Populatedby the owner-test write path in
evaluate_agent_qualityusing thecaller's
organizationId. Heartbeat / manual / webhook writes leave itNULL — they don't have an org dimension. Without this column, two orgs
that own the same agent URL (e.g. staging and prod orgs of one publisher)
would conflate their test history through a join on
agent_urlalone.agent_context_with_latest_test:agent_contexts.*joined tothe latest non-dry-run
agent_compliance_runsrow scoped by(triggered_org_id, agent_url)viaLEFT JOIN LATERAL, plus a COUNTscalar subquery for
total_tests_run. Surfaces the derived fields ascanonical_last_test_*so the column-rename in the SELECT is explicit.When no owner-canonical row exists, the view falls back to the legacy
agent_contexts.last_test_*columns so non-ownerrecordTest()resultsremain visible to saved-agent list callers.
AgentContextDatabase.getByOrganization,getById,getByOrgAndUrlnow SELECT from the view and alias
canonical_last_test_*→last_test_*so callers see no shape change.Backward compat. The legacy
agent_contexts.last_test_*columns stay.Third-party (non-owner)
recordTest()writes still update them, and theview falls back to those fields when no owner-canonical run exists — that's
the session-scoped audit trail PR 3 of Unify compliance state: every storyboard run writes to one canonical path (heartbeat + Addie + dashboard tests) #4247 retained for non-owner runs.
The columns become dead-letter once
agent_test_historyis dropped (gatedon the soak windows in Unify compliance state: every storyboard run writes to one canonical path (heartbeat + Addie + dashboard tests) #4247) and
recordTest()retires in the follow-up"final cleanup" PR.
Semantic shift (last_test_scenario). For owner test runs,
last_test_scenarionow returnstracks_json[0].track(e.g.'quality_evaluation') rather than the literal string the oldrecordTest()write path stored directly. No existing callers branch onthis value, but downstream consumers that read
last_test_scenarioshouldexpect a track name sourced from the canonical run record rather than the
legacy scenario string.
Semantic shift (total_tests_run). When an owner-canonical run exists,
total_tests_runnow returns the count of non-dry-run canonical rows scopedto
(triggered_org_id, agent_url). When no owner-canonical row exists, itfalls back to the legacy per-context counter so non-owner saved-agent tests
remain visible.
Index.
idx_agent_compliance_runs_triggered_org_url_aton(triggered_org_id, agent_url, tested_at DESC)(partial, only wheretriggered_org_id IS NOT NULL) supports the view's per-org LATERAL lookupas a single index scan.
Stacked on fix(addie): backfill owner test history + stop dual-write for owner runs #4264 (PR 3) → feat(dashboard): surface verdict_source + per-run triggered_by badge #4263 (PR 2) → fix(addie): owner evaluate_agent_quality writes to canonical compliance state #4250 (PR 1).
9026544: Enforce the v3 envelope integrity storyboard by adding envelope-scoped absent-field checks for legacy
task_statusandresponse_status, and document the check kind in the runner output contract.bebac78: fix(server): align the WorkOS membership integrity invariant with the local membership cache schema.
The invariant no longer reads a nonexistent
organization_memberships.statuscolumn when checking cached WorkOS memberships. This keeps the audit from failing before it can report stale local membership rows that should be reconciled by the WorkOS sync.bae9db1: Add universal compliance coverage for the AdCP 3.1 read-tool
idempotency_keycontract.The new
read_tool_idempotencystoryboard verifies that representative readtasks accept the every-request envelope fields (
idempotency_key,context,and
ext) without strict wrapper rejection, while documenting the 3.1omitted-key grace probe that should become a required rejection in the 3.2
storyboard cut.
b8b890f: Clarify that
revoked_publisher_domains[]applies to all three authorization-type branches — includinginline_properties. The schema description and managed-networks.mdx validator-behavior bullet previously enumerated only two of three branches (publisher_propertiesselectors and top-levelproperties[].publisher_domain), leavingauthorized_agents[].properties[].publisher_domain(theinline_propertiesauthorization type) ambiguous. Addedinline_propertiesto both enumerations to unblock SDK implementations holding the third branch pending this clarification. Closes Clarify: does revoked_publisher_domains apply to inline_properties[]? #4869.d8af977: Add
stale_response_advisoryuniversal storyboard verifying STALE_RESPONSE wire placement (advisory inerrors[]on populated success response, transport stays success). Addsforce_upstream_unavailablescenario to comply_test_controller request/response schemas so sellers can deterministically exercise stale-cache fallback paths in compliance testing.9989dc2: Clear storyboard lint drift by registering tracker asset types in the creative asset union, supporting
task_completion.*context-output paths in the static lint, and classifyingsync_audiencesas tenant-scoped.