Skip to content

feat(media-buy): remove deprecated response status - #6570

Merged
bokelley merged 3 commits into
mainfrom
codex/remove-deprecated-media-buy-status
Aug 16, 2026
Merged

feat(media-buy): remove deprecated response status#6570
bokelley merged 3 commits into
mainfrom
codex/remove-deprecated-media-buy-status

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Summary

  • remove the deprecated media-buy lifecycle status property from create/update success branches
  • preserve top-level status exclusively as the task-envelope discriminator
  • align docs and compliance copy with the 3.2 contract
  • add schema regressions for canonical task status and rejected legacy lifecycle values

Validation

  • schema, projection, example, docs, compliance, and TypeScript checks
  • 6,127 server tests across 434 files
  • current storyboard matrix: all tenants green; sales 97 clean / 474 passing steps
  • 3.0 compatibility matrix: all tenants green; sales 65 clean / 310 passing steps

Closes #4906

@bokelley
bokelley enabled auto-merge (squash) August 15, 2026 13:52
Comment thread docs/media-buy/task-reference/create_media_buy.mdx Outdated
Comment thread docs/media-buy/task-reference/update_media_buy.mdx Outdated

@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: Request changes

Request changes — 3 blocking finding(s)

This PR cleanly removes the deprecated top-level status: MediaBuyStatus from CreateMediaBuySuccess/UpdateMediaBuySuccess. The schema change itself is sound: the property is dropped, the provisional-buy not.anyOf guard collapses correctly, oneOf discrimination stays intact, the new test is valid, and the major changeset is the correct class for a breaking removal. However, the doc surfaces carry a version-narrative that no longer matches the wire change — a schema↔docs coherence defect (docs asserting a shape/version the schema/changeset does not encode).

Blocking findings

  • docs/media-buy/task-reference/create_media_buy.mdx:1428 — Docs assert removal in "3.2" but a major changeset bumps 3.1.1 → 4.0.0
  • docs/reference/migration/media-buy-status.mdx:75 — Migration reference doc still describes the removed field as a live deprecated: true field
  • docs/media-buy/task-reference/update_media_buy.mdx:648 — Same version-label drift on update_media_buy migration prose

Row 1 fires (three high findings). Fix the version narrative (major → 4.0) and update the migration reference docs to describe the field as removed rather than deprecated.

