Application.start ran mark_all_offline unconditionally, which meant every "mix run"/"mix ecto.migrate" invocation would flip all connected hosts to offline. Gate the call on Phoenix.Endpoint.server? so non-serving boots don't disturb live state.