3db6375459
Selecting a node in Settings > Wallet > Node moved the checkmark and persisted the choice, but the live session never switched: the node client is baked into the wallet instance at open time and was only rebuilt on the next unlock, so a running wallet kept polling the old (often dead) node. Owners onboarded on an older build still carry the retired grinnode.live default in connections.toml, which now 502s, so the wallet showed a stuck zero balance with no way to recover short of a force-restart. GRIM's own connection-settings UI reconnects on change (close + reopen); the Goblin node picker only called update_connection, so this was a Goblin regression, not inherited upstream. - Wallet::reconnect_node swaps the live node client's URL + secret in place via w2n_client (no close/reopen, so no password re-entry), updates the runtime connection so the UI reflects the switch at once, clears the stale sync error, and wakes the sync thread to refresh against the new node. Wired into all three picker actions. - node_url_secret factored out of create_node_client so open and live reconnect always resolve the same node for a given config. - balance_hero no longer renders a bare 0 during a node outage: a pure balance_subline state machine picks updating / can't-reach-node / last-known-balance, so an unreachable node reads honestly instead of looking like an emptied wallet. New goblin.home.balance_stale string in all six locales (drift green). - Unit tests for the balance state machine.