From 32516036da99794f87e8067f7d666d97bcddbd20 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 17 Sep 2026 13:38:42 +0300 Subject: [PATCH] Add a tracker row for the platform half of the settled-earlier field the engine publishes and nothing reads, and refresh the queue totals --- docs/BACKLOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index 48a319f5..f8a7f64b 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). Здесь только долг и его диспозиции. -> - **СЧЁТ ОЧЕРЕДИ на 17.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **370** строк · зона бэкенд **194** строго / **247** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **197** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **СЧЁТ ОЧЕРЕДИ на 17.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **371** строк · зона бэкенд **194** строго / **247** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **198** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора) @@ -406,3 +406,4 @@ | 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 | | 490 | **РАЗРЫВ ОКОН ГЛАВ У БАНКОВЫХ СТРОК НЕ ПРОВЕРЯЕТ НИКТО — страж построен только для ГОЛОСОВ.** Загрузчик отбивает ПЕРЕСЕЧЕНИЕ окон и полисемию (`backend/internal/membank/memseed.go:201-236`), а РАЗРЫВ — `until_ch=3` при следующем `since_ch=5`, то есть глава 4 без закона — не ловится ничем. Готовый образец лежит рядом и построен для другой сущности: `backend/internal/membank/memvoice.go:271`=`func VoiceWindowGaps`, и его докблок объявляет разрыв у голосов ЗАКОННЫМ намеренно (`backend/internal/membank/memvoice.go:268`=`a deliberate gap`), поэтому он логирует, а не роняет. ⚠ **Контроль области напечатан, потому что отрицательный замер без него неотличим от непрочитанного:** в не-тестовых `.go` каталога `membank` — 11 совпадений `windowsOverlap` и 7 хитов `gap` ВНЕ голосов, и все семь про пропуски склонений в пост-чеке, то есть о другом предмете; стража разрыва у банковых строк среди них нет. ⛔ **Чем это стоит качества перевода:** преемник термина собирается тремя отдельными решениями владельца, и опечатка в границе оставляет главу без закона МОЛЧА — редактор переводит её без банка, а замечает это уже читатель книги. Проверка живёт над тем же документом решений: глаголов не добавляет, `DecisionsVersion` не двигает, контракт не трогает — $0. ⚠ Беря у образца форму, взять и его гарантию: намеренный разрыв законен и в сид-файле невидим, поэтому исход — громкая строка оператору, а не отказ загрузки | бэкенд | скоро | разрыв окон у банковых строк называется оператору тем же способом, что у голосов, и запинен посадкой, которая краснеет именно им | `research/35` N-7, замеры оркестратора 17.09 | | 491 | **УЛИКА ПЕРЕЗАГРУЗКИ ХОСТА СУЩЕСТВУЕТ И НЕ ЧИТАЕТСЯ ЗОНОЙ ВОВСЕ — различие «ребут» против «ручной остановки» сегодня ВЫВОДИТСЯ, хотя могло бы быть ФАКТОМ.** Платформа решает судьбу прогона, вышедшего с кодом остановки без записанного намерения, предположением о причине (`platform/internal/runs/reconcile.go:573`=`interruptedBySomeoneElse(l, marker)`), и тот же файл честно говорит, что смысл ОТСУТСТВИЯ записи решается уровнем выше. ⚠ **Замер оркестратора 17.09 (знаменатель напечатан, потому что это отрицательный замер):** имена `btime` · `boot_id` · `BootID` · `InvocationID` · `uptime` дают **по 0 хитов** в не-тестовых `.go` платформы при **88** прочитанных файлах; при этом улика на хосте есть и читается — `/proc/stat` несёт время старта системы, `boot_id` доступен. ⇒ различить перезагрузку от ручной остановки можно было бы фактом, а не асимметрией цен. ⛔ **Почему это НЕ взято в пак 17.09 и довод сильный (сессия зоны, выдача №15):** ошибка в сторону «ребута не было» возвращает дефект на ВЕСЬ хост — терминирование пользовательского менеджера мимо перезагрузки прочиталось бы как ручной стоп и убило бы все прогоны разом, — а выигрыш совпадает с тем, что уже даёт предел перезапусков ряда 398. ⇒ строка заводится, чтобы довод не растворился вместе с отчётом пака, и оживает, если предел окажется недостаточным или если появится второй хост | платформа | когда-нибудь (гейт: предел ряда 398 построен и оказался недостаточен, либо второй хост) | различие ребут/ручная остановка опирается на улику хоста, а не на вывод из кода выхода | замер оркестратора 17.09, довод сессии `textmachine-main-78` | +| 492 | **ДВИЖОК ПУБЛИКУЕТ «РЕШЕНО РАНЬШЕ», А НАРУЖУ ЭТО НЕ ВЫХОДИТ: платформенная половина `settled_earlier` не построена.** Движок отдаёт в проекции банка два аддитивных поля — счётчик `BankConsolidation.settled_earlier` и флаг строки предложения `settled_earlier` (`backend/internal/pipeline/bankexport.go:115` и `:168`), — которыми говорит, что передача решена ПРЕЖНЕЙ покупкой и роли за неё не платили. ⚠ **Замер 17.09 с напечатанным контролем, потому что это отрицательное утверждение:** `settled_earlier` в `platform/` — **0 файлов**, при том что соседнее по секции `never_asked` прибор видит в **ВОСЬМИ** файлах, из них не-тестовых шесть — `platform/internal/ingest/bank.go` (модель и json-форма) · `httpapi/reading.go` · `httpapi/project.go` · `pgstore/readmodel.go` (upsert и select) · **колонка Postgres `platform/internal/pgstore/migrations/00036_bank_read_out.sql:57`**; знаменатель — 261 прочитанный файл зоны (217 `.go`, 44 `.sql`). ⚠ Первая редакция этого ряда писала «в ЧЕТЫРЁХ местах» — число было ЗАНИЖЕНО, потому что мой греп шёл только по `.go` и не видел ни хранилища, ни миграции; пере-снято после поправки сессии `textmachine-main-57`, подтверждено моим прибором по файлам всех типов. ⇒ платформа собирает секцию ПОИМЁННЫМ перечислением полей — включая СХЕМУ БАЗЫ, — и аддитивное поле движка теряется молча, а не доезжает само; цена половины поэтому выше, чем правка проекции: нужна миграция. ⛔ **Почему поле НЕ внесено в канон авансом:** гейт версии сверяет НОМЕР, а не форму, поэтому канон, объявивший поле, которого не отдаёт ни один деплой, прошёл бы зелёным — это дословно класс `PD-399` (канон и деплой разошлись по полям при совпавшем номере). Контракт двигается, когда у поля появится читатель, а не раньше. ⛔ **Чем это стоит продукта:** на экране подписи человек видит строку без пометки, что её передача пришла из прошлой покупки, и читает её как предложение ЭТОГО прогона; у флага `invented` при этом намеренно нет значения на такой строке, так что без соседнего поля отсутствие флага читается как «черновики это предлагали». То есть половина смысла, купленного движком, до платящего не доходит | платформа | скоро | секция консолидации и строка предложения несут `settled_earlier` наружу, поле внесено в канон минором вместе с читателем | замер оркестратора 17.09, движковая половина построена сессией `textmachine-main-57` |