From a6980c5a39953f79b692d9e75c00bc7727c872c8 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 17 Sep 2026 12:00:59 +0300 Subject: [PATCH] Bring the journal head and the near-term plan up to the day: a bulletin for today, a corrected doc count and the pack's state --- docs/NEAR_TERM_PLAN.md | 4 +- docs/PROGRESS.md | 216 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 217 insertions(+), 3 deletions(-) diff --git a/docs/NEAR_TERM_PLAN.md b/docs/NEAR_TERM_PLAN.md index 2ac4110b..70d072a7 100644 --- a/docs/NEAR_TERM_PLAN.md +++ b/docs/NEAR_TERM_PLAN.md @@ -55,7 +55,7 @@ | 7 | ~~полигон~~ | ⛔ **ЗОНА ВНЕ СКОУПА — слово владельца 11.09**; четыре промта уведены в `archive/prompts/` с баннерами | — | снято | | 8 | **бэкенд/деньги** | ⛔ **«ПАДЕНИЕ, КОТОРОЕ ВИДНО»** — четверть COGS в одном механизме (**415**), слепые приборы отказа (**414**, **422**), молчащая подстановка цены. ⚠ Пин цены **413** из пака ВЫНУТ: это данные и отдельное решение | пак, $0 | ✅ **ЗАКРЫТ АКТОМ `D39.251`** (испр. 15.09; дальше — запись 11.09) · ✍️ **НАПИСАН 11.09** — `BACKEND_FAILURE_YOU_CAN_SEE_SESSION_PROMPT.md`; выдаётся СВЕЖЕЙ сессии сразу по закрытии 4 ⛔ **КРИТЕРИЙ ПРИЁМКИ ПАКА — МЕХАНИЗМ, А НЕ ПРОПОРЦИЯ** (поправка старшего коллеги 11.09): лекарство есть распространение ратифицированного образца `D2` п.3 на вторую причину, и оно верно при 25 % и при 5 % — пропорция задаёт очерёдность, не форму. ⇒ судить по строкам «ни одного удвоения без вердикта о вырождении; каждая выброшенная попытка — строкой леджера с причиной», а не по «с 25.4 % до X». Значит прогон B пак не гейтит и паком не гейтится.| | 9 | **платформа+бэкенд** | ⭐ **ХОЛОДНЫЙ ПРОГОН B — платформа → бэкенд → файл, ВТОРОЙ раз.** Уточнение владельца 11.09: спрашивая «перепрогоны нужны», он имел в виду именно сквозной прогон, а не пере-запуск тестов. Покупает ЧЕТЫРЕ вещи, которых нет ни у кого: **(1)** миграция **v17** (`wave_selection`) пака консистентности ни разу не шла на живом прогоне — только в тестах; **(2)** прибор консистентности впервые даст числа с ЖИВОГО прогона, а не с пере-скана сохранённой базы прогона A — сегодня все `I1`/`I2` получены повторным чтением одних и тех же данных; **(3)** платформенный пак (идемпотентный резюм, терминальное состояние) проверяется сквозь, а не юнитами; **(4)** ⛔ **вторая точка по денежной дыре, и она нужна по норме, а не для красоты** — весь довод «четверть денег купила пустоту» стоит на ЧЕТЫРЁХ одиночных розыгрышах, а квирки §3д прямо говорят: смета DeepSeek с одиночного вызова может ошибиться на порядок, сметы строятся на ПОВТОРАХ. ⇒ у числа 25.4 % есть знак и нет величины, пока прогон не повторён. **Цена ≈$0.42 по образцу прогона A, машинный кап ≈$2.5.** ⛔ **ПРЕ-РЕГИСТРАЦИЯ ЗНАМЕНАТЕЛЯ, иначе B ответит числом на другой вопрос** (поправка старшего коллеги 11.09): B — ЕЩЁ ОДИН одиночный прогон, и две точки распределением не станут. Настоящая ценность B не «вторая точка к 25.4 %», а `request_log` ВСЕХ единиц прогона ⇒ **доля выброшенных первых попыток ПО ЕДИНИЦАМ, а не по вызовам.** Это и пре-регистрируется. ⚠ И идёт B **ПАРАЛЛЕЛЬНО** паку о падениях, а не после: они в РАЗНЫХ слотах (бэкенд против платформы), и правило «один промт на зону» их не сталкивает | ≈$0.42 | ✅ **ЗАКРЫТ АКТОМ `D39.252`**, факт $0.396657 | -| 10 | **бэкенд** | ⛔ **БАНК: РЕШЁННОЕ ОСТАЁТСЯ РЕШЁННЫМ** — предмет пере-определён проверкой 15.09. Пак 12.09 «в банк по разнобою» (`archive/prompts/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md`) снят баннером: все термы со `spread ≥ 2` уже в банке (A 9 из 9, B 8 из 8). Настоящий дефект приоритета №1 — пере-решение банка терминологом: на подписи замерено (у неподписанных строк сменились передачи A 12 из 69, B 14 из 66), на каждой следующей покупке глав выведено из кода — отгруженные главы по порядку слотов остаются со старыми передачами (`backend/internal/pipeline/volume.go`, греп `DELIVERY BEFORE REWORK`). Ряды 130 · 330 · 438 · 440 | $0 + центы перекупки банк-ролей | ⛔ **ПРОЕКТ ОРКЕСТРАТОРА ОТОЗВАН 15.09.** «Банк — журнал решений с окнами» (две редакции Fable 5) расходился с 12 пунктами решённого, замеренного и этого же плана и опирался примерно на десятую часть относящегося; улики — `archive/reports/BANK_CONSILIUM_INPUTS_2026-09-15/`. ✅ **КОНСИЛИУМ ОТРАБОТАЛ, акт `D39.253` (16.09).** Итог — `research/35-bank-memory-consilium.md`: банк как решение по уликам с пятью событиями пересмотра, N-1 на построенном фильтре, N-3 на сборке вида, ряды бэклога 441–450. ✅ **СЛОВО ВЛАДЕЛЬЦА ПОЛУЧЕНО 16.09** (`D39.254`): держать решение между покупками — да · при невозможной безродовой форме — перестроить фразу, иначе «как лучше читается» · богаче контекст — да, меру решает замер M4 · голос и ты↔вы — строить. ⚠ **Вопрос об отказе терминолога ПЕРЕ-ОПРЕДЕЛЁН владельцем:** у банк-ролей нет ни ретрая, ни фоллбека (ряды 435, 438), и он считает это дырой ⇒ заведён ряд 451 «умный участок в точке банка», ряд 452 — голос. ✅ **ГРАНИЦЫ ДАНЫ ВЛАДЕЛЬЦЕМ 16.09** — «в границах ратифицированного», и слот бэкенда освобождён приёмкой `D39.255`. ✅ **ПАК 1 ПРИНЯТ 16.09 актом `D39.257`** (29 путей, $0; посылка В1 закрыта замером — 25 из 26 при идентичном входе). Промт написан был 16.09 — `BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md`, пак $0 (громкий отказ при цели без инъекционных текстов до первой траты · отказ роли перестаёт ехать законом · предикат «спорный» как ДВА предиката с заданными знаменателями · носитель посылки «новой улики не было»); круг опровергателя пройден. ✅ **ВЫДАН и ПРИНЯТ 16.09** — акт `D39.257`. Вопросы владельцу, в том числе ряд 130 (`research/34` §4 п.4), ставит его итог; он же решает порядок относительно 5(в). Довод «перекрой глав без якоря пере-решил бы банк платной книги» остаётся входом ✅ **ПЕРЕНОС БАНКА РЕШЁН ВЛАДЕЛЬЦЕМ 16.09 — акт `D39.256`:** в КНИГУ-ПРОДОЛЖЕНИЕ едут ПОДПИСАННЫЕ строки ПЛЮС строки, РЕШЁННЫЕ ДВИЖКОМ; стройка ДВУХЗОННАЯ и ещё не начата — ряд **461**. ⚠ **Эррата 16.09-б:** формулировка «причина смен передачи — якорь» в `D39.256` и `D39.257` СИЛЬНЕЕ замера — измерено лишь отсутствие новой улики во ВХОДЕ, причина остаётся гипотезой, гейт — ряд **466**. Прочее живое банка: ряды **462** · **465**. | +| 10 | **бэкенд** | ⛔ **БАНК: РЕШЁННОЕ ОСТАЁТСЯ РЕШЁННЫМ** — предмет пере-определён проверкой 15.09. Пак 12.09 «в банк по разнобою» (`archive/prompts/BACKEND_WHAT_THE_BANK_IS_MADE_OF_SESSION_PROMPT.md`) снят баннером: все термы со `spread ≥ 2` уже в банке (A 9 из 9, B 8 из 8). Настоящий дефект приоритета №1 — пере-решение банка терминологом: на подписи замерено (у неподписанных строк сменились передачи A 12 из 69, B 14 из 66), на каждой следующей покупке глав выведено из кода — отгруженные главы по порядку слотов остаются со старыми передачами (`backend/internal/pipeline/volume.go`, греп `DELIVERY BEFORE REWORK`). Ряды 130 · 330 · 438 · 440 | $0 + центы перекупки банк-ролей | ⛔ **ПРОЕКТ ОРКЕСТРАТОРА ОТОЗВАН 15.09.** «Банк — журнал решений с окнами» (две редакции Fable 5) расходился с 12 пунктами решённого, замеренного и этого же плана и опирался примерно на десятую часть относящегося; улики — `archive/reports/BANK_CONSILIUM_INPUTS_2026-09-15/`. ✅ **КОНСИЛИУМ ОТРАБОТАЛ, акт `D39.253` (16.09).** Итог — `research/35-bank-memory-consilium.md`: банк как решение по уликам с пятью событиями пересмотра, N-1 на построенном фильтре, N-3 на сборке вида, ряды бэклога 441–450. ✅ **СЛОВО ВЛАДЕЛЬЦА ПОЛУЧЕНО 16.09** (`D39.254`): держать решение между покупками — да · при невозможной безродовой форме — перестроить фразу, иначе «как лучше читается» · богаче контекст — да, меру решает замер M4 · голос и ты↔вы — строить. ⚠ **Вопрос об отказе терминолога ПЕРЕ-ОПРЕДЕЛЁН владельцем:** у банк-ролей нет ни ретрая, ни фоллбека (ряды 435, 438), и он считает это дырой ⇒ заведён ряд 451 «умный участок в точке банка», ряд 452 — голос. ✅ **ГРАНИЦЫ ДАНЫ ВЛАДЕЛЬЦЕМ 16.09** — «в границах ратифицированного», и слот бэкенда освобождён приёмкой `D39.255`. ✅ **ПАК 1 ПРИНЯТ 16.09 актом `D39.257`** (29 путей, $0; посылка В1 закрыта замером — 25 из 26 при идентичном входе). Промт написан был 16.09 — `BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md`, пак $0 (громкий отказ при цели без инъекционных текстов до первой траты · отказ роли перестаёт ехать законом · предикат «спорный» как ДВА предиката с заданными знаменателями · носитель посылки «новой улики не было»); круг опровергателя пройден. ✅ **ВЫДАН и ПРИНЯТ 16.09** — акт `D39.257`. Вопросы владельцу, в том числе ряд 130 (`research/34` §4 п.4), ставит его итог; он же решает порядок относительно 5(в). Довод «перекрой глав без якоря пере-решил бы банк платной книги» остаётся входом ✅ **ПЕРЕНОС БАНКА РЕШЁН ВЛАДЕЛЬЦЕМ 16.09 — акт `D39.256`:** в КНИГУ-ПРОДОЛЖЕНИЕ едут ПОДПИСАННЫЕ строки ПЛЮС строки, РЕШЁННЫЕ ДВИЖКОМ; стройка ДВУХЗОННАЯ и ещё не начата — ряд **461**. ⚠ **Эррата 16.09-б:** формулировка «причина смен передачи — якорь» в `D39.256` и `D39.257` СИЛЬНЕЕ замера — измерено лишь отсутствие новой улики во ВХОДЕ, причина остаётся гипотезой, гейт — ряд **466**. Прочее живое банка: ряды **462** · **465**. ⭐ **ЗАКАЗАН 17.09: промт «РЕШЁННОЕ НЕ ПЕРЕ-СПРАШИВАЕТСЯ» ВЫДАН** сессии `textmachine-main-57` (выдача №14, `docs/BACKEND_SETTLED_STAYS_SETTLED_SESSION_PROMPT.md`, $0). Строит базис решённого как ИСТОЧНИК ОТВЕТОВ (ряд 130) и стража разрыва окон (ряд 490); замер M1 идёт ПЕРВЫМ блоком, и носитель не пишется, пока оркестратор не принял форму предиката по числам. ⚠ **Состав сузился против проекта консилиума, и это измерено, а не решено вкусом:** N-4 и Б-5 ПОСТРОЕНЫ паком `D39.257`; N-6 гейчен разморозкой фронта (ряды **214** · **221**); Б-2 протух — токен «stops loudly» живёт только в тесте; N-3 и стратифицированный отбор вынесены НАРУЖУ, каждый со своим замером. Промт прошёл два рубежа (механическая сверка 13 блоков и субагент-опровергатель: 12 находок, 9 денежных, все внесены) и всё равно был исправлен релеем после выдачи — материал замера указывал на другую книгу. | ⛔ **ПОЧЕМУ 4 ВСТАЛ ПЕРЕД 5 (решение 11.09 по мерилу владельца).** Мерило — «качественный КОНСИСТЕНТНЫЙ перевод длинных книг». Аудит банка 11.09 показал, что **книжного вопроса о консистентности не задаёт ни один @@ -77,7 +77,7 @@ (прибор ключуется на поверхность и вернёт ноль по построению). Носитель — ряд **477**. 2. ⛔ **ЧЕТЫРНАДЦАТЬ НОТ ОРКЕСТРАТОРА (Д-1…Д-18, живых 17 рядов, часть склеивается)** — расхождения ратифицированного, найденные консилиумом. Срок в его плане — «сразу». ⚠ **ПЕРЕ-СНЯТО 17.09: написаны ШЕСТЬ эррат (17.09-а…-е), и ими закрыты девять строк консилиума** — Д-4 · Д-5 · Д-7 · Д-8 · Д-9 · Д-12 · Д-14 · Д-16 · Д-18, плюс Д-13 ОТКЛОНЁН (доктрины под названным именем в носителе нет) и Д-11 закрыт `D39.261`. **Остаток — четыре строки в двух нотах:** Д-1+Д-2 (производитель проактивного `hidden`: роль, названная двумя ратифицированными носителями, в движке отсутствует — 0 файлов из 466 при контроле 188) и Д-6+Д-17 (замена недостижимых условий; сужение области `D39.144` п.1 — НЕ отмена). ⚠ Д-3 разобран и ОТКЛОНЁН в предъявленной форме (его адрес указывал в несуществующий путь, а по верному ветка статуса не касается), но проверка вскрыла другое и оно заведено рядом **487**. ✅ **ЗАКРЫТО 17.09 актом `D39.263`** (лендинг `10d245a`): обе ноты написаны и залендены. Д-1+Д-2 — производитель проактивного `hidden` есть ЧЕЛОВЕК через сид, детектора не вводить; Д-6+Д-17 — условия ПРИОСТАНОВЛЕНЫ, а не отменены, и сужение области прямо названо не-отменой; Д-3 ОТКЛОНЁН, на его месте заведён ряд **487**. ⇒ **предусловие 2 снято целиком, работа оркестратора по расхождениям консилиума исполнена.** -⇒ **ИЗ ТРЁХ ПРЕДУСЛОВИЙ ОСТАЛОСЬ ДВА, И ОБА — РАБОТА ЗОНЫ, А НЕ ОРКЕСТРАТОРА** (пере-снято 17.09): замер M2 переопределён как правка `membank` (ряд **477**, вес «скоро»), стройка отбора — ряд **449**. ⛔ **Испр. 17.09: прежняя редакция писала «с уже снятым гейтом» — неверно.** Ответ владельца закрыл предусловие В4, но гейт стройки принадлежит `D39.50` («до него kwic не трогать») и владельцем не затрагивался. ⇒ ВНУТРИ пака по `N-1` логично заказывать замер M2; стройка отбора — отдельный пак со своим замером под санкцию, а не блок этого. +⇒ **ИЗ ТРЁХ ПРЕДУСЛОВИЙ ОСТАЛОСЬ ДВА, И ОБА — РАБОТА ЗОНЫ, А НЕ ОРКЕСТРАТОРА** (пере-снято 17.09): замер M2 переопределён как правка `membank` (ряд **477**, вес «скоро»), стройка отбора — ряд **449**. ⛔ **Испр. 17.09: прежняя редакция писала «с уже снятым гейтом» — неверно.** Ответ владельца закрыл предусловие В4, но гейт стройки принадлежит `D39.50` («до него kwic не трогать») и владельцем не затрагивался. ⇒ ⚠ **Испр. 17.09 повторно, при выдаче пака: НИ ОДНО из двух внутрь пака не вошло, и это решение измерено.** Замер M2 — предусловие механизма N-3 («одна строка закона на ключ»), а N-3 в пак не взят; стройка отбора ждёт замера M4 под санкцию. Пак по `N-1` несёт СВОЙ замер M1 первым блоком. ⇒ оба ряда остаются работой зоны, но следующими паками, а не блоками этого. 3. **Стройка стратифицированного отбора** (ряд **449**) — предусловие В4 закрыто ответом владельца (`D39.254` п.4: «да, богаче контекст, но насколько — не знаю»), и тело ноты тут же уточняет: «санкция на замер M4 дана; величина решается замером, а не словом». ⛔ **Испр. 17.09: гейт НЕ снят, и прежняя редакция этого пункта утверждала обратное.** Гейт принадлежит `D39.50` («до него kwic не трогать»), владелец его не касался, а §4 итога `research/35` называет M4 в нынешней постановке НЕ снимающим его. ⇒ стройка ждёт замера M4 под санкцию и в пак по `N-1` не входит. diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 529fa34a..05b87363 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-16, голова D39.264 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **98** живых дока в `docs/` (пере-счёт 17.09 после выноса каталога консилиума; прежние 97 разошлись с фактом 144 и это заметил ревизор, а не гейт) (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, **12** в `backend/docs`, **7** в `frontend/docs` (испр. 17.09: стояло 9) — ⚠ ⚠ испр. 11.09: из 97 ВРЕМЕННЫХ **три** (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 111 (major 1) (major 1), всего рядов 469 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-17, голова D39.264 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №23** (единственный носитель — здесь; роль передана 06.09, №22 закрыт нотой передачи D39.217; ⚠ испр. 06.09: коммит передачи `c992ee5` бампнул голову и НЕ тронул номер — гейта на номер очереди нет вовсе, `counts.py` сверяет только голову, поэтому носитель разошёлся молча). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ИСПОЛНЕН, испр. 08.09 (висел как «первым» неделю после исполнения):** (0а) ревизия документации на протухшее ОТРАБОТАНА 01.09 воркфлоу `docs-staleness-revision-A` (15 срезов), провенанс находок — `D39.185`; (0б) планы доработок в бэкенд и платформу — исполняются ПАКАМИ, за 07–08.09 закрыты два движковых (`D39.225`, `D39.226`); (0в) вынос неактуального в архив идёт батчами `DOC_CLEANUP_PLAN.md` (Б14/Б15/Б17 живы). ⇒ строка ниже — не заказ, а история: (0а) ревизия документации на ПРОТУХШЕЕ — по всем зонам; (0б) планы доработок в БЭКЕНД и ПЛАТФОРМУ; (0в) вынос неактуального в АРХИВ (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **95** живых доков в `docs/` (⚠ испр. 17.09 вечером: стояло **98**, и это был ЛОЖНЫЙ литерал, а не потеря файлов — сверка дерева со срезом головы предписанной здесь же командой дала 95 в ОБЕИХ сторонах, ни одного файла не ушло и не пришло; ошибся сам пере-счёт, а прибор это число не сторожит и потому ложь прожила день. В 95 уже входит промт выдачи №14; пере-счёт после выноса каталога консилиума; прежние 97 разошлись с фактом 144 и это заметил ревизор, а не гейт) (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, **12** в `backend/docs`, **7** в `frontend/docs` (испр. 17.09: стояло 9) — ⚠ ⚠ испр. 11.09: из 97 ВРЕМЕННЫХ **три** (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 111 (major 1) (major 1), всего рядов 469 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). > ⛔ **ПЯТЬ ПОТОКОВ РАБОТЫ — состояние на 07.09 (пере-снято лендингами смены №23).** > **(1) ПОЛИГОН — «ремонт прибора»** (`docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md`, строки 319 · 300 · 265 · 143): > ⚠ **ЕДИНСТВЕННЫЙ ПОТОК, НЕ СДВИНУВШИЙСЯ ЗА СМЕНУ — сессия по промту так и не стартовала.** Блокирующая линза @@ -13,6 +13,8 @@ > `3d90943`). Строки 285 · 305 · 325 закрыты. ⚠ **Синхронный разрез приёма принят ПОСТРОЕННЫМ, НО НЕ ГОТОВЫМ** — > сработало правило остановки (9 major из 11 в одном механизме), десять пунктов несёт строка **332**; ложный > инвариант бюджета заландён осознанно (окно лжи 8 секунд при дефолте в 16 минутах, ломается идемпотентность). +> **(27) ✅ ТРИ АКТА 17.09 И ПАК ОЧЕРЕДИ №14 ВЫДАН — `D39.262` · `D39.263` · `D39.264`.** Платформенный пак читателя предложений банка принят (`ffd3751`, 21 путь, контракт 0.16.0): на экране подписи было 0 терминов при 69 и 66 предложенных, стало 69 и 66. Бэкенд-пак лестницы попытки принят (`10d245a`, 18 путей, $0): петля вынесена в общий контур, банк-роли подключены к вердикту, который движок вычислял и выбрасывал. Нотой `D39.263` закрыт остаток консилиумных расхождений: производитель проактивного `hidden` — ЧЕЛОВЕК через сид; условия Д-6/Д-17 ПРИОСТАНОВЛЕНЫ, а не отменены; Д-3 ОТКЛОНЁН вторым отказом. ⭐ **Заказан главный механизм банка:** промт «РЕШЁННОЕ НЕ ПЕРЕ-СПРАШИВАЕТСЯ» выдан сессии `textmachine-main-57` (выдача №14), эхо принято, записка-план в секции «Бэкенд» ниже. Состав сузился против проекта консилиума: N-4 и Б-5 ПОСТРОЕНЫ паком `D39.257`, N-6 гейчен разморозкой фронта (ряды 214 · 221), Б-2 протух, а N-3 и стратифицированный отбор вынесены наружу со своими замерами. ⛔ **Исправлены два МОИХ ложных утверждения, которыми уже пользовались бы другие:** ряд 449 и этот план писали «гейт снят словом владельца» — слово дало санкцию на ЗАМЕР M4, а гейт принадлежит `D39.50` и владельцем не затрагивался; пинг зоне бэкенда нёс адреса, ВЫЧИСЛЕННЫЕ сдвигом, вместо найденных поиском. ⚠ И третье, найденное советчиком уже после выдачи: материал замера в промте указывал на другую КНИГУ (`book_id` `guzhenren-coldrun-v16`, глоссарий 53) вместо платного прогона A (глоссарий 69, $0.419423) — исправлено релеем, сессия подтвердила эхом. **Якоря:** пере-нацелено 20, линтер 42 → 17; остаток назван поимённо (8 с принятой диспозицией, 4 в чужих зонах, 5 закрыты эрратой 17.09-и и четвёртой пометкой в `research/35`). Заведён ряд **490** — страж разрыва окон глав у банковых строк. +> > **(26) ✅ ДВА ПАКА 16.09 ПРИНЯТЫ, БАНК ПЕРЕЕЗЖАЕТ В КНИГУ-ПРОДОЛЖЕНИЕ — акты `D39.253`–`D39.257`.** `D39.253` — консилиум банка памяти закрыт, итог `research/35-bank-memory-consilium.md`; `D39.254` — пять решений владельца по нему. `D39.255` — движковый пак «КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО» принят (29 путей, $0): ⛔ три опубликованных ключа качества уехали смыслом (`ProcessedUnits`, черновиковый и эдит-числитель эха), и пере-классификация `cancelled` меняет счёт слотов на книгах, которые УЖЕ в поле — оба названы остатком, не умолчаны. `D39.257` — пак «БАНК ЗА $0» принят: громкий отказ, когда цель есть, а инъекционных текстов нет, — ДО первой траты; отказ роли перестал ехать в банк законом и разведён с мусором; два предиката «спорный» построены без платного потребителя. ⭐ Судилось ПЯТЬЮ приборами (батарея 24/24, мой собственный мутационный прогон, три оси аудита вне сдачи, пере-снятие чужих чисел, денежная ось: 0 платных путей при контроле 192 прочитанных файла). ⭐ **`D39.256` — решение владельца: банк переезжает в КНИГУ-ПРОДОЛЖЕНИЕ ПОДПИСАННЫМ ПЛЮС РЕШЁННЫМ ДВИЖКОМ**, стройка двухзонная — ряд **461**. ⚠ **Две эрраты того же дня, обе к моим собственным утверждениям:** 16.09-а — число «48 конфигов книг» я взял из чужого отчёта, не пере-мерив (верно 24), и каталожный прогон закрыт числом 267/267; 16.09-б — ноты `D39.256` и `D39.257` утверждают ПРИЧИНУ, которой замер не давал («причина смен передачи — якорь»), измерено лишь отсутствие новой улики во ВХОДЕ ⇒ причина остаётся ГИПОТЕЗОЙ, гейченной рядом **466**. Ряды: закрыты **291** · **379** · **441** · **460**; заведены **457–468**; **445** сужен наполовину. > **(25) ✅ ПЛАТФОРМЕННЫЙ ПАК «ОТВЕТ ДВЕРИ НЕ ЗАВИСИТ НИ ОТ ПОРЯДКА, НИ ОТ ВЕЗЕНИЯ» ПРИНЯТ С ДВУМЯ ДОФИКСАМИ, акт `D39.250`**, контрактный минор **0.15.0** (27 путей, 24 новых теста, $0). ⭐ Предмет ПЕРЕ-ОПРЕДЕЛЁН замером зоны ДО первой правки: не редкая гонка под нагрузкой, а ОРДИНАРНЫЙ путь — любой резюм живого прогона отвечает 409 детерминированно. ⛔ **Оба денежных предохранителя оказались проверены не тем прибором** (гард судил шаблон, а проба рендерит свой $0-пайплайн строкой выше; рецепт проверен текстовым сканом вместо загрузчика — `EXIT=10`), и ответ лежал в дереве комментарием того же хелпера. ⭐ Лечение — СНОС рецепта, а не починка: `П-22` и `П-23` схлопнулись, мина стережётся по умолчанию. Закрыты `PD-448` · `PD-466` · `PD-162` · `PD-139` · `П-22` · `П-23`; живое — эскроу `П-18` и одно названное слепое пятно > **(24) ✅ БЭКЕНД-ПАК «КОНСИСТЕНТНОСТЬ, КОТОРУЮ МОЖНО ПРЕДЪЯВИТЬ» ПРИНЯТ С ДОФИКСОМ, акт `D39.249`** (26 путей, $0). ⭐ **Приоритет №1 владельца впервые ИЗМЕРИМ по тексту, который читает человек:** два инварианта по ОТГРУЖЕННОМУ тексту с печатаемыми знаменателями, секция `BOOK CONSISTENCY` в отчёте сборки. ⛔ Первый круг приёмки дал ШЕСТЬ выживших посадок из шести — худшая оставляла прибор без провода к прогону. Порядок колонок ратифицирован и отменён в тот же день; правило и два триггера пере-открытия — ряд **406**. Каталог **169/169 RED, выживших 0** (прогон оркестратора: зону убивал потолок cgroup, 26 убийств `CONSTRAINT_MEMCG`). Ряды: закрыты 406 · 418; наполовину 407 · 417 · 419; не закрыт 408 (мотив опровергнут замером). Новые — 425–427 · 428 · 431 · 432 @@ -217,6 +219,218 @@ ⚠ Ниже точки реза якорей не было ни одного (пере-снято прибором перед выносом), так что больше у вас ничего не сдвинулось. +#### ЗАПИСКА-ПЛАН пака «РЕШЁННОЕ НЕ ПЕРЕ-СПРАШИВАЕТСЯ» (17.09, сессия `textmachine-main-57`). До первой правки кода, по §7 промта + +**Деньги: $0.** Платных вызовов моделей пак не делает. Всё ниже снято чтением дерева и купленного сырья +прогонов A и B (только копии; оригиналы не открывались ничем). + +##### 0. Материал замера — ИСПРАВЛЕН против промта, и исправление денежное + +Промт называл прогоном A `tm-coldrun-a/evidence/v16-readonly/project.db`. Это **другая книга** +(`book_id: guzhenren-coldrun-v16`, и её же `book.yaml` говорит `title: … (копия для счёта форм)`). +Пере-снято мной по пяти базам одной командой (`python3` + `sqlite3` `mode=ro`; поля `count(*)` по +`glossary` и `checkpoints`, `sum(cost_usd)`, `max(version) from schema_version`): + +| база | book_id | glossary | статусы | чекпойнты | Σ cost_usd | схема | +|---|---|---|---|---|---|---| +| `evidence/v16-readonly` — ОТВЕРГНУТА | `guzhenren-coldrun-v16` | 53 | 41 draft + 12 auto, **0 approved** | 50 | 0.436110 | 16 | +| `tm-coldrun-a/stand/books/bk_ROEHZBD46ALFI43E` — **прогон A** | `bk_ROEHZBD46ALFI43E` | **69** | 67 draft + **2 approved** | 33 | **0.419423** | 16 | +| `tm-coldrun-b/stand/books/bk_NH6275ZIRFFTLZHG` = `evidence/paid-final-project.db` — **прогон B** | `bk_NH6275ZIRFFTLZHG` | 66 | 64 draft + **2 approved** | 34 | 0.396657 | 18 | + +⛔ **Почему это не «поправка адреса», а спасённое число.** У отвергнутой базы подписанных строк **ноль**, у +обеих настоящих — по **две** (`方源` и `古月山寨`, они же в `bk_*.mined-delta.yaml` обоих прогонов). Класс +пере-спроса «родня подписанных» уехал бы в отчёт **непопулированным по материалу, где его физически нет**, и +ноль читался бы как замер. Это тот самый отрицательный замер, не доказавший, что спросил существующее. + +⚠ Условия работы с сырьём, пере-снятые мной, а не принятые на слово: +- копии сняты `cp -a` каталогами целиком (с сайдкарами, `-wal`, `-shm`); `project.db-wal` = **0 байт** у обоих, + то есть копия одного файла и так была бы актуальна — проверено, а не предположено; sha256 баз оригинал↔копия + совпали (A `527ebba330d88eda`, B `90097e39ca6ffa8e`); +- схема A — **16** при голове 18 (ряд **475**): `OpenReadOnly` её отвергнет, `Open` мигрирует. Аддитивность + миграций пере-снята мной по телу `backend/internal/store/migrate.go`: v17 — `CREATE TABLE IF NOT EXISTS wave_selection` + плюс индекс, v18 — `ALTER TABLE request_log ADD COLUMN reasoning_in_completion`; разрушающих глаголов ноль, + единственное совпадение `drop` во всём файле — слово в ПРОЗЕ комментария (контроль: в файле 717 строк, + `create table if not exists` — 17, `add column` — 21, то есть прибор файл прочёл); +- `book.yaml` обоих прогонов ссылается на `/home/ubuntu-26/…`, которого на машине **НЕТ** (`ls -d` → `No such + file or directory`); работаю на копии `book.yaml` с путями в зеркала прогонов. Значения `contrast_path`, + модели банк-ролей и `kwic_*` печатаю рядом с числами — иначе «тихо взялись конфиги головы» неотличимо от + «взялись конфиги прогона»; +- исходник обоих прогонов байт-идентичен (`sha256 ed870ba6065ce3eb…`, 17564 байта), декодирую его не харнессом, + а движковым `ingestSource` + `chunk.SplitChunksWithChapters`. + +##### 1. Форма носителя — ТАБЛИЦА ХРАНИЛИЩА, аддитивной миграцией. Довод + +Консилиум писал букву «файл рядом с базой» (`bank-basis.yaml`). **Беру таблицу**, и довод не про вкус: + +1. **Роль носителя в онтологии.** Файл рядом с базой (`auto-bank`) принадлежит роли **ИСТОЧНИКИ** — тому, из + чего пересобирается вид (`docs/architecture/18-bank-ontology.md:15`=`**ИСТОЧНИКИ** — то, из чего банк собирается`). + Базис источником не является: из него не собирается ни одна строка банка, его читает предикат. Класть + память решений в каталог источников значит завести источник, который ничего не порождает, — а онтология + судит носитель с несовпавшей ролью так же строго, как проекцию без читателя. + ⛔ **ИСПР. (поймал оркестратор, опора была моя и ложная).** Первая редакция этого пункта опиралась на + «у класса „ПАМЯТЬ РЕШЕНИЙ“ уже есть построенный член, и он таблица — память флажка». Это НЕВЕРНО, и + пере-снято мной: «ПАМЯТЬ РЕШЕНИЙ» живёт ровно в одном месте живого дерева — эррата 17.09-д в шапке + журнала решений (`docs/architecture/05-decisions-log.md:227`=`а читает денежный предикат ДО первого платного вызова`), + и заводит она НОВЫЙ класс ИМЕННО ПОТОМУ, что память флажка подписана у́же («что стоп уже предъявлял», + писатель — стоп). ⇒ у моего класса построенных членов нет, он первый, и опираться было не на что. + Вывод «таблица» от этого не меняется — он держится на роли, а не на прецеденте. ⚠ Контроль замера + напечатан: «ПАМЯТЬ ФЛАЖКА» нашлась в 3 файлах из 132 прочитанных прибором, то есть прибор искал в живом + дереве, а не в пустоте. +2. **Деньги.** Предикат — денежный гейт перед первым платным вызовом. Файл рядом с базой правится рукой и + ничем не отбивается; строка таблицы — нет. +3. **Перенос в книгу-продолжение** (`D39.256`, ряд **461**) переносит подписанное ПЛЮС решённое движком. Решённое, + живущее в базе, переносится тем же механизмом, что и глоссарий; отдельный файл потребовал бы своего. + +⛔ **Что у образца НЕ берётся вместе с формой — называю, потому что копировать механизм и не перенести его +гарантию здесь уже стоило пака:** +- у образца набор **только РАСТЁТ, удаления нет намеренно**. Базису это НЕ подходит: строка, решённая заново, + обязана ЗАМЕНИТЬ прежнюю запись, иначе предикат будет сверяться с протухшим отпечатком. ⇒ `INSERT … ON + CONFLICT DO UPDATE`, и это **новое свойство**, а не наследованное; +- **общей транзакции с чекпойнтами у образца НЕТ** — пере-снято мной: слово `checkpoint` в + `backend/internal/store/stopmemory.go` встречается **0** раз при 55 строках файла. Я такой транзакции тоже не строю; + окно краша закрывается ПОРЯДКОМ записи (см. §3), а не атомарностью с чужим носителем. + +##### 2. Форма отпечатка + +Отпечаток — хеш того, что читает роль, в форме, **инвариантной к способу отбора окон**: + +| компонента | берётся | почему | +|---|---|---| +| версия схемы отпечатка | константа | смена формы обязана обнулять набор ОСОЗНАННО и один раз | +| `key`, эвристический тип майнера, `aliases`, `related`, `evidence` | из кандидата | это вход роли; тип берётся ЭВРИСТИЧЕСКИЙ, а не классификаторский, иначе ради отпечатка классификатор оплачивался бы каждую покупку | +| окна вокруг **ВСЕХ** вхождений ключа в нормализованном исходнике, в порядке документа, ширина `kwicWidth` | из исходника | ⚠ не `c.KWIC`: тот есть ПЕРВЫЕ `maxPer` вхождений (`backend/internal/terminology/terminology.go:340`=`func AttachKWIC`), то есть подмножество, выбранное сегодняшней ручкой | +| якоря канона ЭТОГО кандидата, **без капа** | `CanonFor([]Candidate{c}, canon, len(canon))` | `CanonFor` принимает батч (`backend/internal/terminology/terminology.go:856`=`func CanonFor(batch []Candidate`), и отпечаток по батчу вернул бы зависимость от состава | +| **чего НЕТ:** варианты черновиков, `freq`, `since_ch`, номер главы, состав батча, кап окон | — | варианты уходят из ТРИГГЕРА, оставаясь УЛИКОЙ на листе; номер главы исключён, чтобы перекрой не обнулял базис | + +**Ширина — пар-данное, не константа Go.** Беру её у `terminologyOpts()`, который резолвит явный конфиг → данные +пары → движковое умолчание. Константа в Go стала бы единственной шириной и была бы пар-слепой на ДЕНЕЖНОМ +предикате, что прямо запрещено `D39.50` п.4. ⚠ Замер сегодняшнего состояния с контролем: `terminology.txt` в +langpacks — **0 файлов** при **16** прочитанных прибором файлах, и то же в обоих зеркалах прогонов ⇒ сегодня +везде работает движковое умолчание **40 рун**, и пар-данность механизма сегодня не исполняется ни одной парой. +Ответ на ревью-вопрос канона: пара, которой в репозитории нет, меняет ширину своим `terminology.txt` **без правки Go**. + +**Три сужения, которые называю сам, потому что они невидимы:** +1. **Роль видит якорь БАТЧА, отпечаток — якорь КАНДИДАТА.** Это намеренно: замер консилиума показал батч, где + якорь не относился ни к одному из шести сменившихся терминов и попал туда из-за соседей. Мы сознательно НЕ + пере-спрашиваем термин из-за чужого якоря. +2. **Окна считаются по исходнику целиком, а не по чанкам.** Чанковые окна усекались бы на границе чанка ⇒ + отпечаток зависел бы от кроя. Инвариантность к перекрою — заявленное свойство, и достигается она здесь. +3. **Растущая книга.** Дописанные главы добавляют вхождения ⇒ отпечаток терминов, встречающихся в новом тексте, + МЕНЯЕТСЯ, и они пере-спрашиваются; термины, которых в дописанном нет, остаются решёнными. Это поведение по + построению, а не сторож. ⚠ Сторож «хеш исходника разошёлся — кричим» я **строить не намерен** (см. §6), + и цену этого поведения замерю числом: усечение исходника до глав 1–2 против полных 1–3 даёт долю терминов, + чей отпечаток уехал, — это прямой ответ на открытый вопрос владельца, а не оценка. + +##### 3. Две границы записи и порядок + +Писатель **ОДИН — прогон**; выходных границ у него **две**: `backend/internal/pipeline/bookrun.go:258`=`r.exportBank(ctx, "run-finished")` +(под `backend/internal/pipeline/bookrun.go:254`=`if err == nil {`) и `backend/internal/pipeline/mining.go:270`=`bank-mining/signature-stop`. +Одной мало по коду: стоп подписи возвращается ЗНАЧЕНИЕМ-ОШИБКОЙ (`backend/internal/pipeline/waverun.go:185`=`return nil, &WaveSignatureStop{`), +то есть до `run-finished` такой прогон не доходит и резюм после подписи оплатил бы весь проход. + +**Порядок на границе стопа:** карта → таблица стопа → проекция банка → **базис** → память флажка. +Довод берётся у самого кода: `backend/internal/pipeline/mining.go:271`=`a crash between the two costs one benign re-stop` — +последней пишется запись, чья потеря ДЕШЕВЛЕ. Потеря памяти флажка стоит одного доброкачественного стопа; +потеря базиса — пере-покупки банк-ролей из ПОЖИЗНЕННОГО потолка (ряд **356**). ⇒ базис раньше. +⛔ Писать базис сразу после платного прохода, ДО развилки, нельзя: базис на краш-резюме сожмёт состав батчей, +чекпойнты не найдутся, и резюм перекупит оплаченное. +**Ветка отказа:** стоп остаётся стопом, а неудача записи базиса **кричит** — это денежное событие. + +##### 4. Таблица читателей ответа — кто получает своё, когда роль не спрашивали + +⛔ **Базис — ИСТОЧНИК ОТВЕТОВ, а не фильтр,** и подставляет он **консолидированную** передачу, а не любую +непустую: `backend/internal/miner/miner_emit.go:274`=`The mode turns on the CONSOLIDATED dst only, never on a raw` +объясняет, почему режим `draft` включается только ею. + +| читатель | адрес | что получает | +|---|---|---| +| `attachConsolidatedDst` → режим эмиссии | `backend/internal/pipeline/terminologist.go:1291`=`Terms the role did not answer are left untouched` | передачу ⇒ `draft` вместо отката к догадке куска | +| `attachClassifiedType` / `attachClassifiedGender` | `backend/internal/pipeline/terminologist.go:1306`=`attachClassifiedGender stamps` | тип и род из базиса | +| `consolidatedRows` → `ConsolidationKeyConflicts` | `backend/internal/pipeline/terminologist.go:646`=`membank.ConsolidationKeyConflicts(consolidatedRows(cands, out), bank)` | судится, см. решение ниже | +| `CanonConflicts` | `backend/internal/pipeline/terminologist.go:624`=`terminology.CanonConflicts(cands, out, canon)` | судится, см. решение ниже | +| `ConsolidationConflicts` (§G2, свои против своих) | рядом, тот же цикл | судится | +| `labelRows` → `TypeLabelMismatches` | там же | судится | +| счётчики `Consolidated`/`Declined`/`Unanswered` | `backend/internal/pipeline/terminologist.go:618`=`res.Consolidated++` | ⛔ НЕ вливать базисные в общий набор до цикла счёта: поле сменит смысл без единой строки об этом | +| таблица стопа и её сайдкар | `backend/internal/pipeline/mining.go:502`=`row.Invented = dst != "" && !proposedByDrafts(dst, c.Variants)` | отдельное состояние, см. ниже | +| очередь спорных | `backend/internal/pipeline/stopcontest.go:75`=`if r.SettledByBank` | ⛔ решается ОТДЕЛЬНО, не наследуется по совпадению имени | +| проекция банка наружу | `backend/internal/pipeline/bankexport.go:118`=`NeverAsked: t.BankSettled` и `backend/internal/pipeline/bankexport.go:251`=`Contradicts: row.Contradicts, BankHolds: row.BankHolds` | АДДИТИВНОЕ поле, см. §5 | + +##### 4а. РЕШЕНИЕ по двум проверкам спора (развилка §4.2 промта): **ДА, базисный ответ ими судится** + +Довод механизменный, а не вкусовой, и каждая половина проверена чтением: +- `ConsolidationKeyConflicts` **пропускает собственную неподписанную строку движка на том же ключе + уникальности** (`backend/internal/membank/memseed.go:888`=`if IsEngineUnsigned(b) && b.Src == c.Src`). Базисный + ответ — ровно она ⇒ ложного спора с самим собой не возникает **по построению**. Срабатывает проверка только + против ЧУЖОЙ строки — подписанной или с другим окном, — а это и есть нужная владельцу метка; +- `CanonConflicts` срабатывает только при СТРОГОМ вхождении подписанного исходника в ключ кандидата + (`strings.Contains(c.Key, n.Src)`), а подписанные строки входят в отпечаток (§2, якоря канона без капа, + и отношение `CanonFor` ШИРЕ отношения `CanonConflicts` — вхождение в обе стороны плюс общие знаки). ⇒ у + базисно-решённой строки набор канона по определению не менялся, и вердикт тот же, что на покупке, которая + её купила: это НЕ новый шум. А если подпись родни появилась — отпечаток уехал, и строка пере-спрошена + ПЛАТНО, то есть проверка судит свежий ответ. + +Альтернатива («нет, не судится») убирает метку у того самого населения, ради которого фильтр сделан +двух-условным, и лист замолчал бы о настоящем расхождении только потому, что ответ пришёл из памяти. +Обе проверки $0 и никогда не гейт. + +##### 4б. РЕШЕНИЕ по `Invented` и очереди спорных + +`Invented` сегодня значит «передачу не предлагал ни один черновик». Базисная передача черновиками ЭТОЙ покупки +не предлагалась ⇒ сегодняшняя формула повесила бы на канон книги ложное «выдумано движком». ⇒ строка получает +**собственное состояние** (`SettledByBasis`), `Invented` для неё не вычисляется, а рендеры печатают базисную +метку вместо «INVENTED». Очередь спорных: сегодняшний `SettledByBank` молча выносит строку из очереди, потому +что у неё «банк держит поверхность и все черновики согласны»; у базисной строки **обе половины ложны**, поэтому +она из очереди НЕ выносится — спор о ней решается на общих основаниях. + +##### 5. Наружу — аддитивное поле, и трёх лгущих фраз это касается тоже + +`never_asked` сегодня равно числу снятых банком и значит «сид держит поверхность и все черновики согласны». +Базисные строки туда класть нельзя без смены смысла ⇒ **аддитивное поле проекции** (минор контракта; пинг +платформе даёт оркестратор). Три фразы, которые для базисной строки лгут ДОСЛОВНО обеими половинами и потому +правятся вместе с полем: `backend/cmd/tmctl/render.go:282`=`the bank already renders those surfaces and every` · +`backend/cmd/tmctl/render.go:328`=`NOT ASKED: the bank already renders this surface` · +`backend/internal/pipeline/mining.go:579`=`nothing to decide`. + +##### 6. Юниты (§4.5) — ОТДЕЛЬНЫЙ ПРОХОД, батчер не трогаю + +Семьи и серии сегодня детектируются НАД `paid`, то есть ПОСЛЕ фильтра +(`backend/internal/pipeline/terminologist.go:486`=`terminology.DetectFamilies(paid, fp)`), и комментарий выше объясняет причину: детектировать над полным +набором значит рассогласовать юниты с батчами, из них построенными. **Но это довод про БАТЧИ, а не про +предикат.** Если считать юнит над `paid`, юнит будет определён тем самым фильтром, который он питает, — +круг. ⇒ юнит для предиката считается **отдельным чистым проходом над ВСЕМИ кандидатами**, батчер остаётся +над `paid` и байт-идентичен. Цена названа: два разных разбиения на юниты в одном прогоне, и пин обязан +утверждать, что батчер не сдвинулся. + +##### 7. Денежная семантика резюма — ДВЕ ОСИ, и их нельзя смешивать + +1. **Резюм ТОЙ ЖЕ покупки — $0 со второго.** Базис внутри покупки после стопа неизменен ⇒ состав батчей есть + функция (кандидаты, базис, банк) ⇒ чекпойнты реплеятся. +2. **СЛЕДУЮЩАЯ покупка, где решилась хоть одна новая строка, — хвост батчей переупаковывается и платится + ОДИН раз.** В класс входят: первая запись базиса, подпись владельца, строки банкноты на новых главах, + разрешившаяся `auto`. ⛔ Формулировка «каждый последующий прогон за $0» **запрещена** — это ровно та ложь, + которую велит убрать ряд **448**. +3. **Лестница** (`D39.259`, `gates.terminology.regenerate: 1` во всех трёх боевых конвейерах): в базис + ложится ответ **ВЫИГРАВШЕЙ ступени**, а не первой. Ступень в «$0 на резюме» **не входит** — реплеится + оплаченная ступень, а не покупается новая. Посылку пина `backend/internal/pipeline/bankladder_test.go:111`=`func TestAHealthyBankTableIsNeverAskedAgain` + базис не ломает и обязан это утверждать отдельной строкой. + +##### 8. Что я пока НЕ строю и почему — исход будет с замером, а не с мнением + +- **Ряд 447** (подписанная поверхность снова спрашивается во втором проходе). Это смена продуктового + поведения, а не починка: сегодняшний фильтр платит за разнобой черновиков НАРОЧНО. Склоняюсь к отказу; + решу числом популяции на A и B. +- **Сторож растущей книги** (§4.4). Посылка «исходник приходит целиком» — открытый вопрос ВЛАДЕЛЬЦУ от 17.09. + Сторож, обнуляющий базис на каждом выпуске, ответил бы за владельца молча. Склоняюсь к отказу с явным + объявлением растущей книги вне скоупа; что механизм делает при разошедшемся хеше — напишу числом из §2. +- **Ряд 490** (страж разрыва окон глав) — $0, беру, образец `backend/internal/membank/memvoice.go:271`=`func VoiceWindowGaps`; + у образца беру и ГАРАНТИЮ: намеренный разрыв законен ⇒ исход громкая строка, а не отказ загрузки. +- **Ряд 448** — пере-формулировка обязана обновить И голден каталога операторских сообщений + (`backend/internal/pipeline/testdata/operator-messages.txt:136`=`terminology: this book had already paid`), и это + обслуживание заказанной смены поведения (`D39.183`), а не подгонка под зелень. Объявляю заранее. +- **Ряд 487** пак НЕ чинит, но посылку «решено ⇒ `draft`» пиню: без пина завтрашняя починка скачком двинет + набор решённых, то есть деньги. + + #### ОТЧЁТ пака «ЛЕСТНИЦА ПОПЫТКИ ДЛЯ БАНК-РОЛЕЙ» (17.09, сессия `textmachine-main-12`). НЕ КОММИЧУ — дерево передаю оркестратору №23 **Деньги пака: $0.** Платных вызовов моделей не было ни одного. Все числа сняты на фикстурах и на уже