- Зачем:
- зафиксировать уроки прогона тикета 06 (t2-presale) до их поглощения
в SKILL.md.
- Что:
- главный урок: карта прогресса для пользователя на границах этапов.
- блок «Модели»: переоценка Sol, боевое подтверждение medium,
роли Опус/Codex, наводка gpt-5.6-terra с пометкой «не обкатано».
- Проверка:
- чтение references/lessons.md, запись «Прогон 2026-07-13».
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
22 KiB
Эмпирика прогонов
Датированные факты: что поймал каждый этап конвейера, казусы, цифры. Дописывай после каждого прогона — это и есть «выжимка опыта», ради которой скилл существует. Журнал накопительный, поэтому дистиллируй: когда урок поглощён SKILL.md или references, сжимай его запись здесь до строки-факта (дата, что случилось, куда поглощено) — иначе файл растёт бесконечно.
2026-07-06 — t2-ml-forecast, задача 05 (первый прогон; дистиллировано 2026-07-12)
- Свежий взгляд на постановку окупился: блокер name_ru (в данных — английский),
две «одностроки» с проектными решениями, дыра регенерации
.ipynb. Поглощено: SKILL.md этап 2. - Казус форвардера: субагент, получив постановку вместо команды, реализовал задачу сам (+1227 строк). Поглощено: SKILL.md этап 3, codex-exec (раннер).
- Слепое двойное ревью: пересечение находок — ноль; Клод подтвердил математику и артефакты, Codex нашёл две дыры в тестах. Поглощено: SKILL.md (роли).
- Смерть фонового ревьюера без доставленного отчёта; транскрипт не спас. Поглощено: SKILL.md этап 4 (вердикт — файлом, сообщение — указателем).
- Цифры: ревью постановки ~60k токенов; конвейер ~3 часа, реализация ~20 мин.
2026-07-07 — наглядность витрины (полный конвейер; дистиллировано 2026-07-12)
- Idle-уведомление ≠ отчёт; голый поллер вне run_in_background умирает при смене хода; статус job — не истина (зомби «running» после смерти воркера: истина — mtime артефакта + лог + pgrep). Поглощено: SKILL.md («Пользователь в петле»), codex-exec (фоновый запуск, раннер).
- Безадресный resume подхватывает чужой тред. Поглощено: codex-exec.
- Доводы отклонений — в файл задачи (свежий тред продолжает без контекста предшественника). Поглощено: prompts/triage-header.md.
- Не поглощено (держать в уме при постановке): правила задачи ранжировать явно («правило A главнее буквы E») — внутренние противоречия всплывают после починки.
- Цифры: реализация 18 мин; триаж ~8 мин; тесты 147 -> 154.
2026-07-09 — local-transcriber, SendTo (первый под Windows; дистиллировано 2026-07-12)
- Git Bash-стек работает целиком; классификатор режет companion
--write, прямойcodex execпроходит. Поглощено: codex-exec. - Свежий взгляд: 2 major (OEM-кодировка
.cmdна кириллическом профиле, протухание пути venv) + load-bearing порядок проверок. Поглощено: этап 2. - Отписка: вердикт одной строкой, проверка по JSONL подтвердила работу. Поглощено: SKILL.md этап 4, codex-exec.
- Эмпирический ревьюер (воспроизведение краевых случаев вне репо) — вердикт твёрже. Поглощено: SKILL.md этап 4, boilerplate шаблонов.
- Цифры: ревью постановки ~57k, кода ~48k, перепроверка ~45k токенов.
2026-07-10 — четыре записи (дистиллировано 2026-07-12)
- Ревьюер Codex без read-only: мандат промптом надёжен, песочница не режется. Поглощено: codex-exec (ветка ревьюера).
- Sandbox-инцидент CLI 0.144.1 (bwrap+userns vs AppArmor) и ловушка memfd (профиль на путь bwrap не цепляется — вешать на бинарь codex). Поглощено: codex-exec + codex-sandbox-apparmor.md.
- Постановка через
/to-ticketsложится в конвейер без трения; двойное слепое ревью постановки окупилось (Клод — механика кода, Codex — уровень требований; пересечение 2 из ~15). Поглощено: SKILL.md этапы 1–2. - Ретро расхода контекста (3 цикла): находки проходили через оркестратора до шести раз; review-промпт дублировался; ~7 пустых ходов на idle-пингах. Поглощено: SKILL.md (роль оркестратора: индекс, cat, файлы), шаблоны.
Прогон 2026-07-12: clickstream-demo, задача 20 — флаки runtime-гейта
Полный конвейер + три захода стендовой приёмки. Главный урок прогона: ревью по чтению кода не заменяет сквозный прогон — два класса дефектов вскрылись только на стенде.
Что поймал каждый этап:
- Ревью постановки (Opus): настоящий корень — отсутствие SIGTERM-хендлера (python PID 1, SIGKILL после grace); один из двух вариантов фикса в постановке гонку не закрывал. Плюс критерий «красный сценарий всё ещё ловится» и запрет вероятностных смягчений.
- Слепые ревью: Codex — grace-период 10с и обходимость precheck (пара из старой backfill-строки); Клод — подтвердил структурный довод, на узкой перепроверке принёс НОВУЮ находку (тест биндил порт 9109 — флаки 1/13). Пересечение — 2 темы из ~8 (grace, слабый контракт-тест): не «стабильно ноль», но малое; обе родословные оправдались.
- Стендовая приёмка (3 захода): (1) гейт годами жил на побочном эффекте
бага — пересекающие визиты давала «нелегальная переработка» генератора
после игнорируемого SIGTERM; честный фикс оставил проверку без сырья;
(2) таймзона: наивные метки STG (UTC) против границы с
+00:00на сервере Europe/Moscow — precheck был зелёным вакуумно; та же ошибка — в приёмочном скрипте координатора (наивная конвенция DDS). Урок: сравнение времени в SQL — только с явным поясом с обеих сторон.
Ретро контекста оркестратора (главный пожиратель — внеплановые циклы):
диагнозы падений приёмки велись мастером инлайн (~15 вызовов); boilerplate
промптов переписывался трижды; обменные файлы шли кириллицей (×1,5–2);
правки задачи-файла — тремя крупными Edit (old+new = двойной текст);
промпты будильников пересказывали план. Поглощено 2026-07-12: SKILL.md
(принцип «мастер решает — субагенты выясняют», стоп-кран «сам — максимум
один заход», механика — fast-worker'у, обменные файлы на английском,
будильник одной строкой, сквозная проверка до ревью, фолбэк ревьюера
deep-reasoner — обкатан этим прогоном), prompt-templates + prompts/
(готовые boilerplate-файлы, английские скелеты), codex-exec (модель
gpt-5.6-sol, medium для узких починок, ловушка &). Слепое Fable-ревью
самого скилла (по глоссарию writing-great-skills): восстановление после
rm -rf подтверждено без потерь, 9 MINOR + 5 NIT согласованности — все
закрыты тем же днём.
Прочее: казус двойного фона (& при run_in_background) — спасён
ожидателем kill -0; принятие остаточного риска (публикация не ограничена
по времени) зафиксировано доводом в задаче — паттерн «риск принят + после
фикса такой отказ падает громко и честно» работает как аргумент приёмки.
Отдельный казус координатора: rm -rf «зеркала» скилла прошёл сквозь
симлинк ~/.claude/skills -> dotfiles и снёс оригинал; восстановлено из
git (git show HEAD:path) + повторным наложением правок из контекста.
Урок: перед rm — ls -la цели и родителя, симлинк-родитель = чужая
территория.
Цифры: реализация ~25 мин; ревью постановки 75k токенов субагента, ревью кода 65k, перепроверка 80k (с новой находкой); приёмка — 4 прогона гейта по ~1,5 мин + красный сценарий; тесты 190 -> 192 + 21.
Прогон 2026-07-12/13: clickstream-demo, задача 13 — глагол next-day
Первый прогон после поглощения уроков задачи 20 — они сработали: вердикты читались по одному разу, boilerplate не переписывался (cat из prompts/), обмен на английском, ноль инлайн-диагнозов мастера (стоп-кран держит), будильники одной строкой (9 взводов, ни один не сработал впустую — все сняты по уведомлениям).
Что поймал каждый этап:
- Двойное ревью постановки: пересечение 5 тем из ~15 (guard, идемпотентность, атомарность, формат цепочки, проверки). Уникальное: Клод — «next-day = новый режим запуска, постановка прячет основную работу за словом „переиспользует"»; Codex — «расписание запустит дефолтный backfill» (скоуп-решение: расписание вынесено отдельной задачей).
- Слепые ревью кода: пересечение 1 тема из ~12 (нулевой стык). Codex — дефекты нового скрипта (хвост за границей, TZ), Клод — архитектура (retention Kafka против пересборки счётчиков — блокер будущей задачи, скрытая связка наборов настроек). Родословные разошлись почти полностью.
- Эмпирика исполнителя: требование обоих ревью («громкий отказ на нулевом стыке») покраснело на честном стенде — ночной провал трафика, снова класс «артефакт верификатора». Диагноз по данным делегирован исполнителю тем же тредом (state на границе: 0 активных визитов — restore ни при чём). Урок: требование ревьюеров сверяй с критериями приёмки и реальным распределением данных, прежде чем принять его в код.
- Узкая перепроверка Codex снова принесла новый MAJOR (микросекунды в UTC-нормализации) — второй прогон подряд, считать штатным режимом.
Новые пожиратели контекста мастера, по убыванию:
- Эхо файла задачи: исполнитель дописал резолюции в тикет, который мастер сам писал на этапе 2, — харнесс вкатил в контекст все ~190 строк; итого текст тикета прошёл через мастера трижды (Write + эхо + финальное чтение). Не поглощено; митигация неочевидна — резолюции проекту нужны именно в тикете. Держать в уме при выборе, кто пишет файл задачи.
- Клод-ревьюер держит формат индекса хуже Codex: многострочные находки и развёрнутые confirmations при жёстком boilerplate («one-phrase essence»). Поглощено: обёртка Клод-ревьюера в prompt-templates дополнена напоминанием об однострочности.
- Авторство решений этапа 2 — у мастера по определению (110 строк кириллицы в тикет после двойного ревью постановки): это цена этапа, на мелких задачах конвейер не разворачивать (правило уже в SKILL.md, теперь с ценником).
Дешёвый приём: вердикт перепроверки Клода взят из строки task-notification (обёртка требует финальным актом только VERDICT-строку) — файл не читался.
Цифры: конвейер ~2 часа от ревью постановки до приёмки; реализация ~30 мин; Клод-субагенты: ревью постановки 94k, кода 108k, перепроверка 126k токенов; Codex-ревью: 42/36 команд; 2 круга триажа + узкий диагноз; тесты 192 -> 204 + 21 -> 31; учебный цикл: DM 322 -> 10 026 -> 19 196 за два next-day.
Прогон 2026-07-13: t2-presale, тикет 06 — совместимость со средой стенда
Главный урок — информирование пользователя. Статусы на границах этапов были телеграфными и в терминах плейбука («этап 4», «триаж», «узкая перепроверка»); эпизодически заглядывающий пользователь потерял нить: спросил «мы остановились?» при живом фоне, а после финала считал, что конвейер ещё на ревью постановки и «решение удалили». Фидбек дословно: «информирование о ходе процесса было очень скудным». Урок: на каждой границе — карта прогресса 4–7 строк (✅ сделано / ▶ идёт / ⬜ дальше) обычными словами, термины плейбука только с расшифровкой; карта дополняет содержательную сводку, не заменяет. Кандидат на поглощение в SKILL.md («Пользователь в петле»).
Что поймал каждый этап:
- Ревью постановки с эмпирикой перекроило тикет до реализации: Codex из контейнера установил, что во внутренних зеркалах duckdb нет вовсе (BLOCKER → план Б wheel'ом с публичного PyPI) и что названный в тикете кандидат convert_dtypes теряет точность через float64 — исполнитель сразу пошёл верным путём.
- Фактическое противоречие ревьюеров (верхний cp37-wheel duckdb: «0.10.3»
у Клода против «1.2.2» у Codex) оркестратор снял ОДНОЙ контрольной
командой (
pip downloadв контейнере) до триажа — дёшево, а от факта зависел пин. Приём: конфликт фактов — контрольный эксперимент, не голосование. - Слепые ревью кода: пересечение БОЛЬШОЕ (одна корневая тема — регрессии нового вывода типов против старого пути: int64-переполнение роняло загрузку, пробелы, BOOLEAN, inf). Контрпример к «пересечение ~ноль»: когда правка замещает хорошо определённое старое поведение, обе родословные сходятся на охоте за регрессиями — и это признак качества находок, а не растраты.
- Перепроверка снова принесла хвост (смесь конечных с inf/-inf — DOUBLE): третий прогон подряд, подтверждён штатный режим.
Прочее: сетевые шаги с доступами пользователя (docker login/pull)
координировались !-командой в чат — работает без трения. Первый полный
прогон на gpt-5.6-sol как боевой модели — пользователь подтвердил цену,
качество исполнителя и ревьюера без нареканий.
Цифры: постановка + двойное ревью постановки ~1 ч; реализация ~25 мин; 2 круга триажа + 2 узкие перепроверки; тесты 36 → 45 → 46, зелёные в двух средах (современная + vendor-контейнер py3.7); приёмка оркестратора — оба прогона своими руками.
Модели (датированная эволюция, к прогону 2026-07-13):
- Урок о скоропортящихся фактах: 2026-07-10 утечка gpt-5.6-sol из конфига считалась казусом («фронтир = дорогие лимиты»), 2026-07-13 пользователь переоценил — Sol умная и относительно недорогая, теперь боевой дефолт. Правило «модель явно, из конфига не наследовать» выжило, но по другой причине: воспроизводимость, а не цена. Факты о ценах/лимитах моделей — датировать и перепроверять у пользователя, не тащить из прошлых сессий как вечную истину.
- Effort medium на узких контурах подтверждён боем: круг починки одной находки и финальная перепроверка — чисто и быстрее high (до этого правило в codex-exec было гипотезой).
- Роли от пользователя (2026-07-13): Опус — вкус и архитектура; Codex — исполнитель (лучше и дешевле); исследование — паритет, Codex дешевле. Кандидат на поглощение в SKILL.md (раздел «Роли»).
- НЕ ОБКАТАНО (рыночная наводка из обзоров, 2026-07-13): gpt-5.6-terra medium/high для кода — на medium вдвое дешевле Sol на простых задачах при том же уровне, сильно лучше Sonnet; минусы — ощутимо дольше запуск и накладные на внешнюю оркестрацию. Вывод на сейчас: лимиты Codex у пользователя не узкое место, менять нечего; потенциальная полоса — bulk-механика /coordinator-loop и узкие починки, если лимиты станут узкими. Проверка — один A/B на реальной узкой починке.