From 40cc885b185ffaa25cba12fa446f5cc448fdffcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Mon, 3 Aug 2026 18:10:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=B4=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BC=D0=B5=D0=BD=D0=B5=209:=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=B9=D0=B4=D0=B5=D0=BD=20=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=D1=8C?= =?UTF-8?q?=20=D0=B2=D1=81=D0=B5=D1=85=20=D0=B1=D0=B5=D0=B4=20(=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B5=D1=85=D0=B0=D0=BB=D0=B0,=20=D0=B7=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D1=8F=20=D0=BF=D0=B0=D0=B4=D0=B0=D0=BB=D0=B0=20?= =?UTF-8?q?=D0=B2=20=D0=BE=D0=B1=D0=BE=D0=BB=D0=BE=D1=87=D0=BA=D1=83),=20?= =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20=D0=B6=D0=B8=D0=B2=D0=BE?= =?UTF-8?q?=D0=B5=20=D1=80=D0=BE=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5,=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=2029-42=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=82=D1=8B,=20=D0=B2=D1=81=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE=D0=B8=D0=BC?= =?UTF-8?q?=D1=91=D0=BD=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-08-03-PROMT-smena-9-prodolzhaem.md | 442 ++++++++++++++++++ 1 file changed, 442 insertions(+) create mode 100644 docs/superpowers/zamer/2026-08-03-PROMT-smena-9-prodolzhaem.md diff --git a/docs/superpowers/zamer/2026-08-03-PROMT-smena-9-prodolzhaem.md b/docs/superpowers/zamer/2026-08-03-PROMT-smena-9-prodolzhaem.md new file mode 100644 index 00000000..14c72bbc --- /dev/null +++ b/docs/superpowers/zamer/2026-08-03-PROMT-smena-9-prodolzhaem.md @@ -0,0 +1,442 @@ +# ПРОМТ девятой смены: состояние + что делать дальше + +**Дата:** 03.08.2026, писалась ПО ХОДУ смены 8. Затея «дело идёт без владельца» — ночной +работник трудится восемь часов без человека, утром шлёт письмо. + +> 🔴🔴🔴 **ШАГ 0 — ТРИ ПРИБОРА. Смена 8 подтвердила снова: сошлись знак в знак.** +> +> **1. Цело ли хозяйство** (первым делом, до всякой задачи): +> ```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" +> ``` +> На конец смены 8: **957 пакетов, разодрано 0.** Не ноль — сторожа врут, всё зелёное +> недостоверно. Лечение: `npm ci --ignore-scripts` в корне угла, падает примерно раз из трёх — +> **повтори, а не делай выводов с первого раза**. +> +> **2. Полный прогон:** `npm run test:tools` из корня угла (около минуты). +> **3. Узкий на мигание:** упавшее прогнать в одиночку трижды. Зелено трижды — мигает +> под нагрузкой; красно — сломано вправду. +> +> 🪤 **Первой строкой любой проверочной команды печатай, ГДЕ ты** +> (`git rev-parse --show-toplevel`). Смена 7 попалась на этом в первые минуты. + +🔴 **Правило этой бумаги, добытое кровью шести смен.** Передача устаревает **сама на себя**, +в первую очередь в ЧИСЛАХ. **Ни одно число отсюда не брать на веру — собирать командой +на входе.** 🆕 Смена 8 добавила к этому: улики множатся ПО ХОДУ смены, и число, названное +час назад, устаревает само (помощник насчитал 5 улик там, где к концу смены стало 6, — и был +прав на свой час). + +--- + +## 🟢🟢 ЧТО ИЗМЕНИЛОСЬ ЗА СМЕНУ 8 — ГЛАВНОЕ + +**Смена 8 нашла КОРЕНЬ, из-за которого не работало ничего, и вылечила его.** + +| что стояло в передаче 8 | что оказалось | +|---|---| +| «прибор денег молчит, догадка — урезанное окружение» | **догадка НЕВЕРНА.** То же окружение со старыми ключами работает. Виноват один ключ | +| «ворота врезаны у `smoke-longrun`» | врезана **не та дверь**: она проверяла исправность прибора, а не хватает ли денег | +| «слепота вылечена» (след замера) | вылечена **у одного платного входа из двух** | +| «лечение обвеса срезает цену втрое (0,157 → 0,053 $)» | **не воспроизвелось.** Чистый замер: обвес срезан, цена упала на **8 %**, а не втрое | +| «в счёте две головы разом» | **в пяти уликах из шести заказанной нет ВОВСЕ** — не добавка, а замена | + +### 🔑 КОРЕНЬ — один на все беды сразу + +Затея зовёт программу-помощника двумя дорогами: хорошей (напрямую) и запасной (через +оболочку). Хорошая искала файл `cli.js`. **Программа переехала:** теперь это настоящий +исполняемый файл `bin/claude.exe` (пакет 2.1.142). Старое имя не находилось ⇒ затея молча +сваливалась на оболочку ⇒ **оболочка склеивает все доводы в одну строку без кавычек**. + +Отсюда ВСЁ: +· ключ со значением «пустая строка» **исчезал** — прибор замера умирал молча (искали 2 смены); +· **сам вопрос замера не доходил** — программа отвечала «Здесь пока нет вопроса, скажи, что + нужно сделать» за полные деньги. Три «замера» были деньгами за пустоту; +· **задание работника рвалось**: он получил **два знака `«Ты»` вместо 2481** и вежливо + переспросил: «Дмитрий, кажется, сообщение оборвалось… Что хочешь сделать?» + +**Лечение врезано:** имя нутра не зашито нигде — его называет сам пакет в своём `package.json`. +Запасная дорога через оболочку **убрана совсем**: тихая дорога, которая ломает, хуже громкого +отказа. Плюс сторож класса «довод, который не переживёт склейку». + +### 🟢 Что случилось впервые за всю историю затеи + +1. **Родился живой работник целиком** — работник, надзиратель отдельным процессом, признаки + жизни, замок файлов, все бумаги прогона. Работы не сделал (см. корень), причина найдена. +2. **Два отказа ПО СУЩЕСТВУ.** Шесть смен затея отказывала только по неисправности прибора. + Теперь: «Израсходовано 78,0 % запаса, а прогоны запускаются, пока меньше 71,4 %… + Прогоны не запускаются до 2026-08-07 — тогда запас обновится». +3. **Датчики денег заговорили с владельцем.** Оба (какой головой вправду работали; срезан ли + обвес) были построены прежде, работали правильно — и их приговор **выбрасывался по дороге**. + Теперь печатается на всех трёх платных дорогах, проверено живым запуском. +4. **Настоящий ответ прибора:** «есть.» — 6 токенов (было 287–438 токенов переспрашивания). + +--- + +## 🔴 ПРИНЦИП РАБОТЫ — ЕГО И НАДО ПРОДОЛЖИТЬ + +1. **КРУГ = ОДНА ЗАДАЧА.** Переписал помощнику задание целиком → он работает в углу → + коммитит → 🔴 **ТЫ САМ гоняешь проверки и выносишь приговор**. Между кругами + не останавливаешься и владельца не переспрашиваешь. +2. **СВОЕЙ РУКОЙ КОДА НЕ ПИШЕШЬ.** Твоя работа — задания, приборы, приговор, бумаги. + 🆕 Исключение, оправдавшее себя: **диагностический прибор в `.night/`** — им смена 8 развела + оси и нашла корень. Он вне хранилища и не код затеи. +3. **ПРАВЩИК — НЕ АВТОР.** Нашёл беду — отдай чинить другому. +4. **ОТЧЁТ ПОМОЩНИКА — НЕ ДОКАЗАТЕЛЬСТВО.** Числа перезапускай своей рукой. 🆕 И отчёт СУДЬИ + тоже: смена 8 перепроверила каждое его обвинение и все подтвердились — но проверять надо. +5. **ТРОЕ-ЧЕТВЕРО РАЗОМ, ФАЙЛЫ У НИХ РАЗНЫЕ.** И не только файлы: общее хозяйство + (библиотеки, базы, `.night/`) в списках файлов не значится, а ломает всех разом. + В каждое поручение: «в общем углу ничего не устанавливать, не пересобирать, не удалять». + 🆕 Смена 8 держала троих разом (spawn / supervisor / cli) — столкновений ноль. +6. **В КАЖДОЕ ПОРУЧЕНИЕ — ПРОСЬБА О РАЗБОРЕ, А НЕ РАЗНАРЯДКА НА ВОЗРАЖЕНИЯ.** «Назови, что + в построенном тобой может обмануть владельца; не нашёл — скажи прямо». **Пустой ответ + допустим.** 🆕 Смена 8: **четыре круга из четырёх дали разбор, и трое поспорили с заданием + по существу** — двое оказались правы, и один из споров дал главную находку дня. +6-бис. 🔴🔴 **ТРЕТИЙ ПРИБОР — СУДЬЯ. Заводить каждую смену, не реже раза.** Помощник, + не писавший ни задания, ни работы. **На смене 8 он снова дал улов крупнее всех кругов + вместе, и весь улов — по надзирателю.** Наказ — в разделе «Судья» ниже. +7. **ЗЕЛЁНОЕ ПРИНИМАЙ ВЫРЕЗАНИЕМ, и обязательно ВТОРОГО РОДА.** +8. **ВОРОТА ВСЛЕПУЮ** — двое помощников в отдельных углах-копиях, которым не сказано, + что построено, а сказано, что затея ОБЯЗАНА уметь. +9. **ЗАПИСЫВАЙ ПО ХОДУ, НЕ В КОНЦЕ.** 🆕 И заказывай это помощнику ЖЁСТЧЕ, чем «коммить + по частям»: **первый коммит через пять минут, до всякой разведки** (см. правило 32). +10. **ЧЕСТНОСТЬ ВПЕРЁД УСПЕХА.** Свою ошибку называй первой, до находок. 🆕 Смена 8 сказала + владельцу неверное **три раза** и все три поправила вслух — это дороже, чем не ошибиться. + +🔴 И помни, ЗАЧЕМ это всё: роль надзирателя ночью будет исполнять ПРОГРАММА. Каждая твоя +ошибка — список того, что программа обязана уметь. + +--- + +## 🔴🔴 ПРАВИЛА, ДОБЫТЫЕ СМЕНОЙ 8 + +**29. 🔴🔴 САМЫЙ ДЕШЁВЫЙ ПРИБОР — ПРОЧЕСТЬ ГЛАЗАМИ, ЧТО ПРОГРАММА ОТВЕТИЛА (М-229).** +Смена целый день разбирала служебные поля ответа и **ни разу не прочла сам текст ответа**. +А в нём было написано прямым текстом: «Здесь пока нет вопроса — скажи, что нужно сделать». +Прибор был бесплатный и лежал в тех же файлах. ⇒ **Прежде чем измерять ответ — прочти его.** + +**30. 🔴 ОТМЕНЯЯ ДОКАЗАННОЕ ПРЕЖДЕ, СРАВНИ СИЛУ УЛИК, А НЕ СВЕЖЕСТЬ (М-229).** Смена 7 +доказала подмену головы арифметикой по прейскуранту. Смена 8 отменила это **одним полем +из одного файла** и записала отмену в код примечанием. Проверенная правда была откачена назад. +⇒ Новая улика не главнее только оттого, что новая. + +**31. 🔴 ПРАВИЛО, КОТОРОЕ ТЫ САМ ЗАПИСАЛ, НЕ УЗНАЁТСЯ В ЛИЦО (М-229).** Смена 8 дважды прошла +мимо собственных правил: седьмого вопроса вырезания («заказ или исполнение?») и правила 21 +(«принято ≠ применено»). Оба записаны накануне её же рукой. +⇒ Правила надо не помнить, а **применять списком**, как приборы шага 0. + +**32. 🔴 ПЕРВЫЙ КОММИТ ЧЕРЕЗ ПЯТЬ МИНУТ, ДО ВСЯКОЙ РАЗВЕДКИ (М-219).** Помощник потратил +двадцать действий и десять минут на разведку, не записал ни знака — обрыв стёр всё целиком. +«Коммить по частям» — совет, который не сработал. ⇒ В поручении заказывай **самую малую +полезную правку первой**, с коммитом, и только потом разбор. Смена 8 так и делала — +все последующие круги пережили обрывы без потерь. + +**33. 🔴 БЕЙ ПО ОДНОЙ ОСИ ЗА РАЗ (М-217).** Две смены искали причину, меняя сразу две вещи. +Один замер, менявший **только одну** ось (то же окружение, другие ключи), убил догадку +за минуту. ⇒ Замер, меняющий сразу две вещи, не отвечает ни на что. + +**34. 🔴🔴 ТИХАЯ ЗАПАСНАЯ ДОРОГА, КОТОРАЯ ЛОМАЕТ, ХУЖЕ ГРОМКОГО ОТКАЗА (М-224).** Запасная +дорога через оболочку выглядела безобидной («ну хоть как-то запустим»), а превращала +«программы нет» в «программа есть, но всё врёт». ⇒ Смена 8 убрала её совсем. Отказ виден +сразу и стоит ноль; поломка видна утром и стоит ночь работы. + +**35. 🔴 ЖЁСТКОЕ ИМЯ ЧУЖОЙ ПРОГРАММЫ — КАПКАН С ОТЛОЖЕННЫМ СРОКОМ (М-224).** Спрашивай +у самого пакета, чем его звать (`package.json`), а не записывай имя файла. Иначе следующий +переезд повторит ту же беду с новым именем. + +**36. 🔴🔴 ИМЯ ЗАЩИТЫ — ЧАСТЬ ЗАЩИТЫ (М-226).** Дверь звалась «денежные ворота», а спрашивала +исправность прибора. Прошлая смена честно её врезала, честно записала «ворота стоят» и была +уверена, что сторожит деньги. **Никакой сторож «дорога без ворот» этого не поймал бы.** +⇒ Имя, обещающее больше, чем защита делает, работает как ложный датчик: оно закрывает вопрос +в голове читающего. + +**37. 🔴 ПРАВИЛО КЛАССА ЛЕЧИТ БУДУЩИЕ СЛУЧАИ, НО НЕ ТОТ, ИЗ КОТОРОГО ДОБЫТО (М-226).** +Спрашивай отдельно: **«а мою СЕГОДНЯШНЮЮ беду этот сторож поймал бы?»** Смена 8 спросила — +ответ был «нет», и главной правкой стало переименование, а не сторож. + +**38. 🔴 СРЕЗАЛ ПРИЧИНУ — ПЕРЕМЕРЯЙ СЛЕДСТВИЕ, А НЕ ОБЪЯВЛЯЙ ЕГО (М-228).** «Инструменты +срезаны в ноль» и «цена упала втрое» — два разных утверждения, и первое не влечёт второго. +Замер: инструменты 46→0, службы 51→0, а цена **всего на 8 % ниже**. + +**39. 🔴🔴 У УЛИКИ БЫВАЕТ ВТОРОЕ ХРАНИЛИЩЕ, КОТОРОГО ТЫ НЕ ЗАВОДИЛ (М-230).** Причину смерти +работника нашли не в построенном следе (он был пуст), а в **стенограмме**, о которой затея +не знала. ⇒ Прежде чем строить свой след, спроси: «а не пишет ли это кто-то ещё?» +⇒ И к правилу 25: **«второе место того же класса» не обязано быть таким же по устройству.** +Искали второй платный вход — а вторым местом оказалось второе хранилище. + +**40. 🪤 ПРИГОВОР «ЭТОГО НЕТ НА ДИСКЕ» — ТОЛЬКО ВТОРЫМ ПРИБОРОМ (М-222).** Оболочка этого +хозяйства врёт **не только при записи, но и при чтении**: `ls` сказал «каталога нет» +о существующем и полном каталоге. `node` и git сказали правду. Едва не прибрал живой угол. + +**41. 🪤 ПРИБОР НАДЗИРАТЕЛЯ ВМЕШИВАЕТСЯ В ИЗМЕРЯЕМОЕ (М-220).** Первое рождение убила **моя +собственная мерка времени**: ждал команду вживую 6 минут 40 секунд и оборвал. Заведение +работника занимает ~15 минут (ставится хозяйство в его углу). ⇒ **Живое рождение запускать +только в фоне.** + +**42. 🔴 ОТКАЗ ОБЯЗАН РАЗЛИЧАТЬ «ОТВЕТ ПРИШЁЛ, НО НЕ ТОТ» И «ОТВЕТА НЕ БЫЛО ВОВСЕ» (М-216).** +Слив этих двух состояний в одну строку стоил двух смен поиска не в ту сторону. +🪤 И он ещё не закрыт: у работника «встал» и «умер молча» — **по-прежнему одно слово** +(`stalled`), и мертворождённый считается годным к платной пересдаче. + +--- + +## 🔑 ПРАВИЛА ПРЕЖНИХ СМЕН — перенесены ПОИМЁННО, все в силе + +> Обязанность пишущего передачу (М-171): пройти прежнюю передачу **по правилам поимённо** +> и отметить каждое как перенесённое или **намеренно снятое**. **Снято за смену 8: ничего.** +> Все 28 правил + четыре правила смены 6 перенесены целиком. + +1. 🔴 «УСТРАНЕНА ВОТ ЭТА ПРИЧИНА», А НЕ «БЕДА УСТРАНЕНА». Вслух добавляй, чего не искал. +2. 🔴 ЗАЩИТА, КОТОРУЮ НИКТО НЕ ЗОВЁТ, НЕ БЫВАЕТ ПРОВЕРЕННОЙ. 🆕 **За смену 8 нарушено ещё + раз, третий подряд** — датчики денег никем не читались. Зовущих считали у ворот и не считали + у датчиков. 🪤 Датчик зовущих (`schyot-zovushchih.mjs`) врёт нулём в **четырёх** случаях: + передача значением, зов в своём же файле, постоянные, переименование при ввозе. + Считай ещё и глазами. +3. 🔴 ПЛАН — ГИПОТЕЗА, А НЕ ПРИКАЗ, ровно как и твоё поручение. Клади в поручение + «спорь и с планом тоже». 🆕 За смену 8 это окупилось трижды. +4. 🔴 ГРАНИЦУ ВЛАДЕЛЬЦА ТОЛКУЕТ ВЛАДЕЛЕЦ. 🪤 Примета опасного места: толкование ОБОСНОВАНО + и звучит рассудительно. +5. 🔴 СТОРОЖ, СТЕРЕГУЩИЙ БЕДУ, — САМ БЕДА. И родственное: сторож, чей приговор противоречит + его же сводке, сперва проверяется на живость. +6. 🔴 КРУПНЕЙШИЕ БЕДЫ — ВСЕ НА СТЫКАХ, и все найдены только запуском. 🆕 Смена 8 — + лучшее подтверждение: дыра в воротах найдена **живым запуском**, чтением кода её + не видел никто шесть смен. +7. 🔴 ВСЯКИЙ ПЕРЕЧЕНЬ СОБИРАТЬ КОМАНДОЙ, А НЕ ПАМЯТЬЮ. +8. 🔴 ДАТЧИК ВРЁТ ЧАЩЕ ПРОВЕРЯЕМОГО, и «ноль» — самый опасный ответ. Опаснее всего датчик, + чей ответ СОВПАЛ с твоим ожиданием. Код выхода снимать **без конвейера** + (`команда > файл 2>&1; echo $?`). +9. 🔴 **КОММИТ — окончательная редакция:** `git add <свои пути поимённо>`, затем + `git commit -m "<ОДНА строка>" <те же пути явно>`. Отдельный `add` — новый файл иначе + не находится; явные пути в `commit` — среда выполняет команду git ДВАЖДЫ. + **Одна строка обязательна** (без переносов, без `<