Skip to content

fix(schemas): stabilize deprecation metadata - #6136

Open
bokelley wants to merge 12 commits into
mainfrom
cleanup-deprecated-schema-metadata
Open

fix(schemas): stabilize deprecation metadata#6136
bokelley wants to merge 12 commits into
mainfrom
cleanup-deprecated-schema-metadata

Conversation

@bokelley

@bokelley bokelley commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

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 Legacy or Deprecated.

Adds deprecated: true to fields and schemas already documented as deprecated without removing any 3.x wire fields. Exact format_ids fields 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.

bokelley added 5 commits July 31, 2026 06:24
# 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
@bokelley
bokelley enabled auto-merge (squash) August 1, 2026 22:24
@bokelley bokelley changed the title [codex] Stabilize schema titles and deprecation metadata fix(schemas): stabilize deprecation metadata Aug 1, 2026
Comment thread static/schemas/source/core/placement.json

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_ids gains 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 while review_decision is REVIEW_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 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/core/agent-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches static/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matches static/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matches static/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matches static/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matches static/schemas/source/**; static/schemas/source/enums/auth-scheme.json (modified) matches static/schemas/source/**; static/schemas/source/enums/legacy-postal-system.json (modified) matches static/schemas/source/**; static/schemas/source/enums/metric-type.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/authorization-required.json (modified) matches static/schemas/source/**; static/schemas

…(truncated)…

@aao-secretariat aao-secretariat Bot added the ladon/needs-human-review Ladon has escalated this PR for human review. label Aug 1, 2026

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 under static/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) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches static/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matches static/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matches static/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matches static/schemas/source/**; static/schemas/source/creative/list-creatives-response.json (modified) matches static/schemas/source/**; static/schemas/source/enums/auth-scheme.json (modified) matches static/schemas/source/**; static/schemas/source/enums/legacy-postal-system.json (modified) matches static/schemas/source/**; static/schemas/source/enums/metric-type.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/authorization-required.json (modified) matches static/schemas/source/**; static/schemas/source/error-details/version-unsupported.json (modified) matches static/schemas/source/**; static/schemas/source/formats/canonical/image_carousel.json (modified) matches static/schemas/source/**; static/schemas/source/index.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/create-media-buy

…(truncated)…

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) while review_decision is 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) matches static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches static/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matches static/schemas/source/**; static/s

…(truncated)…

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) while review_decision is REVIEW_REQUIRED, not APPROVED — 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) matches static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches static/schemas/source/**; static/schemas/source/core/reporting-webhook.json (modified) matches static/schemas/source/**; static/schemas/source/core/signal-pricing-option.json (modified) matches static/schemas/source/**; static/schemas/source/core/version-envelope.json (modified) matches `static/schemas

…(truncated)…

@bokelley
bokelley force-pushed the cleanup-deprecated-schema-metadata branch from 08cbd6d to d7a730b Compare August 2, 2026 15:45

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) while review_decision is REVIEW_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) matches static/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matches static/schemas/source/**; static/schemas/source/core/format-id.json (modified) matches static/schemas/source/**; static/schemas/source/core/format-shape-vocabulary.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/offering-asset-group.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matches static/schemas/source/**; static/schemas/source/core/product.json (modified) matches static/schemas/source/**; static/schemas/source/core/push-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/registry-event.json (modified) matches `sta

…(truncated)…

@bokelley
bokelley force-pushed the cleanup-deprecated-schema-metadata branch from d7a730b to a777402 Compare August 2, 2026 19:53

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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) while review_decision is REVIEW_REQUIRED, not APPROVED. 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) matches static/schemas/source/**; static/schemas/source/content-standards/artifact.json (modified) matches static/schemas/source/**; static/schemas/source/core/agent-notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-asset.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-assignment.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-manifest.json (modified) matches static/schemas/source/**; static/schemas/source/core/creative-variant.json (modified) matches static/schemas/source/**; static/schemas/source/core/format-id.json (modified) matches static/schemas/source/**; static/schemas/source/core/format-shape-vocabulary.json (modified) matches static/schemas/source/**; static/schemas/source/core/format.json (modified) matches static/schemas/source/**; static/schemas/source/core/frequency-cap.json (modified) matches static/schemas/source/**; static/schemas/source/core/mcp-webhook-payload.json (modified) matches static/schemas/source/**; static/schemas/source/core/notification-config.json (modified) matches static/schemas/source/**; static/schemas/source/core/offering-asset-group.json (modified) matches static/schemas/source/**; static/schemas/source/core/outcome-measurement.json (modified) matches static/schemas/source/**; static/schemas/source/core/package.json (modified) matches static/schemas/source/**; static/schemas/source/core/performance-feedback.json (modified) matches static/schemas/source/**; static/schemas/source/core/placement.json (modified) matches static/schemas/source/**; static/schemas/source/core/postal-area.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-filters.json (modified) matches static/schemas/source/**; static/schemas/source/core/product-format-declaration.json (modified) matches `static/sche

…(truncated)…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ladon/needs-human-review Ladon has escalated this PR for human review.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant