fix(check-permissions): add project-status.py to DANGEROUS_PATTERNS #108
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/check-permissions/project-status-patterns"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что сделано
Добавлены 2 паттерна для
project-status.pyвDANGEROUS_PATTERNSв.opencode/scripts/check-permissions.py(симметрично с существующими дляpipeline-status.pyиspec-status.py):r"^python3? .*project-status\.py"— reasonuse project-status tool, not bash. See ADR-019r"^python .*project-status\.py"— reasonuse project-status tool, not bash. See ADR-019Размещены сразу после блока
spec-status.py, передgit clone, scope"agent"(те же правила, что у соседей).В
tests/test_check_permissions.pyдобавлены 3 параметризованных теста, симметрично покрывающих все 3 oracle-скрипта (pipeline-status/spec-status/project-status):test_oracle_script_bash_pattern_violation(6 кейсов) — allow для oracle-скрипта через bash в agent .md → violation с правильным reason.test_oracle_script_pattern_not_flagged_in_global(6 кейсов) — agent-scoped паттерны не срабатывают наopencode.json(scope='agent').test_oracle_script_deny_not_violation— deny для oracle-скриптов не flagged.Почему
ADR-019 требует, чтобы все 3 oracle-скрипта вызывались ТОЛЬКО через нативные tools (
pipeline-status/spec-status/project-status), не через bash. Валидаторcheck-permissions.pyпокрывалpipeline-status.pyиspec-status.py, но НЕproject-status.py— асимметрия. Если бы агент получилallow-правило вида"python3 .../project-status.py": allow, валидатор бы его пропустил. Теперь все 3 скрипта покрыты единообразно.Watch out
—
Pending
—
Closes #105
Code Review Summary
PR закрывает асимметрию из issue #105:
DANGEROUS_PATTERNSтеперь единообразно покрывает все 3 oracle-скрипта (pipeline-status/spec-status/project-status), плюс 3 новых теста (2 параметризованных по 6 кейсов + deny-кейс). Изменения минимальны, симметричны существующему стилю и полностью соответствуют контрактам issue.Positives
^python3? .*project-status\.py/^python .*project-status\.py) идентичны по структуре, scope ("agent") и reason-формату существующим блокамpipeline-status/spec-status— контракт issue #105 выполнен дословно.spec-status.py, передgit clone— как указано в issue.ORACLE_SCRIPT_CASESпараметризует 6 кейсов, что закрепляет инвариант симметрии на будущее (если кто-то добавит 4-й oracle-скрипт, тест-паттерн напомнит о необходимости покрытия).test_oracle_script_pattern_not_flagged_in_globalявно фиксирует, что agent-scoped паттерны не срабатывают наopencode.json— важный инвариантcheck_rules.uv run pytest tests/test_check_permissions.py -q→ 39 passed;python3 .opencode/scripts/check-permissions.py→ exit 0 (deny-правила из #103 не триггерят валидатор).permissions-check.yml(black-box, exit code) иconfigure-opencodeskill (документация). Формат вывода не менялся, breakage-риска нет.Suggestions (info, not blocking)
^python .*project-status\.pyтехнически избыточен —^python3?уже покрываетpython(python + optional 3 + space). Но дублирование идентично существующим блокамpipeline-status/spec-status, и контракт issue #105 явно требует оба паттерна — симметрия важнее DRY здесь. Не менять.spec-status.pyсодержит stale плейсхолдерADR-NNN(соседи используютADR-019). Вне scope этого PR — заведён issue #109.Verdict: APPROVE