Preset rows in Settings → Agent runtimes fell back to initials because
DoctorSettingsPanel's RuntimeLogo only knew the builtin logo map, while
presets deliberately emit an empty avatar_url (no remote or user-supplied
icon URLs). Route preset ids through RuntimeIcon — the same component the
preset gallery uses — so both surfaces share PRESET_LOGOS and the per-logo
contrast treatments. Builtins keep the ProfileAvatar path; customs keep
the terminal glyph by design.
Playwright regression in harness-management.spec.ts asserts the doctor
rows render the bundled hermes/openclaw files, not initials.
Co-authored-by: Tyler Longwell <tlongwell@block.xyz>
Signed-off-by: Tyler Longwell <tlongwell@block.xyz>