Pipeline steps
Every AsyncModelCommand execute goes through IOperationExecutor. The order is CanExecute, concurrency gate, optional timeout, optional retry, optional debounce / throttle, then the delegate. Failures become Outcome and go to IErrorSink / IDialogs. ICommand.Execute never throws. ExecuteAsync still rethrows.
ConcurrencyMode values are Prevent, CancelPrevious, Queue, Allow, and Replace. Timeout, retry, Debounce, and Throttle ship on AsyncCommandOptions. CanExecuteChanged, IsRunning, and State raise on IMainThread. CanExecuteChanged is a weak event so a Button on a popped page does not pin the command.