Skip to content

fix(schema): available_installment_statuses moves to the canonical reporting capabilities (#8501) - #8957

Merged
bokelley merged 1 commit into
mainfrom
fix/8501-available-installment-statuses-canonical
Nov 12, 2026
Merged

bokelley merged 1 commit into
mainfrom
fix/8501-available-installment-statuses-canonical

Conversation

@bokelley

Copy link
Copy Markdown
Contributor

Refs #8501. This PR is the "available_installment_statuses (experimental) | get_products | Move to core/canonical-reporting-capabilities.json" row of the deprecated-task table.

This merges only after the consent window closes on Fri 2026-11-13, before the 3.3 RC. static/schemas/source/** is Ladon-gated, so a human merges it.

Summary

The experimental available_installment_statuses (media_buy.installment_lifecycle, #8116) was defined only on core/reporting-capabilities.json. On main the only schema that uses that file is the legacy core/product.json, so the field existed only on the deprecated get_products surface, and 3.3 adds no field that exists only on a deprecated task. This PR moves it to core/canonical-reporting-capabilities.json. That's the canonical product's reporting capabilities, returned by list_products, request_proposals and refine_proposals, which already carry supports_installment_breakdown. The move waited for the canonical block to open, and #8866 opened it (DR-0036).

Thanks to Konstantin Mirin for the plan, and for "yes please, it's yours" on #8501, which handed this move to us.

  • Schemas. The property moves unchanged: same items (enums/installment-status.json), uniqueItems, description, x-status: experimental and x-added-in: 3.3.0. It sits right after supports_installment_breakdown, which it qualifies. Nothing else changes in either file.
  • Docs. The installment lifecycle section of optimization-reporting.mdx (the "not reported versus not delivered" rule, and the example now validates against canonical-reporting-capabilities.json), the get_media_buy_delivery reference and the experimental status row say where the field lives. The 3.3 release pages are docs(reference): bring the 3.3 release docs to 3.3.0-rc.0 #8883's.
  • Tests. tests/installment-lifecycle-reporting.test.cjs validates the declaration against the canonical schema, checks the property's metadata there, and checks that the legacy schema no longer declares it.
  • Changeset. minor.

Wire effect. A 3.3 seller declares available_installment_statuses on the canonical product's reporting_capabilities. On a get_products product it is no longer defined. That schema is open, so a validator ignores it there rather than rejecting it. Nothing in the training agent, storyboards or scripts reads the field.

Beta impact. The field shipped in 3.3.0-beta.0 through beta.5 on the legacy schema. The betas are immutable, and this is a beta-to-beta change.

Testing

On main c951012f5e + cbbe356c00, run sequentially:

  • npm run build:schemas: pass.
  • npm run test:schemas: 1206 tests, 0 failures. tests/installment-lifecycle-reporting.test.cjs passes 15/15, including the new "declares available_installment_statuses on canonical reporting capabilities only".
  • npm run test:mcp-schema-projection 42/42, npm run test:examples, and npm run test:contracts 517/517: pass.
  • product-discovery-schema-parity 4/4, so the compact-discovery tools/list budget holds with the property on the canonical product.
  • npm run lint:additive-minor (4 recorded, 0 new), test:additive-minor, npm run build:compliance -- --check, JSON-schema validation of optimization-reporting.mdx, and the changeset scope check: pass.
  • Pre-push: version sync, changeset policy and docs validation (58/58) pass. The storyboard matrix didn't run, because the PR has no training-agent or compliance change.

Local hook

Committed with HUSKY=0, with the release coordinator's approval. The hook's server-unit stage times out at this host's load, so it was skipped. This PR touches no server file. CI is the gate. I ran the other hook steps by hand:

  • The dynamic-import, format-identity and callApi guards, npm run typecheck and the image check pass.
  • npm run test:unit passed 1283/1284. The one miss was a 10s load timeout in billing/stripe-client.test.ts, and that file passes 57/57 on its own.

🤖 Generated with Claude Code

…porting capabilities (#8501)

The experimental available_installment_statuses (media_buy.installment_lifecycle,
#8116) was defined only on core/reporting-capabilities.json, which only the
deprecated get_products product uses, and 3.3 adds no field that exists only
on a deprecated task. It moves unchanged to
core/canonical-reporting-capabilities.json, beside
supports_installment_breakdown, on the canonical product that list_products,
request_proposals and refine_proposals return. #8866 opened that block
(DR-0036), so the move can land in 3.3.

Same items, uniqueItems, description, x-status: experimental and
x-added-in: 3.3.0. The installment lifecycle docs, the get_media_buy_delivery
reference and the experimental status row say where it lives, the docs
example validates against the canonical schema, and the test checks the
declaration there and its absence from the legacy schema. Minor changeset.

Konstantin Mirin handed this move over on #8501.

Refs #8501

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@bokelley
bokelley marked this pull request as ready for review November 12, 2026 18:04

@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 requires human/CODEOWNERS approval.

This PR modifies published protocol source under static/schemas/source/** (canonical-reporting-capabilities.json, reporting-capabilities.json), which is a deterministic hard approval gate (gated_paths: true). The current review_decision is REVIEW_REQUIRED, not APPROVED, so per decision rule row 2 the gate is not satisfied and the outcome must be escalate.

Escalation reasons

  • static/schemas/source/core/canonical-reporting-capabilities.json — gated schema-source path modified; requires human/CODEOWNERS approval.
  • static/schemas/source/core/reporting-capabilities.json — gated schema-source path modified; requires human/CODEOWNERS approval.

No blocking findings on the merits: the reviewer found the change to be a clean, tightly-scoped relocation of the experimental available_installment_statuses field from the deprecated get_products surface to the canonical surface, with schema↔docs coherence verified, both schemas open (additionalProperties: true), tests updated, dist/** untouched, and a defensible minor changeset present. Once a human/CODEOWNERS approval lands (review_decision: APPROVED), this would fall through to the normal decision table and approve.

Why human review

  • static/schemas/source/core/canonical-reporting-capabilities.json modified — gated schema-source path requires human/CODEOWNERS approval (review_decision is REVIEW_REQUIRED, not APPROVED)
  • static/schemas/source/core/reporting-capabilities.json modified — gated schema-source path requires human/CODEOWNERS approval (review_decision is REVIEW_REQUIRED, not APPROVED)
  • This PR touches a path under a hard, non-overridable approval gate (static/schemas/source/core/canonical-reporting-capabilities.json (modified) matches static/schemas/source/**; static/schemas/source/core/reporting-capabilities.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.

@aao-secretariat aao-secretariat Bot added the ladon/needs-human-review Ladon has escalated this PR for human review. label Nov 12, 2026
@bokelley
bokelley merged commit 7dd93fe into main Nov 12, 2026
71 checks passed
@bokelley
bokelley deleted the fix/8501-available-installment-statuses-canonical branch November 12, 2026 19:04
bokelley added a commit that referenced this pull request Nov 12, 2026
…8957

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…se docs

#8762 (sla-window back to its 3.2 shape, business time on the creative
review SLA) and #8957 (available_installment_statuses on the canonical
reporting capabilities) merged; #8762's own release-doc lines arrive with
the rebase. Drop both from the dependency markers, name the canonical
product's reporting_capabilities in the release-notes
media_buy.installment_lifecycle row, and refresh the #8501 row of the
in-review table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…8957

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…se docs

#8762 (sla-window back to its 3.2 shape, business time on the creative
review SLA) and #8957 (available_installment_statuses on the canonical
reporting capabilities) merged; #8762's own release-doc lines arrive with
the rebase. Drop both from the dependency markers, name the canonical
product's reporting_capabilities in the release-notes
media_buy.installment_lifecycle row, and refresh the #8501 row of the
in-review table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…8957

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…se docs

#8762 (sla-window back to its 3.2 shape, business time on the creative
review SLA) and #8957 (available_installment_statuses on the canonical
reporting capabilities) merged; #8762's own release-doc lines arrive with
the rebase. Drop both from the dependency markers, name the canonical
product's reporting_capabilities in the release-notes
media_buy.installment_lifecycle row, and refresh the #8501 row of the
in-review table.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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