Enforce required on object schemas without properties - #708
Closed
MajdSehwail wants to merge 1 commit into
Closed
Conversation
Cast.Object short-circuits object schemas that declare neither properties nor additionalProperties, so their required list never runs. Either/or arms written as bare required-only object schemas therefore enforce nothing under anyOf and reject every value under oneOf. The short-circuit now checks required first; a required name counts as present when the input carries the atom key or its string form, since no property declarations exist to atomize keys. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Fixes #706.
Cast.Object's short-circuit for schemas with neitherpropertiesnoradditionalPropertiesreturned the value without ever runningrequired. The clause now checksrequiredfirst. Because no property declarations exist to atomize keys, a required name counts as present when the input carries the atom key or its string form.This closes the silent either/or failure:
anyOfarms written as bare%Schema{type: :object, required: [...]}accepted every body, and the same arms underoneOfrejected every body via the more-than-one-schema-validates rule.Regression tests: a property-less
requiredschema rejects a missing key and accepts both string- and atom-keyed input.Full test suite: 9 doctests, 390 tests, 0 failures.
🤖 Generated with Claude Code