def METHOD_NAME(cls, e: ExecFailureException, user_logs: Logs) -> ExecutionState:
    """Translates a ExecFailureException into a failed ExecutionState we can persist.
    We explicitly require `user_logs`, because the exception does not contain that context, so
    this will force us to explicitly think about when we want to persist logs.
    """
    return cls(
        user_logs=user_logs,
        status=ExecutionStatus.FAILED,
        failure_type=e.failure_type,
        error=Error(
            tip=e.tip,
            context=e.context,
        ),
    )