* fix(config): rename CONTEX7_API_KEY to CONTEXT7_API_KEY * fix(permissions): update stale config/scripts paths to .opencode/scripts * test(config): add tests for typo fix and updated paths * docs(handoff): add handoff and ADR-018 for hotfix * docs(handoff): set PR number --------- Co-authored-by: opencode-agent <agent@slaid098.dev>
4.8 KiB
ADR-018: Hotfix CONTEX7 typo + stale config/scripts paths
Статус
Accepted (2026-07-24)
Контекст
После миграции config/ → .opencode/ (PR#23, ADR-002) остались stale пути в deny rules, check-permissions.py и agent frontmatter. Также обнаружен typo CONTEX7_API_KEY (должно быть CONTEXT7_API_KEY) в 2 активных файлах — Context7 MCP не резолвит API key из-за несовпадения имён env var ({env:CONTEX7_API_KEY} в opencode.json не матчит CONTEXT7_API_KEY в окружении, и наоборот).
Зафиксировано как known issue:
- PR#24 digest: "env var
CONTEX7_API_KEY(typo) захардкожена в 3 файлах... Не исправлено в PR#24 (вне scope). Следующий PR должен rename." - PR#40 watch out: "check-permissions.py пути: скрипт использует
config/agentsиconfig/opencode.json, но файлы в.opencode/... Исправление путей — отдельный PR."
Stale config/scripts/ deny rules в opencode.json (lines 218, 223) — мёртвый код (широкие паттерны python3 *pipeline-status.py* / python3 */pipeline-status.py* уже работали, матчат любой путь). Узкие python3 config/scripts/... — нет, т.к. директория мигрировала.
Решение
1. CONTEX7 typo fix (2 файла)
.env.example:12—CONTEX7_API_KEY→CONTEXT7_API_KEY.opencode/opencode.json:369—"{env:CONTEX7_API_KEY}"→"{env:CONTEXT7_API_KEY}"
Исторические docs/handoff/pr-27-* и docs/decisions/007-pr-27-* НЕ тронуты — это историческая документация миграции, не активный код. CONTEX7 в них описывает что было dropped.
2. Stale config/scripts paths → .opencode/scripts (4 файла)
.opencode/opencode.json:218,223— deny rulespython3 config/scripts/pipeline-status.py*/python3 config/scripts/spec-status.py*→.opencode/scripts/....opencode/scripts/check-permissions.py:10-11—REPO_ROOT / "config" / "agents"/REPO_ROOT / "config" / "opencode.json"→.opencode/agents/.opencode/opencode.json.opencode/agents/reviewer.md:72,77— deny rules →.opencode/scripts/....opencode/agents/docs-reviewer.md:61,66— deny rules →.opencode/scripts/...
Узкие deny паттерны обновлены (НЕ удалены) — explicit > implicit. Широкие паттерны python3 *pipeline-status.py* / python3 */pipeline-status.py* уже покрывали (матчат любой путь), но узкие паттерны документируют конкретный path и добавляют defense-in-depth.
3. Тесты (6 новых)
tests/test_permissions.py— 4 теста:CONTEXT7_API_KEYpresent в.env.exampleиopencode.json;CONTEX7_API_KEY(typo) absent из обоих.tests/test_check_permissions.py— 2 теста:AGENTS_DIRpoints to.opencode/agents/(exists);OPENCODE_JSONpoints to.opencode/opencode.json(exists).
Альтернативы
- Удалить узкие deny паттерны вместо обновления — отклонено: issue допускал оба варианта, но обновление сохраняет explicit path documentation + defense-in-depth. Удаление оставило бы gap если широкие паттерны когда-то изменят. Consistency с actual
.opencode/scripts/path. - Тронуть исторические
CONTEX7references в docs/handoff/pr-27 и docs/decisions/007 — отклонено: issue явно запрещает ("НЕ трогатьdocs/handoff/pr-27-*иdocs/decisions/007-pr-27-*— исторические"). Это историческая документация миграции,CONTEX7описывает что было dropped в PR#27. - Fix all
config/scriptsreferences (docstrings, prompt body) — отклонено: вне scope hotfix. Issue перечисляет конкретные строки (deny rules, check-permissions.py paths, agent frontmatter deny rules). Cosmetic references в docstrings/usage comments (pipeline-status.py:10-11,319; spec-status.py:12-13; scaffold-handoff.sh:3; reviewer.md:99; docs-reviewer.md:111; spec/SKILL.md:28) — potential follow-up cleanup PR. - Добавить auto-migration для
.envпользователей — отклонено:.envgitignored, скрипт не может его редактировать. User-facing note в handoff Watch out — достаточно.