opencode-config/docs/handoff/pr-167-memory-cleanup-and-self-maintaining.md
Sergey 6977a9130a
fix(memory): cleanup bloat and make memory-syncer self-maintaining (#167)
* 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>
2026-07-31 19:01:26 +03:00

58 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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) может занять заметное время на чтение всех старых записей.