---
pr: <PR-NUMBER>
title: docs(config): add Config Edits rule to AGENTS.md, expand configure-opencode skill
---

## Что сделано

Реализован issue #170 — зафиксировано каноническое правило «куда писать конфиг opencode» на двух уровнях и обновлена устаревшая память:

1. **`AGENTS.md`** (корень репо): добавлен блок `## Config Edits` (после `## Code Style`) — 1 абзац. Правило: все правки конфига opencode (`opencode.json`, `AGENTS.md`, `skills/`, `agents/`, `commands/`) идут ТОЛЬКО в workspace clone `/root/workspace/opencode-config/`, НИКОГДА в `~/.config/opencode/` (bind-mount → bypass git → `git pull` конфликты на хосте). Ссылка на skill `configure-opencode` для полной sync-процедуры.

2. **`.opencode/skills/configure-opencode/SKILL.md`**: добавлен раздел `## 1.1. Scope правила «куда писать»` (после канонического правила, до «Применение изменений»). Расширяет scope правила с «только `opencode.json`» на `AGENTS.md`, `skills/`, `agents/`, `commands/`. Содержит пояснение bind-mount архитектуры (`~/.config/opencode/` = bind-mount из `/root/dockers/opencode-config/.opencode/`, global `AGENTS.md` = отдельный ro-mount из корня репо), описание почему правки в `~/.config/opencode/` bypass git и ломают `git pull` на хосте, и каноническую sync-процедуру (`git push` workspace → `git pull` host → `docker compose restart opencode`).

3. **Память `technical/opencode-config-global-vs-local.md`** (`~/.local/share/opencode/opencode-memory/`): обновлена устаревшая информация — репо `opencode`→`opencode-config`, layout `config/`→`.opencode/`, 14→17 skills, `.opencode/` git-tracked (105 файлов, не «empty/not git-tracked»), global `AGENTS.md` = ro-mount (отдельный bind-mount из корня репо), bind-mount source `/root/dockers/opencode-config/.opencode` (не `config`). Будет закоммичена и реиндексирована через `memory-save` после PR.

4. **Handoff + ADR**: созданы через `.opencode/scripts/scaffold-handoff.sh` (ADR-078, без коллизии нумерации).

## Почему

В контейнере `~/.config/opencode/` — bind-mount из хост-сорса. Глобальный `AGENTS.md` смонтирован read-only. Агенты редактирующие `~/.config/opencode/` напрямую меняют файлы на хосте в обход git → другой агент коммитит из workspace clone, пушит → на хосте `git pull` → конфликт. Skill `configure-opencode` фиксировал контракт только для `opencode.json`; `AGENTS.md`/`skills/`/`agents/`/`commands/` не покрывались, и явного запрета редактировать `~/.config/opencode/` не было. Память описывала старый layout (`config/`, репо `opencode`, 14 skills) и вводила новых агентов в заблуждение.

## Pending

- `memory-save` для коммита и реиндекса обновлённой памяти `opencode-config-global-vs-local.md` (выполнить после merge PR или по указанию).
- Подставить реальный PR-номер в handoff/ADR frontmatter (отдельный коммит после `create-pr`).

## Watch out

- **Спека issue #170 содержала неточные числа**: указано «18 skills» и «88 файлов», по факту 17 skills и 105 git-tracked файлов в `.opencode/`. Использованы актуальные числа из `ls`/`git ls-files`, а не числа из спеки.
- **ADR numbering collision (issue #176)**: `scaffold-handoff.sh` считает номер ADR как `ls | wc -l + 1`. В этом PR коллизии НЕ возникло (получил 078, max существующий = 077), но баг скрипта не фиксировал — вне scope. Issue #176 остаётся открытым.
- В `AGENTS.md` блока `## Config Edits` намеренно краткий (1 абзац) — полная процедура в skill `configure-opencode`, дублирование избегается.