From ef8385397e0951e5eb9cbdb76446d8637459e5af 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: Sun, 9 Aug 2026 08:31:51 +0300 Subject: [PATCH] =?UTF-8?q?docs=20=D0=B1=D1=83=D0=BC=D0=B0=D0=B3=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BC=D0=B5=D0=BD=D0=B5=2045:=20=D1=87=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D0=B9=20=D0=B1=D1=83=D0=BC=D0=B0=D0=B3=D1=83=20=D0=B2=D1=81?= =?UTF-8?q?=D0=BB=D1=83=D1=85=20=D1=86=D0=B5=D0=BB=D0=B8=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?,=20=D0=B0=20=D0=BD=D0=B5=20=D1=82=D1=83=20=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=84=D1=83,=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=83=D1=8E=20?= =?UTF-8?q?=D1=87=D0=B8=D0=BD=D0=B8=D1=88=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Главная находка смены 44: бумага спорила сама с собой внутри одного листа. Вверху — «работник ждёт ясного слова», внизу в графе «ЧТО ДЕЛАТЬ» — «сломалось что-то общее, скажите помощнику разберись». Обе графы по отдельности честны, и каждую стерёг свой зелёный сторож. Увидеть спор можно было только прочитав обе подряд. 🔴 НОВЫЙ ОТКРЫТЫЙ ПУНКТ 16, ЗАМЕРЕННЫЙ ЖИВЬЁМ. Утренний будильник собирает бумагу владельцу из рабочих файлов угла — прямо сейчас, без посредников. 09.08 он выстрелил в 08:01 ровно между двумя правками и положил владельцу снимок ПОЛУПРАВКИ. Худший исход закрыт (аварийная бумага громко кричит о себе), но связь «правлю файл — меняю то, что владелец читает через минуту» существует. Развилка владельцу названа тремя путями. 🟢 Пункт 5 (сорвавшийся подъём запирал работника) закрыт этой же сменой. 🟢 Пункт 3 (поля карточки) объявлен исчерпанным: ценное разобрано, на остатке честный ответ на вопрос «что владелец сделает, узнав это» — «ничего». 🟢 Пункт 15 (падения по времени) — тревога снята: у смены 44 за четыре полных прогона ни одного падения. 🟢 Долг смены 43 отправлен: сервер поднялся, неотправленных ноль. Co-Authored-By: Claude Opus 5 --- .../2026-09-06-PROMT-smena-45-prodolzhaem.md | 275 ++++++++++++++++++ 1 file changed, 275 insertions(+) create mode 100644 docs/superpowers/zamer/2026-09-06-PROMT-smena-45-prodolzhaem.md diff --git a/docs/superpowers/zamer/2026-09-06-PROMT-smena-45-prodolzhaem.md b/docs/superpowers/zamer/2026-09-06-PROMT-smena-45-prodolzhaem.md new file mode 100644 index 00000000..6c77e690 --- /dev/null +++ b/docs/superpowers/zamer/2026-09-06-PROMT-smena-45-prodolzhaem.md @@ -0,0 +1,275 @@ +# ПРОМТ сорок пятой смены: бумага спорила сама с собой + +**Дата:** 06.09.2026, писалась ПО ХОДУ смены 44. Затея «дело идёт без владельца» — +работники трудятся без человека, утром владелец читает сводку. + +--- + +# 🔴🔴🔴 ЧИТАЙ ЭТО ПЕРВЫМ + +## 🔴🔴 ГЛАВНОЕ: БУМАГА ГОВОРИЛА ОДНО, А СОВЕТОВАЛА ДРУГОЕ — В ОДНОМ ЛИСТЕ + +> Смена 44 читала живую бумагу вслух и нашла в ней спор с самой собой: +> +> | где | что сказано | +> |---|---| +> | «что ночь рассказала о себе» | «это не "да" и не "нет": работник **ждёт ясного слова**» | +> | «ЧТО ДЕЛАТЬ» | «сломалось что-то **общее**. Скажите помощнику: разберись, почему ночь не пошла» | +> +> 🔑 **Ничего общего не ломалось.** В ящике `.night/questions.jsonl` лежат ДВА вопроса одного +> работника по ОДНОМУ пункту, оба отвечены — и оба ответа не «да» и не «нет» (вид `other`). +> Работник ждал ясности, не дождался и был погашен по молчанию. +> +> 🔴 **Цена денежная и та же, что у смен 42 и 43:** владелец идёт по ПЕРВОЙ фразе совета, +> платит помощнику за розыск общей поломки и за очередной подъём — а нужно было одно слово. +> По этому пункту уже четыре попытки, и все кончились ничем. +> +> 🟢 Теперь совет говорит: «Ночь пропала целиком, но искать поломку не нужно: причина названа +> ниже» — и ниже названа: кто ждёт, по какому пункту, сколько раз спрашивал и что ответить. + +## 🔑 ГЛАВНЫЙ УРОК СМЕНЫ 44 + +**ЧИТАЙ БУМАГУ ВСЛУХ ЦЕЛИКОМ, А НЕ ТУ ГРАФУ, КОТОРУЮ ЧИНИШЬ.** Обе графы по отдельности +честны; беда — в том, что они говорят разное, и увидеть это можно только прочитав обе подряд. +Ни один сторож такого не ловит: каждый стережёт свою графу и обе зелены. + +--- + +# 🔴🔴🔴 ПЕРВОЕ ДЕЙСТВИЕ СМЕНЫ 45 — ЗАМЕР, А НЕ РАБОТА + +> ## ШАГ 1. Пять команд из угла `night1` +> +> ```sh +> git rev-parse --show-toplevel # где я +> date "+%d.%m %H:%M" # 🔴 который час и какое ЧИСЛО +> git log --oneline -3 # что было последним +> ls -dt .night/runs/*/ | head -3 # 🔴 именно -t (по времени, не по имени!) +> sed -n '/^ЧТО ДЕЛАТЬ/,$p' .night/СВОДКА-ЗА-НОЧЬ.md | head -12 # 🟢 графа совета целиком +> ``` +> +> 🪤 **`ls -d` без `-t` врёт.** +> 🟢 Бумага на диске **пересобрана боевым путём** и несёт обе починки смен 43 и 44. +> +> ## ШАГ 2. Шаг 0 — семь приборов +> +> **1.** `node tools/night/celo-li-hozyaystvo.mjs` — годно код 0. +> **2.** `npm run test:tools` **из корня угла**; честный код — `npm run test:tools >/dev/null 2>&1; echo $?`. +> 🔴 Годно на конец смены 44: **3183 в 130 файлах, код 0**. +> 🪤 Два прогона подряд в одной команде мешают друг другу — мерить ОДНИМ. +> 🪤 **Падение по ВРЕМЕНИ под нагрузкой — не поломка. Сначала перемеряй в одиночку.** +> 🟢 У смены 44 таких падений **не было ни разу** за четыре полных прогона — третьего случая +> подряд не случилось (открытый пункт 15 остаётся, но не подтвердился). +> **3.** `node tools/night/schyot-proverok-ne-padaet.mjs сверка` — ниже 3183 беда. +> 🟢 Снимок ПЕРЕСНЯТ сменой 44 — сверка считает от 3183 в 130. +> **4.** `node tools/night/cli.mjs` — восемь команд. +> **5.** `node tools/night/vorota-bez-deneg.mjs <план> --priyomka <лист> --spec <замысел>`. +> 🪤 На куске 6 ворота отказывают ШТАТНО: приёмочного листа у него нет (открытый пункт 6). +> **6.** `node tools/night/schyot-zovushchih.mjs tools/night` — **21 точный долг**. +> 🪤 Считать по строке «ТОЧНО долг», а не `grep -c`: под списком идут ещё пять строк пояснения. +> **7.** Внутри полного прогона. + +--- + +## 🔑 ПЯТЬ УРОКОВ СМЕНЫ 44 + +**1. 🔴🔴 ЖИВАЯ БУМАГА ВЛАДЕЛЬЦА СОБИРАЕТСЯ ИЗ РАБОЧИХ ФАЙЛОВ УГЛА — ПРЯМО СЕЙЧАС, БЕЗ +ПОСРЕДНИКОВ.** Замерено живьём: будильник `Liderra-Night-Summary` выстрелил в 08:01 ровно +между двумя моими правками, и владелец получил бы бумагу со строкой +«Ждал и не дождался.. **Он ждал и не дождался.**» — снимок ПОЛУПРАВКИ. +🔑 Сегодня это была задвоенная фраза. Выстрели будильник одной правкой раньше — сборка +развалилась бы вовсе. +🟢 Худший исход уже закрыт: аварийная бумага **громко называет себя провалом** +(`SLOVA_PROVALA`, своя мерка `merkaAvariynoy`), молчания владелец не получит. +🪤 **Правило смене 45: правишь `utro.mjs` или `run.mjs` в утренний час — помни, что бумага +владельца собирается из того, что лежит на диске В ЭТУ СЕКУНДУ.** Починил — пересобери +бумагу штатной дверью `node tools/night/cli.mjs summary` и прочти её глазами. + +**2. 🔴 СОБСТВЕННЫЙ СТОРОЖ ОКАЗАЛСЯ СЛЕПЫМ, И ВСКРЫЛО ЭТО ВЫРЕЗАНИЕ.** Проверка «никто +не ждёт — в совете об этом ни слова» смотрела на примету «ясного ответа». А у поломки +с пустым списком этой фразы не бывает вовсе: она живёт ВНУТРИ перебора ждущих. Подлог прошёл +ЗЕЛЁНЫМ. 🔑 Примету надо выбирать по тому, что у ПОЛОМКИ ЕСТЬ, а не по тому, что у починки +красиво. Заменил на хвост совета и на сам шов приписки «И отдельно» — второй подлог покраснел. + +**3. 🪤 ЧУЖИЕ СТОРОЖА ПОЙМАЛИ МЕНЯ ТРИЖДЫ, И ВСЕ ТРИ РАЗА ПРАВЫ:** +· `sklejka-chisla-so-slovom.test.mjs` (сторож смены 43) — вышло `${skolkoRaz} Ждал`. Список + разрешённого НЕ тронут: фразы сложены списком, и форма исчезла совсем; +· `nastoyashchee-hozyaystvo-v-proverkah.test.mjs` — путь к углу считает сама затея через + `runDir`/`workerDir`, подменить нечем. Вписан в поимённый список с доводом — это дверь, + которую сторож предлагает САМ («впишите файл в KOMU_MOZHNO с доводом»); +· `nadziratel-obyavlyaetsya-a-pribor-chitaet.test.mjs` — он смотрит объявление подъёма + в ТРИДЦАТИ строках после старта, а моя вставка отодвинула его на тридцать вторую. + 🔑 Лечится не окном, а выносом руки: `vernutOtmetkuProdolzheniya` отдельной рукой, слова + владельцу — в постоянные. Вышло короче и понятнее, чем было. + +**4. 🟢 РЯД ТОЧНЫХ ПРЕДСКАЗАНИЙ НАЧАТ ЗАНОВО И ИДЁТ ДВА.** Работа 1: предсказано 10 из 12 — +вышло ровно 10. Работа 2: предсказано 3 из 5 — вышло ровно 3. Рецепт прежний: считать `it(` +в написанном файле ДО прогона. + +**5. 🔑 ЗАМЕР УБЕРЁГ ОТ ТРЁХ ЛИШНИХ ПОСТРОЕК.** Прочёсывая затею на класс «улика есть, +до бумаги не доезжает», проверил ещё три места — и все три оказались уже закрытыми: +запас **называется со сроком**; отказы письма — ожидаемый шум (почта отменена решением +владельца); аварийная бумага **сама кричит о провале**. 🔴 Меряй, прежде чем строить: три +«очевидные дыры» из четырёх дырами не были. + +--- + +## 🟢 ЧТО СДЕЛАНО СМЕНОЙ 44 + +| # | работа | как доказано | +|---|---|---| +| 1 | **Бумага говорит в графе «ЧТО ДЕЛАТЬ», что ждут слова ВЛАДЕЛЬЦА** — кто, по какому пункту, сколько раз спрашивал и что ответить. Совет больше не гонит искать общую поломку | сторож 10/12 красных + 13-я на спор с самим собой · вырезания 1/1 и 1/1 · приёмка глазами на живых уликах, потом на боевой бумаге | +| 2 | **Сорвавшийся подъём больше не запирает работника навсегда** (класс смены 38) | сторож 3/5 красных · вырезания 1/1 и 1/1 | + +🔑 **Почему работы легли именно так.** Первая говорит владельцу «ответь работнику и подними +его снова». Вторая чинит ровно то, что случилось бы следующим шагом: сорвись подъём — +работник был бы помечен продолженным В ПРОГОН, КОТОРОГО НЕТ, и работа в углу осталась бы +лежать без единой дороги к ней. + +--- + +## ГРАНИЦЫ (не двигать без слова владельца) + +🔴 **Выписаны поимённо, а не ссылкой — правило 153.** + +· боевой **liderra.ru** — живые клиенты и деньги; не трогать, база только чтение; +· 🔴 **`ANTHROPIC_API_KEY` не выставлять НИКОГДА.** Режим `--bare` закрыт навсегда; +· 🔴 **проверки кода живым платным помощником — нельзя НИКОГДА** (решение 11); +· 🔴 **замеров остатка — не больше 30 за смену** (решение 1). Смены 39–44 — **НОЛЬ**; +· 🔴 **живых рождений без владельца — 5–6 за смену** (решение 16). Смена 44 — **ноль**; +· 🔴 **работников СЕМЕРО ВСЕГО** (решение 24), `max_tasks_at_once: 1`; +· 🔴 **у каждого работника СВОЙ потолок доли запаса** (решения 35, 95). 🪤 Число 14,3 % + владелец не называл: он решал ПРИНЦИП; +· порог запаса **0,99**, тумблер `bez_doli_ne_zapuskat` — **ВЫКЛ** (решения 18, 19); +· 🔴 **предел работника — сутки владельца**, в настройках `24`; +· 🟢 **решение 78 построено** смена 37: забытая пауза гаснет через сутки, блок **6в** круга; +· **зелень меряет надзиратель САМ, слову работника не верит** (решение 96); +· 🔴 **РЕШЕНИЕ 157 (смена 40):** когда пунктов не закрыто, а в углу лежит несохранённая + работа, первая строка сводки СВОЯ, и ниже названо, у кого, сколько файлов и ГДЕ они лежат. + 🔴 В зачёт закрытым пунктам несохранённое НЕ идёт никогда; + 🆕 смена 41 распространила на СОВЕТ при любом приговоре, смена 42 добавила подъёмы, + смена 43 — строку про саму ночь, смена 44 — ожидание слова владельца. + **Приговор все четыре смены не тронули;** +· 🔴 **РЕШЕНИЯ СМЕНЫ 39:** **153** — работу погашенного работника забираем в ветку; + **154** — чиним враньё сводки про несохранённое; **156** — денежные ворота смотрят на ВСЕ + окна и запрещают по худшему (**заменяет 155**); +· 🔴 **углы погашенных работников уборка не трогает** (решение 126), 🟢 библиотеки снимать можно (33); +· 🟢 **утренний будильник `Liderra-Night-Summary` ВКЛЮЧЁН**, бьёт в 08:00 и пересобирает + бумагу (`cli.mjs mail` зовёт `polozhitUtro`). Вечерний — выключен; +· 🔴 `app/**` — не править ни знаком. Исключение — только настройка строгого разбора кода + и только с показом владельцу ДО (решение 14). `app/phpunit.xml` не править; +· 🔴 **`tools/night/` закрыта ЦЕЛИКОМ для ночи**, открыто **13 путей** поимённо (решение 131). + 🪤 Это граница **для ночи**, не для надзирателя; +· 🔴 **`.night/` — оплаченные живыми деньгами улики. Помощникам только чтение;** +· 🔴 **чужие общие файлы не править самовольно** — `lefthook.yml`, `.claude/hooks/*`, `tools/` вне ночи; +· 🔴 **`lefthook.yml` НЕ ТРОГАТЬ — решение владельца 140.** Двоение коммитов лечится обходом: + снимать `STATUS.md` из индекса руками; +· 🔴 **GITHUB НАМ НЕ КАНАЛ ВОВСЕ — решение владельца 141.** Наш сервер — gitea; +· 🔴 **ПРАВКИ ХУКОВ В ГЛАВНОЙ ПАПКЕ ЛЕЖАТ НЕСОХРАНЁННЫМИ** (решение владельца «оставь так»); +· 🔴 **ЖИВОЕ РОЖДЕНИЕ ГОЛОВЫ РАЗРЕШЕНО ПОИМЁННО ТРЁМ ФАЙЛАМ** — `spawn.mjs`, `budget.mjs`, `supervisor.mjs`; +· 🔴 **`git stash` в этом углу НЕ БРАТЬ.** Заначка одна на весь репозиторий; +· бумага-замысел `docs/superpowers/specs/2026-07-29-dispetcher-tri-kuska-chto-i-zachem.md` **ЗАМОРОЖЕНА**; +· не сливать в главную, не выкатывать; историю коммитов **не трогать вообще**; + 🟢 исключения: двигать `feat/noch-proba-1` перед КАЖДОЙ ночью (25) и `git push gitea` после смены (133); +· ветки `feat/client-sms-broadcast` и `feat/client-telegram-ads` — не трогать; +· 🔴 в репозитории **ПАРАЛЛЕЛЬНЫЕ СЕССИИ.** Коммитить только в углу и поимённо; + 🪤 `git restore --staged docs/observer/STATUS.md` — **ПЕРЕД** коммитом; +· 🔴 **никого не убивать на машине** без слова владельца; +· 🔴 **вопросы владельцу копятся ПАКЕТОМ, кроме корневых** (решение 98). + +**СТИЛЬ:** простой русский, без программистских слов — владелец не программист. +Не называть сделанным непроверенное. 🔴🔴 **Правки — ТОЛЬКО Edit/Write.** +🟢 Смена 44 это правило не нарушила ни разу, включая вырезания (смена 43 нарушила один раз). +🪤 **Слово «закоммиченное» остановит коммит** — сторож орфографии его не знает, и правильно: +это программистское слово. Пиши «сохранённое в хранилище». +🪤 **Bash помнит папку между вызовами** — `cd` из прошлой команды остаётся; проверяй `pwd`. + +--- + +## ⏳ ЧИСЛА НА КОНЕЦ СМЕНЫ 44 + +🔴 Собери их заново на входе (правило 45). + +| | | +|---|---| +| Проверок | **3183 в 130 файлах**, код 0 (на входе было 3165 в 128) | +| Точных долгов прибора №6 | **21** — не выросло третью смену подряд | +| Коммитов смены 44 | **два** (`f0bf770ea`, `ec4b7f429`) + эта бумага, близнецов ноль | +| Живых рождений за смену 44 | **ноль** | +| Замеров остатка | **ноль из 30** | +| Потрачено живых денег | **ноль** — все находки куплены сухими замерами и чтением вслух | +| Новых решений владельца | **нет** | +| `main` | смена 44 его **не трогала** (`fb40aaf7c`) | +| Заначка — наших ветвей | **ноль** | +| Сервер gitea | 🟢 **поднялся.** Долг смены 43 в четыре коммита **отправлен**, неотправленных **ноль** | + +--- + +## 🔴 Что осталось незакрытым + +**1. 🔴🔴 ЖИВОЙ П-51 (решение 151) — НЕ СДЕЛАН СЕДЬМУЮ СМЕНУ ПОДРЯД, ЖДЁТ СЛОВА ВЛАДЕЛЬЦА.** +🔑 Трудность: «своя обвязка» для живого круга — это **вторая копия чужой обвязки в сорок +доводов** (`supervisor.test.mjs`, около строки 500), а две копии одного правила расходятся +молча. **Развилка владельцу:** (а) вынести обвязку круга в общий файл, чтобы её звали оба +(правка чужого файла — против решения 151); (б) написать свою МАЛЕНЬКУЮ обвязку только под +забытую паузу, приняв риск расхождения; (в) оставить как есть — сторож по тексту круга стоит +и вырезание ловит, живого прогона нет. + +**2. 🟢 КЛАСС «ЧИСЛО НЕ СОГЛАСОВАНО СО СЛОВОМ» — ЗАКРЫТ, СТОРОЖ РАБОТАЕТ.** За смену 44 он +покраснел один раз и по делу. 🪤 Чего он не умеет, сказано в нём самом: ловит форму, а не язык. + +**3. 🟡 ДЕВЯТЬ ПОЛЕЙ КАРТОЧКИ НЕ ДОЕЗЖАЮТ ДО СВОДКИ.** Проведены: след работы, угол (40), +название пункта, время работы (41), подъёмы (42), времена ночи (43), **ждущие слова (44 — +из ящика вопросов, а не из карточки)**. Остались: `run_id, db_name, branch, base_branch, +settings_path, session_id, prompt, test_command, model`. +🔴 **Честно: ценное разобрано.** Спрашивать надо не «можно ли провести», а **«что владелец +СДЕЛАЕТ, узнав это»** — и на всех оставшихся честный ответ «ничего»: имя базы, путь настроек, +номер беседы и имя головы ему не говорят ни о чём. **Пункт считать исчерпанным.** + +**4. 🟡 СВЕРКА ВИДА ВОПРОСА РАБОТНИКА МЕРТВА.** Правила `mustAsk` и `assumptionOpen` +(`questions.mjs`) зовут ТОЛЬКО проверки. 🟢 Ящик вопросов живой код читает +(`supervisor.mjs:632`), и **с 09.08 его читает ещё и утренняя бумага**. Мертва только сверка, +ОБЯЗАН ли работник был спросить. 🪤 Комментарий в `worker-prompt.mjs:13` обещает сверку, +которой нет. **Не начинать без слова владельца.** + +**5. 🟢 НЕУДАЧНЫЙ ПОДЪЁМ БОЛЬШЕ НЕ ЗАПИРАЕТ РАБОТНИКА — ЗАКРЫТО СМЕНОЙ 44.** Отметка «уже +продолжен» возвращается назад, владельцу сказано словами, что работник не потерян. + +**6. 🟡 ЗАДАЧА 10 КУСКА 6 (бумажная) НЕ СДЕЛАНА** — в договор о стыках блок «после куска 6» +не дописан. 🪤 Из-за неё же денежные ворота на куске 6 отказывают штатно (приёмочного листа нет). + +**7. 🔴 ЗАДАЧА 8 КУСКА 5 СДЕЛАНА НЕ ЦЕЛИКОМ:** команды `ack` нет, журнал `owner-replies.jsonl` +командой не ведётся. + +**8. 🔴 ПАРА НАСТРОЕК НЕ СХОДИТСЯ: 99 % + 14,3 % = 113,3 %.** Туда же `spawn_budget_per_shift` = 20 +при семи работниках. + +**9. 🪤 ОТРИЦАНИЯ ПО СЫРОМУ** — разрез назван сменой 30, переделка НЕ сделана нарочно. + +**10. 🔴🔴 ТРЕТЬЕГО КУСКА НЕТ ВОВСЕ** — ни телеграма, ни панели, ни бота. **Не начинать +без слова владельца.** + +**11. 🔴 Ночные тормоза по деньгам мертвы**, пока система не пришлёт число недельного остатка. +**Упирается в чужую сторону.** + +**12. 🪤 В `.night/runs` копится мусор** — карточки прогонов, помеченных идущими, но мёртвых, +и десяток пустых `resume-*`. Убирать — рукой и с ведома владельца. 🔴 **Осторожно: три +карточки `resume-*` от 08.08 — это живая цепочка подъёмов, на которой принимались починки +смен 42, 43 и 44. Их не трогать.** + +**13. Затея живёт в углу, а угол сносится одной командой.** 🟢 Смягчение копией на сервере +работает — смена 44 проверила: сервер лежал сутки и поднялся, всё уехало. + +**14. 🟡 НАСТРОЙКА `rate_limit_type` ПОСЛЕ РЕШЕНИЯ 156 СТАЛА МЕНЬШЕ ЗНАЧИТЬ, НО ОСТАЛАСЬ.** +🪤 День, когда система шлёт только чужое окно, всё ещё даёт отказ. **Владельцу решать.** + +**15. 🟡 ПАДЕНИЯ ПОЛНОГО ПРОГОНА ПО ВРЕМЕНИ — ДВЕ СМЕНЫ, НО НЕ ТРИ.** Смены 42 и 43 ловили; +у смены 44 за четыре полных прогона — ни одного. Пункт держать открытым, но тревогу снять. + +**16. 🆕 🔴 ЖИВАЯ БУМАГА ВЛАДЕЛЬЦА СОБИРАЕТСЯ ИЗ РАБОЧИХ ФАЙЛОВ УГЛА.** Замерено 09.08: +будильник выстрелил в 08:01 посреди правки и положил владельцу полуправку (задвоенная фраза). +🔑 Худший исход закрыт — аварийная бумага кричит о себе. Но связь «правлю файл → меняю то, +что владелец читает через минуту» существует и ничем не разорвана. +**Развилка владельцу:** (а) оставить как есть и просто помнить; (б) собирать утреннюю бумагу +из последнего сохранённого в хранилище состояния, а не из рабочих файлов; (в) двигать +будильник на час, когда смена не работает. 🪤 (б) и (в) трогают чужую сторону — задачу +Планировщика и порядок сборки.