finished cleanup after shutdown failures
I changed shutdown cleanup to keep running each cleanup step after an earlier failure, then rethrow the first failure. This prevents one broken step from leaving the database, telemetry, client, or worker running.