#297 added a census of the keys the parsed OpenAPI model names no field for, and
wired it to every object that lowers to a node carrying an Unmodeled map: the
document root, info (with contact and license), the root externalDocs, servers and
their variables, tags, operations, parameters, request bodies, media types,
responses (both the success and the error lowering), headers, security schemes and
every schema position.
The rest of the extension-bearing objects are still uncovered, for one of three
reasons.
No carrier today. example, link, encoding, oauthFlows and each flow
inside it, discriminator, xml, and externalDocs below the document root lower
to no node that holds an Unmodeled map, or to one the lowering has no handle on
at that point. #345 is adding exactly those carriers for vendor extensions, keyed
by the same scheme; the census for these objects belongs on top of that rather than
duplicating its scaffolding.
A library gap. A Path Item Object's undeclared key never reaches the census at
all: marshaller folds an unrecognized key into the path item's embedded
operations map and reports a type-mismatch validation finding instead, so
GetUnknownProperties returns nothing for it. Verified at
speakeasy-api/openapi v1.24.0. Preserving one needs the raw node read directly,
the shape dependentRequired already uses.
Not applicable. paths, responses and callbacks are sequenced maps where
every key is a valid entry, so an object-level census has nothing to say about
them.
Correction. This originally listed components alongside them. It does not
belong there: openapi/core.Components is a fixed-field struct, not an embedded
sequenced map, so the library does take its census and a key the Components
Object does not define was reaching neither an Unmodeled entry nor a
diagnostic. It is swept in #356 rather than deferred here.
Scope: extend the census to the first group once #345 lands, and decide separately
whether the path-item case is worth a raw-node read.
#297 added a census of the keys the parsed OpenAPI model names no field for, and
wired it to every object that lowers to a node carrying an
Unmodeledmap: thedocument root, info (with contact and license), the root externalDocs, servers and
their variables, tags, operations, parameters, request bodies, media types,
responses (both the success and the error lowering), headers, security schemes and
every schema position.
The rest of the extension-bearing objects are still uncovered, for one of three
reasons.
No carrier today.
example,link,encoding,oauthFlowsand each flowinside it,
discriminator,xml, andexternalDocsbelow the document root lowerto no node that holds an
Unmodeledmap, or to one the lowering has no handle onat that point. #345 is adding exactly those carriers for vendor extensions, keyed
by the same scheme; the census for these objects belongs on top of that rather than
duplicating its scaffolding.
A library gap. A Path Item Object's undeclared key never reaches the census at
all:
marshallerfolds an unrecognized key into the path item's embeddedoperations map and reports a type-mismatch validation finding instead, so
GetUnknownPropertiesreturns nothing for it. Verified atspeakeasy-api/openapi v1.24.0. Preserving one needs the raw node read directly,the shape
dependentRequiredalready uses.Not applicable.
paths,responsesand callbacks are sequenced maps whereevery key is a valid entry, so an object-level census has nothing to say about
them.
Scope: extend the census to the first group once #345 lands, and decide separately
whether the path-item case is worth a raw-node read.