Skip to content

docs(versioning): state the rules for what changes between releases - #8704

Merged
bokelley merged 3 commits into
mainfrom
docs/versioning-three-rules
Nov 9, 2026
Merged

bokelley merged 3 commits into
mainfrom
docs/versioning-three-rules

Conversation

@KonstantinMirin

@KonstantinMirin KonstantinMirin commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

This is the alternative proposed on #8519, for discussion alongside it at the Nov 9 session. It changes docs only.

The idea is simple: a standard defines what goes on the wire between two parties, and how a library gets there isn't part of it. So version-to-version can come down to four rules, now at the top of the versioning page:

  1. A minor only adds. New fields go on open schemas. Nothing is removed, renamed, retyped or made required, and closed schemas stay closed until the next major. DR-0036 and the additive-minor check already give us this for schemas.
  2. To replace a field, add the new one and deprecate the old one. Senders emit both until the next major.
  3. Removals and breaking changes happen in a major.
  4. A minor never adds a field to a mutating request if an older seller that ignores it would commit to something different. Spend, targeting, caps, bidding, creative activation, measurement and account identity are examples, not the full list. Such a field waits for the next major, or ships behind a capability the seller declares first. This is the rule Brian proposed on docs(governance): DR-0032 and DR-0033, revised against DR-0036 #8519.

What the diff does:

  • Brings the scope, stability, deprecation and breaking-change sections of the page into line with the rules. They used to allow renames, tightened validation and optional to required within a major.
  • Removes the text that told SDKs what to do or described translating between versions. Negotiation, adcp_version, supported_versions, the echo and served-release validation all stay as they are.
  • Fixes one sentence in the create_media_buy reference that said new keys could join a closed schema in a minor.

The page says plainly that the shipped 3.0 → 3.1 → 3.2 moves didn't all follow these rules. They stay as history until 4.0.

The 3.3 exceptions table is untouched apart from one clause that cited the old scope text. Some of its entries sit awkwardly with rule 3, so that's worth talking through as well. This PR doesn't touch governance files or anything proposed in #8519, and it leaves #8433 to that discussion.

Happy to go through it on Nov 9.

A minor only adds. To replace a field, add the new one and deprecate the old one, and emit both until the next major. Removals and breaking changes happen in a major.

Put those rules at the top of the versioning page and bring the scope, stability and deprecation sections into line with them. Remove text on that page that told SDKs what to do or described translating between versions. Wire behavior is unchanged.

@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: Comment (human reviewer recommended)

Comment — governance-class question requires a human eye.

This is a clean docs-only PR aligning the versioning page with DR-0036 (minor = adds only; closed schemas stay closed within a major; removals/breaking wait for a major). The create_media_buy.mdx correction is verified correct against canonical-metric-qualifier.json (additionalProperties: false), all new anchors resolve, internal consistency holds, and a correct patch-scope changeset is present. The reviewer surfaced no Critical/High/Medium code findings.

Why not approve: the reviewer explicitly flagged the patch-vs-Normative decision-class question as a governance gate for the arbiter — DR-0036 is status: proposed / pending ratification. Under the repo's constitution, a PR that decides a question of protocol policy/convention or encodes a not-yet-ratified decision record is a human act, not an auto-merge. review_decision is REVIEW_REQUIRED, not APPROVED. These normative docs edits codify the still-pending DR-0036 interpretation of what "minor" vs "major" may change, so a human should confirm ratification before merge rather than letting it auto-approve on a mechanically clean diff.

No blocking findings exist, so this is not request-changes. high_risk is true only via a (modified) docs/reference file with zero medium-or-higher findings, so the high-risk flag alone does not escalate. Surfacing for human sign-off on the governance/ratification status.

Medium findings: none.

@bokelley bokelley 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.

Approved on Brian's instruction. The WG confirmed the four rules on Nov 9 with no objections. The same session decided that 3.x opens the schemas that were meant to be open, so the 'closed schemas stay closed until the next major (DR-0036)' sentence is corrected in the DR-0036 rewrite that follows.

@bokelley
bokelley merged commit fc3c5bd into main Nov 9, 2026
37 checks passed
@bokelley
bokelley deleted the docs/versioning-three-rules branch November 9, 2026 16:37
bokelley added a commit that referenced this pull request Nov 9, 2026
…aw DR-0032 and DR-0033

The working-group session of 2026-11-09 reversed DR-0036's draft rule
that a closed schema stays closed for the whole major. DR-0036 now
records the decision: schemas are open within a major, and a schema is
closed only for a structural reason (oneOf disjointness, a closed key
set or vocabulary, or a signed or binding payload). Opening a 3.x schema
closed without such a reason is a correction that 3.3 and a 3.2.x patch
make. The record states the rule and leaves entries to the corrections
register, following Konstantin Mirin's rewrite in #8777.

