$next === self::Running || $next === self::Cancelled, self::Running => $next === self::Succeeded || $next === self::Failed || $next === self::Cancelled, self::Failed => $next === self::Ready, default => false, }; } public function isTerminal(): bool { return match ($this) { self::Succeeded, self::Cancelled => true, default => false, }; } }