Expose per-state schemas on machine state nodes - #5617
Merged
davidkpiano merged 1 commit intoJul 31, 2026
Conversation
🦋 Changeset detectedLatest commit: 4d85b8c The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
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.
Problem
setup()lets you declare schemas for individual states, but they never made it onto the compiled machine. Only the root-levelschemaswere merged in — anything declared understateswas silently dropped:This meant tooling that only has access to the machine (e.g. a per-state snapshot validator, docs generation, serialization) couldn't see the per-state schemas at all — they were only reachable through the
setup()return value.Fix
createMachinenow recursively merges the setupstatesschema tree into the machine config, andStateNodeexposes aschemasproperty:Merge rules follow the existing root-level behavior: setup schemas win over inline config schemas, and setup states with no matching config state are ignored.
Notes
machine.states.X.schemasis typed as the looseSetupStateSchemas({ context?; input? }), not the precise declared schema types. Narrowing it is a possible follow-up.Next_MachineConfignow omitsschemasfrom the state-node config it extends, so the new per-state field doesn't collide with the machine-levelschemasoption (no change to the publiccreateMachinesurface).