Shutdown says what went wrong

When a mesh shuts down, the code that waits for it to finish used to convert the wait into a one-shot handle that could only ever report one thing. Anything that went wrong after that handle had already settled — a hub whose teardown failed a moment later, a background job that faulted on its way to idle — reached nobody at all: no log line, no error, nothing to search for afterwards.

Every one of those waits now stays subscribed for as long as the shutdown can still say something, so a late failure is written to the log with the address it came from. The shutdown report also carries two facts it previously threw away: whether the shutdown itself faulted, and whether running activities actually finished before the mesh was torn down.

Nothing about a healthy shutdown changes. What changes is that an unhealthy one is now visible instead of looking identical to a clean one.

Reconnecting…
The connection to the server was interrupted. Trying to restore it…
Trying again…
The connection could not be restored. Reloading the page…
The server was updated. Reloading the page to pick up the latest version.