chore(deps): update dependency oasdiff/oasdiff to v1.30.0 - #166
Open
renovate[bot] wants to merge 1 commit into
Open
chore(deps): update dependency oasdiff/oasdiff to v1.30.0#166renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
Upstream OpenAPI specNo API changes detected. |
No breaking changes from c66992bNo API changes detected after overlay. |
|
No API changes detected after overlay. |
renovate
Bot
force-pushed
the
renovate/oasdiff-oasdiff-1.x
branch
from
September 2, 2026 22:26
4001ef5 to
c66992b
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.28.0→1.30.0Release Notes
oasdiff/oasdiff (oasdiff/oasdiff)
v1.30.0Compare Source
Provable check coverage, derived severities, boolean schemas, positional prefixItems
The largest change to breaking-change detection since the checker was introduced: every check's severity is now derived from a single reviewed model of what each change does to the API contract, enforced in CI, with zero recorded exceptions. That audit produced 58 new checks and corrected the severity of 36 existing ones, so some changes that previously passed
oasdiff breakingwith a warning now fail it, and some that failed now pass. Teams that disagree with any individual verdict can override it with--severity-levels. The release also brings OpenAPI 3.1 boolean schemas (items: falsetuples), positionalprefixItemscomparison, OpenAPI 3.2 QUERY and custom methods, and a newbreaking-filescommand for pre-commit hooks.CLI changes
Severity corrections: changes that now fail
oasdiff breakingrequest-*-{max,max-length,min,min-items,exclusive-max,exclusive-min}-setchecks: adding a bound rejects values the previous contract accepted, the same shape asbecame-enum,const-addedandpattern-added, which were already errors. If your clients are known to stay within the new limit, lower the check with--severity-levels.api-security-removed,api-global-security-removed,api-security-scope-added,api-global-security-scope-added: requirements are alternatives, so removing one strands clients authenticating with it, and scopes are conjunctive, so adding one rejects tokens that lack it.response-body-any-of-addedandresponse-property-any-of-addednow matchresponse-body-one-of-added, andresponse-property-enum-value-addedis an error: the server may return a value no client was written to handle (usex-extensible-enumfor value sets that are meant to grow).response-property-pattern-removedis an error andresponse-property-pattern-changeda warning for the same reason.Severity corrections: changes that no longer fail
request-parameter-default-value-{added,changed,removed}drop from error to info, matching the body and property default checks: a default is a server-side fallback and does not change which requests are valid.response-optional-property-removedandoptional-response-header-removed: a conforming client already tolerates the element's absence.request-body-all-of-removed,request-property-all-of-removedandresponse-required-property-became-not-write-onlydrop to info on similar reasoning, andresponse-media-type-name-changedbecomes a warning with a comment naming what cannot be determined.oneOfthat keeps the original schema as one of the alternatives is now the newrequest-body-wrapped-in-one-of-original-preserved/response-body-wrapped-in-one-of-original-preservedat warning level, with a comment explaining the residual risk; a wrapping where no alternative accepts what the original did keeps the error.New checks
maxItems,maxProperties,minProperties,multipleOfanduniqueItemswere not checked at all; they now are, across request body, property and parameter and the response side, in both directions, including read-only variants and themultipleOfgeneralized/specialized cases where one bound divides the other. ThemultipleOfcomparison is exact rational arithmetic, so0.3to0.1is a generalization and a ratio merely close to an integer is not (#1205).Boolean schemas (OpenAPI 3.1)
trueandfalseschemas load and diff (#1184, #1191). A schema written as a JSON Schema boolean failed to parse before; it now loads, and the diff models it. A schema becomingfalseaccepts nothing: the new*-schema-became-falsechecks report it as an error on the request side and for a response body (the client's media type can no longer be inhabited), across body, property, parameter, parameter property and response header. The reverse transitions report as*-schema-became-not-false. A change between{}andtrueis a document edit with no contract effect: visible inoasdiff diff, silent in the changelog.items: falseis detected (#1203). Addingitems: falseto a schema that had noitemsinvalidates every array longer than the prefix and previously reported nothing.falseortrueis classified, not just counted (#1191). A media-type schema added asfalsereports asschema-became-falseinstead of an informational "schema added", and one added astrueor{}(which accepts exactly what the absent schema accepted) reports nothing instead of a spurious error on the request side.prefixItems is positional
prefixItemsentries were matched as an unordered set, so swapping[string, integer]to[integer, string]reported no change when every position now validates against a different schema. Entries are now paired by index, so a reorder or in-place edit reports as a located type change (prefixItems[subschema #​1]), andoasdiff diffshows per-position modifications.itemsschema it displaces changes nothing and now reports nothing; otherwise the eight added/removed checks report a warning with a comment explaining why the direction cannot be determined: an added entry constrains an open position whenitemsis absent but lengthens the tuple whenitemsisfalse, so the old fixed verdicts (info one way, error the other) asserted a direction the spec does not fix.OpenAPI 3.2
queryfield andadditionalOperationsmap were invisible to the diff (parked in extensions, then skipped by the fixed method list); they are now diffed like any other operation.additional-operations-*,query-field-for-3-2-plus,boolean-schema-for-3-1-plusandboolean-schema-with-other-keywordsjoinoasdiff validate.New commands
oasdiff breaking-fileschecks each changed spec against a git ref (#1183, thanks @ChrisJr404): one comparison per spec against the same path in the ref, an aggregated exit code, and a skip with a fetch hint for specs not in the base. Designed for pre-commit hooks; an example.pre-commit-config.yamlships inexamples/.oasdiff checks changelog coverageshows what the checker covers (#1174). Every possible edit to an OpenAPI document, derived mechanically from the object model (5,564 locations, 15,255 edits), with the checks that cover it or the reason it is waived.--tagsfilters by direction, area, kind, action and status;--patternslists the claim patterns. Uncovered edits and stale waivers fail the build, so the coverage listing is enforced, not aspirational.Misc
oasdiff validatefindings always carry a line and column (#1177).duplicate-required-fieldandduplicate-tagreported a file with no location.--templateformat is rejected before the specs load (#1178), like the equivalent--colormismatch, instead of after the full diff run.Go package changes
checker/rules(#1174). Every rule declares itsDirection,Area,Kind,Effect(widens, narrows, incomparable, unknown, none, violation) andGuards, andchecker.BackwardCompatibilityRulecarries them. Severity is derived from that metadata by a law enforced in tests: narrowing a request or widening a response is an error, the reverse is info, undecidable is a warning.checker/metaschema(the edit-space model) andchecker/coverage(the audit) are new packages.diffunderstands boolean schemas (#1191).SchemaDiff.AlwaysDiffcarries transitions of the JSON Schema boolean form, andSchemaRefsValidationEquivalenttreatstrueas the empty schema while keepingfalsedistinct.diffpairsprefixItemsby index (#1192).SchemaDiff.PrefixItemsDiffreports positional modifications instead of set-matched additions and deletions; consumers of the diff JSON seemodifiedentries where reorders previously produced nothing.PrefixItemsValidationEquivalentreports whether two schemas validate every prefix-covered position identically (#1200), andOneOfWrappingDiff.OriginalPreservedreports whether a oneOf wrapping keeps the base schema as an alternative (#1174).colorizepackage (#1174).checkerkeeps type and constant aliases, so existing callers compile unchanged.checker/generatorpackage is removed (#1174).Misc
toolchaindirective picks up standard-library security fixes (crypto/tls, net/url, html/template, encoding/asn1) for release binaries,go installbuilds and local builds alike;golang.org/x/textmoves past CVE-2026-56852.v1.29.1Compare Source
--flatten-allofnow flattens what your diff actually readsA single-fix release: schemas reached through a
$ref(the most common shape in real specs) were escaping allOf flattening entirely, so--flatten-allofoften had no effect. Anyone using the flag withoasdiff breakingorchangelog(via the CLI, GitHub Action, or Docker image) will see the flag start doing its job on these specs, with sharper verdicts and cleaner property paths.CLI changes
--flatten-allof$refis a separate reference sharing the definition's schema value, and the merger previously repointed only the definition's reference, leaving every use of the schema (for exampleschema: { $ref: '#/components/schemas/Pet' }under a response) reading the unmerged original. Since the diff traverses schemas through their uses, anallOfreached under a$refsurvived--flatten-allofcompletely, andoasdiff breaking --flatten-allofcould produce output identical to running without the flag. The merged content is now written into the schema every$refalready points at, so flattening takes effect at the point of use. Serialized output ofoasdiff flattenwas already correct and is unchanged.allOf[...]prefix (the branch is no longer part of the path), verdicts sharpen where a siblingallOfbranch previously hid a change, and changes under such anallOfstop carrying the unmerged-allOf disclaimer, which had been advising users to pass a flag they had already passed. All three are the intended behaviour of the flag, now applied consistently.v1.29.0Compare Source
OpenAPI 3.2 streamed bodies, honest verdicts under unflattened allOf, sharper severities
oasdiff now checks the contract of streamed bodies (SSE, JSON Lines) via OpenAPI 3.2's
itemSchema, tells you when a verdict rests on anallOfit could not compare exactly (and caps it at warning), reports a removed response schema as the error it always was, and stops the allOf flattener from dropping sixteen OpenAPI 3.1 keywords.CLI changes
OpenAPI 3.2 streamed bodies (
itemSchema)itemSchematyping each item of a streamed body (an SSE event, a JSON Lines record); oasdiff previously ignored it, so a breaking change to a streamed item's contract came back clean. All existing body checks now run against the item schema as well as the body schema, with an(item schema)marker on the message so you can tell which one changed. Five new change IDs cover an item schema appearing or disappearing:request-body-media-type-item-schema-added,response-body-media-type-item-schema-removed, andresponse-body-media-type-item-schema-removed-untypedare errors; the reverse directions are info.docs/OPENAPI-31.mdgained a 3.2 section.request body enum value removed 'b' (media type: application/json), instead of printing two indistinguishable lines.Disclaimers: saying what the comparison could not see (#1147)
allOfare capped at warning, with an explanation. Without--flatten-allof, oasdiff comparesallOfbranches one by one, so it cannot tell whether a sibling branch still provides what one branch dropped. Such verdicts previously came out as flat errors that could vanish (or appear) when the flag was added. They are now reported at most as warnings, with an appended note naming the uncertainty and the flag that resolves it, and adisclaimersarray (["all-of-not-flattened"]) in json and yaml output. A level you set explicitly via--severity-levelsstill wins over the cap.request-body-all-of-addednow reports warning instead of error as a consequence: on its own fixture,--flatten-allofreports nothing, so the unconditional error was a false positive.Severity correction
response-body-media-type-schema-removedwas a warning while both the change that contains it (removing the media type) and the change it contains (removing one required property) were errors. A media type with no schema places no constraint on the body at all, so every guarantee the consumer had is gone.oasdiff breakingreports the same set of changes as before, but pipelines gating on--fail-on ERRthat tolerated this will now fail, which is the point of the change.Flatten
unevaluatedProperties,if/then/else,dependentSchemas, and thirteen more JSON Schema 2020-12 keywords on the outer schema were silently lost from every merge, including a schema with noallOfat all, so a closed schema became open and whole validation branches disappeared from--flatten-allofcomparisons. They now pass through, andoasdiff diffbetween a spec and its flattened output no longer reports the loss. A keyword on anallOfsubschema is still not merged;docs/ALLOF.mddocuments that remaining limitation.Misc
oasdiff-cli/<version>(plus the CI platform when one is declared, e.g.github-actions) instead of an unversionedoasdiff-cli. Nothing identifying is added; this names the client, not the user.Go package changes
Disclaimers surface
checker.Changeinterface gainedGetDisclaimers() []Disclaimer(#1147). Any external implementation ofChangemust add the method (returning nil is fine;ComponentChangeandSecurityChangedo exactly that).ApiChangecarries a newDisclaimersfield and aWithDisclaimersmethod, which is additive and de-duplicating, and the newchecker.Disclaimertype serializes by name (all-of-not-flattened) in json and yaml.Misc
diff.MediaTypeDiff.ItemSchemaDifffield (#1139). A*SchemaDifffor the OpenAPI 3.2itemSchema, serialized asitemSchemain diff output, alongside the existingSchemaDifffor the whole-body schema.Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.