Commit Graph
22 Commits
Author SHA1 Message Date
Dmitry Dementiev 26fdb7584c fix(skills): исправлена настройка песочницы Codex через AppArmor
- Зачем:
  - Профили на пути установки Codex ломались после переустановки, а прежние проверки могли давать ложный успех.
- Что:
  - Штатный профиль системного bwrap выбран основным способом настройки; исторические обходы ограничены подтверждёнными случаями.
  - Уточнены диагностика, переход со старых профилей и проверки режимов и границ записи.
  - Обновлены связанные инструкции и записан результат применения на Ubuntu 24.04.4 с Codex 0.154.0.
- Проверка:
  - Пройдены quick_validate, проверка ссылок, синтаксиса Bash и git diff --check.
  - Штатный профиль применён; старые профили выгружены. Оба режима и запреты записи проверены из процесса unconfined; подтверждены метки AppArmor у bwrap и дочерней команды.
2026-09-10 14:56:36 +03:00
Dmitry Dementiev 67aa5e67d5 docs(claude-subagent-playbook): уточнён запуск продолжения Codex
- Зачем:
  - продолжение треда не должно получать неподходящие модель и effort из конфига.
- Что:
  - добавлено предупреждение явно указывать модель и effort при resume.
- Проверка:
  - git diff --cached --check.
2026-09-09 18:23:19 +03:00
Dmitry Dementiev 2bb0ff6a1a docs(claude-subagent-playbook): уточнены правила координатора
- Зачем:
  - уточнены границы ответственности координатора и правила работы с effort.
- Что:
  - добавлено принятие результата как обязанность координатора.
  - уточнена рекомендация по смене effort внутри треда.
  - сохранены выводы из прогона t2-ml-forecast.
- Проверка:
  - git diff --check.
