Rollback errors
Thrown as RollbackError (code: "rollback"). Each entry is an identifier (error.id), then the message as the error states it, where {expression} stands for the value of that expression in the source ({…} for one too long to show), then what to do about it: the text useFullErrorMessages(messages) and explain(error) add, where {name} stands for the error's parameter of that name. See Errors.
rollback.batchFailed
The batch failed at its step "{reason.step}" and was rolled back; error.reason holds { step, error, completed }.
Call repo.transaction(batch) instead of transactionOrThrow() to get it back as a failed Result.
rollback.called
The transaction was rolled back: tx.rollback(reason) was called, and the reason is error.reason.
Call repo.transaction() instead of transactionOrThrow() to get the reason back as a failed Result.
rollback.statementFailed
The transaction was rolled back because a statement in it failed and the callback returned anyway (the statement's error is error.reason).
Let the error propagate, or run the statement that may fail in a nested tx.transaction().

