Three render/sidebar reliability fixes, all independently reviewed (nesquena APPROVED):
- #3875 (P0 brick): chat transcript no longer renders as just a stack of date separators with no message bodies. When a turn's only content folded into a collapsed Worklog (interrupted/autonomous run with empty final assistant message, or a reload where tool-call metadata didn't hydrate), every segment was hidden and the turn painted blank. renderMessages() now enforces a fail-safe: a settled turn never renders zero visible content.
- #3887: sidebar stall (seconds per refresh) on a state.db missing the agent's message index — WebUI now primes idx_messages_session with CREATE INDEX IF NOT EXISTS (13.3s to 0.009s self-heal).
- #3831: stale truncation watermark dropping post-edit messages on recovery/reconcile — now retired once a new turn commits to session.messages (0.0 truncate-to-empty sentinel preserved).