Name the ceiling as a finding: if only this scope can run the whole catalogue, topping up for the zone stops being an exception

This commit is contained in:
heaven 2026-09-11 15:43:30 +03:00
parent a6384c2d0d
commit 798880252a

View file

@ -3,7 +3,7 @@
> **Единственный трекер проекта.** Здесь живут строки, на которые доки, промты и 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`).
> ⚠ **Состояние проекта — не здесь.** Очередь, курс, CURRENT-STATE, состояние паков и живая хроника — шапка [PROGRESS.md](PROGRESS.md). Здесь только долг и его диспозиции.
> - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **314** строк · зона бэкенд **151** строго / **205** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **159** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - **СЧЁТ ОЧЕРЕДИ на 11.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **315** строк · зона бэкенд **151** строго / **205** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **160** (перечень — грепом по таблице, рукописный список снят 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` на прежнем месте оставлен заголовок-указатель, поэтому ссылки «секция „Бэклог“» доезжают в один хоп.
## Бэклог (ЕДИНЫЙ, собран 26.07, актуализация 04.08 D39.99/D39.101; правки — только через оркестратора)
@ -350,3 +350,4 @@
| 428 | ⛔ **ЧЕТВЁРТАЯ ЛОВУШКА ДЛЯ СЧИТАЮЩИХ ДЕНЬГИ, и она умножает счёт на число КОПИЙ базы.** Замер оркестратора 11.09 при приёмке (контроль: `find` дал **449** файлов `*.db`, таблицу `spend` несут **406**, строк `spend`**295**, различных дат — 18): сумма `committed_usd` по всем базам машины за 11.09 даёт **$4.354443 на 13 строках**, тогда как настоящая трата дня — **$0.419423 ОДИН раз**. Разница — не ошибка движка: таблица `spend` ключуется `(book_id, date)` и переезжает вместе с файлом, а рабочая сессия сделала девять копий базы прогона (`runA`, `runA-frozen`, `dbcopy`, обзорные копии, пред-миграционные бэкапы) — **одна и та же строка сосчиталась десять раз**. Плюс промежуточный бэкап на $0.16021 добавил одиннадцатый счёт того же прогона в другой момент времени. ⛔ **И тем же множителем больна ВТОРАЯ таблица, что я обнаружил только пере-замером по наводке аудита: `request_log` — 58 886 строк-экземпляров на 449 базах суть **5 413 УНИКАЛЬНЫХ**, множитель **10.88×**.** Я опубликовал по нему числа подстановки цены (ряд 413) и контроль ряда 422, не применив к ним собственную норму из ЭТОГО ряда — между заведением нормы и её нарушением прошёл час. ⇒ **любой денежный свод, собранный обходом файлов по диску, завышает трату кратно числу копий**, и это первое, к чему потянется рука при вопросе «сколько мы потратили за день». ⚠ Родня трёх ловушек акта `D39.247` п.5 (`run_attempts.spend_micro_usd` накопленная · `err` пуст на провалах · `chunk_status` недобирает терминологию) — у всех один класс: **прибор денег отвечает на вопрос, которого ему не задавали.** Лечение — не код, а норма свода: деньги считаются по УНИКАЛЬНОМУ `(book_id, date)` либо по одной авторитетной базе, и рядом печатается, сколько файлов прибор обошёл | оркестратор | скоро | норма денежного свода в ролевом промте + дедупликация по `(book_id, date)` | приёмка пака консистентности, 11.09 |
| 429 | **БОЕВОЙ КОНФИГ НЕСЁТ ОТОЗВАННЫЙ ВЕНДОРСКИЙ КЛЕЙМ, И ЧИТАТЕЛЬ ЕМУ ВЕРИТ.** `backend/configs/pipeline-c1.yaml:86`=`v4-pro maps low` дословно: «v4-pro maps low→high, effective effort unchanged». Это было верно до 30.08 и **ОТОЗВАНО**: вендор сменил маппинг (`docs/experiments/00-provider-quirks.md` §3а — таблица теперь ОДНА на обе модели, `low→low`), и поведенческая проба полигона 30.08 за $0.038276 показала, что `low` до `pro` ДОХОДИТ. ⇒ комментарий в дереве утверждает ровно обратное живой правде, и стоит он в том самом файле, который промты велят читать. ⚠ Цена не гипотетическая: на этом клейме строилась оценка «ручки у редактора нет вовсе», и она уже уводила решение. ⛔ **Класс шире одной строки: вендорский факт, вмороженный в комментарий, протухает молча — у комментария нет ни даты, ни гейта, ни владельца.** Лечение узкое — привести строку в соответствие; лечение широкое — правило, по которому вендорский факт в коде несёт дату снятия и указатель на квирки, а не живёт вечно | бэкенд | скоро | правка строки 86 + правило «вендорский факт в комментарии несёт дату и адрес» | аудит смены 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 сняты). ⇒ **разница не в умении, а в СКОУПЕ**, и пока она есть, полный каталог структурно может снять только оркестратор. ⛔ **Цена этого — ползучая подмена рубежа:** приёмка обязана СУДИТЬ чужую работу, а не производить её измерения; если зона по среде не может снять свой главный гейт, то «пере-снял своим прибором» (норма) незаметно превращается в «сделал за неё» (подмена). ⭐ Различение, которым это лечится, ратифицируется актом пака консистентности: **пере-снял = повторил ИМЕЮЩЕЕСЯ измерение зоны; сделал за неё = произвёл измерение, которого у зоны НЕТ, и вписал как её.** ⇒ лечение по существу: поднять потолок транзиентных юнитов до замеренного пика `tmmutate` ЛИБО гонять полный каталог в скоупе без потолка объявленно, с числом из `dmesg` рядом — но не оставлять это молчаливым свойством среды | оркестратор/владелец | **скоро** | потолок юнитов поднят до замеренного пика ЛИБО объявлено, что полный каталог снимает оркестратор, и почему | замер оркестратора 11.09, разбор со старшим коллегой |