code: public void stepFailed(StepFailedMessage stepFailedMessage) {
          ExecutingStep s = executingStep.get();
          if ( ! s.getExecutionUUID().equals(stepFailedMessage.getExecutionId())) {
              //This could happen if chorus interpreter timed out the previous step while waiting for the reply
              //Hence log to debug rather than error
              log.debug("Received a StepFailedMessage for execution id " + stepFailedMessage.getExecutionId() + " which did not match the currently executing step " + s.getExecutionUUID());
          } else {
              StepFailedException stepFailedException = new StepFailedException(
                  stepFailedMessage.getDescription(),
                  stepFailedMessage.getErrorText()
              );
              s.getCompletableFuture().completeExceptionally(stepFailedException);
          }
      }
docs: this is called by web socket thread not Chorus interpreter so log don't throw ChorusException, log errors instead