Note for merge: this is also a Breaking-class protocol change touching gated static/schemas/source/** with review_decision: REVIEW_REQUIRED, so even once the doc drift is resolved it requires explicit human/CODEOWNERS ratification before it can proceed — it is not auto-approvable.

Blocking findings

  • docs/media-buy/task-reference/create_media_buy.mdx:1428 — Docs assert removal in "3.2" but breaking removal ships major (→ 4.0)
  • docs/reference/migration/media-buy-status.mdx:75 — Migration reference doc still describes the removed field as live deprecation
  • docs/media-buy/task-reference/update_media_buy.mdx:648 — Same version-label drift on update_media_buy migration prose

@bokelley
bokelley force-pushed the codex/remove-deprecated-media-buy-status branch from 205b1b2 to 3d1f71a Compare August 15, 2026 14:01
Comment thread .changeset/remove-deprecated-media-buy-status.md Outdated
Comment thread docs/reference/migration/media-buy-status.mdx Outdated

@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: Request changes

Request changes — 4 blocking finding(s)

The schema removal of the deprecated body-level status field is clean and coherent, and the new schema-validation test covers it. However, a version-label contradiction persists across the entire changeset and remains unresolved from the prior review.

Blocking findings

  • .changeset/remove-deprecated-media-buy-status.md:5 — A major changeset against 3.1.1 in beta pre mode produces 4.0.0, not 3.2. The claim "protocol target remains 3.2" is mechanically false — spec/changeset drift.
  • docs/reference/migration/media-buy-status.mdx:84 — Migration doc prose entrenches the 3.2-vs-major contradiction rather than resolving it (new rebuttal text added this pass).
  • docs/media-buy/task-reference/create_media_buy.mdx:1428 — Still asserts the removal lands in AdCP 3.2; contradicts the major version bump.
  • docs/media-buy/task-reference/update_media_buy.mdx:648 — Same version-label drift on the update_media_buy migration prose.

Row 1 of the decision table fires: high-severity findings are present, so this is request-changes. The version-label mismatch between the changeset (which resolves to 4.0.0) and the docs (asserting 3.2) is a customer-facing spec-coherence break and must be reconciled before merge. Note also gated_paths: true with review_decision: CHANGES_REQUESTED — the hard schema-source approval gate is unsatisfied, so this could not have approved regardless.

Blocking findings

  • ‘.changeset/remove-deprecated-media-buy-status.md:5’ — major changeset resolves to 4.0.0 not 3.2; “protocol target remains 3.2” is false
  • docs/reference/migration/media-buy-status.mdx:84 — migration prose entrenches the 3.2-vs-major contradiction
  • docs/media-buy/task-reference/create_media_buy.mdx:1428 — still asserts removal lands in AdCP 3.2
  • docs/media-buy/task-reference/update_media_buy.mdx:648 — same 3.2 version-label drift on update_media_buy prose

@bokelley
bokelley force-pushed the codex/remove-deprecated-media-buy-status branch from 3d1f71a to c532500 Compare August 15, 2026 14:52
Comment thread .changeset/remove-deprecated-media-buy-status.md

@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: Request changes

Request changes — 1 blocking finding.

Blocking findings

  • .changeset/remove-deprecated-media-buy-status.md:2 — Minor changeset ships a breaking wire change: removal of the top-level status field published across the released 3.1.x line. Per repo policy, a breaking wire change (removed field) must be major, not minor. This is high.

Context / iteration credit
This is a subsequent review. The prior pass's four high findings — the changeset/docs contradiction over the 3.2-vs-major version target — have all been resolved. Schema↔docs coherence now holds consistently across the schema, migration doc, both task-reference docs, and the compliance index, and Test 11 validates the schema-level removal. The oneOf disjointness also improves (the ambiguous status is removed from the success branch). That is real progress.

However, the fix over-corrected: flipping the changeset to minor mis-types a breaking removal. Removing a top-level field that shipped across 3.1.x breaks buyer/seller agents pinned to that shape, and breaking wire changes take major. The changeset type must be corrected before merge.

Row 1 of the decision table fires on the high finding → request-changes. (Note: this PR also touches gated static/schemas/source/** paths with review_decision: CHANGES_REQUESTED, and constitutes a Breaking-class protocol change — both of which independently require human/CODEOWNERS ratification and preclude auto-approval regardless.)

Blocking findings

  • [
  • "
  • \
  • .
  • c
  • h
  • a
  • n
  • g
  • e
  • s
  • e
  • t
  • /
  • r
  • e
  • m
  • o
  • v
  • e
  • d
  • e
  • p
  • r
  • e
  • c
  • a
  • t
  • e
  • d
  • m
  • e
  • d
  • i
  • a
  • b
  • u
  • y
  • s
  • t
  • a
  • t
  • u
  • s
  • .
  • m
  • d
  • :
  • 2
  • m
  • i
  • n
  • o
  • r
  • c
  • h
  • a
  • n
  • g
  • e
  • s
  • e
  • t
  • s
  • h
  • i
  • p
  • s
  • b
  • r
  • e
  • a
  • k
  • i
  • n
  • g
  • r
  • e
  • m
  • o
  • v
  • a
  • l
  • o
  • f
  • p
  • u
  • b
  • l
  • i
  • s
  • h
  • e
  • d
  • t
  • o
  • p
  • l
  • e
  • v
  • e
  • l
  • `
  • s
  • t
  • a
  • t
  • u
  • s
  • `
  • f
  • i
  • e
  • l
  • d
  • ;
  • b
  • r
  • e
  • a
  • k
  • i
  • n
  • g
  • w
  • i
  • r
  • e
  • c
  • h
  • a
  • n
  • g
  • e
  • s
  • r
  • e
  • q
  • u
  • i
  • r
  • e
  • a
  • m
  • a
  • j
  • o
  • r
  • c
  • h
  • a
  • n
  • g
  • e
  • s
  • e
  • t
  • "
  • ]

@bokelley

Copy link
Copy Markdown
Contributor Author

The release-mechanics contradiction is resolved: the current minor changeset calculates AdCP 3.2.0-beta.0, and all CI checks pass.

The remaining Ladon objection is the underlying policy exception, not an implementation defect. The two mechanically possible outcomes are:

I have kept the branch aligned with #4906 and requested human schema review for the deliberate same-major deprecation exception. The separate nested-status cascade remains reserved for 4.0 in #4905.

@bokelley
bokelley force-pushed the codex/remove-deprecated-media-buy-status branch from c532500 to 7553634 Compare August 15, 2026 19: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 — breaking-class protocol change on gated paths without human approval.

This PR removes body-level lifecycle status from create/update media-buy success payloads — a breaking wire-shape change to the published protocol surface under static/schemas/source/**. The reviewer found no code-correctness, schema-drift, or docs-coherence defects in the delta (findings list is empty), and the prior changeset finding is now backed by the self-introduced DR-0011 breaking-class exception. So there are no blocking reviewer findings.

However, two hard gates independently require escalation:

  1. Gated paths (decision row 2): gated_paths: true (three static/schemas/source/media-buy/*.json files modified) AND review_decision: CHANGES_REQUESTED (≠ APPROVED). The hard approval gate is not satisfied.

  2. Breaking-class governance gate: This is a removed published field — a Breaking-class change per the constitution. Breaking-class changes are never auto-approved; ratification is a human act. Escalate unless review_decision is APPROVED, which it is not.

Escalation reasons:

  • Modifies gated schema files under static/schemas/source/** while review_decision is CHANGES_REQUESTED — human/CODEOWNERS approval required.
  • Breaking-class removal of published status field from create/update success payloads — human ratification required (DR-0011 self-introduced; needs a human on the thread).

The delta itself is clean and the developer resolved the prior changeset concern via DR-0011, but the breaking removal and unsatisfied gate require explicit human review.

Why human review

  • Gated paths: static/schemas/source/media-buy/create-media-buy-response.json, update-media-buy-response.json, and create-media-buy-async-response-submitted.json are under a hard approval gate and review_decision is CHANGES_REQUESTED (not APPROVED) — human/CODEOWNERS approval required.
  • Breaking-class protocol change: removal of published body-level status field from create/update media-buy success payloads. Breaking-class changes are never auto-approved; human ratification is required (DR-0011 is a self-introduced exception needing a human sign-off).
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/media-buy/create-media-buy-async-response-submitted.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/create-media-buy-response.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/update-media-buy-response.json (modified) matches static/schemas/source/**) and the current GitHub review decision is 'CHANGES_REQUESTED', 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.

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

Copy link
Copy Markdown
Contributor

Ladon cannot review this PR until merge conflicts are resolved.

@bokelley
bokelley dismissed aao-secretariat[bot]’s stale review August 15, 2026 20:14

Superseded by 7553634 and c766741: DR-0011 formalizes the approved exception, and the latest Ladon review reports no blocking findings and escalates only for required human approval.

@bokelley
bokelley force-pushed the codex/remove-deprecated-media-buy-status branch from c766741 to 9442965 Compare August 15, 2026 20:27

@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 — hard approval gate unsatisfied + breaking-class protocol change requires human ratification.

This PR removes the deprecated top-level status (MediaBuyStatus) field from CreateMediaBuySuccess and UpdateMediaBuySuccess for AdCP 3.2, ratified by new DR-0011. The reviewer found no code-correctness issues: schema, docs (create/update task refs, migration guide), compliance storyboard, and DR-0011 all move in lockstep with no drift; the removal is well-formed (protocol-envelope constrains root status to TaskStatus, asserted by new Test 11) and the provisional-buy not.anyOf constraint collapses cleanly. Clean diff, no findings.

However, two hard gates apply and neither can be waived by a clean diff:

Escalation reasons

  • Gated paths: static/schemas/source/media-buy/create-media-buy-response.json, update-media-buy-response.json, and create-media-buy-async-response-submitted.json are under a hard, non-overridable approval gate (static/schemas/source/**) and review_decision is REVIEW_REQUIRED — not APPROVED. Human/CODEOWNERS approval is required before merge (decision-table row 2).
  • Breaking-class protocol change: removal of a published body-level field from create/update media-buy success payloads. Per the constitution's Breaking-class hard gate, ratification is a human act and is never auto-approved unless review_decision is APPROVED — even with a correct changeset and a self-introduced exception record (DR-0011). This is a prose-based hard gate that stands because review_decision is not APPROVED.

Prior decision was escalate for the same reasons; both gate conditions still hold on this head. No blocking (critical/high) findings. Requires explicit human/CODEOWNERS sign-off to proceed.

Why human review

  • Gated paths under hard approval gate (static/schemas/source/**): create-media-buy-response.json, update-media-buy-response.json, create-media-buy-async-response-submitted.json — review_decision is REVIEW_REQUIRED, not APPROVED. Human/CODEOWNERS approval required.
  • Breaking-class protocol change: removal of the published body-level status (MediaBuyStatus) field from create/update media-buy success payloads. Breaking-class changes are never auto-approved; human ratification required (DR-0011 is a self-introduced exception needing human sign-off), and review_decision is not APPROVED.
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/media-buy/create-media-buy-async-response-submitted.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/create-media-buy-response.json (modified) matches static/schemas/source/**; static/schemas/source/media-buy/update-media-buy-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.

@bokelley

Copy link
Copy Markdown
Contributor Author

Maintainer direction confirmed during the 3.2 backlog sweep: proceed with the scoped create/update response removal in 3.2. The 3.1 certification gate already requires media_buy_status; carrying the conflicting lifecycle status longer would prolong ambiguous SDK types, while the separate nested required-field cascade remains deferred to 4.0 in #4905.

@ohalushchak-exadel this is ready for schema approval: all 46 checks are green, Ladon reports no correctness findings, and there are no unresolved review threads. Auto-merge is armed.

@bokelley
bokelley disabled auto-merge August 16, 2026 03:49
@bokelley
bokelley merged commit bb58a59 into main Aug 16, 2026
48 checks passed
@bokelley
bokelley deleted the codex/remove-deprecated-media-buy-status branch August 16, 2026 03:49
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.

spec(media-buy): remove deprecated top-level status on CreateMediaBuySuccess / UpdateMediaBuySuccess (3.2)

1 participant