docs(skills): плейбук — уроки боевого прогона тикета #12 по песочнице Codex

- Зачем:
  - боевой прогон 2026-07-30 (тикет #12 v2) закрыл открытый вопрос: расширенный доступ Codex не нужен, штатной связки достаточно.
- Что:
  - codex-exec.md: пункт про блок классификатора начинается с проверки песочницы; в рецепт исполнителя добавлено «шире не бери»; снят кавеат «боем не обкатано» — сеть и docker-сокет работают при штатной связке on-request + auto_review.
  - lessons.md: датированный урок 2026-07-30 с дополнением по итогам прогона.
- Проверка:
  - чтение обновлённых разделов; факты — из JSONL-логов прогона тикета #12 (docker manifest inspect и make up завершились completed под workspace-write).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dmitry DementievandClaude Fable 5 committed 2026-07-30 20:54:36 +03:00
1 parent 97193eaa4b
commit ef09a7832b
2 files changed
+54 -7

No files matched your search

@@ -84,9 +84,13 @@
из файла рецептов (`!`-префикс в чат), после применения профиля напомни
убрать `use_legacy_landlock`. Перед первым прогоном конвейера на новой
Linux-машине прогони диагностику из файла рецептов превентивно.
- **Блок классификатора — решение пользователя.** Если запуск не прошёл
permission-гейт, дай пользователю готовую команду с префиксом `!` в чат
или попроси сменить режим разрешений. Сработавший путь — прямой exec;
- **Блок классификатора — сначала сузь песочницу, потом зови
пользователя.** Первая проверка: нет ли в команде `-s
danger-full-access` — классификатор его блокирует, и он не нужен:
docker и сеть проходят эскалацией под штатной связкой из рецепта ниже
(боевой прогон 2026-07-30, тикет #12 v2). Если блок не из-за
песочницы — дай пользователю готовую команду с префиксом `!` в чат или
попроси сменить режим разрешений. Сработавший путь — прямой exec;
companion с `--write` блокируется и напрямую, и через раннера.
## Ветка «исполнитель» (пишет код)
@@ -108,7 +112,10 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \
`approval_policy="on-request"` отработала боевой прогон 2026-07-09).
- Право записи + авто-ревьюер аппрувов. Скоуп ограничивай промптом («коммит
не делай», границы из файла задачи), не песочницей — жёсткий read-only
лишает исполнителя тестов и поиска.
лишает исполнителя тестов и поиска. Шире тоже не бери: `-s
danger-full-access` блокируется классификатором авторежима и не
нужен — docker-сокет (`make up`) и сеть (`docker manifest inspect`)
прошли эскалацией в боевом прогоне 2026-07-30 (тикет #12 v2).
- Промпт: путь к файлу задачи; мандат — в этапе 3 SKILL.md.
- До старта сними baseline `git status --porcelain`; после — сверь отчёт
Кодекса с деревом: правок, которых он не называл, быть не должно.
@@ -123,9 +130,12 @@ cat "$D/task-prompt.md" | codex exec --json --strict-config \
[prompt-templates.md](prompt-templates.md)); Codex держит его надёжно
(практика пользователя, 2026-07-10). Дешёвая подстраховка:
`git status --porcelain` до ревью и сверка после — дерево должно остаться
нетронутым. Кавеат: сеть под workspace-write по умолчанию закрыта; что
поиск/документация проходят эскалацией через авто-аппрув — рабочая
гипотеза, боем не обкатана (см.
нетронутым. Кавеат снят 2026-07-30: сеть под workspace-write по
умолчанию закрыта, но эскалация через авто-аппрув её проходит — в
боевом прогоне тикета #12 (v2) у исполнителя прошли и сеть
(`docker manifest inspect`), и docker-сокет (`make up`, `docker compose
down`). Отдельных событий эскалации в `--json`-логе при этом нет —
успешные команды выглядят обычными `completed` (история вопроса —
[../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md](../handoffs/20260710-codex-revyuer-write-i-sliyanie-handoffov.md)).
`-o`-файл вердикта — и есть обменный артефакт: на триаже он уходит в
@@ -406,3 +406,40 @@ Opus 5 по отдаче ближе к прежнему `xhigh`, а `medium` —
Workflow», либо для каждой роли карты заводится определение с пришитым
эффортом (и фолбэк «скептический general-purpose» из этапа 4 уходит).
До проверки карту не переписывать — вопрос механики, не решения.
### 2026-07-30: классификатор авторежима блокирует `-s danger-full-access`
На запуске Codex-исполнителя (прогон тикета #12, кластер ClickHouse)
классификатор авторежима Claude Code заблокировал команду с
`-s danger-full-access`. Рабочая замена — не полный доступ, а песочница
с поштучной эскалацией:
```
-s workspace-write \
-c 'approval_policy="on-request"' \
-c 'approvals_reviewer="auto_review"'
```
Команда, которую песочница не пустила (docker и т.п.), эскалируется, и
авто-ревьюер Codex её одобряет — запуск уходит мимо песочницы штатно.
Почему это лучше, а не просто обход: привилегия меньше («всё разрешено
заранее» → «поштучно и в логе»), и на приёмке можно посмотреть, какие
именно команды прошли мимо песочницы, — с полным доступом такого списка
не существует. Оговорка: `auto_review` делает песочницу совещательной —
эскалации одобряет автоматика самого Codex, поэтому мандат «исходники
вне ветки не трогать, окружение не ломать» по-прежнему держится на
промпте, не на песочнице (см. правило в SKILL.md).
Классификатор при этом не враг: по отзывам сообщества, именно он в
авторежиме иногда спасает данные от разрушительных команд. Считать его
подсказкой «сузь привилегию», а не препятствием, которое надо обойти.
Дополнение по итогам прогона (тот же день): рецепт исполнителя в
`codex-exec.md` штатную связку уже содержал — `danger-full-access` был
отступлением сессии-оркестратора «на всякий случай» под docker. Прогон
подтвердил, что запас не нужен: под штатной связкой у Codex прошли и
сеть (`docker manifest inspect`), и docker-сокет (`make up`, `docker
compose down`); отдельных событий эскалации в `--json`-логе нет —
успешные команды выглядят обычными `completed`. Кавеаты в
`codex-exec.md` обновлены, пометка «боем не обкатано» снята.