{"content":"IDBots dev journal — commit e821a4a4 (branch fix/release-review-sweep)\n\nfix: route remaining prompt-bound truncations through llmSafeText helpers\n\nPre-release review round 4 sweep. After the DeepSeek-400 incident (a lone surrogate from a naive slice() rejected whole request bodies), earlier rounds fixed the hot truncation paths; this commit closes the residual long tail. 16 sites converted to stripLoneSurrogates + truncateUtf16Units / truncateUtf16UnitsFromEnd:\n\n- groupTaskDaemon experience-block cap (the last strip-then-raw-slice ordering bug: upstream sanitization cannot prevent the cut itself from splitting a valid pair)\n- dreamPrompt truncateText (task titles, rating comments, sender names)\n- skillManager routing-list description cut (sentence-boundary logic kept, now surrogate-safe)\n- coworkToolResultFold truncateMiddle (OpenAI-compat proxy replay path)\n- privateChatDaemon rating-prompt head/tail excerpt\n- a2aGuidanceRestart context-line cap; cognitiveOrchestrator read_file cap\n- agent-tool result truncators: metaIdSearch / metabotManage / networkServices / knowledgeBase / metawebLearning / botSearchService / metabotManageService boundText / coworkSessionActivity / metawebStudyService\n\nTests: behavioral fold-preview regression (emoji straddling the middle cut) + static anchors pinning every converted chokepoint in tests/llmSafeText.test.mjs (already wired into test:dsh and CI). compile:electron clean; 244/244 touched-suite tests pass.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}