Carry the fact that the cure ships switched off and reaches one of the four cases, with the measurement that must precede turning it on

This commit is contained in:
heaven 2026-09-11 19:04:09 +03:00
parent 68cbd3ffad
commit ee86d58b32

View file

@ -3,7 +3,7 @@
> **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и D-ноты ссылаются словами «строка N» / «строка бэклога N»: **ID строки стабилен навсегда**, не перенумеровывается и не переиспользуется (D39.80). Правки — только через оркестратора; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено. > **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и D-ноты ссылаются словами «строка N» / «строка бэклога N»: **ID строки стабилен навсегда**, не перенумеровывается и не переиспользуется (D39.80). Правки — только через оркестратора; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено.
> ⚠ **Это НЕ бэклог зоны `docs/`, а бэклог ПРОЕКТА.** У зон свои, с другими неймспейсами ID, и единый их строк не принимает (D39.84): платформа — [../platform/BACKLOG.md](../platform/BACKLOG.md) (`П-N`) и её регистр дефектов `platform/docs/DEFECT_REGISTER.md` (`PD-N`); фронт — [../frontend/docs/BACKLOG.md](../frontend/docs/BACKLOG.md) (`Ф-N`). > ⚠ **Это НЕ бэклог зоны `docs/`, а бэклог ПРОЕКТА.** У зон свои, с другими неймспейсами ID, и единый их строк не принимает (D39.84): платформа — [../platform/BACKLOG.md](../platform/BACKLOG.md) (`П-N`) и её регистр дефектов `platform/docs/DEFECT_REGISTER.md` (`PD-N`); фронт — [../frontend/docs/BACKLOG.md](../frontend/docs/BACKLOG.md) (`Ф-N`).
> ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции. > ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции.
> - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **316** строк · зона бэкенд **152** строго / **205** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **161** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). > - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **317** строк · зона бэкенд **152** строго / **206** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **162** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - ⚠ **Переезд 06.09 (D39.218):** таблица вынесена из `PROGRESS.md` ДОСЛОВНО и ни один ID не сдвинут — **с единственным исключением: две ячейки (строки 220 и 306) тронуты РОВНО в номере якоря `docs/scripts/counts.py:566`→`:569` и `:592`→`:595`**, потому что цель сдвинул этот же коммит; текст ячеек не менялся, длины равны. В `PROGRESS.md` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп. > - ⚠ **Переезд 06.09 (D39.218):** таблица вынесена из `PROGRESS.md` ДОСЛОВНО и ни один ID не сдвинут — **с единственным исключением: две ячейки (строки 220 и 306) тронуты РОВНО в номере якоря `docs/scripts/counts.py:566`→`:569` и `:592`→`:595`**, потому что цель сдвинул этот же коммит; текст ячеек не менялся, длины равны. В `PROGRESS.md` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп.
## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора) ## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
@ -352,3 +352,4 @@
| 430 | **ОПЕРАЦИОННЫЙ ДОЛГ СМЕНЫ 11.09, У КОТОРОГО НЕ БЫЛО НОСИТЕЛЯ НИГДЕ — заведён аудитом.** **(а) Стенд платного прогона A оставлен ПОДНЯТЫМ полигонной сессией и жив вторые сутки:** `tmplatformd` уже мёртв, но кластер postgres работает (`~/.local/share/tmstand/pgdata`, сокет `/tmp:55433`, ~245 МБ на девяти процессах — замерено `ps`). ⛔ **Гасить СЕЙЧАС нельзя, и это решение, а не забывчивость:** бэкенд-батарея без живого postgres СКИПАЕТ денежные пути (замерено при приёмке прогона A: первая «зелень» имела 420 пропущенных тестов, все «нет живого Postgres»), а её финальный гейт идёт прямо сейчас. ⇒ гасить ПО PID после закрытия бэкенд-пака актом; полигонная сессия велела «только по pid», и это верно — на машине живут чужие прогоны. **(б) Улики прогона A закоммичены (`ef0509f`, 33 файла) и НЕ ОТПРАВЛЕНЫ:** репозиторий книг на один коммит впереди `origin/main`, санкция владельца получена 11.09 («Да»), выполнить пуш должен он у себя — мой классификатор прав это действие не пропускает. ⇒ **единственная копия улик платного прогона живёт на ОДНОЙ машине.** ⚠ Класс обоих: операционное состояние, о котором знают только участники разговора, носителем не является — ровно тот класс, что эта смена ловила у себя дважды | оркестратор/владелец | **скоро** | (а) гашение по pid после акта; (б) `git -C books push origin HEAD` — действие владельца | аудит смены 11.09 | | 430 | **ОПЕРАЦИОННЫЙ ДОЛГ СМЕНЫ 11.09, У КОТОРОГО НЕ БЫЛО НОСИТЕЛЯ НИГДЕ — заведён аудитом.** **(а) Стенд платного прогона A оставлен ПОДНЯТЫМ полигонной сессией и жив вторые сутки:** `tmplatformd` уже мёртв, но кластер postgres работает (`~/.local/share/tmstand/pgdata`, сокет `/tmp:55433`, ~245 МБ на девяти процессах — замерено `ps`). ⛔ **Гасить СЕЙЧАС нельзя, и это решение, а не забывчивость:** бэкенд-батарея без живого postgres СКИПАЕТ денежные пути (замерено при приёмке прогона A: первая «зелень» имела 420 пропущенных тестов, все «нет живого Postgres»), а её финальный гейт идёт прямо сейчас. ⇒ гасить ПО PID после закрытия бэкенд-пака актом; полигонная сессия велела «только по pid», и это верно — на машине живут чужие прогоны. **(б) Улики прогона A закоммичены (`ef0509f`, 33 файла) и НЕ ОТПРАВЛЕНЫ:** репозиторий книг на один коммит впереди `origin/main`, санкция владельца получена 11.09 («Да»), выполнить пуш должен он у себя — мой классификатор прав это действие не пропускает. ⇒ **единственная копия улик платного прогона живёт на ОДНОЙ машине.** ⚠ Класс обоих: операционное состояние, о котором знают только участники разговора, носителем не является — ровно тот класс, что эта смена ловила у себя дважды | оркестратор/владелец | **скоро** | (а) гашение по pid после акта; (б) `git -C books push origin HEAD` — действие владельца | аудит смены 11.09 |
| 431 | ⛔ **СЕССИИ ЗОН НЕ МОГУТ СНЯТЬ ПОЛНЫЙ МУТАЦИОННЫЙ КАТАЛОГ ПО СРЕДЕ, А ОРКЕСТРАТОР МОЖЕТ — и это делает «оркестратор добирает за зону» НОРМОЙ ПО УМОЛЧАНИЮ.** Замер 11.09: бэкенд-сессию убило ЧЕТЫРЕ раза подряд на пере-снятии десяти записей (дважды 0 из 10, падало на первой). Причина — не машина и не нагрузка: `dmesg` даёт **26** убийств, **все с `constraint=CONSTRAINT_MEMCG`**, каждое в своём транзиентном юните `tm.slice/tm-runs.slice/tm-test-*`; сами слайсы при этом `memory.max = max`. А прогон оркестратора идёт в `/init.scope` с `memory.max = max` и доходит до конца (проверено: тот же каталог, та же команда, 10 из 10 сняты). ⇒ **разница не в умении, а в СКОУПЕ**, и пока она есть, полный каталог структурно может снять только оркестратор. ⛔ **Цена этого — ползучая подмена рубежа:** приёмка обязана СУДИТЬ чужую работу, а не производить её измерения; если зона по среде не может снять свой главный гейт, то «пере-снял своим прибором» (норма) незаметно превращается в «сделал за неё» (подмена). ⭐ Различение, которым это лечится, ратифицируется актом пака консистентности: **пере-снял = повторил ИМЕЮЩЕЕСЯ измерение зоны; сделал за неё = произвёл измерение, которого у зоны НЕТ, и вписал как её.****И ВТОРАЯ ПОЛОВИНА, названная САМОЙ ЗОНОЙ, без которой ряд лечит не то: дело не только в потолке.** Её слова: даже без потолка она потеряла бы прогон ДВАЖДЫ — первый раз потому, что пустила второй мутатор по чужому корню, второй раз потому, что `diff -rq` убедил её, будто результаты целы. ⇒ **из четырёх потерь две — СРЕДЫ, две — МЕТОДА.** Ряд обязан ловить оба: «зона не может снять свой гейт по среде» И «зона портит собственный гейт методом». Иначе потолок починят и удивятся, что не помогло. ⇒ лечение по существу: поднять потолок транзиентных юнитов до замеренного пика `tmmutate` ЛИБО гонять полный каталог в скоупе без потолка объявленно, с числом из `dmesg` рядом — но не оставлять это молчаливым свойством среды | оркестратор/владелец | **скоро** | потолок юнитов поднят до замеренного пика ЛИБО объявлено, что полный каталог снимает оркестратор, и почему | замер оркестратора 11.09, разбор со старшим коллегой | | 431 | ⛔ **СЕССИИ ЗОН НЕ МОГУТ СНЯТЬ ПОЛНЫЙ МУТАЦИОННЫЙ КАТАЛОГ ПО СРЕДЕ, А ОРКЕСТРАТОР МОЖЕТ — и это делает «оркестратор добирает за зону» НОРМОЙ ПО УМОЛЧАНИЮ.** Замер 11.09: бэкенд-сессию убило ЧЕТЫРЕ раза подряд на пере-снятии десяти записей (дважды 0 из 10, падало на первой). Причина — не машина и не нагрузка: `dmesg` даёт **26** убийств, **все с `constraint=CONSTRAINT_MEMCG`**, каждое в своём транзиентном юните `tm.slice/tm-runs.slice/tm-test-*`; сами слайсы при этом `memory.max = max`. А прогон оркестратора идёт в `/init.scope` с `memory.max = max` и доходит до конца (проверено: тот же каталог, та же команда, 10 из 10 сняты). ⇒ **разница не в умении, а в СКОУПЕ**, и пока она есть, полный каталог структурно может снять только оркестратор. ⛔ **Цена этого — ползучая подмена рубежа:** приёмка обязана СУДИТЬ чужую работу, а не производить её измерения; если зона по среде не может снять свой главный гейт, то «пере-снял своим прибором» (норма) незаметно превращается в «сделал за неё» (подмена). ⭐ Различение, которым это лечится, ратифицируется актом пака консистентности: **пере-снял = повторил ИМЕЮЩЕЕСЯ измерение зоны; сделал за неё = произвёл измерение, которого у зоны НЕТ, и вписал как её.****И ВТОРАЯ ПОЛОВИНА, названная САМОЙ ЗОНОЙ, без которой ряд лечит не то: дело не только в потолке.** Её слова: даже без потолка она потеряла бы прогон ДВАЖДЫ — первый раз потому, что пустила второй мутатор по чужому корню, второй раз потому, что `diff -rq` убедил её, будто результаты целы. ⇒ **из четырёх потерь две — СРЕДЫ, две — МЕТОДА.** Ряд обязан ловить оба: «зона не может снять свой гейт по среде» И «зона портит собственный гейт методом». Иначе потолок починят и удивятся, что не помогло. ⇒ лечение по существу: поднять потолок транзиентных юнитов до замеренного пика `tmmutate` ЛИБО гонять полный каталог в скоупе без потолка объявленно, с числом из `dmesg` рядом — но не оставлять это молчаливым свойством среды | оркестратор/владелец | **скоро** | потолок юнитов поднят до замеренного пика ЛИБО объявлено, что полный каталог снимает оркестратор, и почему | замер оркестратора 11.09, разбор со старшим коллегой |
| 432 | **СТЕНД-СТУПЕНЬ ГЕЙТА НЕ МОЖЕТ БЫТЬ ЗЕЛЁНОЙ НА ЭТОМ ХОСТЕ: одному её измерению нужны данные, которые НАМЕРЕННО не версионируются, и после вывода полигона из скоупа их некому доставить.** Замер 11.09 при приёмке: `TM_MINER_PARITY=1 go test -race ./internal/miner/` даёт FAIL с текстом «required data is missing: `eval/exp16/data/jieba_dict_general_zh.txt`» — и в МОЕЙ копии, и в НАСТОЯЩЕМ дереве. Причина названа самим репозиторием: `.gitignore:39` исключает `eval/exp16/data/` с комментарием «exp16 versioned contrast corpus (jieba 0.42.1 dict.txt, 5MB) — SHA pinned in the report, reproducible». ⇒ **это НЕ дефект пака и НЕ дефект дерева**, а дыра провизионирования: флаг `TM_MINER_PARITY=1` по замыслу превращает скип в падение («missing data FAILS instead of skipping»), и на хосте, куда корпус не доставляли, он падает по назначению. ⚠ **Вторая половина хуже первой: владельцем `eval/` был полигон, а зона выведена из скоупа (`D39.248`)** — значит доставлять корпус теперь некому, и ступень будет падать у каждого, кто исполнит рецепт. ⭐ Различать надо ДВА измерения стенда: **корпус разметки** (`books/gu-zhenren/labels`, 6 записей) — на месте, ступень идёт, и именно она защищает прибор консистентности; **контраст майнера** — отсутствует. ⇒ закрытие ряда: либо рецепт доставки корпуса с пинованным SHA в носителе стенда, либо честное объявление «измерение контраста майнера на этом развёртывании не бежит», но не молчаливое красное | бэкенд/оркестратор | **скоро** | рецепт доставки корпуса ЛИБО объявленное отсутствие измерения | приёмка пака консистентности, 11.09 | | 432 | **СТЕНД-СТУПЕНЬ ГЕЙТА НЕ МОЖЕТ БЫТЬ ЗЕЛЁНОЙ НА ЭТОМ ХОСТЕ: одному её измерению нужны данные, которые НАМЕРЕННО не версионируются, и после вывода полигона из скоупа их некому доставить.** Замер 11.09 при приёмке: `TM_MINER_PARITY=1 go test -race ./internal/miner/` даёт FAIL с текстом «required data is missing: `eval/exp16/data/jieba_dict_general_zh.txt`» — и в МОЕЙ копии, и в НАСТОЯЩЕМ дереве. Причина названа самим репозиторием: `.gitignore:39` исключает `eval/exp16/data/` с комментарием «exp16 versioned contrast corpus (jieba 0.42.1 dict.txt, 5MB) — SHA pinned in the report, reproducible». ⇒ **это НЕ дефект пака и НЕ дефект дерева**, а дыра провизионирования: флаг `TM_MINER_PARITY=1` по замыслу превращает скип в падение («missing data FAILS instead of skipping»), и на хосте, куда корпус не доставляли, он падает по назначению. ⚠ **Вторая половина хуже первой: владельцем `eval/` был полигон, а зона выведена из скоупа (`D39.248`)** — значит доставлять корпус теперь некому, и ступень будет падать у каждого, кто исполнит рецепт. ⭐ Различать надо ДВА измерения стенда: **корпус разметки** (`books/gu-zhenren/labels`, 6 записей) — на месте, ступень идёт, и именно она защищает прибор консистентности; **контраст майнера** — отсутствует. ⇒ закрытие ряда: либо рецепт доставки корпуса с пинованным SHA в носителе стенда, либо честное объявление «измерение контраста майнера на этом развёртывании не бежит», но не молчаливое красное | бэкенд/оркестратор | **скоро** | рецепт доставки корпуса ЛИБО объявленное отсутствие измерения | приёмка пака консистентности, 11.09 |
| 433 | ⛔ **ЛЕКАРСТВО ОТ ДВОЙНОЙ ОПЛАТЫ ПОСТРОЕНО И СТОИТ ВЫКЛЮЧЕННЫМ — и помогает ОДНОМУ случаю из четырёх.** Пак 11.09 закрыл НАБЛЮДАЕМОСТЬ (видно, сколько и на что) и построил ЛЕЧЕНИЕ (ступень усилия ниже при том же бюджете на классе `FlagEmpty`), но ручка `retries.lower_effort_on_empty` лендится с дефолтом `false`: **деньги продолжают течь**, и ничто в дереве этого не остановит, пока ключ не поставят в `true`. ⚠ Дефолт выбран не из робости: включение двигает форму попытки ≥1, а бамп версии политики потолка стоил бы пере-перевода **989 единиц на 24 книгах, $9.99 уже оплаченного** (дедуплицированный замер зоны). ⛔ **И охват уже — из четырёх двойных оплат прогона A лекарство достаёт ОДНУ:** `edit` ($0.071009 = 67 % потери) стоит на `off`, у которого шаг вниз есть; три черновых ($0.035463 = 33 %) уже на `low`**дне эмитирующей шкалы, и лекарства для них в паке НЕТ**. ⇒ условие включения одно и измеримое: **эхо-контроль ИМЕННО В РЕДАКТОРСКОЙ РОЛИ на плотном CJK, парным дизайном на повторах.** ⚠ Прежняя оценка риска цитировала НЕ ТУ РОЛЬ: «1 чистый китайский выход из 16» — это `flash` как ПЕРЕВОДЧИК, а единственная стадия, которую ручка двигает, — РЕДАКТОР, и квирки прямо говорят, что его эхо-безопасность при `low` на CJK **не мерена**. Ошибку нашёл направленный читатель зоны, не я и не она. ⚠ Вторичный исход того же замера, стоящий $0 сверх прогона: **растёт ли размышление вместе с потолком на `low`** — ровно тот вопрос, который `D39.90` п.9 объявил непроверенным, и он решает, рычаг ли флор | бэкенд/владелец | **скоро** | эхо-контроль в РЕДАКТОРСКОЙ роли на CJK ⇒ ручка в `true`; плюс лечение для дна шкалы | пак «за одну единицу платим дважды», 11.09 |