docs(передача): промт смене 29 — доступных долгов не осталось, три находки ждут владельца

Находка М-406, правила 244-246.

Смена 27 передала «пять доступных настоящих долгов». Правило 243 велит проверять каждую
строку замером. Проверил: доступен ОДИН (закрыт), заперты словом владельца ДВА, долгами
не являются ДВА. Третья смена подряд, где список наполовину чужой: 14 ложных из 33 долгов,
3 из 4 разъездов, 4 из 5 «доступных».

⇒ Смене 29 передаётся честно: НАСТОЯЩИХ ДОСТУПНЫХ ДОЛГОВ БОЛЬШЕ НЕТ. Искать новые глазами
не надо — дождаться, чтобы прибор назвал.

244. У СТОРОЖА, ЧИТАЮЩЕГО ФАЙЛ СЫРЫМ, СПРОСИ: НЕ ОТВЕЧАЕТ ЛИ ЗА ПРИМЕЧАНИЕ ТО, ЧТО
ПРИМЕЧАНИЕМ НЕ ЯВЛЯЕТСЯ. Обратная сторона 234.
245. У КРАСНОГО ЧУЖОГО СТОРОЖА ТРИ ИСХОДА, А НЕ ДВА. Третий встретился первым же: прав он
по замыслу, но слеп по способу — чинят самого сторожа.
246. `grep -i` НА РУССКИХ БУКВАХ РЕГИСТР НЕ ПРИВОДИТ. Мерь тем же телом, каким меряет
проверяемый.

В промт вписано поимённо, чтобы следующая смена не ходила туда заново: почему
`reshyonnyeSNevypolnimymi` и `mailFailedSince` заперты СЛОВОМ ВЛАДЕЛЬЦА (а не «некому
сделать»), почему `readResult` не долг вовсе, и что число долгов у прибора осталось 29
при другом составе — `zadachaKonchena` ушёл, новый рез встал на его место.

Новый вопрос владельцу — десятый: сносить ли `readResult`. Замерено, что живых зовущих нет
и быть не может; снос уберёт правило и три его проверки. Самовольно не сношу.
И первый вопрос стал дороже: за молчанием о вопросах владельцу заперты ЕЩЁ ДВА долга.

