fix(reviewer): deny project-status.py oracle script #103

Closed
opened 2026-08-17 18:03:14 +03:00 by slaid098 · 0 comments
Owner

Контекст

В PR #102 (добавили deny-правила для oracle-скриптов в vision.md) reviewer отметил существующую асимметрию между reviewer.md и vision.md — она не была внесена этим PR, но мешает консистентности ADR-019.

Задача

Добавить deny-правила для project-status.py в .opencode/agents/reviewer.md (симметрично с vision.md:71-75 и с уже существующими правилами для pipeline-status.py/spec-status.py в reviewer.md:63-72).

Сейчас reviewer.md содержит deny-правила только для 2 из 3 oracle-скриптов:

  • pipeline-status.py (5 правил, строки 63-67) ✅
  • spec-status.py (5 правил, строки 68-72) ✅
  • project-status.py — ОТСУТСТВУЕТ ❌

Из-за правила "python3*": allow (строка 61) reviewer может запустить python3 .opencode/scripts/project-status.py напрямую через bash, что нарушает ADR-019 (oracle-скрипты вызываются ТОЛЬКО через нативные tools pipeline-status/spec-status/project-status, НЕ через bash).

Контракты

  • 5 deny-правил в формате glob (как существующие в reviewer.md:63-72):
    "python3 *project-status.py*": deny
    "python3 .opencode/scripts/project-status.py*": deny
    "python3 */project-status.py*": deny
    "python *project-status.py*": deny
    "python */project-status.py*": deny
    
  • Разместить в reviewer.md сразу после блока spec-status.py (после строки 72), перед "node --version*": allow (строка 73).
  • Last-match-wins: deny-правила должны идти ПОСЛЕ "python3*": allow и "python *": allow (строки 61-62) — это уже соблюдается, вставка после spec-status.py блока сохранит порядок.

Инварианты

  • Не трогать pipeline-status.py и spec-status.py deny-правила (уже корректны).
  • Не трогать vision.md (уже содержит все 3 набора правил после PR #102).
  • Не менять другие permission-блоки reviewer.md.
  • check-permissions.py — exit 0.
  • Тесты tests/test_permissions.py и tests/test_agent_frontmatter.py — зелёные (проверить, нет ли хардкода количества bash-правил для reviewer; если есть — обновить).

Граничные случаи

  • Если в тестах есть assert на точное количество deny-правил для reviewer — обновить ожидаемое число (+5).
  • Если check-permissions.py валидирует deny-паттерны — убедиться, что новые правила не триггерят false positive (они симметричны существующим для pipeline-status/spec-status, которые уже проходят).

Влияние на связанные компоненты

  • .opencode/agents/reviewer.md — bash permission block.
  • tests/test_permissions.py — возможно, обновить ожидания (если есть count-assert).
  • AGENTS.md секция «Символьная навигация (Serena)» — не связано.
  • Memory: после merge обновить запись про deny-правила oracle-скриптов (opencode-config-007.md).

Вне scope

  • Изменение других agent .md файлов.
  • Рефакторинг permission-блоков.
  • Изменение project-status.py скрипта.

Критерии приемки

  • uv run pytest tests/ -x -q — все зелёные.
  • python3 .opencode/scripts/check-permissions.py — exit 0.
  • В reviewer.md есть 5 deny-правил для project-status.py (симметрично с vision.md:71-75).
  • Порядок правил: deny после python3*/python * allow (last-match-wins сохранён).
  • Reviewer не может запустить project-status.py через bash (deny срабатывает).
## Контекст В PR #102 (добавили deny-правила для oracle-скриптов в `vision.md`) reviewer отметил существующую асимметрию между `reviewer.md` и `vision.md` — она не была внесена этим PR, но мешает консистентности ADR-019. ## Задача Добавить deny-правила для `project-status.py` в `.opencode/agents/reviewer.md` (симметрично с `vision.md:71-75` и с уже существующими правилами для `pipeline-status.py`/`spec-status.py` в `reviewer.md:63-72`). Сейчас `reviewer.md` содержит deny-правила только для 2 из 3 oracle-скриптов: - `pipeline-status.py` (5 правил, строки 63-67) ✅ - `spec-status.py` (5 правил, строки 68-72) ✅ - `project-status.py` — **ОТСУТСТВУЕТ** ❌ Из-за правила `"python3*": allow` (строка 61) reviewer может запустить `python3 .opencode/scripts/project-status.py` напрямую через bash, что нарушает ADR-019 (oracle-скрипты вызываются ТОЛЬКО через нативные tools `pipeline-status`/`spec-status`/`project-status`, НЕ через bash). ## Контракты - 5 deny-правил в формате glob (как существующие в `reviewer.md:63-72`): ``` "python3 *project-status.py*": deny "python3 .opencode/scripts/project-status.py*": deny "python3 */project-status.py*": deny "python *project-status.py*": deny "python */project-status.py*": deny ``` - Разместить в `reviewer.md` сразу после блока `spec-status.py` (после строки 72), перед `"node --version*": allow` (строка 73). - Last-match-wins: deny-правила должны идти ПОСЛЕ `"python3*": allow` и `"python *": allow` (строки 61-62) — это уже соблюдается, вставка после spec-status.py блока сохранит порядок. ## Инварианты - Не трогать `pipeline-status.py` и `spec-status.py` deny-правила (уже корректны). - Не трогать `vision.md` (уже содержит все 3 набора правил после PR #102). - Не менять другие permission-блоки `reviewer.md`. - `check-permissions.py` — exit 0. - Тесты `tests/test_permissions.py` и `tests/test_agent_frontmatter.py` — зелёные (проверить, нет ли хардкода количества bash-правил для reviewer; если есть — обновить). ## Граничные случаи - Если в тестах есть assert на точное количество deny-правил для reviewer — обновить ожидаемое число (+5). - Если `check-permissions.py` валидирует deny-паттерны — убедиться, что новые правила не триггерят false positive (они симметричны существующим для pipeline-status/spec-status, которые уже проходят). ## Влияние на связанные компоненты - `.opencode/agents/reviewer.md` — bash permission block. - `tests/test_permissions.py` — возможно, обновить ожидания (если есть count-assert). - `AGENTS.md` секция «Символьная навигация (Serena)» — не связано. - Memory: после merge обновить запись про deny-правила oracle-скриптов (opencode-config-007.md). ## Вне scope - Изменение других agent .md файлов. - Рефакторинг permission-блоков. - Изменение `project-status.py` скрипта. ## Критерии приемки - `uv run pytest tests/ -x -q` — все зелёные. - `python3 .opencode/scripts/check-permissions.py` — exit 0. - В `reviewer.md` есть 5 deny-правил для `project-status.py` (симметрично с `vision.md:71-75`). - Порядок правил: deny после `python3*`/`python *` allow (last-match-wins сохранён). - Reviewer не может запустить `project-status.py` через bash (deny срабатывает).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/opencode-config#103
No description provided.