Tested on current main 5f1f604733 with the Linux web dev server and an isolated native Claude installation. Ran the app update from 2.1.309 to 2.1.310 twice: once unauthenticated, once with API-key authentication. Both completed normally; the sidebar showed “Claude updated: v2.1.310”, and page/provider refreshes did not leave an active spinner. Each trace included a successful setProviderMaintenanceActionState after refreshAfterUpdate. This did not exercise the 0.0.40 → 0.1.2 service upgrade or the reverse proxy.
Please attach the redacted raw server.trace.ndjson records for the affected update RPC and its child spans, including traceId, parentSpanId and exit, rather than only the summarized timeline. If it happens again, also include the Claude provider snapshot/updateState while the pill is stuck, before restarting. Those records are needed to distinguish a missing terminal write from a later state overwrite or incomplete trace.