---
pr: 44
title: rename CONTEX7 typo + update stale config/scripts paths
---

# PR: rename CONTEX7 typo + update stale config/scripts paths

## Что сделано
- `.env.example:12` — `CONTEX7_API_KEY` → `CONTEXT7_API_KEY` (typo fix). Context7 MCP теперь резолвит API key.
- `.opencode/opencode.json:369` — `"{env:CONTEX7_API_KEY}"` → `"{env:CONTEXT7_API_KEY}"` (typo fix в context7 MCP server config).
- `.opencode/opencode.json:218,223` — deny rules `python3 config/scripts/pipeline-status.py*` / `python3 config/scripts/spec-status.py*` → `.opencode/scripts/...` (stale paths после миграции config/ → .opencode/ PR#23). Широкие паттерны `python3 *pipeline-status.py*` / `python3 */pipeline-status.py*` уже работали (матчат любой путь); узкие `config/scripts/...` — мёртвый код. Узкие обновлены на актуальный путь.
- `.opencode/scripts/check-permissions.py:10-11` — `REPO_ROOT / "config" / "agents"` / `REPO_ROOT / "config" / "opencode.json"` → `.opencode/agents` / `.opencode/opencode.json`. Скрипт был бесполезен (paths не существовали → `AGENTS_DIR.exists()` / `OPENCODE_JSON.exists()` → False → false negative "OK").
- `.opencode/agents/reviewer.md:72,77` — deny rules `python3 config/scripts/...` → `.opencode/scripts/...` (консистентно с global opencode.json).
- `.opencode/agents/docs-reviewer.md:61,66` — deny rules `python3 config/scripts/...` → `.opencode/scripts/...` (консистентно с global opencode.json).
- `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).
- ADR-018 + этот handoff

## Почему
После миграции `config/` → `.opencode/` (PR#23) остались stale пути в deny rules, check-permissions.py и agent frontmatter (зафиксировано в PR#24 digest как known issue, в PR#40 watch out как pre-existing). Также обнаружен typo `CONTEX7_API_KEY` (должно быть `CONTEXT7_API_KEY`) — Context7 MCP не резолвит env var из-за несовпадения имён.

Этот PR — hotfix, чинит 2 проблемы в минимальном scope:
1. Typo `CONTEX7` → `CONTEXT7` в 2 активных файлах (`.env.example`, `.opencode/opencode.json`). Исторические `docs/handoff/pr-27-*` и `docs/decisions/007-pr-27-*` НЕ тронуты — это историческая документация, не активный код.
2. Stale `config/scripts/` → `.opencode/scripts/` в deny rules (opencode.json), check-permissions.py paths, agent frontmatter (reviewer.md, docs-reviewer.md). Узкие deny паттерны актуализированы (широкие уже работали).

Остальные `config/scripts` references (docstrings в pipeline-status.py, spec-status.py, scaffold-handoff.sh usage comment, prompt-body explanations в agents/skills) — ВНЕ scope этого hotfix. Они cosmetic (не functional — deny rules и paths исправлены), cleanup возможен в отдельном PR.

## Pending
- Cosmetic `config/scripts` references в docstrings/usage comments (pipeline-status.py:10-11,319; spec-status.py:12-13; scaffold-handoff.sh:3; reviewer.md:99 prompt body; docs-reviewer.md:111 prompt body; spec/SKILL.md:28) — вне scope этого hotfix, potential follow-up cleanup PR.
- `CONTEX7_API_KEY` в `.env` пользователей (если скопировали из старого `.env.example`) — rename не автоматический, user-facing note может потребоваться.

## Watch out
- **`.env` пользователей НЕ обновляется автоматически** — typo fix только в `.env.example`. Пользователи, скопировавшие `.env` из старого `.env.example`, имеют `CONTEX7_API_KEY` (typo) в своём `.env`. После pull им нужно вручную rename в `.env` → `CONTEXT7_API_KEY`, иначе context7 MCP не резолвит key.
- **Исторические `CONTEX7` references сохранены** — `docs/handoff/pr-27-configure-opencode-rewrite.md:6` и `docs/decisions/007-pr-27-configure-opencode-rewrite.md:11` НЕ тронуты (историческая документация). `check-adr-refs.py` не падает — эти файлы не содержат `ADR-NNN` refs к `CONTEX7`.
- **Узкие deny паттерны обновлены, НЕ удалены** — issue допускал оба варианта (обновить ИЛИ удалить, т.к. широкие `python3 *pipeline-status.py*` / `python3 */pipeline-status.py*` покрывают). Решено обновить (consistency с `.opencode/scripts/` actual path, explicit > implicit). Удаление оставило бы gap если широкие паттерны когда-то изменят.
- **check-permissions.py теперь реально проверяет конфиги** — до фикса скрипт возвращал false negative "OK" (paths не существовали → violations=[] → exit 0). После фикса он находит `.opencode/agents/*.md` и `.opencode/opencode.json` и реально валидирует. Существующие тесты `test_check_permissions_passes` / `test_clean_configs_pass` подтверждают exit 0 (конфиги чистые).
- ADR number = sequential (018), НЕ PR number. Проверить ADR naming в handoff до push (эволюция паттерна PR#26 docs-reviewer typo).