- Зачем:
- Устаревшие наблюдения отделены от вопросов текущей редакции без потери истории.
- Что:
- Июльский lessons.md дословно сохранен в архиве.
- Рабочий журнал обновлен под Astra и дополнен условиями переноса старых периодов.
- Добавлен условный переход к эмпирике из итогового разбора координатора.
- Проверка:
- Подтверждено побайтовое сохранение прежнего файла в архиве.
- Проверены 60 относительных ссылок, 9 якорей и git diff --check.
- Зачем:
- Партнер видит ход автономной работы и может вовремя вмешаться.
- Что:
- Добавлены периодические сводки о состоянии и отклонениях.
- Уточнена остановка зависимой работы для решений за пределами полномочий.
- Добавлен итоговый разбор пользы делегирования и затрат с разделением измерений и оценок.
- Проверка:
- Проверены согласованность с правилами триажа и git diff --check.
- Зачем:
- Ревьюер может передать ограниченную механику и объемный вывод помощнику.
- Что:
- В мандат добавлено делегирование Luna с сохранением границ и независимости.
- Оценка доказательств, находки и итоговый отчет оставлены ревьюеру.
- Проверка:
- Проверены итоговый мандат и git diff --check.
- Зачем:
- Исполнитель получает границы самостоятельного делегирования вместе с задачей.
- Что:
- Добавлен блок для Sol с вспомогательной работой Luna и ответственностью за запись.
- Дополнительный исполнитель уровня Sol и переразбиение задачи отнесены к координатору.
- Уточнен запас контекста на реализацию, проверки и исправления.
- Проверка:
- Проверены размещение блока и git diff --check.
- Зачем:
- Сохранено полезное понимание области при переходе к соседней задаче.
- Что:
- Добавлен выбор существующего агента с обновлением цели и границ.
- Указаны основания для свежего контекста, включая независимость проверки.
- Проверка:
- Проверены итоговый абзац и git diff --check.
- Зачем:
- Актуализирована координация под Astra с сохранением замысла и бюджета контекста.
- Что:
- Разделены роли Astra, Sol и Luna; выбор приемов оставлен координатору.
- Сохранены независимое ревью, триаж и проверка соразмерности исправлений.
- Обновлены нативные механики и необязательная линия Claude CLI.
- Проверка:
- Проверены Markdown-ссылки, YAML и git diff --check; описано ограничение валидатора.
- Пройден поведенческий сценарий с тремя тестами и независимое ревью Claude.
- Перепроверены находки и фактическое продолжение фоновой сессии Claude.
- Зачем:
- сохранить замысел самостоятельного скилла для Astra-координатора.
- Что:
- описаны роли, защита контекста и выбор приёмов по задаче.
- сохранены отдельный триаж и защита от несходящегося ревью.
- Проверка:
- выполнен горячий обзор против обсуждения и действующего договора триажа.
- проверены локальные ссылки и git diff --cached --check.
- Зачем:
- запуск Claude без полного доступа ломает дальнейший процесс ревью и делает работу субагентов бессмысленной.
- Что:
- в раздел «Запуск Claude-субагентов» добавлено предупреждение о режиме доступа.
- Проверка:
- git diff agents/.agents/skills/codex-subagent-playbook/SKILL.md.
- Зачем:
- при выборе модели для письменных задач нужна оценка качества текста на русском языке.
- Что:
- в легенду model-matrix.md добавлено определение literacy.
- в таблицу добавлена колонка literacy с оценками моделей.
- Проверка:
- git diff agents/.agents/skills/claude-subagent-playbook/references/model-matrix.md.
- Зачем:
- на прогоне #158 (clickstream v2) три линии ревью дали ноль находок
на реальной ошибке формы: агрегация ключевого зерна в Python,
57 567 ключей через границу ClickHouse -> Airflow. Линза из одних
запахов читает исполнение и не видит решений, а ревью от диффа
принимает раскладку исполнителя как оглавление.
- Что:
- в line-taste.md добавлен блок Shape: набросок ожидаемой формы из
одной постановки до открытия диффа, список недиктованных решений,
вердикт каждому; набросок и список предъявляются как checks run
даже при нуле находок.
- правило оценки распространено на shape-находки; указатели в
prompt-templates.md называют линзу формой и вкусом.
- в lessons.md записана эмпирика прогона #158.
- Проверка:
- вычитка diff линзой writing-for-agents; боевая — следующий прогон
конвейера: shape-артефакты видны в отчете линии уместности.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- эгресс-политика Codex требует явного разрешения владельца на отправку
diff внешнему сервису; на прогоне вопрос пришёл в середине ревью, а
запасные Codex-ревьюеры молча потеряли разнообразие семейств.
- Что:
- в запуске Claude-субагентов: разрешение на передачу кода запрашивать
до начала реализации, одним вопросом на весь прогон.
- в режимах ревью разведены причины недоступности внешней линии:
техническая — работать доступными, согласийная — сначала спросить
владельца, замена односемейными теряет основание линии дефектов.
- Проверка:
- вычитка diff; боевая — следующий прогон конвейера: вопрос о передаче
кода до реализации, ревью-линии без ручного вмешательства.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- на прогоне #156 правило «при расхождении побеждает базовый» снесло
назначение Fable на вкусовую линию — Codex переключился на craftsman/Opus
по карте ролей базового плейбука, потребовалось ручное вмешательство.
- Что:
- приоритет базового ограничен общими механиками конвейера; запуск Claude
и назначение моделей линиям действуют как записаны в этом файле.
- у выбора Fable на вкусовую линию названо «почему»: базовый держит Fable
для оркестрации только на стороне Claude, со стороны Codex она свободна.
- Проверка:
- вычитка diff; боевая — следующий прогон конвейера без ручной правки
выбора моделей.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Зачем:
- README писался моделью, и в нем остались знаки, которых нет на
клавиатуре: их некому было подставить, потому что markdown правят
в редакторе кода, а не в Word с автозаменой.
- декоративные эмодзи в заголовках в русском тексте вне переписки
не ставят вовсе, это самый однозначный след генерации.
- Что:
- сняты эмодзи с шести заголовков и из комментария в блоке кода.
- 21 длинное тире заменено на дефис, 3 пары елочек на прямые кавычки,
7 стрелок на ->, буква "е" приведена к авторскому стилю в 14 словах.
- в разделе "Дизайн-решения" отглагольные существительные развернуты
в глаголы: "форсирование и изменение может сломать" стало
"если форсировать и менять, можно сломать".
- Проверка:
- якорных ссылок на заголовки ни внутри README, ни снаружи нет,
переименование ничего не ломает.
- блоки кода не тронуты: ни одно тире не попало внутрь фенсов,
10 фенсов и 62 строки таблиц на месте.
Co-Authored-By: Claude <noreply@anthropic.com>
- Зачем:
- калибровка была неверной в обе стороны: скилл снимал находку в
статье, считая, что текст прошел через редактор с автозаменой, и
одновременно ловил букву «ё», которая маркером не является вовсе.
- в режиме правки не было запрета доводить текст до идеала, поэтому
вычитка делала его ровнее и машиннее исходника.
- Что:
- линза Клавиатура переписана вокруг простой причины: этих знаков нет
на клавиатуре. Главным тестом стало не наличие тире, а равномерность:
умный редактор подставляет неровно, модель безупречно везде.
- markdown отделен от статьи в Word: подставлять знаки там нечему,
поэтому тире и елочки в .md машинные сразу.
- «ё» выведена из маркеров как личная стилистика; вместо нее записано
предпочтение владельца скилла ее не писать, с исключениями на
смыслоразличение и имена.
- эмодзи вне переписки подняты до безусловного маркера и вместе с
тире в markdown вынесены в блок «везде, среда роли не играет».
- в Решетку добавлен третий слой, ровность правильности; в границы
правки добавлены «не вычищать до блеска» и запрет добавлять ошибки.
- Проверка:
- прогон скилла на секции «Дизайн-решения» из README.md, который и
вскрыл обе ошибки калибровки.
Co-Authored-By: Claude <noreply@anthropic.com>
- Зачем:
- каталог из 29 паттернов писался, когда модели были слабее; сейчас
потребители скилла — Opus 5 и GPT 5.6 Sol, которые знают эти правила
по умолчанию, и 578 строк платили контекстом за no-op.
- каталог закрыт: он стареет вместе со slop'ом и провоцирует checklist
theater вместо суждения.
- Что:
- references/patterns.md удалён, 29 ID сведены к пяти линзам:
Клавиатура, Голос, Решётка, Вода, Ассистент; скилл ужался с 661
строки до 145.
- severity 29x3 сжата в профили трёх сред: красные ячейки
группируются по среде, а не по паттерну, плюс «не X, а Y» везде.
- основным режимом стала правка, отчёт вынесен во вторую ветку;
Голос не правится молча и предъявляется первым, потому что требует
мнения, случая и цифр автора, которых у скилла нет.
- каталожную проверку заменил гейт человеческого дубля, плотность
переведена из гейта в интерпретацию вердикта.
- Проверка:
- слепой прогон новой версии на трёх входах: AI-проза для статьи,
AI-сообщение в мессенджер, живое человеческое сообщение.
- на человеческом тексте ноль ложных находок; десять дефектов
инструкции, найденных прогоном, исправлены до коммита.
Co-Authored-By: Claude <noreply@anthropic.com>
- Зачем:
- линтер умел только вычитать маркеры, а текст без авторского голоса
палится не хуже текста с em dash'ами: после чистки оставался
безлико правильный результат.
- у прогона не было критерия завершения, поэтому проверка сводилась
к тому, что бросилось в глаза.
- Что:
- T03 развёрнут в три срабатывания (перечисление без вывода, безличные
конструкции, абстрактная оценка) с требованием назвать, что конкретно
добавить, вместо совета «добавить позицию автора».
- добавлен шаг самоаудита поверх закрытого каталога: находки X01, X02
с тестом «нельзя записать ни под один ID» и разрешением нулевого
результата.
- Шаг 2 получил критерий «каждый паттерн применён к тексту», quick scan
сведён к паттернам с механической детекцией.
- S04 стал единственным владельцем однородности ритма; удалены дубль
T03b, неоперационализируемый T03e, шаг «Ответить на вопросы» и девять
перефразировок одной ветки в description.
- Проверка:
- тестов на скиллы в репозитории нет, прогон ручной: вызвать скилл
на абзаце AI-прозы и на коротком сообщении в мессенджер.
- git show --stat HEAD: SKILL.md и references/patterns.md.
Co-Authored-By: Claude <noreply@anthropic.com>
- Зачем:
- приложение должно явно работать через прокси и сохранять настройку после обновлений.
- Что:
- добавлены отдельный ярлык ChatGPT Proxy и запускатель на основе proxy-client.
- исключено смешение прямого и проксированного режимов существующего процесса.
- установка, документация и автоматические проверки дополнены новым Stow-пакетом.
- Проверка:
- bash tests/test_chatgpt_proxy_launcher.sh.
- bash tests/test_proxy_launchers.sh.
- bash tests/test_install.sh.
- Зачем:
- предыдущая запись предлагала написать тест сверки копий NO_PROXY, хотя
tests/test_proxy_env_sync.py делает ровно это с момента появления копий.
- Что:
- запись переписана: дублирование под охраной, но на Windows проверка
падает с ModuleNotFoundError: fcntl, потому что грузит proxy-client
через runpy.
- задача заменена на «дать тесту читать константу без исполнения модуля».
- сохранён нерешённый вопрос про замещение no_proxy_extra: эта ветка не
покрыта тестом вообще.
- Проверка:
- python tests/test_proxy_env_sync.py -v — 1 ok, 1 ERROR (fcntl), то есть
поведение, описанное в записи.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- машинный конфиг, собранный копированием примера, молча выкидывает
из обхода .concept-software.ru и Gitea, а обрыв всплывает как TLS-ошибка.
- Что:
- в README уточнено, что no_proxy_extra замещает DEFAULT_NO_PROXY_EXTRA
целиком, а не дополняет его.
- предупреждение продублировано в обоих примерах конфига, рядом с полем.
- в TODO.md записано дублирование списка в пяти windows-файлах и
отсутствие теста синхронности с источником.
- Проверка:
- bash tests/test_proxy_launchers.sh — 8 проверок пройдено.
- configparser читает оба примера, значение no_proxy_extra не изменилось.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- новые скиллы не должны отображаться как неотслеживаемые файлы.
- Что:
- в agents/.agents/skills/.gitignore добавлены to-questionnaire/, wait-what/, wizard/, writing-for-agents/.
- Проверка:
- git status --short больше не показывает эти директории как untracked.
- Зачем:
- расширить методологию ревью артефактов после мозгового штурма.
- Что:
- добавлен абзац о cold review и порядке работы с его находками в SKILL.md.
- Проверка:
- git show HEAD:agents/.agents/skills/brainstorm-with-docs/SKILL.md | grep -A 5 'cold review'
- Зачем:
- после правки симптом `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>
- Зачем:
- под предполётом стоял пункт «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>
- Зачем:
- среда сама отвечает за пять секунд, теряет она унаследованный файловый
дескриптор или нет, поэтому документ несёт проверку, а не ответ; форма
сбора вывода за вечер менялась дважды и не должна жить в двух местах.
- Что:
- в «Сквозные правила» 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>
- Зачем:
- «изнутри харнесса» читалось как «в любом агенте»: в Claude Code CLI
2.1.223 на той же машине и версии всё штатно, и читатель пошёл бы
чинить работающее. И советованный `2>&1 | cat` кладёт stderr в JSONL:
`jq` спотыкается, а первой строкой вместо thread.started может встать
предупреждение конфига.
- Что:
- отказ назван свойством T3 Code, а не Bash Клода; читателю дан
самотест `codex --version > f; wc -c f` вместо веры в ярлык.
- форма сбора вывода заменена на раздельную: stderr через подстановку
процесса, stdout каналом; добавлена оговорка про `wait`.
- Проверка:
- раздельная форма прогнана целиком: лог 6 строк, `jq -r .type`
проходит по всем, thread_id из первой строки, command_execution — 2,
stderr отдельным файлом, отчёт -o на месте.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- первая редакция объявляла отказ свойством codex-cli 0.146.0. Чистые
0.146.0 и 0.146.1 на этой же машине пишут в перенаправленный файл
штатно, значит запись вела следующего читателя чинить рецепты от
несуществующей поломки.
- Что:
- запись 2026-08-06 переписана: ось не «терминал против всего», а файл
против канала, и живёт она в харнессе, а не в версии; одна причина на
обе прежние находки, обход — канал вместо псевдотерминала.
- методическая часть усилена: среда — тоже параметр серии, и первый
подозреваемый при расхождении с документацией инструмента.
- ловушка недоверенного каталога сохранена.
- Проверка:
- изнутри харнесса на 0.146.1: `codex --version > f` — 0 байт,
`| cat > g` — 18; `exec --json … > log` — пусто, `2>&1 | cat > log` —
7 строк с thread_id и двумя command_execution; без песочницы то же.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- на 0.146.0 вызов Кодекса из Bash оркестратора теряет весь stdout, и
три механизма рецептов слепнут молча: thread_id, сторож застоя и
проверка отписки. Новый агент со скиллом на входе наткнётся на это
в первом же прогоне.
- Что:
- запись 2026-08-06 в lessons.md: отказ и его цена для конвейера,
промпт только каналом (файл на входе даёт то же сообщение, что и
закрытый stdin), два проверенных обхода — псевдотерминал и журнал
прогона Кодекса с thread_id в имени.
- там же назван кандидат в механизм: рецепты codex-exec.md держат
правило stdin и приём проверки отписки в нерабочей редакции.
- Проверка:
- четыре контрольных прогона codex-cli 0.146.0, различающихся одним
параметром; обходы проверены до записи.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- три случая одной формы за месяц: правило стоит на месте, а
рассуждение берёт себе исключение — отказ стоит описать до того, как
он повторится в четвёртый раз.
- Что:
- запись 2026-08-04 в lessons.md: песочница ревьюера и лечение
значением, восстановление скретчпада из транскрипта сессии с ценой
и границами приёма, диагноз владельца про краткость исполнителя.
- третий открытый вопрос handoff'а закрыт решением владельца и заменён
ссылкой на журнал.
- Проверка:
- git log --oneline c18472e.. ; новых строк длиннее 80 символов нет.
- Зачем:
- индексы находок жили в скретчпаде и умирают вместе с сессией; из
прозы handoff'а нельзя было понять, какая находка закрыта, а какая
ещё ждёт решения.
- Что:
- FIT-5 убрана из списка оставленных: закрыта коммитом 10f55f3.
- открытым проставлены номера и довод линии — TECH-3, FIT-4, FIT-11,
FIT-12; вопросы владельцу помечены как FIT-3 и FIT-10.
- счётчик коммитов заменён командой: HEAD с тех пор уехал.
- Проверка:
- git log --oneline c18472e.. ; строк длиннее 80 символов в handoff нет.
- Зачем:
- находка FIT-5 холодного ревью: развилка, сжатая до открытого вопроса,
не даёт принять решение — кода нет в контексте ни у координатора, ни у
владельца, а исполнитель в этот момент единственный держит картину.
- Что:
- NEEDS_DECISION в triage-header.md требует варианты и рекомендацию
исполнителя, а не только формулировку вопроса.
- требование «понятно без чтения кода» адресовано обеим меткам
координатора сразу — вместе с OUT_OF_SCOPE.
- раздел «Пользователь в петле» SKILL.md обязывает координатора нести
решение владельцу тем же составом.
- Проверка:
- первым боевым прогоном конвейера: у NEEDS_DECISION в отчёте
исполнителя есть варианты, их цена и рекомендация.
- Зачем:
- индексы находок и промпты обеих слепых линий жили в скретчпаде
сессии и её не переживут; открытые вопросы и неотработанные боем
механики надо было вынести в долговечное место рядом с прежними
handoff'ами скилла.
- Что:
- добавлен handoffs/20260803-kholodnoe-revyu-skilla-i-pravki.md:
устройство холодного ревью, три вопроса к владельцу, находки
оставленные сознательно (с доводами), пять пунктов «не обкатано
боем» и список подсказанных скиллов.
- содержимое коммитов не дублируется — диапазон назван ссылкой
c18472e..HEAD.
- Проверка:
- строки ≤80 символов, объём сопоставим с соседними handoff'ами.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- в буллете про эффорт одна и та же ситуация предписывалась дважды:
`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>
- Зачем:
- запрет «read-only ревьюеру не режь» стоял в двух местах и всё равно
был нарушен при сборке команды для холодного ревью этой же сессии:
отступление обосновали тем, что у ревью документа руки не нужны.
Третья копия запрета делу не помогла бы — нужен не запрет, а
отсутствие выбора.
- Что:
- правило переписано значением: песочница ревьюера — workspace-write,
как у исполнителя; линии различает свежесть треда и мандат, а не
привилегия. Оговорка про руки ушла внутрь обоснования, и там же
сказано, что ревью документа не исключение.
- добавлена строка, что ветка та же для любого слепого ревью — кода,
постановки, документа, самого скилла: рецепт копируют целиком, линзу
задают файлом линии. Повод собирать команду руками снят.
- Проверка:
- рецепт ветки ревьюера содержит -s workspace-write и штатную связку
approval_policy/approvals_reviewer; прочитан целиком после правки.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- сторож был зашит на 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>
- Зачем:
- вчера в шапку перепроверки дописано требование судить лечение, а
места под ответ в формате строки нет: перетянувшая правка, которая
находку закрывает, не ложится ни в CLOSED, ни в NOT_CLOSED, ни в
статусы отклонения. Обе линии холодного ревью нашли это независимо,
и тот же долг записан в lessons.md:99-102 («статус вешается на
находку, не на лечение; механизма по-прежнему нет»).
- оговорка про «размен свойства на защиту от умысла» обобщила один
случай на весь класс безопасности — защита от умысла и есть этот
класс.
- Что:
- в спецификацию строки добавлен второй вердикт для ID со статусом
FIXED: PROPORTIONATE или OVERREACH с указанием, что вышло за
находку; OVERREACH не переводит прогон в ISSUES_REMAIN.
- оговорка про NOT_CLOSED вернулась к взвешиванию цены и получила
границу: так закрываются инварианты своего кода, но не находки про
доступ, данные и деньги.
- OVERREACH выносится в финальную строку, а prompt-templates.md
разрешает читать файл перепроверки и по нему — иначе сообщение
наверх не дошло бы: файл читается только при ISSUES_REMAIN.
- Проверка:
- FIXED сверен с вокабуляром triage-header.md; статусы перепроверки
и условие чтения файла согласованы между тремя файлами.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- вчерашнее переименование `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-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>
- Зачем:
- claude-subagent-playbook вызывает deep-reasoner, craftsman и
fast-worker, но определений в репозитории не было; ступень эффорта
задаётся только фронтматтером, без файла агент приедет на эффорте
сессии.
- Что:
- добавлены .claude/agents/{deep-reasoner,craftsman,fast-worker}.md
дословно по заготовке references/claude-agents.md (opus/high,
opus/medium, sonnet/default).
- в .gitignore правило /.claude/ заменено на /.claude/* с исключением
!/.claude/agents/ — остальное локальное по-прежнему вне git.
- Проверка:
- git check-ignore -v .claude/agents/*.md — пусто;
git check-ignore -v .claude/settings.local.json — правило срабатывает.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Зачем:
- 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-ссылки скилла разрешаются в существующие файлы.
- Зачем:
- два отказа вызова из прогона #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.
- Зачем:
- после разворота ролей (реализация Опусом, ревью Кодексом) ревьюер
продавливает исполнителя формальными решениями: за прогоны #39, #40 и
#50 около 28 находок и ноль отклонений.
- Что:
- в triage-header добавлен блок «ревью — свидетельство, а не приказ»:
отклонение равноправно починке, маршрут ревьюера — предложение.
- определение NEEDS_DECISION расширено случаем, когда выбор делает сама
починка, независимо от объёма правки.
- в recheck-header добавлен суд над лечением: перебор — тоже дефект, а
NOT_CLOSED требует существующего закрывающего состояния и цены
альтернативы.
- в lessons закрыт долг четырёх прогонов и сведена очередь на механизм.
- Проверка:
- следующий полный прогон плейбука: в триаже должны появиться
отклонения или закрытия своим маршрутом с доводом.
- Зачем:
- две записи прогонов остались незакоммиченными; без них теряется фактура,
ради которой журнал и ведётся, — и повторяющийся долг скилла нечем
подтвердить.
- Что:
- запись по #40: шапки соразмерности лечения сработали в третий раз;
пересечение слепых линий — одно явление, описанное двумя способами.
- запись по #50: сломанный прибор доезжает до коммита — ошибка измерения
всплыла трижды на трёх уровнях, и ни разу её не поймал тот, кто мерил.
- там же уточнение наблюдения владельца про дрейф Кодекса к букве и
кандидат в механизм; долг с шапками отмечен четвёртым прогоном подряд.
- Проверка:
- git show --stat; записи читаются как фактура для доработки скилла.
Зачем: два прошлых прогона оставили долг — статус вешался на находку, а
лечение проезжало без суда. В прогоне #39 долг закрыт шапками триажа и
перепроверки, и это стоит помнить вместе с ценой: ручку пришлось собирать
руками в каталоге прогона.
Что: секция от 2026-08-02 про тикет #39 — как сработала ручка соразмерности
(трижды за прогон), почему «10 FIXED, 0 REJECTED» не доказательство, зачем
проверять единственный MAJOR своим зондом при тонком логе перепроверки, и два
отказа вызова Кодекса: закрытый stdin убивает промпт, а `codex exec resume`
не принимает `-s`.
Проверка: чтением; правка только в lessons.md, поведение скилла не менялось.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Зачем:
- прогон тикета #38 повторил конфигурацию 08-01 (оркестратор он же
исполнитель, Кодекс третьей линией) и показал у той же дыры вторую
сторону, а заодно класс сбоя, которого в файле не было.
- Что:
- перепроверка тем же ревьюером не судит соразмерность лечения ни в
одну сторону: после ALL_CLOSED на своё предписание — NOT_CLOSED с
требованием недостижимого; приём — проверять существование
закрывающего состояния и мерить цену альтернативы.
- долг 08-01 назван неисправленным: статус вешается на находку, не на
лечение; здесь лечение судилось только по требованию владельца.
- новый класс: сломан не код, а измерительный прибор — устаревший .pyc
в цикле мутаций; линии ревью такого не ловят.
- Проверка:
- запись прочитана целиком, повторов предыдущих записей нет.
Прогон 2026-08-01 (clickstream v2, тикет #36) дал редкую конфигурацию:
оркестратор и есть исполнитель, плейбук позвали третьей линией поверх
готовой работы. Отсюда три факта для будущих доработок: триаж судит
находку, но не лечение; NEEDS_DECISION не сработал, потому что дешевизна
починки замаскировала, что это решение чужого слоя; перепроверка тем же
ревьюером перебор в лечении не ловит структурно. Записано фактами, правки
самого скилла не делались.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Скиллом пользуются не только на машинах с глобальным словарём — он должен
быть самодостаточным. Шаг 7 называет перечитывание hot review с глоссой
оси (полный контекст автора: дёшево, но слепота общая), stop_condition
предлагает cold review свежей сессией как следующий шаг при высоких
ставках. Тёплое ревью не внесено: скилл им не пользуется.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Зачем: «перечитай свежим взглядом» стало двусмысленным с появлением
субагентов — то ли сам перечитай, то ли зови свежую сессию.
Что: claude/.claude/CLAUDE.md с осью «сколько авторского контекста несёт
ревьюер»: горячее (автор сам, глазами читателя), тёплое (агент с брифом),
холодное (свежая сессия без контекста). Линкуется install.sh в
~/.claude/CLAUDE.md тем же механизмом, что settings.local.json; файл внесён
в белый список .gitignore.
Проверка: симлинк создан на этой машине, содержимое читается.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Текстовые огрехи горячее ревью правит молча по месту; находку уровня
решений (противоречие, дыра в охвате) предъявляет владельцу, не исправляя
и не замалчивая. Довод владельца: текстовые находки видны и неопасны, а
противоречия при перечитывании не раз оказывались важными — плоский запрет
переоткрывать решения заставлял бы молчать или чинить мимо владельца.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>