It doesn't mutate, the immutable changes are abstracted via another library... however imho, it's no longer redux, but a prescriptive wrapper around it, and the usage is very alien compared to redux. Also, I'm much more inclined to use redux-thunks with async functions, which works very well, and is easier to comprehend than the wrappers for saga.
Expanding on your point — irrespective of whether in-place mutations eventually happen, it creates referential opacity using the imperative paradigm, which is contrary to Redux's ethos.
where is it from? who decided this? openning Redux motivation:
https://redux.js.org/introduction/motivation
> This complexity is difficult to handle as we're mixing two concepts that are very hard for the human mind to reason about: mutation and asynchronicity. I call them Mentos and Coke. Both can be great in separation, but together they create a mess.
And again:
> Both can be great in separation
Here we have the separation, what's the problem?