fe615a0099
Live-confirmed on the Phase B build: hermesDesktop.connections.save() succeeds and the registry on disk gains the row, but the switcher menu (fed by the renderer $connectionsRegistry snapshot) keeps painting the stale list until reload. remove() already broadcasts hermes:connections:changed; save() only did so on the dial-material-edit branch, so a brand-new connection or a label rename never reached the switcher's onChanged re-pull (or any other window). Fix at the publish seam only: saveRegistryConnection now broadcasts a new 'saved' reason for every successful save that isn't a dial-material edit. 'saved' is a pure registry-refresh signal — the use-gateway-boot listener explicitly ignores it (nothing moved, so no dispose/redial/forget), while the switcher's existing onChanged listener re-pulls the snapshot. Tests: - electron/hardening.test.ts pins both broadcast branches in saveRegistryConnection (source-assertion pattern; main.ts has no exports). - connection-switcher.test.tsx mirrors the live repro scenario (/tmp/mg-ab/w2_95393.py): menu before save lacks the row, Electron's 'saved' push arrives, menu after — without reload — shows it.