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

6.4 KiB
Raw Blame History


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.mdimportance: 3importance: medium.
  • repos/youtube_comments.mdimportance: 5importance: 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) может занять заметное время на чтение всех старых записей.