* fix/ 0:00 audio ui
* fix/ persist memoir image state and collapse voice history
Keep generated chapter images from staying in processing after successful uploads, and restore segmented voice recordings as a single audio message when reopening conversations.
Made-with: Cursor
* fix/ persist local conversation state and stabilize voice UI
Keep CreateMemory conversations driven by Room so recent text and audio survive page exits, and prevent stale 0:00 voice bubbles while list ordering follows the latest local message time.
Made-with: Cursor
* fix/ server-side root cause for conversation list time and message timestamps
- Add Conversation.last_message_at column with migration and index
- Update last_message_at on text message, audio segment, and AI response
- Sort conversation list by COALESCE(last_message_at, started_at) DESC
- Return real per-message timestamps from Redis history instead of now()
- Pass user_message_timestamp through agent pipeline to avoid LLM delay skew
- Remove all debug logging from server, client, and CI workflow
- Restore import json in conversation_agent (was broken by debug removal)
- Client: remove DebugRuntimeLogger, stop sending transcript as text message
Made-with: Cursor
---------
Co-authored-by: Kevin <kevin@brighteng.org>