fix(check-permissions): add project-status.py to DANGEROUS_PATTERNS #105

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

Контекст

В ходе реализации issue #103 (добавление deny-правил для project-status.py в reviewer.md) обнаружена асимметрия в .opencode/scripts/check-permissions.py — валидатор DANGEROUS_PATTERNS содержит паттерны для pipeline-status.py (строки 15-22) и spec-status.py (строки 25-32), но НЕ для project-status.py.

check-permissions.py проверяет только allow-правила (строка 151: if action != "allow": continue), поэтому deny-правила из issue #103 проходят корректно. Но если какой-либо агент получит allow-правило вида "python3 .../project-status.py": allow, валидатор его пропустит — в отличие от аналогичных правил для pipeline-status.py/spec-status.py, которые будут помечены как опасные.

Это нарушает ADR-019: все 3 oracle-скрипта (pipeline-status.py, spec-status.py, project-status.py) должны вызываться ТОЛЬКО через нативные tools (pipeline-status/spec-status/project-status), НЕ через bash. Валидатор должен единообразно покрывать все 3 скрипта.

Задача

Добавить 2 паттерна для project-status.py в DANGEROUS_PATTERNS в .opencode/scripts/check-permissions.py (симметрично с существующими для pipeline-status.py и spec-status.py).

Контракты

  • 2 новых паттерна в DANGEROUS_PATTERNS (симметрично строкам 15-22 и 25-32):
    (
        r"^python3? .*project-status\.py",
        "use project-status tool, not bash. See ADR-019",
        "agent",
    ),
    (
        r"^python .*project-status\.py",
        "use project-status tool, not bash. See ADR-019",
        "agent",
    ),
    
  • Разместить сразу после блока spec-status.py (после строки 32), перед git clone (строка 34).
  • Scope "agent" — те же правила, что у pipeline-status.py/spec-status.py.

Инварианты

  • Не трогать существующие паттерны для pipeline-status.py и spec-status.py.
  • Не менять логику check_rules (проверка только allow-правил — корректна).
  • check-permissions.py — exit 0 на текущих конфигах (deny-правила из issue #103 не триггерят валидатор).
  • Тесты tests/test_check_permissions.py и tests/test_permissions.py:test_check_permissions_passes — зелёные.

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

  • В tests/test_check_permissions.py могут быть хардкожены DANGEROUS_PATTERNS или их количество — проверить и обновить ожидания (+2 паттерна).
  • Если есть тест на конкретные паттерны (regex + reason) — обновить или добавить кейс для project-status.py.

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

  • .opencode/scripts/check-permissions.py — DANGEROUS_PATTERNS.
  • tests/test_check_permissions.py — возможно, обновить ожидания.
  • tests/test_permissions.py:test_check_permissions_passes — black-box, не должен сломаться.
  • ADR-019 — усиливает контракт (3/3 oracle-скрипта покрыты валидатором).

Вне scope

  • Изменение deny-правил в reviewer.md/vision.md (это issue #103).
  • Рефакторинг check_rules или parse_agent_bash_rules.
  • Добавление project-status.py в другие agent .md файлы.

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

  • uv run pytest tests/ -x -q — все зелёные.
  • python3 .opencode/scripts/check-permissions.py — exit 0.
  • В DANGEROUS_PATTERNS есть 2 паттерна для project-status.py (симметрично с pipeline-status.py/spec-status.py).
  • Валидатор помечает "python3 .opencode/scripts/project-status.py": allow как опасное (если добавить тест).
## Контекст В ходе реализации issue #103 (добавление deny-правил для `project-status.py` в `reviewer.md`) обнаружена асимметрия в `.opencode/scripts/check-permissions.py` — валидатор `DANGEROUS_PATTERNS` содержит паттерны для `pipeline-status.py` (строки 15-22) и `spec-status.py` (строки 25-32), но НЕ для `project-status.py`. `check-permissions.py` проверяет только `allow`-правила (строка 151: `if action != "allow": continue`), поэтому deny-правила из issue #103 проходят корректно. Но если какой-либо агент получит `allow`-правило вида `"python3 .../project-status.py": allow`, валидатор его пропустит — в отличие от аналогичных правил для `pipeline-status.py`/`spec-status.py`, которые будут помечены как опасные. Это нарушает ADR-019: все 3 oracle-скрипта (`pipeline-status.py`, `spec-status.py`, `project-status.py`) должны вызываться ТОЛЬКО через нативные tools (`pipeline-status`/`spec-status`/`project-status`), НЕ через bash. Валидатор должен единообразно покрывать все 3 скрипта. ## Задача Добавить 2 паттерна для `project-status.py` в `DANGEROUS_PATTERNS` в `.opencode/scripts/check-permissions.py` (симметрично с существующими для `pipeline-status.py` и `spec-status.py`). ## Контракты - 2 новых паттерна в `DANGEROUS_PATTERNS` (симметрично строкам 15-22 и 25-32): ```python ( r"^python3? .*project-status\.py", "use project-status tool, not bash. See ADR-019", "agent", ), ( r"^python .*project-status\.py", "use project-status tool, not bash. See ADR-019", "agent", ), ``` - Разместить сразу после блока `spec-status.py` (после строки 32), перед `git clone` (строка 34). - Scope `"agent"` — те же правила, что у `pipeline-status.py`/`spec-status.py`. ## Инварианты - Не трогать существующие паттерны для `pipeline-status.py` и `spec-status.py`. - Не менять логику `check_rules` (проверка только `allow`-правил — корректна). - `check-permissions.py` — exit 0 на текущих конфигах (deny-правила из issue #103 не триггерят валидатор). - Тесты `tests/test_check_permissions.py` и `tests/test_permissions.py:test_check_permissions_passes` — зелёные. ## Граничные случаи - В `tests/test_check_permissions.py` могут быть хардкожены `DANGEROUS_PATTERNS` или их количество — проверить и обновить ожидания (+2 паттерна). - Если есть тест на конкретные паттерны (regex + reason) — обновить или добавить кейс для `project-status.py`. ## Влияние на связанные компоненты - `.opencode/scripts/check-permissions.py` — `DANGEROUS_PATTERNS`. - `tests/test_check_permissions.py` — возможно, обновить ожидания. - `tests/test_permissions.py:test_check_permissions_passes` — black-box, не должен сломаться. - ADR-019 — усиливает контракт (3/3 oracle-скрипта покрыты валидатором). ## Вне scope - Изменение deny-правил в `reviewer.md`/`vision.md` (это issue #103). - Рефакторинг `check_rules` или `parse_agent_bash_rules`. - Добавление `project-status.py` в другие agent .md файлы. ## Критерии приемки - `uv run pytest tests/ -x -q` — все зелёные. - `python3 .opencode/scripts/check-permissions.py` — exit 0. - В `DANGEROUS_PATTERNS` есть 2 паттерна для `project-status.py` (симметрично с `pipeline-status.py`/`spec-status.py`). - Валидатор помечает `"python3 .opencode/scripts/project-status.py": allow` как опасное (если добавить тест).
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#105
No description provided.