> The problem with durable execution is that your entire workflow still needs to be idempotent.
Yes, but what that means depends on your durability framework. For example, the one that my company makes can use the same database for both durability and application data, so updates to application data can be wrapped in the same database transaction as the durability update. This means "the work" isn't done unless "recording the work" is also done. It also means they can be undone together.
> This means "the work" isn't done unless "recording the work" is also done. It also means they can be undone together.
That's just another way of saying that the step in question is idempotent.
A lot of work can be wrapped inside a database transaction, but never everything. You're always going to want to interact with external APIs eventually.