From 7377ee94c5a2e12d45039a60781a07f65a92930a Mon Sep 17 00:00:00 2001 From: Dmitry Dementiev Date: Sun, 2 Aug 2026 13:29:46 +0300 Subject: [PATCH] =?UTF-8?q?docs(skills):=20claude-subagent-playbook=20?= =?UTF-8?q?=E2=80=94=20=D1=8D=D0=BC=D0=BF=D0=B8=D1=80=D0=B8=D0=BA=D0=B0=20?= =?UTF-8?q?#38:=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=B8=20=D0=BF=D1=80=D0=B8=D0=B1=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - прогон тикета #38 повторил конфигурацию 08-01 (оркестратор он же исполнитель, Кодекс третьей линией) и показал у той же дыры вторую сторону, а заодно класс сбоя, которого в файле не было. - Что: - перепроверка тем же ревьюером не судит соразмерность лечения ни в одну сторону: после ALL_CLOSED на своё предписание — NOT_CLOSED с требованием недостижимого; приём — проверять существование закрывающего состояния и мерить цену альтернативы. - долг 08-01 назван неисправленным: статус вешается на находку, не на лечение; здесь лечение судилось только по требованию владельца. - новый класс: сломан не код, а измерительный прибор — устаревший .pyc в цикле мутаций; линии ревью такого не ловят. - Проверка: - запись прочитана целиком, повторов предыдущих записей нет. --- .../references/lessons.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md index e5128e0..ab5011b 100644 --- a/agents/.agents/skills/claude-subagent-playbook/references/lessons.md +++ b/agents/.agents/skills/claude-subagent-playbook/references/lessons.md @@ -608,3 +608,38 @@ compose down`); отдельных событий эскалации в `--json` medium — 46 команд. Одна находка фактическая (комментарий рекламировал торговые события, от которых спека отказалась) — её обе Клод-линии пропустили: подтверждение ценности другой родословной. + +## 2026-08-02: перепроверка толкает лечение в обе стороны (clickstream v2, тикет #38) + +Конфигурация та же, что 08-01: оркестратор он же исполнитель, Кодекс (high) +третьей линией к двум прошедшим Клод-линиям. Снова три находки, все верны; +снова другая родословная дала класс, мимо которого прошли обе Клод-линии — +честность тестов: сторож сравнивал день −N с днём N, а сталкиваются −N и N−1. + +- **Перепроверка тем же ревьюером не судит соразмерность лечения ни в одну + сторону.** 08-01 она вернула `ALL_CLOSED`, подтвердив исполнение + собственного предписания; здесь на ту же починку — `NOT_CLOSED` с + требованием недостижимого (полная неприкосновенность запомненной когорты: + в numpy владелец памяти размораживается всегда, а вид всегда показывает + `.base`). Одна дыра, две стороны. Приём: на `NOT_CLOSED` проверять не + только факт, но и существует ли закрывающее состояние, и мерить цену + альтернативы — здесь 16 МиБ копий на день вместо 2 мс, то есть размен + реального свойства на защиту от умысла. +- **Долг 08-01 не закрыт: статус вешается на находку, не на лечение.** Здесь + лечение судилось только потому, что владелец потребовал этого в + постановке («Кодекс коварен, польза бывает очевидна на первый взгляд»). + Механизма по-прежнему нет. +- **Новый класс: сломан не код, а измерительный прибор.** Цикл мутаций + «правка → прогон → откат» внутри секунды оставлял устаревший `.pyc` + (свежесть — по времени правки и размеру), тесты шли по байт-коду мутанта + и падали на восстановленном дереве. Чуть не «починил» работающее. Линии + ревью смотрят на код и такого не ловят; конвейер молча допускает, что + проверялка оркестратора исправна. Приём: мутации гонять с + `PYTHONDONTWRITEBYTECODE=1`, первым и последним прогоном — чистое дерево. +- **Польза линии пришла как «изменил, что я проверяю»**: находка развернула + батарею мутантов на дерево зёрен, которое я считал очевидным, — там + нашлись ещё два слепых сторожа. Слить ветвь дней с ветвью состава можно + было, не уронив ни одного из 297 тестов. +- Цифры: ревью 68 команд, 3 находки (1 MAJOR завышен — сценарий требует + сознательно снять флаг у массива, 2 MINOR); перепроверка на medium — 12 + команд; батарея 17 мутантов, выживших нет.