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