* fix(memory-syncer): enforce dedup, strict distillation, 100KB compaction, frontmatter fix * docs(handoff): add handoff and ADR-070 for memory cleanup and self-maintaining * docs(handoff): set PR number 167 * docs(handoff): fix Pending/Watch out sections + remove stale ADR comment * fix(memory-syncer): encoding artifact and trailing newlines --------- Co-authored-by: opencode-agent <agent@opencode.local>
6.4 KiB
pr: 167 title: fix(memory): cleanup bloat and make memory-syncer self-maintaining
Что сделано
Часть 1: Разовая чистка файлов памяти (~/.local/share/opencode/opencode-memory/)
1.1 Миграция 4 дубликатов путей (repos/ → repos/github.com/slaid098/):
antidetect-browser-mcp.md— новый файл = надмножество (содержит все записи + handoff digest), старый удалён (git rm).digital_factory.md— старый = architectural overview, новый = cross-project Telethon gotcha. Объединены: полный architectural overview + durable Telethon gotcha в правильный путь, старый удалён.opencode-voice-dictation.md— старый = архитектурный обзор (Stack, Architecture, Gotchas), новый = PR digests PR#29-#39. Объединены: архитектурный обзор + PR digests + gotchas в правильный путь, старый удалён.slaid098-dev.md— старый = ранняя версия (Key conventions: centralized tests, Biome config, NO pre-commit, legacy-peer-deps), новый = надмножество PR digests PR#68-#93. Уникальные conventions из старого добавлены в новый как секция "Key conventions", старый удалён.
1.2 Фикс битого frontmatter:
repos/github.com/slaid098/telesoft.md— отступы 2 пробела вupdated:/related:→ 0 пробелов.repos/code_keeper_api.md—importance: 3→importance: medium.repos/youtube_comments.md—importance: 5→importance: low.
1.3 Удаление HTML-мусора:
repos/github.com/slaid098/opencode.md— удалены 20 HTML-комментариев<!-- updated: ... PR#N handoff digest -->+ лишние---разделители (строки 11-30).
1.4 Дистилляция video_uniq.md:
- 623 KB / 1104 строк → 25 KB / 150 строк (96% сокращение).
- Сохранены durable: ffmpeg gotchas (drawbox in_w/in_h, crop iw/ih post-scale, amix normalize=0, x265 несовместимости), pydantic model_copy no validation, frozen-safe paths, filter chain order, pHash testing (hash_size=16), pool-mechanism, channel loop resilience.
- Выкинуты не-durable: 584 changelog-дампов («PR#N: добавили X»), receipts с повторяющимся содержанием, метрики PR (тестов passed, coverage %), хроника событий.
- Tags усечены ~1.5 KB → ~200 символов, summary ~2.5 KB → ~400 символов.
1.5 memory-save — commit + reindex + push в memory-репо выполнен.
Часть 2: Фикс корня — расширение memory-syncer (в репо)
2.1 .opencode/agents/memory-syncer.md:
- Дедуп перед записью (ОБЯЗАТЕЛЬНО) — новая подсекция в Distillation: «Перед добавлением записи — прочитай существующий файл. Если похожая запись уже есть → обнови существующую (bump
updated), НЕ добавляй новую.» - Строгая дистилляция — усиlena секция Distillation: явный критерий durable («поможет ли это в следующий раз когда я полезу в этот код?»), запрет changelog-дампов («НЕ записывай что было сделано в PR — это changelog, код уже документирует»), запрет метрик PR (тестов passed, coverage %).
- Лимит 100 KB — новая секция «Compaction»: «Если после записи файл > 100 KB → компрессировать: прочитай все старые записи, оставь только durable, выкинь не-durable. Tags < 500 символов, summary < 500 символов.»
- Фронт-матч фикс — новое правило 11 в Rules: «Если frontmatter целевого файла сломан (битые отступы, невалидные importance) → починить при записи.»
2.2 .opencode/skills/memory/SKILL.md:
- Правило «править вместо дублирования» сделано ОБЯЗАТЕЛЬНЫМ (было рекомендацией) + объяснение (дубликаты раздули файлы до 600+ KB).
- Добавлен лимит 100 KB с процедурой компрессии.
2.3 Синхронизация зеркала: cp в ~/.config/opencode/agents/memory-syncer.md и ~/.config/opencode/skills/memory/SKILL.md, проверка идентичности через diff.
Почему
Память раздулась до неконтролируемых размеров (video_uniq.md = 623 KB / 1104 строк, opencode.md = 135 KB). Корень проблемы — memory-syncer агент не имел инструкций для дедупликации и компрессии, писал changelog-дампы вместо durable knowledge. Issue #166 требовал: (1) разовую чистку раздутых файлов, (2) фикс корня — сделать memory-syncer self-maintaining чтобы файлы не раздувались снова.
Pending
— (PR завершён, closes #166; разовая чистка + фикс корня выполнены)
Watch out
- Изменения файлов памяти (
~/.local/share/opencode/opencode-memory/) НЕ в diff этого PR — они живут в отдельном memory-репо (commit + push черезmemory-save). В этом репо видны только фикс корня (.opencode/agents/memory-syncer.md,.opencode/skills/memory/SKILL.md). - Зеркало
~/.config/opencode/синхронизировано вручную (cp+diff). Если кто-то правит.opencode/без синхронизации зеркала — drift. - Новое правило 100 KB compaction: первая компакция большого файла (например video_uniq.md 623 KB) может занять заметное время на чтение всех старых записей.