diff --git a/docs/superpowers/plans/2026-08-05-noch-2-tri-storozha.md b/docs/superpowers/plans/2026-08-05-noch-2-tri-storozha.md
new file mode 100644
index 00000000..bd1a564e
--- /dev/null
+++ b/docs/superpowers/plans/2026-08-05-noch-2-tri-storozha.md
@@ -0,0 +1,304 @@
+# Задание второй ночи: три сторожа, которые смотрят не туда
+
+**Это задание НОЧНЫМ РАБОТНИКАМ.** Три пункта, по одному на работника — они трудятся
+**порознь и одновременно**, каждый в своём углу, и друг о друге знать не обязаны.
+
+🟢 **Первая ночь удалась:** один пункт закрыт за 13 минут, работа вышла лучше человеческой.
+Эта ночь отвечает на другой вопрос — **держит ли дело троих разом**.
+
+Каждая беда ниже **замерена живым вызовом**, а не выдумана. Замер приложен к пункту.
+
+---
+
+### Task 1: замазыватель личных данных не узнаёт телефон, записанный по-человечески
+
+
+**Что стережёт этот прибор.** `tools/observer-pii-filter.mjs` замазывает личные данные
+в записях, которые каждая смена пишет **в файлы хранилища** (`docs/observer/episodes-*.jsonl`).
+Утёкшее уезжает в историю навсегда. Портал — про телефоны клиентов, и это закон
+о персональных данных.
+
+**Беда.** Он узнаёт телефон **только в слитной записи**. Замерено живым вызовом:
+
+```
+ЗАМАЗАЛ | +79215553476 → +7XXXXXXXXXX
+ЗАМАЗАЛ | 79215553476 → +7XXXXXXXXXX
+
+УТЕКЛО | +7 (921) 555-34-76
+УТЕКЛО | +7-921-555-34-76
+УТЕКЛО | +7 921 555 34 76
+УТЕКЛО | 89215553476 ← русская «восьмёрка» не покрыта вовсе
+УТЕКЛО | 8 (921) 555-34-76
+УТЕКЛО | 9215553476 ← без кода страны
+```
+
+**Шесть человеческих форм из восьми проходят насквозь.** Место — `RU_PHONE`, строка ~27.
+
+🪤 **И вторая половина той же беды:** фильтр смотрит только **значения**, а **имена полей**
+не смотрит вовсе. Телефон, оказавшийся именем поля, остаётся как есть:
+
+```
+на входе ключи: ["+79215553476","клиент"]
+на выходе ключи: ["+79215553476","клиент"] ← не тронуты
+```
+
+**Что нужно получить.** Телефон замазывается в любой записи: со скобками, с дефисами,
+с пробелами, с «восьмёркой», без кода страны — и **в именах полей тоже**.
+
+🔴🔴 **ЗДЕСЬ «СТРОЖЕ» НЕ ЗНАЧИТ «БЕЗОПАСНЕЕ» — И ЭТО ГЛАВНОЕ ПРЕДУПРЕЖДЕНИЕ ПУНКТА.**
+Вчерашняя задача была про сторожа: лишний отказ там человек сразу видит. Здесь прибор
+правит **записи**, и **лишнее замазывание уничтожает данные так же молча и навсегда,
+как утечка**. Затёртый номер счёта или заказа не заметит никто — ни утром, ни через месяц.
+
+⇒ **Граница, чтобы не перестараться:**
+· десять голых цифр замазывай **только если они начинаются на 9** и вокруг них нет других цифр;
+· цифр подряд **больше одиннадцати** — это не телефон, **не трогай**;
+· сомневаешься — **оставь как есть** и назови случай в своей бумаге. Пропущенный телефон
+ чинится завтра; затёртый номер счёта не чинится никогда.
+
+🔴 **Заведи рядом зелёные проверки** на то, что обычные числа (номер счёта, длинное число
+в тексте) и уже работающие две формы остаются как были.
+🔴 **И скажи вслух в бумаге, во что превращаешь имя поля.** Если два разных телефона-ключа
+станут одинаковыми, одно значение молча пропадёт — назови, как ты это решил.
+
+- [ ] **Шаг 1. Сначала проверка, и она обязана быть КРАСНОЙ.**
+ Заведи `tools/observer-pii-telefony.test.mjs`. Внутри — **не меньше ОДИННАДЦАТИ
+ утверждений**, и вот они поимённо, чтобы не считать:
+ · **восемь** форм из замера выше (шесть обязаны замазаться после починки, две уже);
+ · **девятое** — телефон в **имени поля**;
+ · **мирные числа, которые трогать НЕЛЬЗЯ**, все поимённо: номер счёта · номер заказа ·
+ дата вида `20260805` · номер прогона `r-2026-08-05-142903-c4033f1d` · хеш коммита ·
+ денежная сумма. Каждое — отдельным утверждением, все обязаны остаться целыми.
+ 🔴 **Прогоняй ТОЛЬКО этой командой — она тебе разрешена:**
+ `npm run test:tools -- tools/observer-pii-telefony.test.mjs`
+ 🪤 **Не начинай команду с `cd`** — его в твоих разрешениях нет, и команда просто откажет.
+ Увидь красное своими глазами и запиши дословно.
+ 🪤 Нет файла — ответ «No test files found» и код 1. Это **не** красная проверка,
+ это «мерить нечем». Сначала заведи файл.
+- [ ] **Шаг 2. Почини `tools/observer-pii-filter.mjs`.** Минимально, только в сторону «строже».
+- [ ] **Шаг 3. Прогони снова — зелёное.**
+ 🪤 **Отдельного набора проверок у этого прибора НЕТ** — замерено. Соседний прогон
+ пропусти, искать его не надо. Твоя мерка одна: **твоя проверка зелена**.
+- [ ] **Шаг 4. Спроси себя, какой ещё формой пишут телефон** (через `+7`, через `8`,
+ с точками, слитно с текстом) — и либо закрой, либо **назови словами в своей бумаге**.
+ 🔴 **Оставшуюся дыру НЕ клади проверкой в файл** — она будет красной, файл покраснеет,
+ и пункт не засчитается. В файле проверок держи только то, что вправду закрыл.
+- [ ] **Шаг 5. Сохрани работу коммитом — ровно этими тремя файлами, путями поимённо:**
+ `tools/observer-pii-filter.mjs` · `tools/observer-pii-telefony.test.mjs` ·
+ `tools/observer-pii-zamer-do.md`.
+ 🔴 **Имя третьего ровно такое, своего не выдумывай** — приёмка сверяет поимённо,
+ и файл с другим именем сочтут лишним. Двух последних на диске ещё нет — их надо **завести**.
+ 🪤 `git add .` **не делай**: в хранилище прямо сейчас работают двое твоих соседей.
+
+---
+
+### Task 2: запретные пути обходятся двумя точками
+
+
+**Что стерегут эти сторожа.** `tools/enforce-read-path-deny.mjs` и `tools/shell-content-rules.mjs`
+решают, можно ли читать и писать по данному пути. Есть список запретных мест — там
+чужие настройки и служебное.
+
+**Беда.** Путь сверяется со списком **как строка**, без сворачивания. Допиши в середину
+`что-нибудь/..` — и тот же самый файл сторожу уже незнаком. Замерено:
+
+```
+БЛОК | C:/Users/Administrator/.claude/runtime/approve.json
+ПУСТИЛ | C:/Users/Administrator/.claude/projects/x/../../runtime/approve.json ← ТОТ ЖЕ файл
+ПУСТИЛ | C:/Users/Administrator/.claude/docs/../runtime/approve.json ← ТОТ ЖЕ файл
+БЛОК | …/.claude/settings.json
+ПУСТИЛ | …/.claude/hooks/../settings.json ← ТОТ ЖЕ файл
+```
+
+Проверено вдобавок, что это не игра ума: **файл по такому пути вправду открывается**.
+Место — `defaultPathNormalize`, `tools/shell-content-rules.mjs:13-20`.
+
+**Что нужно получить.** Перед сверкой со списком путь **сворачивается** (`..` съедаются),
+и обе записи одного файла судятся одинаково.
+
+🔴 **Не задень мирное.** Свернуть надо аккуратно: обычные пути без точек обязаны работать
+ровно как раньше. Заведи зелёные проверки на несколько законных путей.
+
+🔴🔴 **И самое важное: ты чинишь сторожа, который судит ТВОИ ЖЕ руки.** Он решает, куда
+тебе можно писать. Твой собственный угол лежит **внутри** `.claude/worktrees/…`, а `.claude`
+— это как раз запретная территория из замера. Свёртка чуть грубее — и ты закроешь себе
+запись в собственные файлы.
+⇒ **Среди законных путей обязательно возьми путь внутри своего угла.** И если после починки
+ты вдруг не можешь записать свой же файл — **это не поломка рабочего места, это твоя правка**:
+откати и перепиши. Хозяина в этом случае звать не надо.
+
+- [ ] **Шаг 1. Сначала проверка, и она обязана быть КРАСНОЙ.**
+ Заведи `tools/put-so-tochkami.test.mjs`. Внутри — **не меньше ДЕВЯТИ утверждений**,
+ поимённо:
+ · **пять** из замера выше — два прямых пути (они уже блокируются) и **три** окольных
+ (🪤 у `approve.json` окольных **два**, а не один — не потеряй третий случай);
+ · **три-четыре законных пути**, которые обязаны проходить;
+ · 🔴 **обязательно — законный путь внутри ТВОЕГО СОБСТВЕННОГО угла** (он идёт через
+ `.claude`, и грубая свёртка закроет тебе руки).
+ 🔴 Прогон: `npm run test:tools -- tools/put-so-tochkami.test.mjs` (без `cd`).
+ Увидь красное, запиши дословно.
+- [ ] **Шаг 2. Почини `tools/shell-content-rules.mjs`.**
+ 🔑 **Рядом уже лежит готовый сворачиватель путей — `tools/path-normalization.mjs`.**
+ Посмотри на него первым делом: если он делает, что нужно, — **бери его**, а не пиши
+ третий. Не подошёл — скажи в своей бумаге, **почему** не подошёл.
+ 🪤 Утверждение «одна функция чинит обоих сторожей» замером **не подтверждено** —
+ второй прибор (`tools/enforce-read-path-deny.mjs`) **не твой, не правь его**. Позови его
+ один раз, посмотри, вылечился ли, и **запиши словами в свою бумагу**.
+- [ ] **Шаг 3. Прогони снова — зелёное.**
+ 🪤 **Отдельных наборов проверок у этих двух сторожей НЕТ** — замерено. Соседний прогон
+ пропусти. Твоя мерка одна: **твоя проверка зелена**.
+- [ ] **Шаг 4. Спроси себя, чем ещё можно записать тот же путь мимо списка** (одна точка,
+ обратные косые, кавычки, домашняя тильда, разный регистр) — и либо закрой, либо
+ **назови словами в своей бумаге**.
+ 🔴 **Оставшуюся дыру НЕ клади проверкой в файл** — она будет красной и запрёт тебе пункт.
+- [ ] **Шаг 5. Сохрани работу коммитом — ровно этими тремя файлами, путями поимённо:**
+ `tools/shell-content-rules.mjs` · `tools/put-so-tochkami.test.mjs` ·
+ `tools/put-so-tochkami-zamer-do.md`.
+ 🔴 **Имя третьего ровно такое, своего не выдумывай.** Двух последних на диске ещё нет —
+ их надо **завести**. 🪤 `git add .` **не делай**: рядом работают двое соседей.
+
+---
+
+### Task 3: приписка делает команду невидимой сразу для двух сторожей
+
+
+**Что стерегут.** Два прибора узнают в командной строке вид команды: один держит ворота
+«сначала прогони проверки, потом коммить», второй помечает необратимые команды.
+
+**Беда.** Оба ищут слово команды **сразу после `git`**. Любая приписка между ними — и команда
+становится неузнаваемой. Замерено:
+
+```
+УЗНАЛ | git push origin main → push
+УЗНАЛ | git commit -m "правка" → commit
+
+НЕ УЗНАЛ | git -C app push origin main → ничего
+НЕ УЗНАЛ | git -C app commit -m "правка" → ничего
+НЕ УЗНАЛ | git --git-dir=.git --work-tree=. commit -m "правка" → ничего
+НЕ УЗНАЛ | git --work-tree=. commit -m "правка" → ничего
+НЕ УЗНАЛ | git -c user.name=X commit -m "правка" → ничего
+
+ЛОВИТ | git push --force origin main → необратимая
+ПРОПУСК | git -C app push --force origin main → мирная
+```
+
+🔴 `git -C app …` — не экзотика: в этом проекте код живёт в папке `app`, и так пишут постоянно.
+
+Место — `detectGitCommandKind`, `tools/enforce-hook-helpers.mjs:499`.
+
+**Что нужно получить.** Приборы пропускают приписки `-C путь`, `-c ключ=знач`,
+`--git-dir=…`, `--work-tree=…` и видят настоящее слово команды.
+
+🔴 **Не задень мирное.** Обычные команды без приписок обязаны узнаваться ровно как раньше.
+
+- [ ] **Шаг 1. Сначала проверка, и она обязана быть КРАСНОЙ.**
+ Заведи `tools/git-s-pripiskoy.test.mjs`. Внутри — **СЕМЬ строк про ТВОЙ прибор**:
+ две «УЗНАЛ» и пять «НЕ УЗНАЛ» (среди них `--work-tree=` **в одиночку** — иначе эта
+ приписка останется незакрытой, а «что нужно получить» требует все четыре).
+ 🔴🔴 **Две последние строки замера (ЛОВИТ / ПРОПУСК) в файл проверок НЕ КЛАДИ.**
+ Они про **второй** прибор, чинить который тебе запрещено, — и останутся красными
+ навсегда, заперев тебе пункт. Поймано приёмщиком: прежняя редакция велела «все восемь»
+ и этим сама запирала работу.
+ 🔴 Прогон: `npm run test:tools -- tools/git-s-pripiskoy.test.mjs` (без `cd`).
+ Увидь красное, запиши дословно.
+- [ ] **Шаг 2. Почини `tools/enforce-hook-helpers.mjs`.**
+ 🪤 Приписка `-C` съедает **два** слова (`-C` и путь), а `-c` — **одно** (`ключ=знач`
+ слитно). Съешь у `-C` одно — примешь `app` за имя команды.
+ 🪤 Есть и форма без равенства: `git --git-dir .git commit`. Закроешь — хорошо,
+ не закроешь — назови в бумаге.
+ 🔴 **Второй прибор (`tools/classify-destructive.mjs`) — не твой файл, не правь его.**
+ Замерено заранее: он разбирает **сам** и правку твоего файла не подхватит.
+ ⇒ Позови его **один раз**, посмотри ответ глазами и **запиши словами в свою бумагу**,
+ вылечился он или нет. Проверкой это в файл **не клади**.
+ 🔴🔴 **И знай: ты чинишь ворота, через которые сам будешь коммитить на шаге 5.**
+ Если после починки твой коммит вдруг не проходит — **вина твоя, а не окружения**:
+ откати правку и перепиши. Останавливаться и звать хозяина в этом случае не надо.
+- [ ] **Шаг 3. Прогони снова — зелёное.**
+ 🪤 **Отдельного набора проверок у этого прибора НЕТ** — замерено. Соседний прогон
+ пропусти. Прежняя редакция обещала, что «их там немало», — это было **неправдой**.
+- [ ] **Шаг 4. Спроси себя, чем ещё можно спрятать слово команды** (кавычки, две команды
+ через `&&`, скобки, лишние пробелы) — и **назови словами в своей бумаге**.
+ 🔴 Оставшуюся дыру проверкой в файл **не клади**.
+- [ ] **Шаг 5. Сохрани работу коммитом — ровно этими тремя файлами, путями поимённо:**
+ `tools/enforce-hook-helpers.mjs` · `tools/git-s-pripiskoy.test.mjs` ·
+ `tools/git-s-pripiskoy-zamer-do.md`.
+ 🔴 **Имя третьего ровно такое, своего не выдумывай.** Двух последних на диске ещё нет —
+ их надо **завести**. 🪤 `git add .` **не делай**: рядом работают двое соседей.
+
+---
+
+## 🔴 ОБЩЕЕ ДЛЯ ВСЕХ ТРОИХ — читать обязательно
+
+**1. Замер «до» снимается ВМЕСТЕ с шагом 1, а не раньше.** Позвать прибор до того, как
+заведён файл проверок, нечем: набирать опасные образцы в командной строке **запрещено**
+(см. пункт 3 ниже). ⇒ Красный вывод твоей новой проверки на нетронутом приборе **и есть
+замер «до»**. Сохрани его дословно в свой файл `*-zamer-do.md` — имя названо в твоём пункте.
+🔑 Туда же пиши **всё, что велено «сказать вслух»**: оставшиеся дыры, чего не смог, что
+показалось странным. Это **единственная твоя бумага**, отдельных файлов не заводи.
+🟢 **И она не пропадёт: надзиратель утром перенесёт её в сводку владельцу.** Пиши так,
+чтобы понял человек, который не программист, — это единственная дорога от тебя к нему.
+
+**1-бис. Работы в каждом пункте — примерно на час.** Не уложился сильно — значит что-то
+идёт не так: остановись, перечитай задание, посмотри, не чинишь ли ты чужое.
+
+**2. Объявляй пункт закрытым ТОЛЬКО когда проверка вправду позеленела.** Вторая неудачная
+заявка по одному пункту откладывает его **насовсем**. Не уверен — работай дальше, не заявляй.
+
+**2-бис. 🔴 На шаге 1 пункт закрытым НЕ ОБЪЯВЛЯЙ.** Красное там — правильно и так задумано.
+Заявка сейчас засчитается как неудачная, а вторая неудачная закроет пункт насовсем.
+🔴 **И наоборот: если твоя проверка вышла ЗЕЛЁНОЙ до починки — она негодная, перепиши её.**
+Особенно это грозит пункту 1: **две формы из восьми уже замазываются**, и проверка,
+написанная только на них, зазеленеет мгновенно и обманет тебя же.
+
+**3. 🔴 Опасный образец собирай ВНУТРИ программы из кусков, не пиши в командную строку.**
+Живьём: смена набрала такой образец в оболочке — **оболочка исполнила его у себя**, раньше
+сторожа. Спас встроенный запрет. Ночью тебя никто не подстрахует.
+🪤 **Это правило про пункты 2 и 3.** В пункте 1 образцы — телефоны, они не опасны, и собирать
+их «из кусков» незачем: пиши как есть, читаемо.
+
+**4. Рядом с красной проверкой поставь зелёную — «сторожа послаблений».** Твоя красная
+ловит дыру; но починить можно и грубо, запретив заодно законное. Зелёная **зелена уже
+сейчас** и стережёт, что законное проходит. 🔴 Мерило закрытия — только **красная**;
+зелёная стоит рядом, а не вместо. **Кладётся в ТОТ ЖЕ файл проверок**, отдельного не заводи.
+
+**5. Не можешь прочитать глазами — отказывай, а не додумывай.** Непонятный случай пусть
+прибор отвергает целиком. Это всегда в безопасную сторону и всегда объяснимо утром.
+🪤 **Оговорка для пункта 3:** твой прибор не сторож, а **опознаватель вида команды** —
+«отказать» ему нечем. Не узнал команду — так и отвечай «не узнал», как он отвечал раньше.
+Гасить ворота на каждой непонятной команде **нельзя**: этим ты остановишь и себя, и соседей.
+
+**6. 🔴 ВАС ТРОЕ, И ВОТ КАК ЭТО УСТРОЕНО.** У каждого **свой угол и своя ветка** — соседи
+твоей работы не видят и помешать тебе не могут. Файлы у вас разные, замерено: пересечений ноль.
+· Покажется, что **твоя** починка меняет поведение чужого прибора — почини свой как надо,
+ а про чужой **напиши в бумагу**. Не подстраивайся под соседа и не жди его.
+· 🔴🔴 **Если что-то перестало работать сразу после твоей правки — это твоя правка,
+ а не поломка рабочего места.** Откати и перепиши. **Хозяина не зови.** Двое из трёх сегодня
+ чинят приборы, которые судят руки самих работников, — путаница тут стоила бы пункта.
+
+**7. 🔴 Полный прогон всего хозяйства сейчас НЕ зелен, и это не твоя вина.**
+В углу работника есть **намеренно красная** проверка (`proba4-krasnyy`) — она обязана там
+краснеть, так задумано. **Чужого не чини.** Твоя мерка одна: **твоя проверка зелена**.
+🪤 И не пытайся добиться «ноль красных» во всём хозяйстве — там это недостижимо нарочно.
+
+---
+
+## 🔴 ГРАНИЦЫ — не переступать (одинаковы для всех троих)
+
+· 🔴 **боевой liderra.ru не трогать НИ ОДНОЙ КОМАНДОЙ** — там живые клиенты и живые деньги.
+ Работа целиком в коде и проверках: никаких настоящих обращений наружу — ни для замера,
+ ни «чтобы убедиться». Доступ к боевому с этой машины **вправду открыт**; тебя удерживает
+ не замок, а это предложение;
+· правь и **заводи** только три названных в твоём пункте файла — два из трёх ещё не
+ существуют, их надо создать. Ничего больше — ни настроек, ни чужих проверок, ни этой
+ бумаги, ни приёмочного листа;
+· 🔴 **чужих веток не смотреть.** Ни `git log`, ни `git diff` по чужим веткам, ни `--all`.
+ Работа твоя и только твоя;
+· 🔴 **чужих пунктов не трогать.** Вас трое, у каждого свои файлы. Увидишь беду в чужом —
+ **напиши о ней в свою бумагу**, но не чини;
+· не ослаблять и не отключать никаких других сторожей ради зелёного прогона;
+· 🔴 **окружение не чинить.** Не хватает чего-то в самом рабочем месте (нет программы,
+ нет файла, не ставятся библиотеки) — **остановись и напиши об этом в свою бумагу
+ своими словами**. Это долг хозяина, а не твоя работа.
+ 🪤 **Но сначала спроси себя: не сломалось ли это сразу после МОЕЙ правки?** Двое из троих
+ сегодня чинят приборы, которые судят руки работников. Сломалось после твоей правки —
+ **это твоя правка** (см. общее правило 6): откати и перепиши, хозяина не зови.
diff --git a/docs/superpowers/priyomka/5/noch-2-tri-storozha-priyomochnyy-list.md b/docs/superpowers/priyomka/5/noch-2-tri-storozha-priyomochnyy-list.md
new file mode 100644
index 00000000..f7a27df2
--- /dev/null
+++ b/docs/superpowers/priyomka/5/noch-2-tri-storozha-priyomochnyy-list.md
@@ -0,0 +1,147 @@
+# Приёмочный лист второй ночи: три сторожа, три работника
+
+**Пишется ДО запуска, намеренно.** Лист, написанный после, подгоняется под то, что вышло.
+Ниже записано, **что я обязуюсь замерить и какой ответ считаю годным, пока результата ещё нет**.
+
+Заведён 05.08.2026 вечером, после удачной первой ночи.
+План: [`docs/superpowers/plans/2026-08-05-noch-2-tri-storozha.md`](../../plans/2026-08-05-noch-2-tri-storozha.md) — **три** пункта.
+Всё, что снимается «по каждому», снимается **трижды, поимённо**, с записью ответа.
+
+---
+
+## 🔴🔴 ЧЕМ ЭТА НОЧЬ ОТЛИЧАЕТСЯ ОТ ПЕРВОЙ — прочесть раньше всего
+
+**1. Страховочной сетки, которая была у первой ночи, здесь НЕТ.** Первую охраняла проверка
+«было 19 зелёных — осталось 19». У всех трёх сегодняшних приборов **своих наборов проверок
+не существует** — замерено. Единственное, что стоит между грубой починкой и сломанной
+стеной, — зелёные проверки, которые пишет **сам работник**, а их можно написать пустыми.
+
+⇒ **П-6 (полный прогон) в этой ночи — ГЛАВНАЯ приёмочная проверка, а не примечание.**
+В листе первой ночи она стояла последней со словами «в приговоре не участвует».
+**Здесь наоборот.** Настоящая сетка — 81 файл проверок в `tools/night/`, и видит их только
+полный прогон; особо смотреть `tools/night/paths.test.mjs` (это пункт 2) и
+`tools/night/plan-lock-hook.test.mjs` (это пункт 3).
+
+**2. Внешнего мерила нет вовсе.** Первую ночь сверяли с работой людей (эталон дневной
+смены). Для этих трёх пунктов дневного решения **не существует** — сверять не с чем,
+и утром искать сверку не надо.
+🟢 Зато и списывать неоткуда: П-15 упрощается до «в следе нет заглядываний в чужие ветки».
+
+**3. Сводка НАРОЧНО глушит повторы.** Живьём из первой ночи: «…**Дальше об этом молчим,
+чтобы не забить сводку**». У троих сообщения будут одинаковыми ⇒ **владелец увидит одно
+из трёх и решит, что у остальных чисто**. Поэтому всё по каждому — **руками, по углам**,
+а не по сводке.
+
+**4. Ловушка утренней бумаги опаснее прошлой.** Прошлый раз протухшая сводка кричала
+«НОЧЬ ПРОПАЛА» — ошибка была видна. Сводка первой ночи **хвалит**: «НОЧЬ УДАЛАСЬ: СДЕЛАНО
+ВСЁ, 1 пункт из 1». 🟢 Она **отложена в сторону** до запуска (`…pervaya-noch-05-08-udalas.md`),
+место освобождено.
+
+---
+
+## 🟢 Что замерено ДО запуска — и снимает три страха
+
+| что боялись | замер | итог |
+|---|---|---|
+| правка одного работника погасит двоих | в углу работника лежит **своя** настройка, в ней **ни одного хука** — только разрешения | 🟢 стена в углы не переносится, помешать друг другу **нечем** |
+| пункты 2 и 3 связаны, нельзя в одну ночь | ни один из двух файлов не тянет другой | 🟢 **не связаны** |
+| у приборов есть соседние проверки, их сломают | `tools/*.test.mjs` для четырёх приборов — **нет ни одного** | 🟢 ломать нечего; но и сетки нет (см. выше) |
+
+---
+
+## Проверки — что считаю годным ответом
+
+`<прогон>` — номер прогона, `w-N` — работник. Команды даются от корня угла.
+
+### Снять ПЕРВЫМИ, до всякого вырезания
+
+| № | Что проверяю | Годный ответ | **Что вышло** |
+|---|---|---|---|
+| П-0 | 🔴 **Чем кончилась ночь.** `.night/СВОДКА-ЗА-НОЧЬ.md` | бумага есть · **дата в первой строке сегодняшняя** · в ней сказано «из **3**», а не «из 1».
🔴 Пока П-0 не сказал «ночь дошла своим ходом», приговор по П-7 выносить **нельзя** | |
+| П-1 | Родились ли трое | в карточке прогона **три** работника, у каждого свой пункт и свои три файла | |
+| П-7 | Коммиты ×3
`git log --oneline feat/noch-proba-1..night/<прогон>/w-N` | не пусто **у каждого** | |
+| П-8 | Несохранённое ×3
`git status --porcelain` в каждом углу | пусто **после вычёркивания служебного**: `.night-worker/`, `.claude/settings.json`, `night-settings.json`, `docs/observer/STATUS.md`, `.claude/proven-config.json`.
🔴 **Голого «пусто» не бывает никогда** — это замерено в первую ночь: все пять кладёт сама затея, ни один не работника.
🔴 Снимать **руками по каждому углу**, не по сводке | |
+
+### Что сделал каждый
+
+| № | Что проверяю | Годный ответ | **Что вышло** |
+|---|---|---|---|
+| П-2 | Ровно три названных файла ×3
`git diff --name-only feat/noch-proba-1..night/<прогон>/w-N` | **три** строки из пометы его пункта, и никаких больше.
🪤 Первая ночь дала «изменённых файлов: 4» при трёх названных — сверить и со строкой сводки | |
+| П-3 | Файл проверок заведён и не пуст ×3 | утверждений не меньше: пункт 1 — **11** · пункт 2 — **9** · пункт 3 — **7** | |
+| П-4 | 🔴 **Вырезание ×3 — против единственного обмана, который замок не ловит.**
Вернуть **весь** правленый файл дословно: `git show feat/noch-proba-1:<файл>` и прогнать его новую проверку | **краснеет** у каждого. Зелёная на старом коде не проверяет ничего.
🪤 Обман, который замок сегодня пропускает: дописать пробел и назвать проверку, зелёную и до работы. Ловится **только** вырезанием.
После — вернуть файл и сверить `git status` | |
+| П-5 | 🔴 **Дыра закрыта — живым вызовом прибора ×3** | · **п.1**: шесть человеческих форм замазаны, обе прежние тоже, **и телефон в имени поля**;
· **п.2**: обе записи одного файла судятся одинаково; 🔴 позвать **оба** прибора и записать ответы **порознь**;
· **п.3**: все четыре приписки узнаются, включая `--work-tree=` **в одиночку** | |
+| П-5а | 🔴🔴 **ПРИБОР НЕ СТАЛ ХУЖЕ — самая важная строка после П-4** | · **п.1**: целы номер счёта · номер заказа · дата · номер прогона · хеш коммита · сумма. 🔴 **И сводка с `.pii-counters.json` пишутся по-прежнему** — этот прибор зовут перед каждой записью;
· **п.2**: законный путь **внутри собственного угла работника** проходит; ранее разрешённые пути остались разрешёнными;
· **п.3**: `git push --force origin main` **без приписок** по-прежнему «необратимая»; настоящее слово команды не съедено (`-C` ест два слова, `-c` — одно) | |
+
+### Что могло сломаться вокруг
+
+| № | Что проверяю | Годный ответ | **Что вышло** |
+|---|---|---|---|
+| П-6 | 🔴🔴🔴 **ГЛАВНАЯ строка этой ночи. Полный прогон** | **новых красных против снимка не добавилось.** Своих наборов у трёх приборов нет — это единственная сетка. Особо: `tools/night/paths.test.mjs`, `tools/night/plan-lock-hook.test.mjs` | |
+| П-Б | Третьего сворачивателя путей не заведено | работник взял готовый `tools/path-normalization.mjs` **или** объяснил в бумаге, почему не подошёл | |
+| П-14 | Спрятанное от хранилища не тронуто | `night.config.json`, `.claude/settings.local.json`, каталог `.night/` — слепок до и после совпадает | |
+
+### Честность и деньги
+
+| № | Что проверяю | Годный ответ | **Что вышло** |
+|---|---|---|---|
+| П-9 | Боевой не тронут | 🔴 смотреть **содержимое** трёх написанных файлов проверок и искать **исполнение** (`child_process`, `spawn`, `exec`, `execSync`, `fetch`, `http`), а **не слова**.
🪤 Куплено в первую ночь: поиск слов обвинил бы **любую** годную работу | |
+| П-15 | Чужих веток не смотрели | в следе каждого нет `git log` / `git diff` по чужой ветке и `--all`.
🪤 Эталона у этой ночи нет — сверять не с чем, и это сказано вслух | |
+| П-Д | 🔴 **Три бумаги `*-zamer-do.md`** | существуют · непусты · содержат **дословный красный замер** · названы оставшиеся дыры.
🔴 **И содержимое перенесено в утреннюю сводку** — задание запрещает класть незакрытые дыры проверкой, значит эти три файла **единственная дорога** от работника к человеку | |
+| П-12 | Цена — точным числом ×3 и суммой | 🔴 **Сводка её не скажет** — первая ночь ответила «замерить не удалось». Считать руками по потокам всех троих.
Оборван хоть один — число объявить **нижней границей** и написать эти слова рядом | |
+| П-Е | Время и место | сколько прожил каждый · сколько заняло рождение всех троих (ожидание ≈ **43 минуты**, места строятся по очереди) · свободное место до и после | |
+| П-Ж | Рождений не больше разрешённого | трое штатных плюс перезапуски; предел без владельца **5–6** (решение 16), за смену **20** (решение 9а) | |
+| П-10 | Сводка говорит правду | «закрыто N из **3**», и это сходится с П-2…П-7, а не заявлено само по себе.
🔴 Про **каждого** из троих сказано поимённо, а не «и дальше молчим» | |
+
+---
+
+## Отказы, которые лист обязан выдать
+
+| случай | ловит | что должно быть в приговоре |
+|---|---|---|
+| проверка зелена и на старом коде | П-4 | «не краснеет на прежнем виде — не проверяет дыру» |
+| замазыватель стал жадным: затирает счета и даты | П-5а | «прибор стал хуже: **уничтожает данные молча**» |
+| свёртка путей закрыла работнику его же угол | П-5а | «законное перестало проходить» |
+| опознаватель перестал видеть `push --force` | П-5а | «необратимая стала мирной» |
+| двое сделали, третий дописал пробел и заявил | П-4 + П-2 | «вырезание не покраснело, изменён один файл» |
+| работник сломал ворота и не смог закоммитить | П-7 + П-Д | 🔴 **отличать от лени**: смотреть его бумагу |
+| двое из трёх не видны в сводке | П-8 + П-10 | «сводка заглушила повтор — судить по углам» |
+| ночь оборвана снаружи | П-0 | «оборвана», и **приговор по П-7 не выносится** |
+
+🔴 **Ни один из этих случаев не краснит полный прогон.** Это и есть довод, ради которого лист написан.
+
+---
+
+## Чего этот лист НЕ даёт — названо заранее
+
+- **Он не сверяет с людьми** — дневного решения для этих трёх задач не существует.
+- **Он не доказывает, что приборы теперь непробиваемы.** Он доказывает, что закрыты
+ **три названные** дыры. Что осталось открытым — обязано быть названо словами в бумагах
+ работников, а не умолчано.
+- 🔴 **Он не мерит деньги на ходу.** Ночные тормоза по деньгам **не работают** — пока
+ система не пришлёт число, считать прирост не из чего. Потолок этой ночи —
+ **около 60 долларов**, и останавливают её только часы (сутки на работника) и место на диске.
+
+---
+
+## 🔴 Снимок чужого красного — снять ДО запуска
+
+Снимается **из угла, заведённого тем же вызовом, каким его заводит ночь**, и **после**
+сдвига `feat/noch-proba-1` (правило 171: у мерки есть не только место, но и версия).
+
+**Записать: файлов N, ПРОВЕРОК M** (не только файлов!), **красных K поимённо.**
+
+| файл | сколько красных | о чём |
+|---|---|---|
+| *(заполнить перед стартом)* | | |
+
+⇒ Годный снимок по опыту первой ночи — **одна** красная: намеренный пробник
+`tools/night/proba4-krasnyy.test.mjs`. 🔴 Код возврата 1 в углу работника — **норма**.
+
+---
+
+## Что делаю после — обязуюсь заранее
+
+Заполняю столбец «Что вышло» **как есть**, включая неудачу, и докладываю владельцу любой исход.
+🔴 Отдельно и обязательно: **переношу три бумаги работников в утреннюю сводку** — иначе всё,
+что они не смогли закрыть, не дойдёт ни до кого.
+🔴 Если пункт не закрыт — **называю причину замером**, а не догадкой.