protected function fail($message): void
    {
        if (is_string($message)) {
            $message = new RuntimeException($message);
        }
        $this->errors[] = $message->getMessage();
        throw $message;
    }