Copilot review r3. Three findings, all the same root: a
ServerListReloadError rejects after the write succeeded, so any consumer
still reading "rejection" as "the write failed" now says something false.
- `useImportClientConfig.applyEntry` gave a successfully imported server a
red "Failed" badge. It now reports the intended status and puts the
reload message in `detail`, which renders in red beneath it either way —
so the failure stays visible without claiming the row wasn't created.
- The settings-draft toast said "Failed to save settings". It now branches
its title; this toast is the only signal there, since the modal has
usually closed by the time a flush rejects.
- An edit modal left open by a failed reload kept targeting the old id.
When the row landed under the new one, `configModalTarget` went
undefined and ServerConfigModal's own reset blanked the open form and
cleared the error it was showing. An edit/clone modal whose target has
left the list now closes — adjusted during render via `useValueChange`,
so no frame paints the blanked form. That also covers the ordinary case
of an external mcp.json edit removing the server being edited.
The reachability here is not remote: the write is what triggers the
backend's change broadcast, so the SSE-driven refresh that lands the
renamed row is the likely next event.
Also adds the regression test r3 asked for on the add path — the
highlight batch has to be marked from the catch for the same reason the
rename is. Both new App tests and the import one fail without their fix.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UL9retfvAXRgvi6EWk4SY4
Signed-off-by: cliffhall <cliff@futurescale.com>