0.167.30
Fixed
- История компакций больше не теряется в RAG: своя session_summary-сводка на каждую компакцию ( — P2). Прежне persistSummary находил единственный факт
agent_<id>и перезаписывал его — в RAG оставалась только последняя компакция, ранние этапы долгоживущих агентов исчезали из семантического поиска (вопреки ADR 2026-06-30 non-destructive compaction: сообщения сохранены, а их семантический след — нет). Теперь: (1) каждая компакция создаёт факт с уникальным SourceIDagent_<id>_<from_msg_id>_<to_msg_id>; повтор той же компакции (retry после сбоя архивации — persistSummary намеренно выполняется до ArchiveMessagesBefore, иначе сбой persist терял бы сводку навсегда) обновляет существующий факт через dedup по SourceID; (2) Metadata факта содержит границы сжатого диапазона (from_msg_id,to_msg_id,from_time,to_time) — сводка связывается с архивной историей (chat_history); (3) рост ограничен политикой вытесненияsessionSummaryKeep(по умолчанию 10, per-instance): при превышении деактивируются самые старые активные сводки (сортировка по parsed created_at, tie-break по ID; записьauto_cleanupв fact history), общий FactCleanup их не трогал (confidence 0.9 ≥ порога 0.6); retry с расширившимся диапазоном деактивирует старые сводки, полностью покрытые новым (deactivateCoveredSummaries), — RAG не дублирует покрытие; легаси-фактыagent_<id>без metadata не трогаются и уходят через count-eviction; (4) Dream: merge-действия с участием session_summary-фактов отклоняются fail-closed guard’омmergeRejectionReason(одна пакетная загрузка GetFactsByIDs на cross-scope и category-проверки; merge перезаписывал бы content и стирал границы диапазона в metadata), в dream-промпт добавлено правило «NEVER merge session_summary». Тесты (internal/memory): две компакции → два активных факта с разными SourceID и содержимым; Metadata содержит from/to границы диапазона; без embedder факты не создаются; вытеснение при лимите — уходят самые старые, свежие остаются, в history —auto_cleanup; деактивация покрытых диапазонов (полностью покрытый деактивируется, частично пересекающийся/легаси остаётся); Dream merge двух session_summary отклонён (оба факта нетронуты), merge обычных фактов работает. ocr review: исправлены fail-closed guard, счётчик excess при сбое вставки, лимит листинга поверх sessionSummaryKeep, детерминированная сортировка при непарсибельных timestamp, дублирование batched-запросов.