* 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>
39 lines
No EOL
4.8 KiB
Markdown
39 lines
No EOL
4.8 KiB
Markdown
# 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 rules `python3 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_KEY` present в `.env.example` и `opencode.json`; `CONTEX7_API_KEY` (typo) absent из обоих.
|
||
- `tests/test_check_permissions.py` — 2 теста: `AGENTS_DIR` points to `.opencode/agents/` (exists); `OPENCODE_JSON` points to `.opencode/opencode.json` (exists).
|
||
|
||
## Альтернативы
|
||
- **Удалить узкие deny паттерны вместо обновления** — отклонено: issue допускал оба варианта, но обновление сохраняет explicit path documentation + defense-in-depth. Удаление оставило бы gap если широкие паттерны когда-то изменят. Consistency с actual `.opencode/scripts/` path.
|
||
- **Тронуть исторические `CONTEX7` references в docs/handoff/pr-27 и docs/decisions/007** — отклонено: issue явно запрещает ("НЕ трогать `docs/handoff/pr-27-*` и `docs/decisions/007-pr-27-*` — исторические"). Это историческая документация миграции, `CONTEX7` описывает что было dropped в PR#27.
|
||
- **Fix all `config/scripts` references (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` пользователей** — отклонено: `.env` gitignored, скрипт не может его редактировать. User-facing note в handoff Watch out — достаточно. |