From 8218755cf755a0769af7952ebf7f187b8fc3e425 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 17 Sep 2026 07:40:43 +0300 Subject: [PATCH] Raise a row for the thirteen-day-old zone documentation review, with each point measured as live, closed, or not measured --- docs/BACKLOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index b8f0ccaa..314b38f7 100644 --- a/docs/BACKLOG.md +++ b/docs/BACKLOG.md @@ -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). Здесь только долг и его диспозиции. -> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **367** строк · зона бэкенд **192** строго / **245** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **195** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **СЧЁТ ОЧЕРЕДИ на 16.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **368** строк · зона бэкенд **193** строго / **246** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **196** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора) @@ -403,3 +403,4 @@ | 486 | ⚠ **МУТАЦИОННЫЙ ХАРНЕСС ЗОНЫ ПЛАТФОРМЫ СЧИТАЕТ ПОИМКОЙ ЛЮБОЕ КРАСНОЕ И НЕ ТРЕБУЕТ ЗЕЛЁНОГО БАЗОВОГО ПРОГОНА — два пункта, каждый превращает число «посадок N, поймано M» в утверждение о другом предмете.** (1) **Нет зелёного базового прогона пакета ДО первой посадки:** пакет, красный по своей причине, отчитается КАЖДОЙ посадкой как о поимке. Норму про это зонный стандарт держит отдельно (`PD-395`), но сам инструмент её не исполняет. (2) **Засчитывается любое `--- FAIL`, а не падение ИМЕННО ожидаемого пина** ⇒ правый вердикт по неправой причине неотличим от поимки — класс `D39.217` п.2в. ⭐ Найдено сессией зоны 17.09 на себе: она написала СВОЙ харнесс, не проверив, что у зоны уже есть `platform/tools/mutate.py`, — то есть завела второй механизм на тот же вопрос, — и, разбирая это, обнаружила, что её собственный критерий был СТРОЖЕ зонного (требовал обоих условий). ⇒ забирать её скрипт в зону НЕ НАДО (два механизма на один вопрос — то, что канон запрещает); надо добавить два пункта в существующий инструмент, это десяток строк. ⚠ Числа кампании пака `PLATFORM_BANK_READOUT` (17 посадок, 17 RED) от этого не шатаются: они сняты строгим критерием, а не зонным | платформа | скоро | `platform/tools/mutate.py` требует зелёного базового прогона и падения названного пина, иначе исход «не измерена» | зона 17.09, приёмка D39.262 | | 487 | ⚠ **МАЙНЕР ПРОИЗВОДИТ СОСТОЯНИЕ, КОТОРОЕ ЧЕТЫРЕ ЕГО ЖЕ КОММЕНТАРИЯ ОБЪЯВЛЯЮТ НЕВОЗМОЖНЫМ: `status:auto` с НЕПУСТЫМ `dst`.** Движок утверждает «`auto` ⇒ dst нет, строка инертна» в четырёх местах: `backend/internal/miner/miner_emit.go:22`=`status:auto, no dst` · `miner_emit.go:53`=`inert until someone signs it` · `miner_emit.go:274`=`term with no dst stays` · `backend/internal/terminology/terminology.go:693`=`status:auto (inert)`. Но ветка `miner_emit.go:272-273` ставит `st.Dst = props[0].Dst` при `props[0].Via == ""` и статуса НЕ трогает (он остаётся `auto` из `:251`; `draft` выставляется только на `:279` при консолидированном dst) ⇒ рождается пара, которой двухрежимная эмиссия §C2-7 не предусматривает. ⛔ **Пина нет ни одного:** утверждений о паре статус/dst в тестах пакета майнера 0 при контроле «12 функций Test в трёх файлах»; ряда в трекере не было (0 по четырём шаблонам при контроле «майнер» → 12). ⚠ **ЧТО ИЗМЕРЕНО И ЧТО НЕТ, раздельно.** Измерено: состояние достижимо по коду и не запинено; на ПРОВОД оно не уходит — отбор в инжект требует `approved` и непустого dst (`backend/internal/membank/memory.go:1245`, `:442`), то есть денежной утечки здесь НЕТ. НЕ измерено: как такую строку читает ЧЕЛОВЕК в карте подписи — рядом стоит собственное предупреждение движка, что dst без провенанса приглашает владельца прочесть его как уже-канон (`appendProposalNote`). Это и есть вопрос ряда, а не утверждение. ⭐ Найдено 17.09 при разборе строки Д-3 консилиума: сама Д-3 ОТКЛОНЕНА (её адрес указывал в несуществующий путь, а по верному адресу ветка статуса не касается), но проверка её формулировки вскрыла это | бэкенд | скоро | пара статус/dst либо запинена как законная с объяснением, либо `auto` перестаёт получать dst | разбор Д-3, 17.09 | | 488 | ⛔ **ТЕСТ ГЕЙТА ГРУЗИТ ВЕСЬ МОДУЛЬ С СИНТАКСИСОМ И ТИПАМИ — 1.44 ГБ БЕЗ `-race`, 3.2 ГБ С НИМ, И РАСТЁТ ВМЕСТЕ С РЕПОЗИТОРИЕМ.** `backend/internal/archguard/shippingtree_test.go:34`=`Mode: packages.LoadAllSyntax, Tests: true` грузит `textmachine/backend/...` целиком ⇒ его память пропорциональна размеру РЕПО, а не предмету теста. Замерено зоной 17.09 после ТРЁХ убийств гейта подряд; пере-снято оркестратором чтением (`LoadAllSyntax` 1 хит, `Tests: true` 1 хит в пакете). ⭐ **ПРИЧИНА УТОЧНЕНА 17.09 ТРЕТЬИМ НЕЗАВИСИМЫМ ЗАМЕРОМ, и прежняя редакция ряда читалась опаснее правды: бьёт СУПЕРВИЗОР ФОНОВЫХ ЗАДАЧ ХАРНЕССА, а ПЕРЕДНИЙ ПЛАН ему не подчиняется.** Та же команда с теми же флагами в переднем плане проходит: `go test ./internal/archguard/ -race -count=1 -timeout=20m` → `ok 29.048s`, пик **3 418 648 kB (3.26 ГБ)**, совпавший с показанием семплера ДО КИЛОБАЙТА. ⇒ гейт в машину ПОМЕЩАЕТСЯ; не помещается он в фоновую задачу. Умерли ПЯТЬ версий причины (конкуренция наборов · параллелизм `-p` · тяжесть пакета конвейера · потолок cgroup · нехватка памяти машины), живёт одна. ⚠ Следствие для приёмок: «гнать гейт, когда рядом нет второго тяжёлого прогона» — НЕ лечение, а суеверие; лечение — гнать не в фоне. ⭐ **ВТОРАЯ УЛИКА 17.09, приёмочная: потолок фоновых задач НЕ ОДИНАКОВ У СЕССИЙ.** У зоны `make battery` целиком не прошёл ЧЕТЫРЕ раза (включая попытку на пустой машине); у оркестратора тот же гейт на копии того же дерева прошёл ЦЕЛИКОМ и В ФОНЕ с первого раза, при `MemFree` **0.5 ГБ** на старте — то есть в ХУДШИХ условиях по свободной памяти. ⇒ «гейт не помещается в машину» неверно даже как описание: он не помещается в ЧУЖУЮ фоновую задачу, и чья именно сессия его запускает — несущий параметр, а не деталь. ⛔ **Убивает не нехватка памяти и не потолок cgroup:** `memory.max = max` у обоих слайсов, `MemAvailable` держался ≈4.2 ГБ — падал **`MemFree`, до 110 МБ**, и супервизор бьёт по НЕМУ. ⇒ «свободных четыре гигабайта» ничего не гарантирует, и это практическое знание для всех зон, а не частность движка. ⭐ **Три версии причины, выдвинутые до замера, оказались ЛОЖНЫМИ, и это стоит держать видимым:** «конкуренция наборов» (убило в одиночку) · «параллелизм пакетов» (убило с `-p=2`) · «тяжёлый `internal/pipeline`» (замер: пик 313 МБ под `-race`). ⚠ **И контроль A/B едва не обманул в ОБРАТНУЮ сторону:** первая попытка шла с `-run TestShipping`, вернула `ok … [no tests to run]` и 126 МБ; прими зона этот «дешёвый базис» за `HEAD`, вышел бы вывод «пак утроил память» — из контроля, который НЕ ЗАПУСКАЛСЯ. Настоящее имя — `TestInvariantsHoldInTheShippingTree`. Честное A/B: чистый `HEAD` 1.44 ГБ против рабочего дерева 1.44 ГБ, разница **+0.3 %** ⇒ дефект НЕ от пака. ⚠ Границы: в батарейное подмножество каталога мутаций `archguard` НЕ входит (пере-снято оркестратором: 0 упоминаний при 491 записи и 280 в батарее), поэтому кампанию он не трогает — страдает только `make battery`. Родня — ряд **484** (ратифицированный рецепт, не помещающийся в машину, на которой его требуют гонять) | бэкенд | скоро | тест судит инварианты, не загружая весь модуль, либо гейт объявляет свою потребность в памяти и условие, при котором не запускается | замер зоны 17.09, контроли оркестратора | +| 489 | ⚠ **РЕВИЗИЯ ДОКУМЕНТАЦИИ ЗОНЫ БЭКЕНДА (пинг оркестратора №22 от 04.09, 10 пунктов) ЖИВА НА ТРИНАДЦАТЫЙ ДЕНЬ — пере-снято 17.09 приборами, а не перечитыванием.** Пинг сидит семьюдесятью строками в журнале прогресса и адресован ЗОНЕ, которой сейчас нет (слот свободен), поэтому живое уезжает сюда прежде, чем носитель будет свёрнут (условие владельца `D39.261` п.2). **ИЗМЕРЕНО ЧЕТЫРЕ ЖИВЫХ:** (1) `backend/README.md` описывает инвариант канала через ключи, которые ЗАГРУЗКА ОТВЕРГАЕТ — «permissive» 1 хит, а настоящий механизм (метки контента против принимаемых меток) **0 хитов**; (2) оба PUML (`components.puml`, `pipeline.puml`) БЕЗ предупреждающего баннера в шапке, при том что карта доков подаёт их как текущие; (6) ⛔ **тяжелейший: ратифицированная норма зоны висит на ЗАКРЫТОЙ строке** — `backend/docs/DISCLOSURE_LAW_DESIGN.md:219-221` обусловливает себя словами «пока строка бэклога 246 открыта», и сам текст обещает «закроется 246 — оговорка снимается вместе с ней», НО ряд 246 закрыт лендингом (в таблице его нет, журнал решений подтверждает) ⇒ оговорка действует без предмета; (10) пакет `backend/internal/langscreen` существует и лежит на денежном пути вердиктов, а в README о нём **0 упоминаний**. ✅ **ИЗМЕРЕНО ЗАКРЫТЫМ ОДНО:** (7) «семь протухших токен-якорей в `backend/docs/`» — красных якорей с целью в этом каталоге **0** при 327 адресах. ⚠ **НЕ ИЗМЕРЕНО ПЯТЬ** (3 · 4 · 5 · 8 · 9): они про содержание прозы README и требуют чтения, а не грепа; «не измерено» здесь значит именно это, а не «исполнено». ⛔ Правит ЗОНА: `backend/` мне писать нельзя, и тринадцать дней простоя — следствие того, что пинг жил в журнале, а не строкой трекера. Нести в промт следующего бэкенд-пака | бэкенд | скоро | четыре живых пункта исполнены или названы неисполнимыми, пять неизмеренных измерены | пинг №22 04.09, замеры оркестратора 17.09 |