OnChildFinishedAsync ignored CancelAsync's result. If a chain successor sat in a non-cancellable state (e.g. parked to Idle out of band) when its predecessor failed/was cancelled, CancelAsync was a silent no-op and the cascade stopped there, leaving the rest of the chain Queued+blocked forever. Now it walks past any link CancelAsync can't touch and keeps cancelling downstream.