- DR-0019 is superseded by DR-0036.
- DR-0032 and DR-0033, proposed in #8519 and never ratified, are
  recorded as withdrawn in favor of the versioning rules of #8704, so
  their IDs stay reserved.
- versioning.mdx drops "closed schemas stay closed until the next
  major" and describes opening as a correction, including in patches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 10, 2026
…aw DR-0032 and DR-0033

The working-group session of 2026-11-09 reversed DR-0036's draft rule
that a closed schema stays closed for the whole major. DR-0036 now
records the decision: schemas are open within a major, and a schema is
closed only for a structural reason (oneOf disjointness, a closed key
set or vocabulary, or a signed or binding payload). Opening a 3.x schema
closed without such a reason is a correction that 3.3 and a 3.2.x patch
make. The record states the rule and leaves entries to the corrections
register, following Konstantin Mirin's rewrite in #8777.

- DR-0019 is superseded by DR-0036.
- DR-0032 and DR-0033, proposed in #8519 and never ratified, are
  recorded as withdrawn in favor of the versioning rules of #8704, so
  their IDs stay reserved.
- versioning.mdx drops "closed schemas stay closed until the next
  major" and describes opening as a correction, including in patches.

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

The working-group session of 2026-11-09 reversed DR-0036's draft rule
that a closed schema stays closed for the whole major. DR-0036 now
records the decision: schemas are open within a major, and a schema is
closed only for a structural reason (oneOf disjointness, a closed key
set or vocabulary, or a signed or binding payload). Opening a 3.x schema
closed without such a reason is a correction that 3.3 and a 3.2.x patch
make. The record states the rule and leaves entries to the corrections
register, following Konstantin Mirin's rewrite in #8777.

- DR-0019 is superseded by DR-0036.
- DR-0032 and DR-0033, proposed in #8519 and never ratified, are
  recorded as withdrawn in favor of the versioning rules of #8704, so
  their IDs stay reserved.
- versioning.mdx drops "closed schemas stay closed until the next
  major" and describes opening as a correction, including in patches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
…aw DR-0032 and DR-0033 (#8858)

* docs(governance): DR-0036 records open schemas within a major; withdraw DR-0032 and DR-0033

The working-group session of 2026-11-09 reversed DR-0036's draft rule
that a closed schema stays closed for the whole major. DR-0036 now
records the decision: schemas are open within a major, and a schema is
closed only for a structural reason (oneOf disjointness, a closed key
set or vocabulary, or a signed or binding payload). Opening a 3.x schema
closed without such a reason is a correction that 3.3 and a 3.2.x patch
make. The record states the rule and leaves entries to the corrections
register, following Konstantin Mirin's rewrite in #8777.

- DR-0019 is superseded by DR-0036.
- DR-0032 and DR-0033, proposed in #8519 and never ratified, are
  recorded as withdrawn in favor of the versioning rules of #8704, so
  their IDs stay reserved.
- versioning.mdx drops "closed schemas stay closed until the next
  major" and describes opening as a correction, including in patches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(versioning): a deprecation needs no minimum notice before a major removes it

Brian O'Kelley ruled on 2026-11-10 that a deprecation needs no minimum
notice period before its removal in the next major. A deprecated
feature is never removed within the major that deprecated it. The next
major may remove it with no minimum notice, because removals are what a
major is for. The previous major's support window of at least 12 months
after the successor's GA protects implementers. Experimental surfaces
keep their 6-week notice within a major. The ruling is open for
working-group comment on RFC #8756 until 2026-12-04.

The versioning page's deprecation policy, the cadence table, the
specification lifecycle (text and diagram), and the pages that cited
the 6-month notice now say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(schemas): the seller_id alias descriptions cite the deprecation policy without a notice period

The deprecated `seller_id` alias on `sync_event_sources` and
`sync_audiences` results said its removal was "subject to the
deprecation policy's six-month notice window". Under the 2026-11-10
ruling the policy sets no minimum notice before a major removes a
deprecated field, so the descriptions now say "subject to the
deprecation policy". Description-only; no validation change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
bokelley added a commit that referenced this pull request Nov 12, 2026
Draft of theme T3 of RFC #8756 as a proposed decision record. It covers
the #8704 rules for 4.x, including the rule 4 capability exception, and
the additive-minor check from 4.0.0 with an empty baseline. It sets a
fixed list of structural reasons for closing a schema, with named
rejections. It makes deprecation dispositions machine-readable. It
allows removal in a major with no minimum notice, protected by the
previous major's support window, with N pending. It puts a four-minor
clock on experimental surfaces and carries DR-0024 unchanged.

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants