feat(media-buy): add per-product list application receipts - #6850
feat(media-buy): add per-product list application receipts#6850bokelley wants to merge 1 commit into
Conversation
|
@lukasz-pubx The working group aligned on putting list-match attribution on each returned product, rather than adding a seller-to-governance reporting task. This PR implements that direction across legacy and canonical product discovery, with property/collection parity. CI is green—would you please review? |
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated schema paths require human/CODEOWNERS review.
This PR modifies protocol source-of-truth files under static/schemas/source/** (a deterministic hard approval gate), and review_decision is REVIEW_REQUIRED, not APPROVED. Per decision-table row 2, the outcome must be escalate until a real human/CODEOWNERS approval satisfies the gate.
The reviewer found no Critical/High/Medium findings — the change is an additive, product-scoped list_applications receipts feature with a properly discriminated oneOf (const per branch, baseline untouched), closed shape enforcing the MUST-NOT-echo-auth_token rule, coherent schema↔docs, symmetric fields across legacy/canonical product schemas, and a correct minor changeset. The diff is mechanically clean, but the gate is non-negotiable absent APPROVED status.
Escalation reasons
- Touches gated paths
static/schemas/source/**(canonical-product.json, inventory-list-application.json [added], product.json, index.json, get-products-request.json, get-products-response.json, product-fields.json, refine-proposals-response.json) withreview_decision: REVIEW_REQUIRED— human/CODEOWNERS review required to satisfy the hard approval gate.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (canonical-product.json, inventory-list-application.json added, product.json, index.json, get-products-request.json, get-products-response.json, product-fields.json, refine-proposals-response.json) while review_decision is REVIEW_REQUIRED — human/CODEOWNERS approval required to satisfy the hard approval gate.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/canonical-product.json (modified) matches
static/schemas/source/**; static/schemas/source/core/inventory-list-application.json (added) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.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/product-fields.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/refine-proposals-response.json (modified) matchesstatic/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.
Summary
list_applicationsreceipt to legacy and canonical product responsesproperty_list, and zero-match inclusion/exclusion semanticsWhy
The collection walkthrough describes seller-specific match counts, but those counts vary by product and response. The working group agreed that the seller product response—not a separate governance-agent reporting task—is the correct surface. This also keeps property and collection governance aligned and leaves fuzzy content-standards calibration as a separate concern.
Compatibility
This is additive: the new product fields are optional in the schemas and existing governance list-response schemas are unchanged. When an effective list is present, the protocol requires the seller to include the receipt regardless of field projection.
Validation
npm run test:targeting-aware-discoverynpm run test:schemasnpm run test:oneof-discriminatorsnpm run check:registrynpm run test:docs-navnpm run test:owned-linksnpm run lint:schema-linksnpm run build:compliance -- --checknode scripts/check-changeset-protocol-scope.cjs origin/mainnpx --yes @changesets/cli@^3.0.0 status --since=origin/mainCloses #6736