v1.3.1
What's New
LLM Cross-Validation
- LLM output cross-validation: New
pkg/llmvalidatepackage performs a second LLM call on every AI response to simultaneously validate JSON structure and audit content safety - Fact-checking with web search: Cross-validation integrates Firecrawl search results to verify factual claims against web sources, flagging inconsistencies and unverified data
- Content safety review: Automated detection of harmful content (crisis hotline appended), unqualified medical advice (disclaimer appended), and sensitive information leakage (API keys, system prompt fragments)
- Local text sanitization: Unified
Sanitize/StripCodeFencefunctions consolidate scattered cleanup logic (Qwen3<think>tag stripping, markdown code fence removal) from 5 service files into one reusable package - Knowledge Q&A mode: All 3 companion system prompts (Mom/Dad/Professional) now instruct the AI to answer factual and knowledge questions directly with specific, useful information instead of deflecting with emotional encouragement
Dad Console
- Dad chat style preference: New
dad_chat_stylefield (terminal/ambient) stored in user model; selectable from dad profile with migration backfill - Image zoom preview: Full-screen image preview for task proof photos and memory cards
- Dad daily briefing cache: AI-generated daily briefing cached in sessionStorage to avoid regeneration on page refresh
Tasks & Whisper
- Memory card regeneration: Mom can regenerate verified task memory cards via
POST /tasks/:id/card/regenerate - Whisper pre-generation on login: Mom login triggers background pre-generation of daily whisper questionnaire
Bug Fixes
- Graceful pgvector handling: Database migration no longer crashes when pgvector extension is unavailable; RAG features are disabled with a warning instead of fatal error
- Nil pointer crash on new user: Fixed
PreGenerateForUserpanic when a mom user has no partner bound - Backend auto-restart: Entrypoint wraps backend in auto-restart loop with health check before starting nginx
- UTF-8 truncation bug: Community post preview now uses
[]runeslicing instead of byte slicing to prevent garbled Chinese characters
Full Changelog: v1.3.0...v1.3.1