feat(media-buy): add targeting-aware product discovery - #6203
Conversation
c93aa6c to
91d362a
Compare
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path change requires human/CODEOWNERS review.
This PR modifies/adds ~15 files under static/schemas/source/**, which are under a hard, deterministic approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires and the outcome cannot be approve or plain comment.
Independent of the gate, this is a Breaking-class-eligible protocol change (new AdCP 3.2 targeting-aware product-discovery contract) touching published wire surface. Under the repo's "Breaking-class changes are never auto-approved" hard gate, ratification is a human act.
The reviewer found no Critical/High/Medium findings: schema↔docs coherence verified (product.json overlay_support / targeting_resolution / is_custom / expires_at match get_products.mdx and targeting.mdx), the demographic_targeting_resolution→targeting_resolution.demographics rename is on an unreleased 3.2-beta field (absent from dist/**) so the minor changeset is correct, both new oneOf schemas carry discriminators (mode/operation), and released dist artifacts are untouched. Clean diff, but the deterministic gate stands until a human/CODEOWNERS approval lands.
Escalation reasons
- Modifies/adds ~22 files under
static/schemas/source/**(gated path) withreview_decision: REVIEW_REQUIRED— human/CODEOWNERS approval required before merge. - New published protocol contract (AdCP 3.2 targeting-aware discovery) requires human ratification per the Breaking-class hard gate.
No blocking code findings; escalation is procedural (approval gate), not a defect.
Why human review
- Modifies/adds ~22 files under static/schemas/source/** (gated path) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required (row 2).
- New AdCP 3.2 published protocol contract requires human ratification per the repo's Breaking-class hard gate.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-assignment.json (modified) matches
static/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-media-buys-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/media-buy/package-request.json (modified) matches `static
…(truncated)…
|
Ladon cannot review this PR until merge conflicts are resolved. |
…ilters # Conflicts: # docs/media-buy/task-reference/create_media_buy.mdx # skills/adcp-media-buy/SKILL.md # static/schemas/source/media-buy/get-products-request.json
…ilters # Conflicts: # docs/media-buy/task-reference/create_media_buy.mdx # docs/media-buy/task-reference/get_products.mdx # package.json # static/schemas/source/core/product.json # static/schemas/source/media-buy/get-products-request.json
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — hard approval gate not satisfied.
This PR modifies/adds ~22 files under static/schemas/source/**, a gated path under a hard, non-overridable approval gate. The current GitHub review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires and the outcome cannot be approve or plain comment.
Additionally, this is a new AdCP protocol contract change (targeting-aware product discovery — new fields on the request/Product/targeting overlay, and a renamed Package.demographic_targeting_resolution → targeting_resolution.demographics). A field rename is a Breaking-class wire change, and the repo's Breaking-class hard gate states such changes are never auto-approved — ratification is a human act — unless review_decision is APPROVED.
The reviewer found the diff clean on schema↔docs coherence, changeset type, oneOf discrimination, and released-artifact immutability — no blocking or Medium code-correctness findings. That is good, but it does not lift the gate; only a recorded human/CODEOWNERS approval does.
Prior decision was also escalate for the same gated-path reason. The gate persists because review_decision is still REVIEW_REQUIRED.
Escalation reasons
- Modifies/adds ~22 files under
static/schemas/source/**(gated path) whilereview_decisionisREVIEW_REQUIRED— human/CODEOWNERS approval required (row 2). - Breaking-class change (field rename
Package.demographic_targeting_resolution→targeting_resolution.demographics) — ratification must be a human act per the repo's Breaking-class hard gate.
Why human review
- Modifies/adds ~22 files under static/schemas/source/** (gated path) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required (decision-table row 2).
- Breaking-class protocol change: Package.demographic_targeting_resolution renamed to targeting_resolution.demographics. Per the repo's Breaking-class hard gate, ratification is a human act and is never auto-approved unless review_decision is APPROVED.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-assignment.json (modified) matches
static/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-media-buys-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-targeting-resolution.json (added) matches `stati
…(truncated)…
|
Final merge-readiness pass complete on 02ed818:
The only remaining gate is the intentional human/CODEOWNERS approval for the published protocol/schema change. |
…ilters # Conflicts: # static/schemas/source/core/creative-assignment.json
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path hard gate not satisfied + Breaking-class protocol change.
This PR modifies/adds ~22 files under static/schemas/source/**, a hard, non-overridable approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires: Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
Separately, the repo's Breaking-class hard gate applies: the change renames a published wire field (Package.demographic_targeting_resolution → targeting_resolution.demographics). Breaking-class ratification is a human act and is never auto-approved unless review_decision is APPROVED.
Escalation reasons
- Touches gated paths under
static/schemas/source/**whilereview_decisionisREVIEW_REQUIRED(notAPPROVED) — human/CODEOWNERS review required (row 2). - Breaking-class protocol change (published field rename) — human ratification required per repo Breaking-class hard gate.
Note on iteration: the reviewer reports a clean delta with no Critical/High/Medium findings (enum extension is additive with a minor changeset; deprecation sweep is metadata-only with new test coverage; certification server paths verified race-safe and timeout-bounded). No blocking code findings exist, but the two hard gates above stand until a human approval is recorded.
Blocking findings: none.
Why human review
- Touches gated paths under static/schemas/source/** (22 files modified/added) while review_decision is REVIEW_REQUIRED, not APPROVED — human/CODEOWNERS approval required (decision-table row 2).
- Breaking-class protocol change: published field Package.demographic_targeting_resolution renamed to targeting_resolution.demographics. Per the repo's Breaking-class hard gate, ratification is a human act and is never auto-approved unless review_decision is APPROVED.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-assignment.json (modified) matches
static/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-media-buys-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/media-buy/package-request.json (modified) matches `static/schemas/source/*
…(truncated)…
…ilters # Conflicts: # package.json
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-paths hard approval gate not yet satisfied.
This PR modifies/adds 22 files under static/schemas/source/**, which is a hard, deterministic approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires: Ladon cannot auto-approve until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
The reviewer found no Critical/High/Medium findings — the delta is a docs/compliance/test refinement pass on the targeting-aware-discovery feature. Description-only schema edits land on net-new 3.2 rollup fields (absent from released 3.1.10), stay coherent with the updated docs, and carry the correct minor changeset. That clean-diff assessment is credited, but it does not lift the gate.
The prior decision was also escalate for the same gated-paths reason. The gate persists purely because review_decision is still not APPROVED.
Escalation reasons
- Touches gated paths under
static/schemas/source/**(22 files modified/added) whilereview_decisionisREVIEW_REQUIRED, notAPPROVED— human/CODEOWNERS approval required (row 2). - Schema-source changes fall under spec-ownership governance; ratification is a human act.
No blocking findings exist; once a human/CODEOWNERS approval is recorded, this PR falls through to a normal approve on the clean diff.
Why human review
- Touches gated paths under static/schemas/source/** (22 files modified/added) while review_decision is REVIEW_REQUIRED, not APPROVED — human/CODEOWNERS approval required (decision-table row 2).
- Protocol schema-source edits fall under the repo's spec-ownership governance; ratification is a human act and cannot be auto-approved until review_decision is APPROVED.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-assignment.json (modified) matches
static/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-media-buys-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/media-buy/package-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/package-update.json (modified) matchesstatic/schemas/source/**; static/schemas/source/protocol/get-ad
…(truncated)…
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated schema-source paths require human/CODEOWNERS approval.
No blocking findings. Reviewer reports a clean pass: the get_products GetProductsRejected arm, rights-grant attestation binding, 3.2 advisory brand-authorization cross-check, and account-webhook proof-of-control are all coherent across schema↔docs↔server↔tests. Changesets are present and correctly minor/patch; wire changes are additive or ride experimental (x-status) surfaces. No new undiscriminated oneOf. Op-readiness paths (webhook-challenge/account-handlers) are fail-closed and test-covered.
However, this PR modifies/adds 22 files under static/schemas/source/**, which the repo declares under a hard, non-overridable approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED. Per decision-table row 2, this must escalate until a human/CODEOWNERS approval is recorded. The repo's spec-ownership governance reinforces this: protocol schema-source edits are a human act of ratification and cannot be auto-approved.
This sticky-escalates the prior escalate decision — but note it holds on row 2 (the deterministic gated-paths gate), independent of row 6. No fresh actionable findings surfaced this run; the escalation is driven purely by the unsatisfied approval gate.
Escalation reasons
- Touches gated paths under
static/schemas/source/**(22 files added/modified) whilereview_decisionisREVIEW_REQUIRED, notAPPROVED— human/CODEOWNERS approval required (row 2). - Protocol schema-source edits fall under spec-ownership governance; ratification is a human act.
Once a human/CODEOWNERS approval is recorded, this clean diff falls through to approve.
Why human review
- Touches gated paths under static/schemas/source/** (22 files added/modified) while review_decision is REVIEW_REQUIRED, not APPROVED — human/CODEOWNERS approval required (decision-table row 2).
- Protocol schema-source edits fall under the repo's spec-ownership governance; ratification is a human act and cannot be auto-approved until review_decision is APPROVED.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/creative-assignment.json (modified) matches
static/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/x-entity-types.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/error-code.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-media-buys-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-products-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/get-pr
…(truncated)…
…ilters # Conflicts: # static/compliance/source/universal/version-negotiation.yaml
# Conflicts: # package.json
|
Proposal review — reviewed at head The tree delivers what the description promises — schemas, docs, scenarios, tests all present and consistently wired — and several parts deserve explicit support: the lifecycle-specific resolution schemas that make invalid combinations unrepresentable, the machine-checkable 1. warning — create-time pricing/forecast disposition for
|
|
The eight findings are substantive; addressing them in order. Decisions needed (1–4): 1 — Create-time pricing disposition under 2 — boolean-requirement × object-support matching gap. The two existing clauses leave the case unhandled: 3 — 4 — Inherent placement matching at create/update. Whether inherent satisfaction applies throughout the lifecycle or only during Addressable fixups (5–7): 5 — 6 — 7 — Stale Note 8 — Certification-gate disclosure. The @bokelley — findings 1–4 are the decision-shaped ones; 5–7 are clean fixups for the next commit once the merge conflict is resolved; note 8 is a PR body addition. Generated by Claude Code |
…ilters # Conflicts: # docs/building/by-layer/L3/error-handling.mdx # docs/media-buy/task-reference/create_media_buy.mdx # docs/media-buy/task-reference/get_products.mdx # docs/media-buy/task-reference/update_media_buy.mdx # package.json
…empotency' into verify-get-products-filters # Conflicts: # static/schemas/source/media-buy/request-proposals-response.json
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path hard approval gate not satisfied.
This PR touches files under static/schemas/source/** and .github/workflows/**, both declared under the repo's hard, non-overridable approval gate (gated_paths: true). The current review_decision is unknown/none — NOT APPROVED. Decision-table row 2 fires: gated paths + no human/CODEOWNERS approval = escalate.
This is a subsequent pass. The reviewer confirmed the 77 substance files are disciplined and internally consistent, with no Critical/High/Medium findings: the demographic_targeting_resolution → targeting_resolution.demographics rename is coherent across schemas/docs/tests, both new oneOf schemas carry explicit discriminators (no undiscriminated regression), the minor changeset is correct for pre-GA 3.2 dev-cycle surface, and product.json / positive-postal-area-support gates are correct and test-covered. The prior escalate persists solely because the gated-path condition remains unmet — not due to any code defect.
Additionally, protocol schema-source edits fall under the repo's spec-ownership / breaking-class governance: ratification is a human act and cannot be auto-approved until review_decision is APPROVED. Once a human/CODEOWNERS approval is recorded, this clean diff can fall through to approval.
No blocking findings; escalation is purely gate-driven.
Escalation reasons
- Touches gated paths under
static/schemas/source/**(30+ files) and.github/workflows/check-schema-links.ymlwhilereview_decisionis not APPROVED — human/CODEOWNERS approval required (decision-table row 2). - Protocol schema-source edits fall under spec-ownership/breaking-class governance; ratification is a human act and cannot be auto-approved until review_decision is APPROVED.
Why human review
- Touches gated paths under static/schemas/source/** (30+ files added/modified) and .github/workflows/check-schema-links.yml while review_decision is not APPROVED — human/CODEOWNERS approval required (decision-table row 2).
- Protocol schema-source edits fall under the repo's spec-ownership / breaking-class governance; ratification is a human act and cannot be auto-approved until review_decision is APPROVED.
- This PR touches a path under a hard, non-overridable approval gate (.github/workflows/check-schema-links.yml (modified) matches
.github/workflows/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement-selection.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/positive-postal-area-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/pricing-option.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-allocation.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-targeting-resolution.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/proposal.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-modification.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-requirements.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting-overlay-support.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/targeting.json (modified) matchesstatic/schemas/source/**; stat
…(truncated)…
Stack dependency
Depends on #6115. This PR is intentionally based on
security-wave-12-get-products-idempotency; review the targeting-aware discovery changes relative to that branch.Summary
This proposes the AdCP 3.2 targeting-aware product-discovery contract:
filtersselect eligible offers and apply consistently inbrief,wholesale, andrefinemodes.targeting_overlaycarries concrete targeting the buyer intends to apply, so availability, pricing, and forecasting can reflect it.required_overlay_supportdeclares dimensions that must remain independently selectable when the buyer later creates packages.targeting_resolution.modificationsonly when applied structured targeting differs from the request.device_platform_excludeuses exclusion-wins semantics and independently declared product support.The implementation includes schemas, normative design and migration guidance, task/reference docs, buyer education, the media-buy skill, curriculum guidance, compliance storyboards, test vectors, and regression coverage.
Contract decisions
required_overlay_supportpromises independent selectability, not one product per requested geography or audience value.custom,key_value_pairs, and equivalent raw targeting maps remain explicitly out of scope.pricing_option_id; binding commercial terms cannot be inferred from an ambiguous product-level price list.PRODUCT_EXPIREDafter expiry. Unknown, evicted, or cross-account/lineage IDs returnPRODUCT_NOT_FOUNDwithout leaking cross-tenant existence.Compatibility and rollout
adcp.supported_versionsand requestadcp_version); there is no second feature flag that could disagree with the negotiated schema.filtersare not wholesale-only. Their predicates apply in brief, wholesale, and refine discovery.UNSUPPORTED_FEATUREfor 3.2 split-flow structured targeting until generated 3.2 SDK support lands in Implement targeting-aware discovery in the training agent after 3.2 beta #6199. It does not silently ignore preview fields or pretend to reprice/reforecast them.auth_tokenvalues on property and collection lists are removed from create/get/update wire responses.Issue coverage
get_products.filtersportion of Compliance storyboards validate response shape but not filter behaviour — filtering params can silently no-op #2902 with independent positive and negative controls. The issue remains open for delivery, media-buy-list, and creative-list filter coverage.Expert review
Three independent review passes—ad-tech protocol, protocol/schema workflow, and code/security behavior—approved the integrated tree as merge-ready. Review feedback drove the lifecycle-specific resolution schemas, fixed-versus-selectable placement model, exact product-ID pagination behavior, credential stripping, fail-closed training rollout, and separate request/support shapes.
Validation
/sales: 95 storyboards, 479 steps)./sales: 65 storyboards, 310 steps).canonical_formats: 15/15 steps clean after applying the repository's version-pinned SDK rc.13 postinstall shim.Community feedback requested
brief_targetingconfirmation the right scope for a curated result set?required_overlay_supportcommunicate independent package-time selection clearly enough?is_customthe right marker for request-bound configured offers?