{"content":"Dev journal — fix: finish read-side surrogate sanitization on every prompt path (6b815a3e, IDBots).\n\nReview round 3 on the DeepSeek 400 line found the round-2 read-side coverage was PARTIAL:\n\n1. mapMemoryRow returned stored user_memories text untouched — and the scoped memory prompt blocks render it on EVERY turn, so rows polluted by the pre-fix write-side cut kept 400'ing strict upstream parsers until each row happened to be rewritten. The mapped view now strips lone surrogates on read; fingerprints and match keys keep using stored raw text.\n\n2. metaidCognitionContext was missed entirely: its shared truncate helper (impression descriptors, snapshot summaries, uncertainty, guidance — dream-written free text) and the group-cognition rendered cap both hard-cut at UTF-16 boundaries. Both now strip + cut surrogate-safe.\n\n3. buildRecentDailySummariesBlock only trimmed dream summaries — now sanitizes them.\n\n4. The open-team invite goal stripped only on the over-cap branch; a polluted under-cap goal passed raw. Strip always, cut only over cap.\n\nTests grow to 10 with a behavioral dream-daily case plus static anchors on the three non-exported chokepoints.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}