libopenapi (our parser) drops draft-04/07 spellings and mishandles a few valid 2020-12 constructs in its index-free build path. A schema-structure-aware YAML pre-pass (run in frontend.Load before handing the tree to libopenapi, like the existing $ref-strip) should normalize:
definitions → $defs, draft-04 id → $id, array-form items → prefixItems (and additionalItems → items)
- boolean
unevaluatedItems (true/false) → equivalent schema object ({} / {"not":{}}). libopenapi types UnevaluatedItems as a plain *SchemaProxy (not DynamicValue[…,bool]) and errors on a boolean — 35 JSON-Schema-Test-Suite schemas fail to load because of this.
The pass must be applicator-aware: id/items/definitions are also valid property names and data, so a blind rename would corrupt schemas. This unblocks ogen parity on OpenAPI 3.0 meta-schemas / Swagger and the boolean-unevaluatedItems suite failures (currently logged as review items by the sanity-not-strict suite walk).
libopenapi (our parser) drops draft-04/07 spellings and mishandles a few valid 2020-12 constructs in its index-free build path. A schema-structure-aware YAML pre-pass (run in
frontend.Loadbefore handing the tree to libopenapi, like the existing$ref-strip) should normalize:definitions→$defs, draft-04id→$id, array-formitems→prefixItems(andadditionalItems→items)unevaluatedItems(true/false) → equivalent schema object ({}/{"not":{}}). libopenapi typesUnevaluatedItemsas a plain*SchemaProxy(notDynamicValue[…,bool]) and errors on a boolean — 35 JSON-Schema-Test-Suite schemas fail to load because of this.The pass must be applicator-aware:
id/items/definitionsare also valid property names and data, so a blind rename would corrupt schemas. This unblocks ogen parity on OpenAPI 3.0 meta-schemas / Swagger and the boolean-unevaluatedItemssuite failures (currently logged as review items by the sanity-not-strict suite walk).