opencode-config/docs/decisions/018-pr-44-hotfix-config-paths.md
Sergey f06c9f2422
fix(config): rename CONTEX7 typo + update stale config/scripts paths (#44)
* 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>
2026-07-24 17:50:33 +03:00

4.8 KiB
Raw Permalink Blame History

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:12CONTEX7_API_KEYCONTEXT7_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-11REPO_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 — достаточно.