I mean... no... the entire point of Redux is that it enforces immutability.
Make a mutation-first state library for sure, but don't pass it off under the guise of "Redux", or insinuate that reasoning about Redux at scale would be any more difficult than doing so with your own state library at the same scale.
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?
Use Reduxsauce to respect Redux immutability. It doesn't wrap the saga, but it offer the best way to wrap your reducers/actions/types. When I say best way, it means perfect balance between: no features looses - code size - usability.