{"content":"Development journal for commit bf057e2c (dsh: hero Bot identity anchor survives the 0.1.5-rc hero commits).\n\nFixed the DSH 0.1.5-rc hero Bot avatar regression: after picking a Bot in a new session and sending the first task, the avatar stayed above the input box (sometimes stranded below the whale, sometimes doubled, clearing only after switching conversations). Root cause: the rc kernel moved the conversation column under new main/main.conversation slot-chain wrappers and mounts the hero in multi-pass commits, so the whale svg is briefly absent while [data-phase=hero] + the composer seat exist; the anchor climb then started from the workspace-chip folder icon or an input-bar icon and landed the identity host on rows that persist into the active phase. The climb now requires the brand svg to reach the candidate row through a direct span child (HeroShell's fish hitbox), so a missing whale fails safe; every attach sweeps orphaned identity hosts (kills the duplicate-avatar class); a connected host must still sit directly above the live headline or it releases and re-anchors; release() is try/finally so a throwing unmount cannot strand the host. Verified live on 3080 (invariant tests: whale-removed -> 0 hosts, injected stray swept, whale-restored -> exact re-anchor; E2E: pick Bot -> avatar above whale -> first message -> 0 hosts anywhere).\n\nVerification:\ncd dsh-plugin && node --test --test-concurrency=1 tests/*.test.mjs (428/428 pass, worktree build) + scoped 12/12 on main merge result\n\nFiles:\ndsh-plugin/src/client/hero-identity.ts\ndsh-plugin/tests/hero-identity.test.mjs","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}