From 4cc01d1a776c979af2375a198df4d1f58a4fa3fa Mon Sep 17 00:00:00 2001 From: Peng Ying Date: Wed, 27 May 2026 22:30:10 -0700 Subject: [PATCH] fix(spectral): catch oneOf without discriminator at all schema depths --- .spectral.yaml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.spectral.yaml b/.spectral.yaml index 27a0be51..ad9f0137 100644 --- a/.spectral.yaml +++ b/.spectral.yaml @@ -61,12 +61,15 @@ rules: # Discriminators and Polymorphism (README: OpenAPI Best Practices) # ============================================================ - # oneOf must include a discriminator + # oneOf must include a discriminator (anywhere it appears — top-level + # schemas, properties, request/response bodies). oneOf implies a tagged + # union; for nullable values use anyOf instead. oneOf-must-have-discriminator: description: oneOf schemas must include a discriminator - message: "oneOf without a discriminator. See openapi/README.md#discriminators-and-polymorphism" - severity: warn - given: "$.components.schemas[?(@.oneOf)]" + message: "oneOf without a discriminator. Use anyOf for non-tagged unions (e.g. nullable values). See openapi/README.md#discriminators-and-polymorphism" + severity: error + resolved: false + given: "$..*[?(@ && @.oneOf)]" then: field: discriminator function: truthy