registry = $registry; } public function run(Step $step, Workflow $workflow, WorkflowRun $workflowRun): void { $action = $this->registry->getAction($step->getKey()); if (!$action) { throw new InvalidStateException(); } $validationResult = $action->validate($workflow, $step, $workflowRun->getSubjects()); if ($validationResult->isValid()) { $action->run($workflow, $workflowRun, $step); } else { throw InvalidStateException::create()->withErrors($validationResult->getErrors()); } } }