Earlier quoted context omitted.
Idk why people are saying that ES data is always immutable. They can be by default sure, but if a facility is useful to change the history, why not?
If you need to change history you can just create new events that accomplish your mutation -- and even mark them as a type 'change history' or some such obvious identifier so when you inspect the event stream you know exactly what you are looking at.
You'd read the cancel events first and simply skip the events they point to.