abandonFlow method
Mark flowId abandoned: the screen that ran it is gone (S13 §1a H1).
The Back hold stops Back and maybePop only. A host pop/go/
replace or a session teardown still disposes the screen, and during
the host's authorizer prompt this controller's spend closure can still
run afterwards — money moving under a screen that already told its host
"no transaction". An abandoned flow's closure refuses BEFORE it enters,
so that answer is structurally true. A flow that already entered is
unaffected: its payment is under way and keeps going.
Implementation
void abandonFlow(int flowId) {
if (_enteredFlows.contains(flowId)) return;
_abandonedFlows.add(flowId);
}