| D-M7-11-0 |
2026-10-16 |
The ticket was built on an integration base and ported onto main with only its own commits; the English docs and spec of main win, and text this ticket adds is English. The rows stand in a section per ticket, as for the other ported tickets. No contract change of main is needed: the brief relies on 06 13 and 15. |
The tickets are built in parallel on integration bases; main takes each ticket as one pull request; merged names win (D-W-100). |
| D-M7-11-1 |
2026-10-15 |
Tool (Design note 1): G6 is the own comparison tools/api-checks/breaking.py over the parsed YAML (PyYAML, already locked), not oasdiff; nothing new is pinned. Evidence: oasdiff 1.33.0 (darwin_all release asset) parsed docs/api/openapi.yaml and reported "No changes detected" against itself, but on mutated copies it reported no breaking change for a removed property of TypingStartedPayload (an event schema no path references) and for a changed x-authz-action of GET /instance/discovery, and it reported a removed query parameter cursor only as a warning (request-parameter-removed); it did report a removed 201 as an error. A wrapper would have needed its own comparison for the events, the action and the pagination kind anyway. |
06 13 item 7 leaves the tool open; Design note 1 asks for the own comparison when oasdiff misses a row; the rows are structural and few. |
| D-M7-11-2 |
2026-10-15 |
Base (requirement 12): the newest stable tag server/vX.Y.Z (SemVer precedence) among the tags merged into HEAD, read with git show <tag>:docs/api/openapi.yaml (and asyncapi.yaml for directions when present); any pre-release tag, not only -beta.N, is the base only when no stable tag is merged, the newest by SemVer precedence; no tag gives the notice no published version and exit 0; a tag without docs/api/openapi.yaml is an error. Only merged tags count, like last_stable_tag of tools/ci/release_prep.py, so a maintenance branch compares with its own line; CI checks out with fetch-depth: 0, so the tags are there. The gate runs when server is selected; a change under docs/api/ selects every gate component. |
Brief requirement 12 and Design note 3; the API document ships with the server (RELEASE_EXTRA_PATHS). |
| D-M7-11-3 |
2026-10-15 |
Major version exception (requirement 14): the gate accepts the findings, printed as accepted, only when the major of info.version of the working tree is higher than that of the base, also from 0.x to 1.0.0; a minor step under 0.x does not accept a break, and an info.version that is not SemVer is an error. Rules of the comparison that the 06 table leaves open: a schema's direction comes from paths, webhooks (reversed) and asyncapi.yaml, and a schema without one counts in both directions; a response property that is no longer required counts as row 1, a changed default as row 3 and, for a parameter named sort, also as row 6; a changed operationId is a rename (row 1); the pagination kind comes from the query parameters cursor, before_seq, after_seq, around_seq and an integer after (a time filter after is none); the schema of a response header is compared like a field; a removed response status is row 5, a new status passes; a changed status of a problem code or x-status of a response component is row 5, a removed problem code row 1. asyncapi.yaml changes of channels, operations and messages are not covered (brief Out of scope). |
06 13 items 4 and 5; requirement 14 says nothing else lowers the gate; an unknown direction must not hide a new required request field. |