Review findings on the bot-identity fix:
- Edit Profile sent every seeded field on save, so a color change
reverted a rename made elsewhere while the dialog was open (a thin
row with no local record even cleared the backend title). The dialog
now diffs against the values it opened with (edit-profile-look.ts)
and sends only what the user changed.
- Rows retained from an earlier paint (source unreachable or
connect-on-demand) were reconciled as fresh backend truth, reverting
a newer local title during an outage. They are now tagged `retained`
and mergeServerMeta skips them and any unreachable-source row.
- A title-only answer minted an empty direct record that shadowed a
configured alias's appearance in botRosterMeta. A title now only
corrects an existing record; the row already carries it.