d860b0d8a6
Dispose the CancellationTokenSource in AcknowledgeAsync and ShelveAsync (the TimeSpan overload holds an internal timer — leaked without using). Add StateHasChanged() to ShowOpResult so the result chip renders even if a future caller omits the finally-block re-render.