2026-09-09 15:08:19 +03:00
Dmitry DementievandClaude Opus 5 bc1ebf3bf5 docs(skills): у сообщения про stdin снова две причины
- Зачем:
  - после правки симптом `No prompt provided via stdin` висел только на
    сломанной среде; читатель в нормальной среде, закрывший вход по правилу
    фонового запуска, прогонит самотест, увидит «непусто» и останется без
    диагноза — этот отказ уже был, запись 2026-08-02 (#39).
- Что:
  - в хвост правила `< /dev/null` вернулась сцепка с сообщением:
    «закроешь — получишь то же сообщение».
- Проверка:
  - `grep -n 'No prompt provided' references/codex-exec.md` — симптом назван
    один раз, обе причины стоят рядом в одном пункте.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 19:16:44 +03:00
Dmitry DementievandClaude Opus 5 c3277b8837 docs(skills): предполёт закрывает и вход, соседний пункт не спорит с ним
- Зачем:
  - под предполётом стоял пункт «stdout/stderr — редиректами» без оговорки,
    и при беглом чтении побеждала ближайшая инструкция; вход ломается той же
    поломкой дескриптора, а правило звало подавать промпт редиректом из файла.
- Что:
  - пункт про промпт ведёт каналом (`cat prompt.md | codex exec … -`) —
    форма работает в любой среде; редирект из файла назван как симптом.
  - хвост про stdout/stderr отсылает к предполёту вместо голого редиректа.
  - самотест читается как «пусто/непусто», а не «18 байт»: номер версии
    подрастёт на знак, проверка от этого не зависит.
- Проверка:
  - `grep -n 'stdin\|редиректами' references/codex-exec.md` — противоречащих
    указаний в «Сквозных правилах» не осталось.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 19:11:16 +03:00
Dmitry DementievandClaude Opus 5 1b73419c1d docs(skills): предполёт в рецептах Кодекса, урок отдал форму сбора
- Зачем:
  - среда сама отвечает за пять секунд, теряет она унаследованный файловый
    дескриптор или нет, поэтому документ несёт проверку, а не ответ; форма
    сбора вывода за вечер менялась дважды и не должна жить в двух местах.
- Что:
  - в «Сквозные правила» codex-exec.md добавлен предполёт: самотест
    `codex --version > f; wc -c f`, ветка «ноль байт» с раздельными каналами
    и `set -o pipefail`, оговорка про `wait`.
  - предполётная проверка песочницы переехала туда же из пункта про AppArmor,
    три рецепта не тронуты — их POSIX-форма и код возврата остались честными.
  - урок 2026-08-06 отдал самотест и форму предполёту, оставил находки:
    дефект `2>&1 | cat`, съеденный каналом код возврата, ненужный `script`.
- Проверка:
  - `false | cat > f; echo $?` — 0, с `set -o pipefail` — 1.
  - `bash -c 'echo "{}"; echo err >&2' 2> >(cat > e) | cat > o` — потоки
    в разных файлах, `jq` по логу проходит.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 19:04:27 +03:00
Dmitry DementievandClaude Opus 5 a794d240d7 fix(skills): три хвоста холодного ревью — эффорт, архив, висячий указатель
- Зачем:
  - в буллете про эффорт одна и та же ситуация предписывалась дважды:
    `high` за нетривиальную реализацию и тут же `medium` за неё же по
    отревьюированному тикету. При вчерашнем сжатии разрешение 07-21
    превратилось в правило равного ранга.
  - архив уроков оставался связан ссылкой прямо из живого этапа 3, хотя
    его шапка объявляет файл вне пути прогона: 549 строк устаревших
    правил в одном клике от исполняющего агента.
  - после разреза уроков в записи 07-31 осталось «запись выше» про
    вкусовую линзу — сама запись уехала в архив.
- Что:
  - разрешение 07-21 помечено исключением и вернуло слово «допустима».
  - ссылка на архив в SKILL.md заменена ссылкой-цитатой (запись
    2026-07-06); живых markdown-ссылок на архив вне уроков не осталось.
  - висячий указатель в lessons.md получил адрес: запись 2026-07-31 в
    архиве.
- Проверка:
  - grep по markdown-ссылкам архива: остались только шапка lessons.md и
    библиография codex-sandbox-apparmor.md; все ссылки скилла резолвятся.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:18:20 +03:00
Dmitry DementievandClaude Opus 5 f481831777 fix(skills): песочница ревьюера задана значением, а не запретом
- Зачем:
  - запрет «read-only ревьюеру не режь» стоял в двух местах и всё равно
    был нарушен при сборке команды для холодного ревью этой же сессии:
    отступление обосновали тем, что у ревью документа руки не нужны.
    Третья копия запрета делу не помогла бы — нужен не запрет, а
    отсутствие выбора.
- Что:
  - правило переписано значением: песочница ревьюера — workspace-write,
    как у исполнителя; линии различает свежесть треда и мандат, а не
    привилегия. Оговорка про руки ушла внутрь обоснования, и там же
    сказано, что ревью документа не исключение.
  - добавлена строка, что ветка та же для любого слепого ревью — кода,
    постановки, документа, самого скилла: рецепт копируют целиком, линзу
    задают файлом линии. Повод собирать команду руками снят.
- Проверка:
  - рецепт ветки ревьюера содержит -s workspace-write и штатную связку
    approval_policy/approvals_reviewer; прочитан целиком после правки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:16:02 +03:00
Dmitry DementievandClaude Opus 5 78ee8bfa48 fix(skills): сторож зависшего треда развязан с веткой исполнителя
- Зачем:
  - сторож был зашит на task-result.md и task-stdout.jsonl, то есть на
    артефакты этапа 3. На ревью и на починке отчёт исполнителя уже лежит
    рядом, цикл не делал ни одного тика и выходил молча — страховка
    отсутствовала ровно там, где прогон длиннее всего.
  - отсутствующий лог был неотличим от неростущего: `|| echo 0` выдавал
    ноль два тика подряд, и неверный путь читался как застой.
- Что:
  - пара файлов вынесена в переменные REPORT и LOG первой строкой, с
    указанием подставлять их от страхуемой ветки.
  - отсутствие лога стало отдельным сигналом NOLOG (редирект создаёт лог
    сразу, так что через тик его не быть не может).
  - дописано, что выход из цикла снимает страховку: после STALLED сторож
    перезапускают руками.
  - поправлено описание ловушки bfs: он ругается в stderr, а пустым
    отдаёт только stdout — «молча» было неверно.
- Проверка:
  - симуляция четырёх исходов: штатное завершение, зависание, неверный
    путь к логу (NOLOG) и ветка ревью при лежащем рядом отчёте этапа 3 —
    последняя как раз и не работала до правки.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-04 00:14:23 +03:00
Dmitry DementievandClaude Opus 5 5fa98d4d0b fix(skills): имена вердиктов переименованы на ось этапа, не линии
- Зачем:
  - вчерашнее переименование `review-<task|code>-*` встало на неверную
    ось: `task` и `code` — это две линии этапа 4 (уместность и дефекты),
    а не этапы. Межэтапная коллизия, ради которой всё делалось, осталась
    открытой: у ревью постановки имени вердикта не было вовсе.
  - сборка триажа при этом называла оба вердикта «линия code», хотя один
    из них — вердикт линии уместности.
- Что:
  - вердикты и параметрический блок этапа 4 — `review-impl-*`, этапа 2 —
    `review-spec-*`; общий блок снова один на обе линии этапа.
  - логи ревьюера тоже несут этап (`review-impl-stdout.jsonl`) — раньше
    этап 4 молча затирал лог этапа 2, единственное доказательство для
    проверки «вердикт без находок: работа или отписка».
  - в prompt-templates.md названы имена файлов этапа 2 и добавлено
    предупреждение, что `task` — линия уместности, а не постановка.
  - SKILL.md этапа 5 показывал `вердикт-A.md вердикт-B.md`; заменено на
    реальные имена, комментарий в рецепте ревьюера исправлен.
- Проверка:
  - grep по обменным именам: старых не осталось вне уроков, новые
    согласованы между SKILL.md, prompt-templates.md и codex-exec.md.
  - все markdown-ссылки скилла резолвятся.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 23:52:49 +03:00
Dmitry DementievandClaude Opus 5 abc00a06be refactor(skills): codex-exec переразобран, имена вердиктов по этапам
- Зачем:
  - рецепт Кодекса читают в момент сборки команды; пересказы, хеджи и
    копии уроков внутри него дают место для импровизации — прогон
    2026-07-30 взял `danger-full-access` «на всякий случай» при верном
    рецепте.
  - вердикты звались по семейству (`review-codex.md`), а Codex ревьюирует
    и постановку, и код в одном `$D` — упавший этап 4 оставлял файл этапа
    2, и триаж молча чинил по чужому вердикту.
- Что:
  - codex-exec.md: удалены копия урока про эффорт (экономика xray, казус
    `.dgst`), причинная механика bwrap, повтор про companion и битая
    ссылка «в уроках ниже»; три пересказа эскалации сведены в один;
    ветка ревьюера стала полноценным рецептом; правила одной ветки
    переехали в свои ветки.
  - codex-exec.md: сторож зависшего треда — признак жизни это рост
    stdout.jsonl, а не статус (урок 2026-07-07 в рецепт не доезжал).
  - prompt-templates.md: имена вердиктов и параметров несут этап —
    `review-<task|code>-<codex|claude>.md`, `review-<этап>-params.md`.
  - model-matrix.md: критерий «цена тихой ошибки этапа» стал единым
    источником, claude-agents.md и codex-exec.md на него ссылаются.
  - lessons-archive.md: датированное уточнение — ключи `resume` сверены
    на 0.145.0, `-m`/`-o`/`--json` доступны вопреки записи 2026-07-21.
- Проверка:
  - сверка 51 клаузы по инвентарю (scratchpad), 24 ключевые — grep'ом;
    все markdown-ссылки скилла резолвятся.
  - сторож прогнан на симуляции трёх исходов: штатное завершение,
    зависание на середине, смерть без отчёта.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 23:15:31 +03:00
Dmitry Dementiev 8218a211b4 refactor(skills): claude-subagent-playbook — старые уроки вынесены в архив
- Зачем:
  - lessons.md вырос до 830 строк, и записи до рефакторинга 31 июля
    описывают другую редакцию скилла — прежнюю эффорт-карту, другой
    состав ролей, заготовку adversarial-reviewer, которой больше нет.
- Что:
  - записи с 2026-07-06 по «казусы координации» 2026-07-31 перенесены в
    references/lessons-archive.md без изменений; живой файл сократился с
    830 до 300 строк.
  - шапка lessons.md объясняет разрез и как двигать границу дальше;
    архив вне пути чтения прогона, ссылка на него только из lessons.md.
  - три указателя на переехавшие записи переведены на архив: казус
    форвардера в SKILL.md и codex-exec.md, sandbox-инцидент в
    codex-sandbox-apparmor.md.
- Проверка:
  - все markdown-ссылки скилла разрешаются в существующие файлы.
2026-08-03 22:08:08 +03:00
Dmitry Dementiev 9642910194 fix(skills): claude-subagent-playbook — правила запуска Кодекса по месту
- Зачем:
  - два отказа вызова из прогона #39 повторялись оттого, что правило
    лежало не там, где собирают команду: -s дописывали в resume по
    образцу exec, а < /dev/null закрывал вход у вызова, который сам
    получает промпт через stdin.
- Что:
  - в codex-exec рецепт resume снабжён строкой о том, что среда треда
    задана при создании, а перечень ручек хода уточнён по проверке на
    codex-cli 0.145.0.
  - к правилу «промпт через stdin» добавлено, что вход этого вызова
    должен оставаться открытым.
  - в SKILL.md этап 6 правило < /dev/null сужено условием «фоновой
    команде, которой нечего читать со входа».
  - в lessons исправлен неверный хвост записи #39 про смену песочницы
    ключом -c sandbox_mode.
- Проверка:
  - codex exec resume <любой-id> -s workspace-write → exit 2.
  - echo "say hi" | codex exec - < /dev/null → No prompt provided via stdin.
2026-08-03 21:48:29 +03:00
Dmitry DementievandClaude Fable 5 ef09a7832b 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>
2026-07-30 20:54:36 +03:00
ddadmin 811fc28b7c docs(claude-subagent-playbook): добавлены итоги эксперимента xray-proxy 03/04
- Зачем:
  - зафиксировать решения пользователя 2026-07-21 и эмпирику effort/кэша после двух боевых прогонов.
- Что:
  - явная карта effort для Claude-субагентов: xhigh — постановки/планы, high — слепое ревью, medium — перепроверки (SKILL.md);
  - уточнение критерия выбора effort по цене тихой ошибки этапа и эмпирика смены effort при resume (codex-exec.md);
  - сводка прогонов 03–04 с казусами: гонки конкурентности, выдумка формата .dgst, экономика конвейера (lessons.md).
- Проверка:
  - git diff HEAD~1 --stat.
2026-07-21 03:47:02 -04:00
ddadminandClaude Fable 5 5b2db5bd7f docs(claude-playbook): уточнён дефолт эффорта Codex до medium
- Зачем:
  - решение пользователя 2026-07-19: sol на medium закрывает обычные
    задачи, прежнее правило дефолтило high почти всюду.
- Что:
  - в codex-exec.md переписано сквозное правило эффорта: medium — обычные
    задачи, high — нетривиальная реализация, ревью кода, диагноз.
  - к примеру запуска исполнителя добавлена пометка о выборе эффорта.
- Проверка:
  - вычитка references/codex-exec.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 19:37:18 +03:00
ddadmin 7110a075ea docs(skill): принцип «мастер решает», готовые boilerplate-промпты, ревизия
- Зачем:
  - ретро прогона 2026-07-12 (задача 20, clickstream-demo): контекст
    оркестратора съедали инлайн-диагнозы, переписывание boilerplate и
    кириллица в обменных файлах.
- Что:
  - SKILL.md: принцип «мастер решает — субагенты выясняют» со стоп-краном
    «сам — максимум один заход», обменные файлы на английском, сквозная
    проверка до ревьюеров, будильник одной строкой.
  - references/prompts/: готовые английские boilerplate-файлы (мандат
    ревью, триаж, перепроверка) — подшиваются cat'ом, контекст мастера
    не проходят; prompt-templates перестроен под сборку.
  - codex-exec: модель gpt-5.6-sol, лестница эффорта, ловушка «&»;
    sandbox-справочник переименован в codex-sandbox-apparmor.md;
    lessons дистиллирован, добавлена запись прогона 2026-07-12.
  - закрыты 14 находок слепого Fable-ревью скилла (согласованность,
    единый источник $SCRATCH, скелет ревью постановки).
- Проверка:
  - все внутренние ссылки резолвятся; слепое ревью: APPROVED_WITH_MINORS,
    восстановление структуры подтверждено без потерь.
2026-07-12 22:17:59 +03:00
Dmitry DementievandClaude Fable 5 15d5515925 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>
2026-07-10 16:55:16 +03:00
Dmitriy DementievandClaude Fable 5 db6271f0f7 docs(skill): агенту предписаны инициатива и sudo-эскалация по sandbox-фиксу
- Зачем:
  - рецепт AppArmor-фикса требует sudo, а инициатива агента (диагностика
    до прогона, передача команд пользователю) держалась на здравом смысле,
    не на тексте скилла.
- Что:
  - в правило про линукс-ловушку codex-exec.md дописано: фикс сам не
    применяй — дай пользователю готовые команды с `!`-префиксом; после
    профиля напомни убрать use_legacy_landlock; перед первым прогоном на
    новой Linux-машине прогони диагностику превентивно.
- Проверка:
  - чтение правила в references/codex-exec.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 12:47:29 +03:00
Dmitriy DementievandClaude Fable 5 7607ce2b84 docs(skill): влиты линукс-уроки sandbox из ветки codex-sandbox-fix-20260710
- Зачем:
  - другая сессия на Ubuntu 24.04 задиагностировала молчаливую поломку
    песочницы Codex CLI 0.144.1 (bwrap+userns против AppArmor); знание
    нужно основной линии скилла — Linux-прогон конвейера впереди.
- Что:
  - перенесён references/codex-sandbox-fix-handover-2026-07-10.md
    (диагностика, обход use_legacy_landlock, AppArmor-профиль);
    раздел «Связанные записи» перенацелен с удалённого codex-companion.md
    на codex-exec.md.
  - в codex-exec.md добавлено сквозное правило про линукс-ловушку
    (сигнатура «гуглит, но не может ls»), в lessons.md — датированная
    запись, в handoff — кавеат к пункту про Linux-прогон.
- Проверка:
  - git show origin/codex-sandbox-fix-20260710 — содержимое перенесено
    полностью; перекрёстные ссылки codex-exec.md ↔ handover резолвятся.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 12:43:42 +03:00
Dmitriy DementievandClaude Fable 5 89ebd1d327 docs(skill): claude-subagent-playbook — write-ревьюер Codex и уборка
- Зачем:
  - read-only-конфайн обеднял ревью Codex (без тестов, поиска,
    первоисточников), а плотность SKILL.md и дефолты модели/усилия
    из config.toml накопили риски по итогам трёх прогонов.
- Что:
  - ветка «ревьюер» в codex-exec.md переведена на запись + авто-аппрув,
    защита — мандат промптом; в рецепты добавлены --strict-config и
    явные -m / model_reasoning_effort.
  - SKILL.md: правило «мандат промптом» для обоих ревьюеров, правило
    моделей субагентов (Опус/Sonnet, не Fable), /tdd и /research +
    Context7 в этапе 1, таймер-подстраховка ScheduleWakeup; уборка
    плотности и инлайн-дат.
  - handoffs 07-06/07-07/07-09 поглощены запиской 2026-07-10; в lessons.md
    добавлены правило дистилляции и блок 2026-07-10; правки прошли слепое
    ревью Опусом, все находки закрыты.
- Проверка:
  - оверрайды -m/-c проверены живым codex exec --strict-config;
    перекрёстные ссылки и команды сверены ревьюером с codex --help.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-10 12:41:09 +03:00
Dmitriy DementievandClaude Fable 5 4e496a1548 docs(skill): claude-subagent-playbook — прямой codex exec, уроки прогона 2026-07-09
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 20:05:37 +03:00