# ADR-045: Remove @mathew-cf/opencode-memory plugin + Rust artifacts

## Статус

Accepted (2026-07-26)

## Контекст

После миграции на единую гибридную систему памяти (5 TS tools, PR #101) + E2E
покрытия (PR #102) сохранилась двойная система:

- **Plugin `@mathew-cf/opencode-memory`** прописан в `opencode.json` блоке
  `plugin` и устанавливается в `Dockerfile` через `npm install -g`. Но plugin
  не вызывается из-за бага wrapper-пути (см. ADR-043, handoff pr-101) —
  фактически мёртвый код, съедающий ~85 MB в image + cache.
- **Rust `rag-cli` binary** (внутри плагина) пишет `.rag/index.bin` (7.5 MB) +
  `.rag/meta.json` (12 KB) в Rust-формате (`hidden_size`, `model_id`,
  `file_hashes`). Python `src/memory/index.py` пишет `.rag/index.json` (210 MB,
  4096-dim embeddings) + `.rag/meta.json` в Python-формате (`version`, `files`).
  **Конфликт**: оба пишут `meta.json` по одному пути, разные форматы → Rust
  перетирает Python → broken индекс при сосуществовании.
- **`setup-memory.sh`** (4.6 KB) — shell-скрипт инициализации, заменён на
  auto-setup внутри `memory-save.ts` (git init + hook если remote set).
- **`memory-setup.ts`** (716 B) — TS tool-обёртка над `setup-memory.sh`,
  заменён на `memory-doctor.ts` (read-only диагностика, не модифицирующий).

Cleanup нужно делать ПОСЛЕ подтверждения что TS tools работают (PR #101) и E2E
тесты проходят (PR #102) — иначе остались бы без памяти. Issue #97 (E2E green)
был blocker для #98.

## Решение

Удалить все артефакты старой системы за один PR (issue #98, фаза 3 эпика #94):

1. `opencode.json` — убрать блок `plugin` целиком. JSON остался валидным.
2. `Dockerfile` — убрать `@mathew-cf/opencode-memory` из `npm install -g`.
3. `.opencode/scripts/setup-memory.sh` — удалить (auto-setup в `memory-save.ts`).
4. `.opencode/tools/memory-setup.ts` — удалить (заменён на `memory-doctor.ts`).
5. Rust артефакты на хосте: `.rag/index.bin`, `.rag/meta.json` (Rust-формат),
   `~/.cache/opencode/packages/@mathew-cf/opencode-memory@latest/` + sibling
   `opencode-memory/` (оба 85 MB). НЕ трогать `.rag/index.json` (Python).
6. `AGENTS.md` + `SKILL.md` — обновить Tool Usage Policy: убрать
   `memory-setup()`, добавить 5 kebab-case tools (`memory-doctor`, `memory-save`,
   `memory-search`, `memory-list`, `memory-access`).
7. Тесты: инвертировать assertions `test_dockerfile.py` (плагин должен
   ОТСУТСТВОВАТЬ), удалить тесты для `setup-memory.sh` и `memory-setup.ts`.

Имя tool-casing: **kebab-case** для локальных `.opencode/tools/*.ts` (runtime
registry = filename), confirmed ADR-009 + memory `tool-name-casing-kebab-vs-mcp-snake`.
MCP plugin tools были snake_case, но плагин удалён — больше не актуально.

## Альтернативы

- **Оставить plugin как fallback** — отклонено: plugin не вызывается из-за
  wrapper-бага, Rust meta.json конфилктует с Python, ~170 MB мёртвого веса.
  Двойная система = каша, двойной maintenance, риск что Rust перетрёт Python
  индекс.
- **Удалить только Rust артефакты, оставить plugin в конфиге** — отклонено:
  plugin без `npm install` = silent skip (opencode логирует warning), но
  оставляет мёртвый блок в конфиге + вводит в заблуждение.
- **Поэтапный cleanup (несколько PR)** — отклонено: артефакты тесно связаны
  (plugin → setup-memory.sh → memory-setup.ts → Rust binary), частичный cleanup
  оставляет поломанное состояние.