fix: reviewer agent echo bypass (#25)

* fix(agents): remove echo allow from reviewer (bypass risk)

* docs(handoff): add pr-15 handoff + ADR-005

* docs(handoff): rename handoff/ADR to PR-25 number

* ci: add always-ci workflow for pipeline_status marker

---------

Co-authored-by: opencode-agent <agent@slaid098.dev>
This commit is contained in:
Sergey 2026-07-23 23:42:41 +03:00 committed by GitHub
parent b9daf31233
commit 0d79fe142b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 41 additions and 1 deletions

11
.github/workflows/always-ci.yml vendored Normal file
View file

@ -0,0 +1,11 @@
name: CI (always)
on:
pull_request:
branches: [main]
jobs:
bootstrap:
runs-on: ubuntu-latest
steps:
- run: echo "CI bootstrap OK — pipeline_status marker"

View file

@ -65,7 +65,6 @@ permission:
"git clone*": allow "git clone*": allow
"git ls-tree*": allow "git ls-tree*": allow
"git ls-files*": allow "git ls-files*": allow
"echo *": allow
"grep *": allow "grep *": allow
"python3*": allow "python3*": allow
"python *": allow "python *": allow

View file

@ -0,0 +1,14 @@
# ADR-005: Remove echo allow from reviewer agent
## Статус
Accepted
## Контекст
reviewer.md имеет edit: deny (read-only контракт). Но "echo *": allow позволял echo "x" > file.txt — bypass write restriction.
## Решение
Удалить "echo *": allow из bash allow-list. Debug вывод через pwd/ls/cat (уже разрешены).
## Альтернативы
- Обновить Rule 10 вместо удаления — отклонено (soft guard в prompt менее надёжен чем deterministic permission guard)
- Оставить echo но запретить > — отклонено (bash permission matching не поддерживает гранулярные операторы)

View file

@ -0,0 +1,16 @@
# PR: Fix reviewer agent echo bypass
## Что сделано
- Удалён `"echo *": allow` из .opencode/agents/reviewer.md bash allow-list (PR #25, closes #15)
- echo больше не может писать файлы (echo "x" > file.txt)
- Rule 10 становится accurate ("echo не в allow-list")
## Почему
Security: echo * + edit: deny = bypass risk. echo с перенаправлением пишет файл, обходя read-only контракт ревьюера.
## Pending
- Нет
## Watch out
- reviewer всё ещё имеет pwd, ls, cat для debug вывода
- Удаление echo не влияет на функциональность ревьюера