diff --git a/docs/superpowers/zamer/2026-08-02-ZAMER-metoda.md b/docs/superpowers/zamer/2026-08-02-ZAMER-metoda.md index 23519d1f..f2a09919 100644 --- a/docs/superpowers/zamer/2026-08-02-ZAMER-metoda.md +++ b/docs/superpowers/zamer/2026-08-02-ZAMER-metoda.md @@ -3859,3 +3859,84 @@ C5 — там **«✅ 178 записей за месяц, всё в порядк файлов** — при занятом файле деньги владельца выброшены зря, а переставить мешает то, что список файлов известен лишь после восьмого шага; и **три вопроса о грязи неизбежны**, потому что у обоих нижних есть второй зовущий помимо дороги, и правило обязано держаться у каждого. + +--- + +## М-188. 🟢 ПЕРВЫЙ ПРИЁМ СТАЛ ПРИБОРОМ — И ТУТ ЖЕ ПОКАЗАЛ, ЧТО ВЧЕРАШНЯЯ ПРОВЕРКА НИЧЕГО НЕ СТЕРЕГЛА + +Помощник построил первую в затее проверку класса «два прогона одновременно». **1578 проверок +в 50 файлах.** Доказано вырезанием: он заменил зов замка на «считаем, что заняли» — + +| прибор | ответ | +|---|---| +| новый сторож класса | 🔴 покраснел | +| его же вчерашние поведенческие проверки | 🟢 **остались зелёными целиком** | + +⇒ То есть замок можно было вырезать, и **ни одна вчерашняя проверка этого не заметила бы**. + +🪤 И тем же резом вскрылась причина: вчерашняя проверка «файлы вправду заняты» спрашивала +разрешение **за своего** — а оно отвечает «можно» и когда занято им самим, и когда +**не занято никем**: пустой список читается как «всё свободно». ⇒ Лечение: спрашивать +**за чужого** — отказ чужому единственное, что доказывает замок. + +🔑 Класс: **проверка спрашивала у защиты то, на что та отвечает «да» в обоих случаях** — +родня «лишь бы не пусто вместо ровно да» (образец вырезания второго рода). ⇒ И общий вывод: +**приём, ставший прибором, в первый же час нашёл дыру в том, что вчера принято зелёным.** +Мера «сколько приёмов стало приборами» — 1 из 2, и первый окупился немедленно. + +🟢 И отдельно про честность: дыру «заявка против факта» (М-187) помощник **зафиксировал +нарочно** — написал проверку, чья **зелень есть плохая новость**, и сказал это внутри неё +словами: покраснеет — значит дыру закрыли, перепишите проверку. Так невылеченное перестаёт +быть невидимым. + +--- + +## М-189. 🔴 МОЁ ТРЕБОВАНИЕ «ДАЙ ОДНО ВОЗРАЖЕНИЕ КАЖДЫЙ КРУГ» — ТОТ ЖЕ КЛАСС, ЧТО «НАПИШИ N ПРОВЕРОК», КОТОРЫЙ Я САМ ЖЕ ОТМЕНИЛ + +Возражение помощника о моём методе, и оно самое неудобное за смену, потому что бьёт +в лекарство, а не в болезнь. + +Судья нашёл перекос (М-175): возражения ушли в метод, продукт остался без них, и виноват был +я — хвалил за один род показаний. Лечение я выбрал прямое: **вписал в каждое поручение +«дай хотя бы одно возражение про построенное»**. Четыре круга подряд оно работало и дало +четыре настоящие находки, включая самое опасное место затеи. + +⇒ И на пятом помощник сказал: «сегодня я потратил заметную часть внимания на то, чтобы +возражение **было**, а не на то, чтобы дострелить сторожа до класса. Ваше требование +ничем не отличается от требования «напиши N проверок», которое вы сами сегодня отменили +как работающее против находок». + +🔑 Класс: **лекарство от перекоса само стало разнарядкой.** Заказанное число возражений — +такой же потолок, выданный за задание, как заказанное число проверок (М-145), и вредит +тем же способом: внимание уходит на выполнение формы. ⇒ Разница между «прибор показывает» +и «прибор обязан показать» — та же, что между замером и разнарядкой. + +⇒ Лечение, принятое: **требовать не возражение, а разбор** — «назови, что в построенном тобой +может обмануть владельца ночью, и если не нашёл ничего, скажи это прямо и объясни, почему +считаешь, что нечему». Пустой ответ становится допустимым и потому честным. + +🪤 И его же вторая половина, тоже верная: **прибор вышел на один приём и на одну дорогу.** +Сторож смотрит на **место** (текст известной дороги), а не на **класс** — заведёт кто-то +завтра вторую дорогу, откатывающую угол, и сторож промолчит. Настоящий сторож класса должен +был бы спрашивать: «покажи всех, кто зовёт откат, и докажи, что каждый прежде занял файлы». +⇒ Помощник назвал это сам, сдавая работу: **«это лучше, чем ничего, и хуже, чем вы думаете, +приняв работу»**. + +--- + +## М-190. МОЙ ДАТЧИК ЦЕЛОСТИ ХОЗЯЙСТВА СОВРАЛ ТРЕТИЙ РАЗ ТЕМ ЖЕ СПОСОБОМ + +Моя ошибка, поймал сам — но только потому, что число показалось странным. + +Я вписал в передачу шаг 0 «посчитать пакеты без описания» (М-178) и тут же применил его: +ответ — **58 разодранных**. ⇒ Перепроверил: все 58 — это **папки-обёртки** вида `@имя/`, +у которых описания не бывает никогда по устройству. Честный ответ: **957 пакетов, разодрано 0**. + +🔑 Это **третий раз за смену**, когда мой датчик врёт тем же способом: он считает **форму**, +а не суть (М-108 — правило мерило форму; М-131 — код выхода после конвейера; и теперь). +⇒ И самое опасное: я успел записать негодный датчик **в передачу как обязательный первый шаг +смены** — смена 7 получила бы ложную тревогу в первую же минуту и пошла бы чинить целое. + +⇒ Датчик в передаче переписан целиком, с явным пропуском обёрток и с честным ответом +на конец смены. **Правило: датчик, попадающий в передачу, обязан быть проверен на заведомо +исправном хозяйстве** — то есть должен уметь показать ноль там, где всё цело. diff --git a/docs/superpowers/zamer/2026-08-03-PROMT-smena-7-prodolzhaem.md b/docs/superpowers/zamer/2026-08-03-PROMT-smena-7-prodolzhaem.md index c76af2ad..3d6ba38f 100644 --- a/docs/superpowers/zamer/2026-08-03-PROMT-smena-7-prodolzhaem.md +++ b/docs/superpowers/zamer/2026-08-03-PROMT-smena-7-prodolzhaem.md @@ -12,8 +12,21 @@ > проверок не сработало — уже не восстановить. > > **ПЕРВЫМ ДЕЛОМ СМЕНЫ, до всякой задачи:** посчитать в `.claude/worktrees/night1/node_modules` -> пакеты без файла описания — и внешние (`*/`), и вложенные (`@*/*/`). **Ноль — работать -> можно. Не ноль — сторожа врут, и всё зелёное этой смены недостоверно**, пока не починено. +> пакеты без файла описания. 🔴 **Датчик пиши так, а не иначе — я на нём попался трижды:** +> внешние имена берём, **но папки-обёртки, начинающиеся с `@`, ПРОПУСКАЕМ** (у обёртки +> описания не бывает никогда, и она даст ложную тревогу), а вложенные берём как `@*/*/`. +> +> ```sh +> M=node_modules; miss=0; tot=0 +> for d in $M/*/; do n=$(basename "$d"); case "$n" in @*) continue;; esac +> tot=$((tot+1)); [ -f "$d/package.json" ] || miss=$((miss+1)); done +> for d in $M/@*/*/; do tot=$((tot+1)); [ -f "$d/package.json" ] || miss=$((miss+1)); done +> echo "пакетов: $tot, разодрано: $miss" +> ``` +> +> На конец смены 6 честный ответ: **957 пакетов, разодрано 0.** +> **Ноль — работать можно. Не ноль — сторожа врут, и всё зелёное этой смены недостоверно**, +> пока не починено. > Лечение: `npm ci --ignore-scripts` в корне угла. 🪤 Она падает примерно раз из трёх > (это стена 6) — **повтори, а не делай выводов с первого раза**; вторая попытка на смене 6 > дала 1112 пакетов за две минуты.