Числа: проверок 2929 в 108 файлах, ноль красных, код 0. Снимок сторожа числа снят заново
на 951b15fb8. Приговор прибора 613 / 29. Живых рождений ноль. Близнец не родился
двенадцатый раз подряд. Ошибка надзирателя одна и названа: дописал бумагу командой
из-под Bash вместо Edit/Write. Обошлось — но обошлось случайно.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-08-07 06:22:49 +03:00
parent 951b15fb85
commit cc57387788
@@ -0,0 +1,311 @@
# ПРОМТ двадцать девятой смены: сторож был зелёным по двум причинам, и одна случайная
**Дата:** 21.08.2026, писалась ПО ХОДУ смены 28. Затея «дело идёт без владельца» —
работники трудятся без человека, утром владелец читает сводку.
> ## 🔴🔴🔴 ГЛАВНОЕ, ЧТО КУПИЛА СМЕНА 28
>
> Починил настоящий долг — и полный прогон дал красное **у чужого сторожа**. Вчерашнее
> правило 242 велит не откатываться сразу, а спросить: что он бережёт? Он бережёт согласие
> примечания с правдой и **по замыслу ПРАВ**. Поправил шапку честно — он всё равно краснел.
>
> 🔴 Причина: сторож брал файл **СЫРЫМ** и искал фразу-маркер «НЕТ НИ ОДНОГО», а она стоит
> там **в живом коде** — в тексте ошибки `'в плане задачи нет ни одного пункта'`. Пока шапка
> врала тем же словом, обе половины совпадали и сторож молчал.
>
> ⇒ **Он был зелёным ПО ДВУМ ПРИЧИНАМ РАЗОМ, и одна из них случайная.**
>
> 🔑 **Правило 245: у красного чужого сторожа ТРИ исхода, а не два.** Третий — прав он
> по замыслу, но слеп по способу: тогда чинят **самого сторожа**.
---
# 🔴🔴🔴 ПЕРВОЕ ДЕЙСТВИЕ СМЕНЫ 29 — РАЗВИЛКА, А НЕ РАБОТА
> 🔑 **Правило 204, окупилось ВОСЕМЬ раз подряд.** Смены 21–28 начали с замера, и все восемь
> сразу увидели, что новой ночи не было. Пиши развилкой всегда.
>
> ## ШАГ 1. Замерь, что есть. Пять команд, из угла `night1`:
>
> ```sh
> git rev-parse --show-toplevel # где я
> date "+%d.%m %H:%M" # 🔴 который час и какое ЧИСЛО
> git log --oneline -3 # что было последним
> ls -dt .night/runs/*/ | head -3 # 🔴 именно -t (по времени, не по имени!)
> head -3 .night/СВОДКА-ЗА-НОЧЬ.md # 🔴 дата в первой строке
> ```
>
> 🪤 **`ls -d` без `-t` врёт** — сортирует по имени и «последним» покажет `zhivoe-5`.
>
> ## ШАГ 2. Выбери ветку по ответу:
>
> | если замер показал | делай это |
> |---|---|
> | последний прогон = `r-2026-08-06-091147-472afba2` | **новой ночи НЕ БЫЛО.** Иди в «Что осталось» |
> | есть прогон СВЕЖЕЕ 06.08 | **ночь была.** Принимай по листу приёмки |
> | сводка датирована сегодня, а прогон старый | 🪤 **утренний будильник хвалит прошлым.** Сперва дата прогона |
> | углов работников нет, `.night/runs` пуст | 🔴 кто-то снёс улики. Остановись и спроси владельца |
>
> 🪤 **Ложная тревога, купленная сменой 27, в силе.** Копии утренней бумаги
> (`СВОДКА-ЗА-НОЧЬ.md.prezhnyaya-ГГГГ-ММ-ДД-ЧЧММСС.md`) несут время **МИРОВОЕ**
> (`toISOString`), а часы на машине **московские**. Разница ровно три часа. Прочтёшь имя
> как местное — решишь, что после конца прошлой смены приходил кто-то чужой. Не приходил.
>
> ## ШАГ 3. Шаг 0 — шесть приборов (врезка ниже). Расхождение разбирать ДО первой задачи.
> 🔴🔴🔴 **ШАГ 0 — ШЕСТЬ ПРИБОРОВ.**
>
> **1. Цело ли хозяйство:** `node tools/night/celo-li-hozyaystvo.mjs` — годно код 0.
>
> **2. Полный прогон:** `npm run test:tools` **из корня угла**.
> 🔴 **КОД ВОЗВРАТА ЧЕСТНО:** `npm run test:tools >/dev/null 2>&1; echo $?`.
> 🔴 Годно на конец смены 28: **2929 в 108 файлах, код 0**.
> 🪤 Идёт дольше двух минут — команде давать запас, иначе оборвётся на середине.
>
> **3. Число проверок не упало:** `node tools/night/schyot-proverok-ne-padaet.mjs сверка`.
> 🟢 Снимок снят заново на `951b15fb8` — **108 файлов / 2929**, расхождения быть не должно.
>
> **4. «А оно запускается?»** `node tools/night/cli.mjs` — обязана ответить подсказкой
> (семь команд: run, mail, summary, smoke-longrun, budget, seal, approve-spec).
>
> **5. Ворота без денег:** `node tools/night/vorota-bez-deneg.mjs <план> --priyomka <лист>
> --spec <замысел>`. 🪤 Ключи `--priyomka`/`--spec` подавать ОБА.
> 🟢 Годный набор доводов, замерено сменой 28:
> `docs/superpowers/plans/2026-08-06-noch-3-zateya-chinit-sebya.md --priyomka
> docs/superpowers/priyomka/5 --spec docs/superpowers/specs/2026-07-29-dispetcher-tri-kuska-chto-i-zachem.md`
>
> **6. КТО ЗОВЁТ ЭТО В ЖИЗНИ:** `node tools/night/schyot-zovushchih.mjs tools/night`.
> Идёт 21 секунду. Годно на конец смены 28: **613 вывозится, 29 точных долгов.**
> 🔴🔴 **ЧИСЛО ДОЛГОВ ТО ЖЕ, А СОСТАВ ДРУГОЙ, и это не описка.** `zadachaKonchena` ушёл
> из приговора (подключён сменой 28), а на его место встал новый рез `tolkoPrimechaniya` —
> его зовут только сторожа, он для них и писан, прибор сам называет это классом правила 231.
> 🔴 Стало БОЛЬШЕ 29 — кто-то завёл новое правило и не подключил. Разбирать сразу.
>
> 🪤 **Первой строкой любой проверочной команды печатай, ГДЕ ты.**
>
> 🔴🔴 **`node tools/night/cli.mjs summary` — ЭТО ЗАПИСЬ, А НЕ ЧТЕНИЕ** (правило 221).
> ## 🔴 КАК ЧИТАТЬ ПРИБОР №6 — НЕ ИЗМЕНИЛОСЬ
>
> Полный разбор всех 33 поимённо — **`docs/superpowers/zamer/2026-08-18-razbor-33-dolgov.md`**
> (туда вписаны поправка смены 27 про разъезды и **поправка смены 28 про «доступную пятёрку»**
> — читай обе). Открывай прежде, чем звать беду по любому имени из списка.
>
> | род ложной тревоги | как узнать |
> |---|---|
> | 🔴 **поднимает сам прогон** | файл назван в `globalSetup` настройки. Закрыт в самом приборе |
> | **тело сторожа есть сама проверка** | зовущих нет и не должно быть; работает тем, что краснеет |
> | **работа идёт мимо своей обёртки** | из четырёх названных настоящим был **один** |
> | 🆕 **правило писано для сторожей** | «зовут ТОЛЬКО проверки» — это класс 231, а не долг |
---
# 🟢 ЧТО СДЕЛАЛА СМЕНА 28
Коммит `951b15fb8`. Проверок **2929** в 108 файлах (было 2927), ноль красных.
Живых рождений — **ноль**.
| что | как доказано |
|---|---|
| 🔴 **Пятёрка «доступных долгов» проверена поодиночке** (М-406) | замером каждого: доступен **1**, заперты словом владельца **2**, не долг вовсе **2** |
| 🟢 **Настоящий долг закрыт** — «свободных пунктов нет» больше не значит «задача сделана» | вырезанием: сторож первым, красный, зелёный, снова красный при возврате упрощения — ровно один, посчитан ДО; **прибор №6 подтвердил независимо** |
| 🔴 **Слепота чужого сторожа закрыта** — он был зелен по случайной причине | вырезанием на подложке: краснеет на подсунутой лжи в ОБЕ стороны, зелен на правде |
| 🟢 **Три примечания приведены к правде** (правило 235) | замером каждого утверждения |
## 🔴 РАЗБОР ПЯТЁРКИ — ЧТОБЫ НЕ ХОДИТЬ ТУДА ЗАНОВО
| кого назвала смена 27 | правда |
|---|---|
| `zadachaKonchena` | ✅ **настоящий, закрыт** |
| `reshyonnyeSNevypolnimymi` | 🔒 **заперт словом владельца**, а не «некому сделать»: единственный источник невыполнимых пунктов — ответ владельца «нет» в `questions.mjs`, а он мёртв целиком |
| `mailFailedSince` | 🔒 **заперт им же**: замысел (строки 750, 1073) называет его дословно — «затея видит, что сводка не ушла» — частью правила ворот «отклик владельца» |
| `readResult` | ❌ **не долг, а мёртвый остаток**: дороги «запусти, дождись конца, возьми итог» в затее нет. Разбор всех четверых, кто делает похожее, — в примечании над самим правилом |
| `kudaOtnesyon` | ❌ ложная тревога, закрыта ещё сменой 26 |
🔑 **Третья смена подряд с той же долей:** 14 ложных из 33, 3 из 4, теперь 4 из 5.
---
## 🔴🔴 ПРАВИЛА, ДОБЫТЫЕ СМЕНОЙ 28 (244–246)
**244. 🔑 У СТОРОЖА, ЧИТАЮЩЕГО ФАЙЛ СЫРЫМ, СПРОСИ: НЕ ОТВЕЧАЕТ ЛИ ЗА ПРИМЕЧАНИЕ ТО, ЧТО
ПРИМЕЧАНИЕМ НЕ ЯВЛЯЕТСЯ.** Обратная сторона правила 234. То говорит: рез может срезать
вместе с шелухой зерно. Это говорит: **отсутствие реза подсовывает шелуху вместо зерна.**
**245. 🔑 У КРАСНОГО ЧУЖОГО СТОРОЖА ТРИ ИСХОДА, А НЕ ДВА.** Смена 27 знала два: «прав он —
откатись», «прав ты — чини своё». Третий: **прав он по замыслу, но слеп по способу — чинят
САМОГО СТОРОЖА.** Отличить: спроси, что именно он измерил, и то ли это, что он берётся
охранять. Здесь он брался охранять слова файла о себе, а мерил весь файл целиком.
**246. 🪤 `grep -i` НА РУССКИХ БУКВАХ РЕГИСТР НЕ ПРИВОДИТ.** Замерено дважды на одном файле:
`grep -c -i "НЕТ НИ ОДНОГО"`**0**, `grep -c -i "нет ни одного"`**1**, `node` тем же
выражением → нашёл. 🔑 **Мерь тем же телом, каким меряет тот, кого проверяешь.**
---
## ГРАНИЦЫ (не двигать без слова владельца)
🔴 **Выписаны поимённо, а не ссылкой — правило 153.**
· боевой **liderra.ru** — живые клиенты и деньги; не трогать, база только чтение;
· 🔴 **`ANTHROPIC_API_KEY` не выставлять НИКОГДА.** Режим `--bare` закрыт навсегда;
· 🔴 **проверки кода живым платным помощником — нельзя НИКОГДА** (решение 11);
· 🔴 **замеров остатка — не больше 30 за смену** (решение 1);
· 🔴 **живых рождений без владельца — 5–6 за смену** (решение 16);
· 🔴 **работников СЕМЕРО ВСЕГО** (решение 24), `max_tasks_at_once: 1`.
🔑 На плане из N пунктов родится ровно N работников — замерено трижды;
· 🔴 **у каждого работника СВОЙ потолок доли запаса** (решения 35, 95).
🪤 Само число 14,3 % владелец не называл — это говорится вслух сверкой настроек;
· порог запаса **0,99**, тумблер `bez_doli_ne_zapuskat`**ВЫКЛ** (решения 18, 19).
🔴 Говорить владельцу со следствием: «ночи разрешено съесть 99 % недельного запаса»;
· 🔴 **предел работника — сутки владельца**, в настройках `24`. Исполнено;
· 🔴 **углы погашенных работников уборка не трогает** (решение 126),
🟢 но **библиотеки из них снимать РАЗРЕШЕНО** (решение 33);
· 🟢 **утренний будильник `Liderra-Night-Summary` ВКЛЮЧЁН**. Вечерний `Liderra-Night-Start`
**выключен**, час верный (8:01 ежедневно); 🟢 **наряд у него СНЯТ** (решение 139);
· 🔴 `app/**` — не править ни знаком. Исключение — только настройка строгого разбора кода
и только с показом владельцу ДО (решение 14). `app/phpunit.xml` не править.
🪤 `app/vitest.config.tools.mjs` прибор №6 ЧИТАЕТ — но только читает;
· 🔴 **`tools/night/` закрыта ЦЕЛИКОМ для ночи**, открыто 13 путей поимённо —
`docs/superpowers/2026-08-06-granica-nochi-chto-ey-mozhno.md` (решение 131);
· 🔴 **`.night/` — оплаченные живыми деньгами улики. Помощникам только чтение;**
· 🔴 **чужие общие файлы не править самовольно**`lefthook.yml`, `.claude/hooks/*`,
`tools/` вне ночи. Смены 23–28 на этом останавливались и спрашивали владельца;
· бумага-замысел `docs/superpowers/specs/2026-07-29-dispetcher-tri-kuska-chto-i-zachem.md`
**ЗАМОРОЖЕНА**;
· не сливать в главную, не выкатывать; историю коммитов **не трогать вообще**;
🟢 исключения: **двигать вперёд `feat/noch-proba-1`** перед КАЖДОЙ ночью (решение 25)
и **выкладывать копию затеи на наш сервер** (решение 133);
· ветки `feat/client-sms-broadcast` и `feat/client-telegram-ads` — не трогать;
· 🔴 в репозитории работают ПАРАЛЛЕЛЬНЫЕ СЕССИИ. Коммитить только в углу и поимённо;
🪤 `git restore --staged docs/observer/STATUS.md`**ПЕРЕД** коммитом;
· 🔴 **никого не убивать на машине** без слова владельца;
· 🔴 **вопросы владельцу копятся ПАКЕТОМ, кроме корневых** (решение 98).
**СТИЛЬ:** простой русский, без программистских слов — владелец не программист.
Не называть сделанным непроверенное. Не останавливаться между кругами.
---
## ⏳ ЧИСЛА НА КОНЕЦ СМЕНЫ 28
🔴 Собери их заново на входе (правило 45).
| | |
|---|---|
| Проверок | **2929 в 108 файлах**, ноль красных, код 0 |
| Снимок сторожа числа | 🟢 снят заново на `951b15fb8` — 108 / **2929** |
| Вывозится наружу / точных долгов | **613 / 29** (прибор №6; состав другой — см. врезку) |
| Пятёрка «доступных»: доступен / заперт / не долг | **1 / 2 / 2** |
| Живых ночей | **три**, все три удались |
| Живых рождений за смену 28 | **ноль** — работали руками надзирателя |
| Новых правил | **244, 245, 246** (3), свод вырос до **246** |
| Находок метода | **М-406** |
| Решений владельца | **176** живых (новых за смену 28 нет) |
| Близнец | 🟢 **не родился ДВЕНАДЦАТЫЙ раз подряд** (32 запуска git, 1 заход коммита) |
| 🔴 Ошибок надзирателя | **одна, мелкая, названа ниже** |
🔴 **Своя ошибка за смену 28, названная честно:**
**Дописал бумагу замера командой из-под Bash (`cat >>`), а правило затеи — только Edit/Write.**
Смена 27 его не нарушила ни разу, я нарушил на первой же большой бумаге. Текст вызов пережил
(проверено сразу же), потерь нет — но правило заведено ровно потому, что такая запись
**может молча исчезнуть**, и «в этот раз обошлось» доводом не является.
🪤 И вторая, помельче, но она чуть увела следствие: первый замер фразы в файле сделал
через `grep -i` и получил «фразы нет», хотя она была. Спасло то, что перемерил тем же телом,
каким меряет сторож (правило 246).
---
### 🔴🔴 ВОПРОСЫ ВЛАДЕЛЬЦУ — ОТВЕТА НЕТ
Пока не ответил — **не решать за него**. Ни один не корневой, работу не блокируют.
1. 🔴🔴 **ПОДКЛЮЧАТЬ ЛИ ВОПРОСЫ ВЛАДЕЛЬЦУ?** Мертва не только сторона «спросить»
(`questions.mjs`), но и сторона «принять ответ» (`mailer.mjs` + команд `answer`/`ack`
у `cli.mjs` нет вовсе). Подключить — значит работники ночью начнут вам писать
и ЖДАТЬ ответа в срок. **Пока не скажете — не трогаю.**
🆕 Смена 28 замерила цену этого молчания: за ним заперты **ещё два** долга
(`reshyonnyeSNevypolnimymi`, `mailFailedSince`). Это уже не один вопрос, а узел.
2. 🔴🔴 **ПОДКЛЮЧАТЬ ЛИ ЗАЩИТУ «ФАЙЛ НЕ ЗАЯВЛЕН — ЗНАЧИТ ЧИНИТЬ ЕГО НЕЛЬЗЯ»?**
(`mayTouchFakt`). Дыра открыта: работник может править файл соседа. Работы на час.
3. 🔴 **Заводить ли судью на пустую ночь?** Это **живое рождение, то есть деньги**.
4. 🔴 **Два отслеживаемых файла помечены удалёнными чужой сменой**
`app/tests/Frontend/KoshelyokZakladkiPoKanalam.spec.ts` (нет на диске) и
`docs/superpowers/2026-08-02-PROMT-podgotovka-k-produ-8.md` (на диске есть). **Не трогать.**
5. `guard-orig.mjs` и `PRAVSCHIK1-DOKAZATELSTVA.md` в углу — сносим или пусть лежат?
6. 🔴 **Плана следующей ночи НЕТ.** Появится — вписать в задачу `Liderra-Night-Start`.
7. 🔴 **Чинить ли сторожа боевой базы?** Две дыры замерены (М-400). Файл общий.
8. 🟡 **Трогать ли `lefthook.yml` ради опыта с близнецом?** Ловушка даёт тот же ответ.
9. 🟡 **РАЗВОДИТЬ ЛИ НАМЕРЕНИЯ У ЖУРНАЛА ПРОГОНА?** Сторож сети 3 запрещает брать путь
к журналу, чтобы никто не начал в него писать мимо одной руки, — и заодно запрещает
брать его для ЧТЕНИЯ. Развести («читать можно, писать мимо `logEvent` нельзя») — правка
ЧУЖОГО сторожа, берегущего дорогое. Самовольно не делаю.
10. 🆕🟡 **СНОСИТЬ ЛИ `readResult`?** Замерено сменой 28: живых зовущих нет и быть не может —
дороги, для которой он писан, в затее не осталось. Снос уберёт правило и три его
проверки (число проверок упадёт с 2929 до 2926, сторож числа покраснеет — это нормально,
он для того и стоит). Самовольно не сношу: снос необратимее записи.
---
### 🔴 Что осталось незакрытым
**0. 🔴🔴 БЛИЗНЕЦ: причина названа, ловушка стоит.**
🔑 **За смены 24–28 ловушка стояла на ДВЕНАДЦАТИ коммитах подряд — близнец не родился ни разу.**
Ставь на каждый свой коммит и дальше:
```sh
GIT_TRACE2_EVENT="<АБСОЛЮТНЫЙ путь>/lovushka.json" git commit -F <записка>
```
🪤 **СЧИТАТЬ ПО КОМАНДНОЙ СТРОКЕ, А НЕ ПО ЧИСЛУ ЗАПУСКОВ.** Одна команда коммита порождает
**32–35 запусков git** — это её собственные хуки. Считать надо те, у кого в командной строке
есть слово `commit`:
```js
z.event === 'start' && Array.isArray(z.argv) && z.argv.includes('commit')
```
> 🪤🔴 **ОДИН ФАЙЛ ЛОВУШКИ — ОДИН ЗАХОД** (правило 241). Два захода в один файл — и она
> покажет близнеца там, где его нет. Проверять такую тревогу не ловушкой, а историей:
> `git log --format="%s" <от>..HEAD | sort | uniq -d`. Пусто — близнеца нет.
**Работа смене 29, по убыванию доходности:**
1. 🔴🔴 **Три находки, ждущие слова владельца** (вопросы владельцу · защита файлов ·
снос `readResult`). Первая теперь дороже прежнего: за ней заперты ещё два долга.
2. 🔴 **Настоящих доступных долгов НЕ ОСТАЛОСЬ.** Смена 28 замерила последнюю пятёрку:
один закрыт, два заперты словом владельца, два долгами не являются. 🔑 **Прежде чем
искать новые — дождись, чтобы прибор их НАЗВАЛ**; список, собранный глазами под верное
правило, три смены подряд оказывался наполовину чужим (правило 243).
3. 🪤 **Проверь остальных сторожей на слепоту смены 28** (правило 244). Заведён рез
`tolkoPrimechaniya`; сторож правила 235 на него переведён весь. Но тот же класс беды —
«за примечание отвечает живой код» — может жить и у других сторожей, читающих файлы
текстом. Замер дешёвый: у каждого спроси, что он измерил, и то ли это, что он охраняет.
4. **Приёмка не ловит пустышки** — сторож числа сам это признаёт: десять настоящих проверок,
заменённых десятью пустыми, он пропустит молча. Ловится только человеком.
5. **Пара настроек не сходится:** 99 % + 14,3 % = 113 %. Владелец решал, зная об этом.
6. 🟡 **Остаток беды по `kudaOtnesyon`:** человек, зовущий сверку глазами перед ночью,
про неотнесённый ключ не услышит — узнает только тот, кто гоняет полный прогон.
**Крупное — не на одну смену:**
7. 🔴 **Ночные тормоза по деньгам мертвы**, пока система не пришлёт число недельного остатка.
**Упирается в чужую сторону.**
8. **Затея живёт в углу, а угол сносится одной командой.** 🟢 Смягчено копией на сервере.
9. 🔴🔴 **Третьего куска нет ВОВСЕ** — ни телеграма, ни панели, ни бота. Отдельная стройка
на несколько смен. **Не начинать без слова владельца.**
---
### 🪤 Мелочи, купленные сменой 28
- **`grep -i` не приводит регистр русских букв** (правило 246). Меряй тем же телом, каким
меряет проверяемый: `node -e "console.log(/ВЫРАЖЕНИЕ/i.test(...))"`.
- **Резов теперь ТРИ, и развилка «какой брать» — в шапке `schyot-zovushchih.mjs`.**
Ищешь ИМЯ СО СКОБКОЙ — грубый `tolkoKod`. Ищешь СТРОКУ (команду, ключ, имя файла) —
`bezPrimechaniy`. Ищешь, ЧТО ФАЙЛ ГОВОРИТ О СЕБЕ (шапку, наказ) — `tolkoPrimechaniya`.
- **Прибор №6 читает хозяйство один раз.** Дописал файл — зови заново.
- **Живой запуск в проверках — поимённый список.** Завёл проверку, зовущую `node` или `git`
живьём, — впиши файл в `zhivoy-zapusk-v-proverkah.test.mjs` с доводом.
- **Правки — только Edit/Write.** 🔴 Смена 28 правило НАРУШИЛА один раз (`cat >>` на бумаге
замера). Обошлось, но обошлось случайно.
- **Многострочную записку коммита — только файлом** и `git commit -F`.