docs(skills): claude-subagent-playbook — эмпирика #40 и #50

- Зачем:
  - две записи прогонов остались незакоммиченными; без них теряется фактура,
    ради которой журнал и ведётся, — и повторяющийся долг скилла нечем
    подтвердить.
- Что:
  - запись по #40: шапки соразмерности лечения сработали в третий раз;
    пересечение слепых линий — одно явление, описанное двумя способами.
  - запись по #50: сломанный прибор доезжает до коммита — ошибка измерения
    всплыла трижды на трёх уровнях, и ни разу её не поймал тот, кто мерил.
  - там же уточнение наблюдения владельца про дрейф Кодекса к букве и
    кандидат в механизм; долг с шапками отмечен четвёртым прогоном подряд.
- Проверка:
  - git show --stat; записи читаются как фактура для доработки скилла.
This commit is contained in:
Dmitry Dementiev committed 2026-08-02 23:02:32 +03:00
1 parent f758e1f802
commit c18472e360
1 file changed
+103
@@ -678,3 +678,106 @@ compose down`); отдельных событий эскалации в `--json`
- Цифры: два ревью — 58 и 36 команд/инструментов, 10 находок (1 MAJOR,
8 MINOR, 1 NIT); триаж — 10 FIXED; перепроверки на medium — 8 и 12; тесты
297 → 353.
## 2026-08-02: шапки соразмерности сработали в третий раз (clickstream v2, тикет #40)
Конфигурация редкая по исполнителю: тикет залезал на территорию трёх соседних
(план состава #38, воронка и каталог #39), и вкусовую реализацию вёл не
`craftsman`, а `deep-reasoner` — решение пользователя, обоснование: не письмо
по готовой форме, а калибровка «померил — подкрутил — померил» под вилки мира.
Оправдалось: 41 минута, 26 новых тестов, числа мира легли в вилки с первого
захода. Линия кода — Кодекс (high) свежим тредом, линия задачи и вкуса —
свежий Опус.
- **Пересечение линий — одна находка из девяти, и обе линии описали её
по-разному.** Полуночная потеря покупки при выжившей странице подтверждения:
Кодекс сконструировал сценарий и дал MAJOR, Опус померил 14 канонических дней,
нашёл ноль случаев и записал в необязательные соображения. Не спор, а два
свидетельства об одном латентном дефекте (окно ~7 с на заказ). Приём:
сводя вердикты, ищи не совпадение формулировок, а совпадение явления —
разная оценка достижимости у линий нормальна и полезна.
- **Шапка соразмерности лечения окупилась на MAJOR'е.** Исполнитель отклонил
маршрут ревьюера («проверь симптом там, где он виден») и починил слоем выше —
граница суток даёт подтверждению место под торговый хвост. Довод сильный:
починка внутри `commerce` двигала бы просмотры страниц при правке торгового
подпотока, то есть ломала бы ровно то свойство, о котором вторая находка
того же ревью. Без шапки предписание проехало бы молча, как в #36.
- **9 FIXED / 0 REJECTED — и одно ослабление порога всё же было.** TASK-3:
группа стала строже (пары исключены), измеренный лифт упал ×4,7 → ×3,0,
и порог теста опущен `> 3` → `> 2`. Обосновано, но это ровно тот ход, от
которого предостерегает шапка, — судить его отдал перепроверке той линии,
что находку и подняла. Вернулась CLOSED с воспроизведёнными числами.
- **Тонкий лог перепроверки Кодекса (10 команд) — снова повод проверить MAJOR
самому.** Свой зонд оркестратора: 14 дней × два режима, включая стресс с
часовым торговым хвостом (окно, в котором дефект жил) — ноль подтверждений
без покупки и ноль покупок без подтверждения. Приём из #39 подтверждён.
- **Приёмка глазами нашла то, чего не даёт ни один вердикт: урок виден в
данных.** Распечатал один визит целиком и померил разрыв: у 157 покупок из
272 сумма по разобранным массивам не равна `purchaseRevenue` (2680 против
2679,8). Ради этого копейки в каталог и заводились — без своего прогона
осталось бы верить отчёту.
- Цифры: реализация 41 мин / 328k токенов, саморевью 8/8; ревью — Клод 33
инструмента, Кодекс 120 команд; 9 находок (2 MAJOR, 5 MINOR, 2 NIT),
пересечение 1; триаж 9 FIXED за 13 мин; перепроверки 13 и 10 команд, обе
ALL_CLOSED + 1 новый NIT (повтор фразы в спеке, внесённый починкой TASK-2) —
поправил сам по месту. Тесты 353 → 383.
- **Долг скилла остаётся тот же**: абзацы про соразмерность лечения третий
прогон подряд пишутся руками. Кандидат прежний — перенести в
`prompts/triage-header.md` и `prompts/recheck-header.md` (тексты этого
прогона годятся как есть).
## 2026-08-02: сломанный прибор доезжает до коммита (clickstream v2, тикет #50)
Продолжение #40 после грилинга: реализация — `deep-reasoner` (калибровка
чисел мира), линия кода — Кодекс (high) свежим тредом, линия задачи и вкуса —
свежий Опус. Ревью постановки — одна линия (Кодекс), вторая пропущена: решения
уже прогриллены и лежат в спеке.
- **Ошибка измерения всплыла трижды на трёх уровнях, и ни разу её не поймал
тот, кто мерил.** (1) Оркестратор мерил на зерне 0, а весь мир и все тесты
живут на `CANONICAL_SEED` — поймало ревью постановки; (2) в знаменателе
«просмотры карточек» сидели строки событий корзины, потому что событие
садится на ту же страницу, — поймал исполнитель; (3) маска «строка с
массивом товаров» захватывала и строку покупки — поймал сам оркестратор,
сверив арифметику отчёта. Два из трёх уже уехали в коммит спеки. Класс
дефекта не новый (#38 — устаревший `.pyc`), но новое здесь то, что прибор
ломается на **чтении** данных, а не на прогоне, и потому переживает и
тесты, и ревью кода. Приём: числа, попадающие в постановку и спеку, сверять
арифметикой независимо от источника — сумма частей, тождества между
колонками; и называть зерно явно везде, где написано «канонический день».
- **Наблюдение владельца по итогам дня: Кодекс дрейфует к букве.** Прогон
его уточняет, а не подтверждает целиком. На **постановке** Кодекс работал
ровно по смыслу — половина из девяти находок это охота на формальность
(«критерий закрывается одним визитом», «требование живёт в прозе, а не в
чекбоксе»). На **коде** он вернул 1 MINOR за 120 команд и прошёл мимо
главного дефекта прогона — дефекта цели, видного только тому, кто держит в
голове, зачем тикет заведён. Часть промаха назначена линзой оркестратора
(«не дублируй вкусовую линию»), но остаётся устойчивый осадок из #36/#38/
#40: **лечения** Кодекса буквальны даже внутри его линзы. Кандидат в
механизм (не решение): требовать от линии Кодекса перед индексом один
абзац — «что сделает эту правку провальной, даже если все критерии
зелёные».
- **Шапка соразмерности сработала дважды за прогон.** Исполнитель отверг
предложенный ревьюером ряд вероятностей, перемерив его (давал 1,84 при
требуемых 2), и закрыл находку другим маршрутом; перепроверка поймала
необязательный сдвиг порога (0,05 → 0,03 при измеренных 7,25% — старый пол
проходил). Второе — новый факт: **порог, сдвинутый и честно объявленный,
всё равно бывает лишним**; объявление снимает скрытность, но не заменяет
проверку необходимости.
- **Ревьюер признал своё предложение неверным на перепроверке** — раньше
такого не встречалось. Перепроверка, которой явно поручено судить лечение,
судит и собственное предписание.
- **Приёмка глазами снова дала то, чего не даёт ни один вердикт**: один
распечатанный визит показал новый сюжет целиком (шесть карточек, две в
корзину, корзина не открыта) и заодно, что кладут не только магниты, —
то есть главная правка видна на одном случайном примере.
- Казус: `make` в промпте звался из `generator/`, а Makefile лежит в корне —
три «красных» прогона на пустом месте, и ревью постановки этого не поймало
(команды проверки оно не запускало).
- Цифры: ревью постановки 32 команды / 9 находок, все приняты; реализация
~31 мин, саморевью 3/3; слепые ревью — Опус 28 инструментов / 7 находок,
Кодекс 120 команд / 1, пересечение **ноль**; триаж 8 FIXED + второй круг
на 1 новую находку, 0 отклонённых; перепроверки 15 и 18; тесты 383 → 394.
- **Долг четвёртый прогон подряд тот же**: шапки соразмерности в
`prompts/triage-header.md` и `prompts/recheck-header.md` так и не
перенесены.