docs(skill): экономия контекста оркестратора по ретро прогона 2026-07-10

- Зачем:
  - ретро трёх циклов конвейера показало: находки ревью проходили через
    контекст оркестратора до шести раз, review-промпт дублировался, ~7
    пустых ходов на idle-пингах teammate-ревьюера.
- Что:
  - SKILL.md: механика «индекс у оркестратора, нагрузка файлами» — вердикты
    в файлы обменного temp-каталога, fix-промпт конкатенацией, один
    канонический review-промпт на обоих ревьюеров, idle-пинги как шум;
  - новый references/prompt-templates.md — скелеты четырёх промптов;
  - codex-exec.md: сборка промптов cat'ом, боевая модель gpt-5.5 явно
    (фронтир из конфига не наследовать);
  - codex-sandbox-fix-handover: рабочий AppArmor-фикс (ловушка memfd,
    профиль на бинарь codex), проверен на обоих режимах;
  - lessons.md: датированные записи ретро, казуса Sol и memfd.
- Проверка:
  - чтение SKILL.md и references/, следующий прогон конвейера.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dmitry DementievandClaude Fable 5 committed 2026-07-10 16:55:16 +03:00
1 parent 4d074adda6
commit 15d5515925
5 files changed
+258 -22

No files matched your search

@@ -56,13 +56,30 @@ permission profiles requiring direct runtime enforcement are incompatible with -
— workspace-write требует именно bwrap-backend. Полный фикс — ниже, нужен sudo.
## Полный фикс (sudo; на исходной машине пока не применён)
## Полный фикс (sudo; применён и проверен 2026-07-10)
**Вариант A — рекомендуемый, точечный**: AppArmor-профиль только для bwrap Codex'а, системное ограничение userns остаётся. Создать `/etc/apparmor.d/codex-bwrap`:
**Ловушка, съевшая первую попытку**: профиль на путь vendored bwrap
(`**/codex-resources/bwrap`) НЕ работает — Codex ≥0.144 исполняет
**встроенный** bwrap из memfd (`linux-sandbox/src/bundled_bwrap.rs`,
`memfd_create` в бинаре), и путевой attachment не цепляется никогда: в audit
виден `profile="unconfined" comm="bwrap"` → transition в
`unprivileged_userns`. Прямой запуск vendored bwrap с диска при этом
проходит — ложное подтверждение, не верь ему.
**Рабочий вариант**: вешать профиль на **сам бинарь codex** (родителя) —
memfd-exec'нутый ребёнок наследует метку через exec, и правило `userns,`
разрешает namespace. Стандартный приём Ubuntu для браузеров/Electron.
`/etc/apparmor.d/codex-bwrap`:
```
abi <abi/4.0>,
include <tunables/global>
profile codex-cli /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/bin/codex flags=(unconfined) {
userns,
include if exists <local/codex-cli>
}
profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/codex-resources/bwrap flags=(unconfined) {
userns,
include if exists <local/codex-bwrap>
@@ -73,8 +90,12 @@ profile codex-bwrap /home/dmitry/.npm-global/lib/node_modules/@openai/codex/**/c
```
codex sandbox -c 'sandbox_mode="workspace-write"' -- sh -c 'touch ./__p && rm ./__p && echo OK'
codex sandbox -- sh -c 'touch ./__p 2>/dev/null && echo BROKEN || echo RO_OK'
```
Проверено 2026-07-10: WRITE_OK, read-only блокирует запись, workspace-write
не пускает в `/etc` — изоляция сохранена.
Переносимость: путь в профиле — под конкретную машину (`~/.npm-global/...`); glob `**` переживает обновления версий Codex, но если npm-global живёт в другом месте — путь поправить. Перезагружать профиль нужно только при смене самого расположения.
**Вариант B — грубый, не рекомендуется**: `sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0` (+ файл в `/etc/sysctl.d/`). Ослабляет защиту всей машины.