fix(schemas): stabilize deprecation metadata - #6136
Conversation
# Conflicts: # docs/creative/task-reference/list_creatives.mdx # server/src/training-agent/comply-test-controller.ts # server/src/training-agent/task-handlers.ts # server/src/training-agent/types.ts # server/tests/unit/comply-test-controller.test.ts # static/schemas/source/core/creative-filters.json # static/schemas/source/creative/list-creatives-request.json
# Conflicts: # server/public/members.html
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated schema paths touched and review not yet approved.
This PR is a metadata-only pass adding deprecated: true to 40+ already-documented deprecated schema nodes and renaming lifecycle-labeled variant titles (Legacy/3.1+/Deprecated) to stable structural names (v1/v2), locked by a new completeness test and a patch changeset. No wire fields were added, removed, retyped, or moved in/out of required; discriminators are untouched. The change itself looks coherent and non-breaking.
However, this PR modifies files under static/schemas/source/**, which are under a hard, deterministic approval gate (gated_paths: true), and review_decision is REVIEW_REQUIRED — not APPROVED. Per decision rule row 2, the gate is NOT satisfied, so the outcome must be escalate (no blocking critical/high findings exist to make it request-changes). Human/CODEOWNERS review of the gated schema-source files is required before merge.
Medium findings
- static/schemas/source/core/placement.json:46 —
format_idsgains the deprecated flag with no deprecation language in its description (coherence outlier; worth fixing but not blocking on its own).
Escalation reasons
- Gated paths under
static/schemas/source/**modified whilereview_decisionisREVIEW_REQUIRED; requires human/CODEOWNERS approval.
Medium findings
- static/schemas/source/core/placement.json:46 — placement.format_ids flagged deprecated with no deprecation notice in its description
Why human review
- Gated schema-source files under
static/schemas/source/**were modified whilereview_decisionisREVIEW_REQUIRED(notAPPROVED) — hard approval gate requires human/CODEOWNERS review before merge. - This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/agent-notification-config.json (modified) matches
static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matchesstatic/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/auth-scheme.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/legacy-postal-system.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/metric-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/error-details/authorization-required.json (modified) matchesstatic/schemas/source/**; static/schemas
…(truncated)…
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated-path approval gate not satisfied.
This PR modifies 33+ files under static/schemas/source/**, which are under a deterministic hard approval gate (gated_paths: true), and review_decision is REVIEW_REQUIRED (not APPROVED). Per decision rule row 2, the outcome must be escalate until a human/CODEOWNERS approval lands.
The change itself is clean per the reviewer: metadata-only cleanup adding machine-readable deprecated: true to nodes whose prose already declared deprecation, plus renaming version-leaky/lifecycle titles to stable v1/v2 codegen names, backed by a 3-part regression test. No wire-shape change, no dist/ artifact modification, no oneOf discriminator regression, and no schema↔docs drift. No blocking findings.
Escalation reasons:
- Touches gated schema-source files (e.g.
static/schemas/source/core/product.json,static/schemas/source/index.json, and 30+ others understatic/schemas/source/**) — human/CODEOWNERS review required before merge.
Once review_decision becomes APPROVED, this clean diff falls through to a normal approve.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (e.g. static/schemas/source/core/product.json, static/schemas/source/index.json) while review_decision is REVIEW_REQUIRED — hard approval gate requires human/CODEOWNERS review (APPROVED) before merge.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/agent-notification-config.json (modified) matches
static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matchesstatic/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/auth-scheme.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/legacy-postal-system.json (modified) matchesstatic/schemas/source/**; static/schemas/source/enums/metric-type.json (modified) matchesstatic/schemas/source/**; static/schemas/source/error-details/authorization-required.json (modified) matchesstatic/schemas/source/**; static/schemas/source/error-details/version-unsupported.json (modified) matchesstatic/schemas/source/**; static/schemas/source/formats/canonical/image_carousel.json (modified) matchesstatic/schemas/source/**; static/schemas/source/index.json (modified) matchesstatic/schemas/source/**; static/schemas/source/media-buy/create-media-buy
…(truncated)…
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated protocol-source files touched while review is not APPROVED.
The reviewer reports a clean delta pass: this PR deprecates all 12 format_ids property sites across static/schemas/source/** with consistent deprecated: true + "removed in AdCP 4.0" descriptions, migrates the docs coherently from the prior 5.0 sunset to a hard 4.0 removal with no stale contradicting references, and adds a walk-based test with exact 12/12 coverage. Schema↔docs coherence holds, product.json anyOf is structurally unchanged, and the patch changeset fits additive deprecation metadata. No Critical/High/Medium findings.
However, the PR modifies files under static/schemas/source/**, a hard, non-overridable approval gate (gated_paths: true), and review_decision is not APPROVED (unknown/none). Per decision-table row 2, this MUST escalate until a human/CODEOWNERS approval is recorded — Ladon cannot auto-approve gated protocol-source changes regardless of how clean the diff is. Additionally, deprecating published fields with a "removed in AdCP 4.0" contract is a policy/spec-governance act that the constitution reserves for human ratification. This continues the prior escalate posture; the underlying gate is unchanged.
Escalation reasons
- Modifies gated protocol-source files under
static/schemas/source/**(e.g.static/schemas/source/core/product.json,static/schemas/source/index.json) whilereview_decisionis not APPROVED — hard approval gate requires human/CODEOWNERS review before merge.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (e.g. static/schemas/source/core/product.json, static/schemas/source/index.json) while review_decision is not APPROVED — hard approval gate (gated_paths) requires human/CODEOWNERS review (APPROVED) before merge.
- Deprecation of 12 published format_ids fields with a hard 'removed in AdCP 4.0' removal contract is a protocol-policy/governance decision reserved for human ratification, not auto-approval.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/brand/acquire-rights-request.json (modified) matches
static/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matchesstatic/schemas/source/**; static/s
…(truncated)…
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated protocol-source files touched while review not APPROVED.
This PR reschedules the format_ids deprecation from AdCP 3.1 to 3.2 across 15 source schemas plus normative docs, bumps the changeset patch→minor (cutting 3.2.0 from the 3.1.1 beta line, matching "Deprecated in AdCP 3.2"), and renames versioned oneOf/anyOf titles (v1/v2 → Named-format / Canonical-format). Schema↔docs are coherent, discriminators untouched, no dist artifacts changed, both test files updated in lockstep. The reviewer found no critical/high/medium findings — the diff itself is clean.
However, the PR modifies files under static/schemas/source/**, which are under a hard, non-overridable approval gate (gated_paths: true), and the current review_decision is REVIEW_REQUIRED, not APPROVED. Per decision rule row 2, this forces escalation: Ladon cannot auto-approve gated protocol-source changes until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is. The prior decision was also escalate on the same grounds.
No blocking findings exist — the sole reason for holding this PR is the unsatisfied hard approval gate. Once a human/CODEOWNERS approval is recorded, this PR can fall through to a normal approve.
Escalation reasons:
- Modifies gated protocol-source files under
static/schemas/source/**(e.g.static/schemas/source/core/product.json,static/schemas/source/index.json) whilereview_decisionisREVIEW_REQUIRED, notAPPROVED— hard approval gate requires human/CODEOWNERS review.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (e.g. static/schemas/source/core/product.json, static/schemas/source/index.json) while review_decision is REVIEW_REQUIRED, not APPROVED — hard approval gate (gated_paths) requires human/CODEOWNERS review before merge.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/brand/acquire-rights-request.json (modified) matches
static/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matches `static/schemas
…(truncated)…
08cbd6d to
d7a730b
Compare
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated protocol-source files require human/CODEOWNERS approval.
This PR modifies numerous 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 auto-approval is blocked regardless of how clean the diff is.
Reviewer findings: none (no critical/high/medium). The subsequent pass confirms the deprecation-metadata delta is coherent — title stabilization for codegen, consistent deprecated: true annotations, exact format_ids removal scheduled for AdCP 4.0. Changeset correctly bumped patch→minor (additive, non-breaking deprecation metadata; no 3.x wire field removed). oneOf disjointness is unaffected by adding deprecated: true to branches, and the new schema-deprecation-metadata invariant test is wired into test:schemas. Schema↔docs coherence holds.
Escalation reasons
- Modifies gated protocol-source files under
static/schemas/source/**(e.g.static/schemas/source/core/product.json,static/schemas/source/index.json) whilereview_decisionisREVIEW_REQUIRED— hard approval gate requires a recorded human/CODEOWNERS approval before merge.
This continues the prior escalation; the gate lifts automatically once a human/CODEOWNERS approval is recorded.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (e.g. static/schemas/source/core/product.json, static/schemas/source/index.json) while review_decision is REVIEW_REQUIRED, not APPROVED — hard approval gate (gated_paths) requires human/CODEOWNERS review before merge.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/brand/acquire-rights-request.json (modified) matches
static/schemas/source/**; static/schemas/source/content-standards/artifact.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/format-id.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/format-shape-vocabulary.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/offering-asset-group.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches `sta
…(truncated)…
d7a730b to
a777402
Compare
There was a problem hiding this comment.
Ladon verdict: Escalate to human review
Escalate — gated protocol-source files require human/CODEOWNERS approval.
This PR modifies files under static/schemas/source/**, which sit behind a hard, non-overridable approval gate (gated_paths: true). The current GitHub review decision is REVIEW_REQUIRED, not APPROVED, so decision-table row 2 fires: Ladon cannot auto-approve or plain-comment until a human/CODEOWNERS approval is recorded, regardless of how clean the diff is.
The reviewer's pass is clean — no critical/high/medium findings. The get_adcp_capabilities supported_formats loosening is a within-minor refinement of a field introduced in the same in-development 3.2 line, correctly carried on a minor changeset with matching docs; deprecation annotations are additive and preserve oneOf/anyOf discriminators. Schema↔docs coherence, changeset scope, and discriminator invariants all hold. This confirms the prior escalate (row 6 not needed for its own sake) but the operative reason remains the unsatisfied gated-paths gate.
Escalation reasons
- Modifies gated protocol-source files under
static/schemas/source/**(e.g.static/schemas/source/core/product.json,static/schemas/source/index.json) whilereview_decisionisREVIEW_REQUIRED, notAPPROVED. A human/CODEOWNERS approval is required before merge.
Why human review
- Modifies gated protocol-source files under static/schemas/source/** (e.g. static/schemas/source/core/product.json, static/schemas/source/index.json) while review_decision is REVIEW_REQUIRED, not APPROVED — hard approval gate requires human/CODEOWNERS review before merge.
- This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/brand/acquire-rights-request.json (modified) matches
static/schemas/source/**; static/schemas/source/compliance/comply-test-controller-request.json (modified) matchesstatic/schemas/source/**; static/schemas/source/content-standards/artifact.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/format-id.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/format-shape-vocabulary.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/format.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/mcp-webhook-payload.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/offering-asset-group.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/package.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/placement.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matchesstatic/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matches `static/sche
…(truncated)…
Depends on #6125. This PR is stacked on its canonical-format contracts and should merge after it.
Restores stable, structural titles for schema variants so code generators no longer derive symbols containing lifecycle labels such as
LegacyorDeprecated.Adds
deprecated: trueto fields and schemas already documented as deprecated without removing any 3.x wire fields. Exactformat_idsfields are deprecated beginning in AdCP 3.2 and removed in AdCP 4.0.Adds CI regression coverage for both rules and a minor changeset.
Validated with schema build, schema/example/composed/JSON Schema/MCP projection/convention/discriminator/UTF-8 suites, typecheck, and current/3.0 storyboard matrices.