Repository navigation
Conversation
Sellers declare whether they sell guaranteed inventory, non_guaranteed inventory, or both, mirroring supported_pricing_models, so buyers can filter sellers before calling get_products. Like every capability declaration it is a commitment: a declaring seller returns only products with a listed delivery_type. When absent, buyers treat delivery types as unknown. Split out of #8454, whose x-adcp-applies-when annotation stays on the RFC track (#8452). Background: #8359. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-when Adds the x-adcp-applies-when annotation. It names the capability declarations (delivery_types, pricing_models, capabilities paths) that make an optional property relevant, and never changes validation. Projections, such as a non-guaranteed-only MCP tool surface, use it to drop optional fields from one canonical schema, with no seller-specific SDKs. Initial annotations: product.cancellation_policy (guaranteed); floor_price and price_guidance on pricing options (non_guaranteed); the product's conversion-tracking, vendor-metric-optimization, and Trusted Match fields (their capability blocks). scripts/lint-applies-when.cjs checks every annotation. Builds on #8458 (supported_delivery_types). Refs #8452. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated path requires human/CODEOWNERS approval.
This is a clean, additive PR: it adds media_buy.supported_delivery_types to get-adcp-capabilities-response.json, mirroring the existing supported_pricing_models shape ($ref to the delivery-type.json enum, array, minItems:1, uniqueItems). The reviewer confirmed schema↔docs coherence across capabilities-explorer.mdx, the 3-2-to-3-3 migration guide, and whats-new-in-3-3.mdx; the minor changeset is correct for a new optional field; no oneOf regression; no dist edits. No critical/high/medium findings.
However, static/schemas/source/protocol/get-adcp-capabilities-response.json matches the gated path glob static/schemas/source/** (gated_paths: true), and review_decision is REVIEW_REQUIRED — not APPROVED. Per decision rule row 2, the hard approval gate is not satisfied, so this cannot be approved without explicit human/CODEOWNERS review.
Escalation reasons
- Modifies gated path
static/schemas/source/protocol/get-adcp-capabilities-response.json(matchesstatic/schemas/source/**); human/CODEOWNERS approval required before merge (review_decision: REVIEW_REQUIRED).
Once a human approval lands (review_decision: APPROVED), the clean diff can fall through to approve.
Why human review
- Modifies gated path static/schemas/source/protocol/get-adcp-capabilities-response.json (matches static/schemas/source/**) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matches
static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
…g parameter Review on #8458 found that display_tag's format parameter is also named supported_delivery_types (creative serving modes such as inline_markup). The description now names the product delivery_type enum and says the two are unrelated. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…-when Adds the x-adcp-applies-when annotation. It names the capability declarations (delivery_types, pricing_models, capabilities paths) that make an optional property relevant, and never changes validation. Projections, such as a non-guaranteed-only MCP tool surface, use it to drop optional fields from one canonical schema, with no seller-specific SDKs. Initial annotations: product.cancellation_policy (guaranteed); floor_price and price_guidance on pricing options (non_guaranteed); the product's conversion-tracking, vendor-metric-optimization, and Trusted Match fields (their capability blocks). scripts/lint-applies-when.cjs checks every annotation. Builds on #8458 (supported_delivery_types). Refs #8452. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated path requires human/CODEOWNERS approval.
This PR adds a description-only clarification to the new media_buy.supported_delivery_types field in static/schemas/source/protocol/get-adcp-capabilities-response.json (L1559), disambiguating it from the name-colliding supported_delivery_types parameter on display_tag.json. The reviewer verified both enums and the clarification is accurate and load-bearing. No critical/high/medium findings; schema↔docs coherence holds and the prior pass was clean.
However, gated_paths is true (the modified file matches static/schemas/source/**) and review_decision is REVIEW_REQUIRED, not APPROVED. Per the hard approval gate (decision row 2), Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is. This also matches the prior escalate decision.
Escalation reasons
- Modifies gated path
static/schemas/source/protocol/get-adcp-capabilities-response.json(matchesstatic/schemas/source/**) whilereview_decisionisREVIEW_REQUIRED— human/CODEOWNERS approval required.
Why human review
- Modifies gated path static/schemas/source/protocol/get-adcp-capabilities-response.json (matches static/schemas/source/**) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/protocol/get-adcp-capabilities-response.json (modified) matches
static/schemas/source/**) and the current GitHub review decision is 'REVIEW_REQUIRED', not APPROVED. This is a hard gate enforced in code — Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
|
Thanks, Brian. Looks good to me. |
|
Moved to the 3.3.0 milestone pending tomorrow's WG session (agenda item 5, addendum). The question is whether this optional capability declaration ships in 3.3 and joins the consent round closing Nov 13. If the group says no, it moves to 4.x. |
KonstantinMirin
left a comment
There was a problem hiding this comment.
Hi Brian, the change itself looks right to me: an optional field on an open object, using the same enums/delivery-type.json as product.delivery_type, and mirroring supported_pricing_models. One thing to fix before merge, and one question.
- The worst-case capabilities test fails after merging with main.
tests/capabilities-structural-bounds.test.cjswas added in #8505 two days after this PR's base, and it pins the worst-case capabilities document at 99,100,981 bytes. With the new array it's 99,101,045, so the merged tree failsnpm run test:contracts. The PR's green checks are from Oct 24, before the test existed. The fix is the usual re-pin:DOCUMENTED_WORST_CASE_BYTES = 99_101_045at line 30, and the same number indocs/building/by-layer/L1/security.mdx:2560. The open-positions count stays 108, and the field needs nomaxItems(the bounds script treats it as a closed enum, likesupported_pricing_models). - Release. You moved it to 3.3 pending the Nov 9 session, and I can't find the outcome recorded anywhere. If it's 3.3, it can merge after the re-pin. If not, since there's no 3.4,
x-added-inand the two release-doc bullets move to 4.0.
Integrate the once-pinned main df2446f. Focused/feature checks and typecheck pass. Broad local hooks were blocked by overloaded-host startup and worker timeouts. The named isolated replays still hit the unchanged hosted-compliance-echoed-release beforeAll timeout. Per the release coordinator, record with --no-verify and publish for exact-head GitHub CI; do not change budgets or merge automatically.
|
Updated from the once-pinned main Recomputed the capabilities worst case on the merged tree: 99,101,045 bytes, exactly Konstantin's figure. Both The overloaded host's broad hook hit unrelated startup/worker timeouts. |
|
@KonstantinMirin — re-pinned on
|
Merge main at 2dc672e after #8866. The merged-tree measurement is 99,101,090 bytes and 190 open positions; update the regression pins and both security.mdx figures accordingly. Validation: capabilities-structural-bounds, full test:contracts, and typecheck. Per the release coordinator's standing instruction, commit with --no-verify after the focused checks rather than repeat overloaded-host full hooks; GitHub CI on this exact head remains authoritative. No test budgets changed.
|
@KonstantinMirin merged current main ( |
KonstantinMirin
left a comment
There was a problem hiding this comment.
Thanks, Brian. Both points are resolved. On 05e1bf044d, capabilities-structural-bounds passes with 99,101,090 bytes and 190 open positions. That's main's 99,101,026 plus the same 64 bytes as before #8866, and security.mdx states the same figure. With 3.3 confirmed as the release, x-added-in and the release-doc bullets are right as they are.
Summary
This adds
media_buy.supported_delivery_typestoget_adcp_capabilities. It's an array ofguaranteedand/ornon_guaranteed, placed next to and modelled onsupported_pricing_models.get_products. Today the only signal is thesales-guaranteed/sales-non-guaranteedspecialisms. Those are compliance claims, andsales-guaranteed's storyboard actually tests human IO approval.versioning.mdx), it's a commitment. A declaring seller returns only products with a listeddelivery_type. When the field is absent, buyers treat delivery types as unknown, not as an empty set.This was split out of #8454 so it can land in 3.3. The
x-adcp-applies-whenannotation that builds on it stays on the RFC track (#8452). Background: #8359.Checks
npm run test:schemas(826 + 10 + 6 pass),test:mcp-schema-projection(40 pass), the required-declared and inline-enum-drift lints, and doc JSON validation on the three touched docs.check-changeset-protocol-scopepasses;changeset statusshows a minor bump.--no-verifyand pushed withADCP_SKIP_STORYBOARD_MATRIX=1. This sandbox'snode_modulespredate the 10-23 lockfile change, so the local typecheck and storyboard matrix fail on unrelated server code. CI is authoritative.🤖 Generated with Claude Code
Open workspace in Conductor