stepKeys top-level constant
The keys every Step subclass serialises.
Step.toJson is overridden identically in all six: the discriminator, the
step key, and the nested options. fromJson reads only the last two —
type is consumed by stepFromJson when it picks the class — but all three
are legitimate on the wire, so all three are accepted here.
Shared rather than repeated per class because it is the base-class contract
that fixes the shape, not each subclass. step_builders_test.dart decodes
every step from its own toJson output, so a step that starts emitting a
fourth key fails there.
Implementation
const stepKeys = {'type', 'key', 'options'};