A `TestStep` is either a `PickleTestStep` or a `HookTestStep`. * When a `PickleTestStep` then the `id`, `pickleStepId`, `stepDefinitionIds` and `stepMatchArgumentsLists` are required. * When a `HookTestStep` then the `id` and `hookId` are required. So in the union of these, only the `id` is required. There are now better ways to express this in a json schemas but either we didn't have those at the time, or they didn't quite work. _Originally posted by @mpkorstanje in https://github.com/cucumber/messages/pull/249#discussion_r1752967017_