и если вручную идти через Repo.transaction(fn -> end), то не стоит забывать о ручном вызове Repo.rollback.
а то после Multi у меня был баг, что внутри транзакции был with, который возвращал error, но не вызывал rollback.
в результате Repo.transaction возвращало {:ok, {:error, _}} как ни в чем не бывало