0.165.0
Added
- Разделение памяти на episodic и semantic слои (ADR 2026-07-04, ). После v0.164.0 пользователь нажал «Новая тема» и попросил «Очисти все задачи» — агент вместо этого начал выполнять вчерашний план «перенос Gitea на PostgreSQL». Расследование выявило архитектурный дефект:
topic_breakобрезал толькоmessages(episodic), но semantic-память (memory_facts, L0 abstracts, chunks) — не имела понятия «топик» и утекала в каждый следующий ход. Факт #1184 «Gitea мигрирована» (importance 0.9, category=solution) гарантированно попадал в top-3 L0-секцию системного промпта и галлюцинировал связь с любым запросом.
Пять изменений закрывают дефект:
#260 L0-context filter по category (
internal/store/sqlite.go,postgres.go).ListL0Abstracts/ListL0FactIDsтеперь фильтруютcategory IN ('user_fact','preference','general'). Episodic-категории (event/solution/decision/session_summary) исключены из always-on секции — остаются доступны только через RAG при cosine ≥ 0.45. Тесты:TestListL0Abstracts_ExcludesEpisodicCategories,TestListL0Abstracts_IncludesAllGlobalCategories,TestIsGlobalFactCategory.#261 TopicBreak жёсткая очистка (
internal/server/handler/chat.go,internal/store/sqlite.go,postgres.go,dual.go). Новый методArchiveTopicContext— атомарная транзакция:UPDATE messages SET archived=1 WHERE created_at < before;UPDATE memory_facts SET is_active=0для эпизодических категорий сsource_type=session;DELETE FROM memory_chunksсsource_type=session(колонкиis_activeв схеме нет; добавлять ради редкой операции нерентабельно — chunks индексные, пересоздаются);синхронизация HNSW in-memory индекса через
IndexFactDeactivate. Глобальные facts (user_fact/preference/general) остаются активными.TopicBreakhandler логируетmessages_archived/facts_deactivated/chunks_deactivated. Тесты:TestArchiveTopicContext_ArchivesEpisodicLayer,TestArchiveTopicContext_IdempotentSafe,TestArchiveTopicContext_NoLeakageInSearch.#262 UI: обновлённый confirm dialog + tooltip (
TopicBreakConfirmModal.svelte,ChatHeader.svelte). Modal теперь описывает реальное поведение: «сообщения архивируются, свежие эпизодические факты (события, решения, выполненные задачи) — деактивируются. Глобальные факты (профиль, предпочтения) сохраняются». Tooltip кнопки: «Очистить контекст текущего топика (сообщения и эпизодические факты)».#263 REST PATCH category override (
internal/server/handler/memory.go:UpdateFact). ТеперьPATCH /api/v1/agents/{agentID}/facts/{factID}принимаетcategoryв теле. Admin может вручную перевести факт, ошибочно категоризованный консолидатором (например, #1184 «Gitea мигрирована» сsolution→general), чтобы он перестал деактивироваться при TopicBreak и остался в L0. Валидация:store.IsGlobalFactCategory+isValidEpisodicCategory. Тесты:TestUpdateFactCategory.#264 Audit leakage (
internal/store/sqlite.go,postgres.go).GetLatestSummaryраньше намеренно возвращал archived summary (комментарий «артефакт компакции») — теперь фильтруетarchived=0. После TopicBreak cached summary не утекает. Тесты:TestGetLatestSummary_ExcludesArchived,TestGetLatestSummary_AllArchived.Константы
GlobalFactCategories/EpisodicFactCategories/IsGlobalFactCategoryвinternal/store/store.go— единый источник правды для дискриминатора global vs episodic.
ADR
- ADR 2026-07-04 «Разделение памяти на episodic и semantic слои» — формализация: episodic = контекст диалога + свежие events/decisions (гасятся при TopicBreak); semantic = стабильная идентичность + предпочтения (живут вечно, в L0 abstracts всегда). Категории как дискриминатор. Политика очистки: soft archive (
archived=1/is_active=0), без DELETE messages/facts.
Issues
- #260 [P0] L0-context filter по category — fixed
- #261 [P0] TopicBreak жёсткая очистка episodic слоя — fixed
- #262 [P1] UI confirm dialog + tooltip — fixed
- #263 [P1] REST PATCH /facts/{id}/category + admin override — fixed
- #264 [P1] Audit: RAG / summary / KG исключают деактивированные — fixed
Ожидаемый эффект
- После «Новой темы» агент начинает с чистого листа: «Очисти все задачи» → действительно очищает список задач, а не запускает вчерашний план.
- Глобальные факты (Антон, Tailscale, prefs) — остаются, агент не теряет идентичность.
- Admin UI (следующий релиз) — полный редактор фактов с dropdown category. Сейчас категорию можно менять через REST API напрямую.