use a process variable for that. the problem with end-states is that 1) everyone wants a different set of end states. so specifying a limited set of process ending states would always be limiting some users. 2) if we define ending states, we should do it for the tokens as well.
so the conclusion was that we opted for users to use process variables for this.
Ok, I can see that. What if we forget about 'automatic determination' and simply provided a processInstance.cancel() method that would set a flag and call processInstance.end() (maybe with an optional 'reason' parameter).
It just seems that process cancellation is such a fundamental concept to process management that it should be addressed somehow in the APIs, even if its just setting a flag and calling end(). That would preempt several of the "where's the 'cancel' mechanism" questions I've seen, as well as making reporting simpler (especially among my own development team ;-) ).
I'll appologize now in case this is just beating a dead horse.