From a3e0e438952cdd6fc2aad5e0ec495f9a1b16886a Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 19 Sep 2026 01:58:29 +0300 Subject: [PATCH] Track the case fold that merges a name with a common word in the English run book, and note the anchors the live chapter work will move --- docs/BACKLOG.md | 3 ++- docs/orchestrator-norms-scratchpad.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md index bd5bbd11..95cd70dc 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`; обновлять при каждом лендинге):** всего **374** строк · зона бэкенд **200** строго / **253** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **202** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **СЧЁТ ОЧЕРЕДИ на 17.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **375** строк · зона бэкенд **201** строго / **254** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175; **371** — актом D39.233, **360** — актом D39.232, обе 10.09), платные прогоны разблокированы · «скоро» **203** (перечень — грепом по таблице, рукописный список снят 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; правки — только через оркестратора) @@ -410,3 +410,4 @@ | 502 | ⚠ **ПОЛОВИНА ЗАКРЫТА 18.09 актом `D39.268`:** имя исчерпания средств провайдера печатается человеку — в последней строке прогона и в записи об ошибке. **ОСТАЁТСЯ ПРОГРАММНАЯ ПОЛОВИНА:** нового кода возврата и нового слова в словаре кадров НЕ добавлено намеренно — словарь есть замороженный шов, и его расширение является решением, а не правкой пака. ⛔ **УПОР В БАЛАНС ПРОВАЙДЕРА НЕ ИМЕЕТ СОБСТВЕННОГО ИСХОДА: ПРОВОД КЛАССИФИЦИРУЕТ ЕГО ВЕРНО, А ОПЕРАТОР ПОЛУЧАЕТ ОБЫЧНОЕ ТЕРМИНАЛЬНОЕ ПАДЕНИЕ СТАДИИ.** ⚠ Разметка честная: **снято ЧТЕНИЕМ КОДА, живого 402 не исполнял** — движок в этом состоянии не гонялся. **Что построено и работает:** `backend/internal/llm/httpllm.go:691`=`func retryableStatus(status int, body []byte) bool` есть ЕДИНСТВЕННЫЙ источник раздела «повторять/терминально» и стережётся дрейф-гардом; 402 терминален по умолчанию (`:698`=`terminal 4xx (incl. 402 Payment Required)`), а 429 с телом об исчерпанных кредитах тоже терминален — узкий набор маркеров `:710`=`insufficient_quota` / `quota_exceeded`, и довод стоит рядом: повтор под удержанной резервацией жжёт только время, потому что «the operator must top up». ⇒ **денег на пустые ретраи мы не тратим, и это важно сказать первым.** ⛔ **Дыра выше провода:** типизированный `HTTPStatusError` (`backend/internal/llm/httpllm.go:717`) не покидает пакет `llm` — 7 упоминаний, ВСЕ в `internal/llm`, в конвейере ноль; ошибка едет наверх обёрнутым текстом (`%w`), а перечислимых причин в `backend/internal` **43**, и **ни одна** не про кредиты провайдера (контроль: строк со словом `reason` — 943; единственный хит шаблона «причина + кредиты» — посторонний комментарий `backend/internal/pipeline/rebill.go:269`). ⇒ «у провайдера кончились деньги» и «стадия упала терминально» на уровне ИСХОДА неразличимы; тело ответа провайдера доезжает до человека только внутри текста обёрнутой ошибки. ⛔ **Почему это гейт готовности, а не гигиена:** предстоят ДВЕ книги по 20 глав ПАРАЛЛЕЛЬНО, и прогон, встретивший 402 на середине, останавливается наполовину купленным; оператору нужно за секунды отличить «пополни счёт» от «движок сломался», а сегодня он это читает из текста ошибки. ⚠ **Событие не гипотетическое:** на английской оси полигона 44 записи об ошибке из 52 — ровно `APIStatusError 402 Insufficient` (ряд **501**), то есть провайдер уже упирался в баланс, и заметили это постфактум, разбирая артефакты. | бэкенд | **скоро (кандидат в блокеры ратификации готовности к эксперименту двух переводов)** | у исчерпания кредитов провайдера есть НАЗВАННЫЙ исход, отличимый от обычного терминального падения стадии, и он виден оператору прогона; пин краснеет, когда тело с 402 превращается в родовую причину | замер оркестратора 18.09 чтением кода; повод — находка `textmachine-b5` о 44 отказах по балансу на английской оси | | 503 | ⛔ **ЗАБОР РЕ-ПИНА ПРОПУСКАЕТ ТОЛЬКО ОДНУ ОСЬ, ПОЭТОМУ КАЖДОЕ СЛЕДУЮЩЕЕ ОБЪЯВЛЕНИЕ ПАРЫ БУДЕТ ПЕРЕПОКУПАТЬ БАЙТ-ИДЕНТИЧНЫЕ КНИГИ.** Движок УЖЕ умеет исход «снапшот двинулся, а байты нет — $0»: это ре-пин (`backend/internal/pipeline/repin.go:61`=`func classifySnapshotMove`). Но забор пускает в него ровно ОДНУ ось — банк памяти; любое иное расхождение полей классифицируется как «прочее» и требует полной перепокупки. ⇒ когда пара объявит опциональный пар-файл (любой из контракта `ABSENT → inert, PRESENT → байты фолдятся`), версия её пакета сдвинется у ВСЕХ её книг, включая те, чей ТЕКСТ не изменился ни на байт — например текстовые книги, для которых новая возможность недостижима по построению. ⚠ **Это ЛОЖНАЯ перепокупка, то есть безопасная сторона ошибки: она видна в проекции согласия и не портит текст.** Но это деньги, и с каждой новой парой их будет больше. ⛔ **Направление лечения названо советчиком и НЕ спроектировано:** расширить забор на «wire-нейтральные оси» — ход, при котором отличаются только оси, чьё действие целиком лежит в отправляемых сообщениях (нарезка · встроенные данные · нормализация · пакет пары), И при этом контент-хеш совпал; вердикт-несущие оси (классификатор · дешёвые гейты · экран цели) остаются «прочим». ⚠ Граница «ось лежит целиком в сообщениях» доказывается ПО КАЖДОЙ оси отдельно — это дизайн, а не правка условия. ⛔ **И почему это НЕ делается перед прогоном:** `repin.go` есть денежно-критичный путь, а ошибка в заборе даёт исход, противоположный нынешнему — тихую НЕ-перепокупку там, где заплатить надо. Прогон идёт с нынешним поведением, цена названа вслух. | бэкенд | скоро (после прогона; до него — ТОЛЬКО назвать цену в акте, не трогать) | забор ре-пина различает wire-нейтральный ход от вердикт-несущего, граница каждой оси доказана отдельно, и пин краснеет на попытке пропустить вердикт-несущую ось как нейтральную | разбор советчика 18.09 при ратификации условного фолда маркера разметки; несущие утверждения пере-сняты оркестратором (контент-гард `backend/internal/pipeline/stagerun.go:92`=`cs.ContentHash == contentHash`; образец — коммит `2f91b04`, 207 строк в нарезчик при нетронутой константе версии) | | 504 | ⛔ **ТАЙМИНГОЗАВИСИМЫЙ ПИН В `internal/llm` КРАСИТ ЧУЖИЕ ЛЕНДИНГИ — ДВА НЕЗАВИСИМЫХ СВИДЕТЕЛЯ ЗА ОДНУ СМЕНУ.** Тест `TestARefusalIsNotAPurchaseEvenWhenTheReplyOutrunsTheWrite` (подтест «тело ещё писалось, когда пришёл отказ») упал у ДВУХ разных сессий, на ДВУХ разных деревьях. ⚠ **ИСПР. ТУТ ЖЕ, ДО ЛЕНДИНГА РЯДА: «ни одна сессия пакет не трогала» — НЕВЕРНО, и поймал это мой же прибор.** Файл упавшего теста (`backend/internal/llm/attemptcut_test.go`) действительно не тронут ни одним коммитом смены (строк диффа 0), но ПАКЕТ тронут: `9defda4` добавил **19 строк** в `backend/internal/llm/httpllm.go` — это работа второй сессии по имени для исчерпания средств провайдера. ⇒ у первого свидетеля дерево пакета не касалось вовсе, у второго — касалось соседнего файла того же пакета, и потому **«дефект не её» НЕ УСТАНОВЛЕНО**: гипотеза о взаимодействии её правки с таймингом остаётся открытой, пока не сойдётся замер частоты в двух деревьях вперемежку. **Первый свидетель 18.09:** батарея `final8` сессии английской пары — текст падения говорит не о предмете, а о своей ПОСЫЛКЕ: «premise: the provider was connected to 3 time(s) … write: connection reset by peer» и «the client came back with a STATUS, so this run never reached the delivery question». **Второй свидетель 18.09:** гейт сессии достижимости пар-данных, причём упал ВТОРОЙ проход цели — тот, что собирает скипы без гонок, — тогда как `build vet fmt lint test` прошли и полнота сверена списком. ⭐ **Конструкция теста ХОРОША и это надо сказать прежде дефекта:** он не позеленел молча, не дойдя до предмета, а объявил вслух, что до вопроса о доставке не дошёл. Именно поэтому его красное есть информация, а не шум. **Дефект в другом:** он чувствителен к нагрузке — локальной HTTP-фикстуре сбрасывают соединение, — и тогда он красит ЧУЖОЙ лендинг, заставляя зону доказывать невиновность. Изолированно зелен 8 из 8 у обеих сессий. ⚠ **Разделить «нагрузка» и «дефект дерева» можно только правильным прибором:** чередующиеся полные проходы в своём дереве и в развёрнутом срезе `HEAD`, счёт частоты с обеих сторон; одинаковая частота = не твоё. Вторая сессия этот замер ведёт, числа придут со сдачей. ⛔ **И родня, из-за которой ряд заводится отдельным:** это ВТОРОЙ такой пин за двое суток (первый — ряд **497**, квадратичность), то есть класс, а не случай: **пин, утверждающий отношение или порядок событий, на общей машине меряет нагрузку вместе с предметом**. | бэкенд | скоро (не блокер прогона: предмет пина к пути прогона не относится, но красит лендинги) | падение различает нагрузку от предмета САМО — либо фикстура перестаёт зависеть от того, кто ещё работает на машине, либо тест объявляет исход «не измерено» вместо красного; предъявить частотой падений в двух деревьях вперемежку, а не одиночным прогоном | два независимых свидетеля 18.09 — батареи `textmachine-main-c5` и `textmachine-main-c8`. ⭐ **ЗАКРЫТО ПО ПРИЧИНЕ 18.09 ЗАМЕРОМ ЗОНЫ, И КОНТРОЛЬ ВЗЯТ ПРАВИЛЬНЫЙ, А НЕ УДОБНЫЙ:** сравнение под РАВНОЙ нагрузкой против дерева `9defda4^`, где правки зоны нет вовсе, дало **2 падения из 30 в контрольном дереве против 0 из 30 в правленом** ⇒ моя гипотеза о взаимодействии её правки с таймингом ОПРОВЕРГНУТА, и опровергнута в сторону, невыгодную опровергающему. **Механизм понят:** тест шлёт 11 МБ тела, которого сервер не читает, отдаёт обрывок статус-строки и спит ФИКСИРОВАННЫЕ 200 мс перед сбросом соединения — под нагрузкой планировщик не успевает прочитать обрывок. Предикат, добавленный паком в тот же пакет, внутри него не зовётся НИ РАЗУ (0 вызовов; единственный вызов идёт из `backend/internal/pipeline/stagerun.go`). ⇒ предмет ряда — **фиксированный сон против планировщика**, а не чья-либо правка. | +| 505 | **РЕГИСТР КЛЮЧА ИСТОЧНИКА СКЛЕИВАЕТ ИМЯ С НАРИЦАТЕЛЬНЫМ — единственная языковая находка переписи 19.09, которая меняет ПЕРЕВОД английской книги холодного прогона.** Ключ источника сворачивает регистр безусловно (`backend/internal/text/norm.go:153`=`b.WriteRune(unicode.ToLower(r))`), совпадения матчер банка считает без учёта регистра ⇒ термин-имя стреляет по нарицательному слову и несёт закон банка туда, где он неверен. Замер переписи на книге прогона: из 260 слов, ≥10 раз встречающихся с заглавной не в начале фразы, у **86** есть строчный двойник ≥3 раз — Blood 66/752 · Dead 155/143 · Grace 33/17 · Faith 24/92 · Patience 54/6 (пере-снято оркестратором грубее, порядок тот же). У caseless-письменностей (zh, ja) явления нет по построению. ⚠ `D39.268` п.7(б) отказался строить Go-гард, потому что обе детерминированные дороги двигают ГЛОБАЛЬНУЮ ось — «перекупка китайской книги»; **в окне пере-кроя эта цена $0**, и довод отпадает (перепись: сдвиг `NormVersion` идёт в снапшот через `memory_version`, это ход ре-пина). Та же нота записала «судьбу коллизионного термина» за ВЛАДЕЛЬЦЕМ — вопрос задан 19.09. Форма решает окно: матчер/нормализатор ⇒ только до прогона; гард на сборке банка ⇒ можно после. Родня — ряд 81 (kana-омографы) | бэкенд | скоро (окно пере-кроя — до холодного прогона) | решение владельца по форме, затем второй пак окна | перепись языковых правил 19.09 (воркфлоу оркестратора), `D39.268` п.7(б) | diff --git a/docs/orchestrator-norms-scratchpad.md b/docs/orchestrator-norms-scratchpad.md index 6b93f149..86d3e5a3 100644 --- a/docs/orchestrator-norms-scratchpad.md +++ b/docs/orchestrator-norms-scratchpad.md @@ -122,7 +122,7 @@ UNKNOWN 1 — её, дошёл один раз до правок; десять | 15 | платформа | ПРОГОН НЕ ВРЁТ О СЕБЕ — ни оператору, ни покупателю, ни счёту: ряды 398 · 394 · 396 · 399 · 400 · 416 · 486 | textmachine-main-78 | ✅ эхо блока 9 отослано | ✅ **ЗАКРЫТ АКТОМ `D39.265` 17.09**, лендинг `bde8f5f` (41 файл, $0, контрактный минор **0.17.0**). Ряды 398·399·400·486 закрыты работой, 394 и 396 ПЕРЕ-РЕШЕНИЕМ, 416 половиной; заведены 493 и 494, дополнен 484. ⛔ **Гейт зоны на финальном дереве КРАСЕН и назван ГРАНИЦЕЙ, а не зеленью** — экземпляр ряда 484, оба упавших теста живут в чистом `HEAD`. Приёмка: кампания пере-снята мной 26/25/1/0 на отдельном корне её же харнессом, копия вернулась байт-идентичной, все 26 целей на месте; деньги $0 двумя путями; две линзы (слепая по заказу и диффу, вторая вне карты отчёта) дали три настоящих находки, две из них в каноне. ⚠ **МОИ ошибки, обе в акте:** взял себе правку канона, принадлежащую ЗОНЕ (откатил, дифф 0 строк, поймал ВЛАДЕЛЕЦ) и неточная посылка §4.1 промта. ⚠ Плюс три дефекта собственных приборов, каждый пойман печатью контроля рядом с числом: шапка манифеста прочитана как пары «хеш—имя» (23 ложных расхождения при 37/37 сошедшихся), греп маркера у пойманных мутаций (маркеры стоят только у выживших, намеренно), «0 скипов» из сводки, оборванной падением (в полном логе 10). ⏳ **ВЫДАН 17.09.** Собран ВЕЕРОМ из четырёх срезов за один заход — против девяти последовательных кругов, которыми я собирал предыдущий пак; это и есть разница в способе работы, а не во времени. Оба рубежа пройдены: механическая сверка 13 блоков (18 якорей с токеном, промахов 0, голых адресов 0) и опровергатель — **10 находок, 4 денежные, все внесены**. ⛔ **Самая дорогая — против меня: §4.2 заказывал ПОСТРОЕННОЕ.** Я написал, что наш собственный грейс читается как авария; вылечено 11.09 (`platform/internal/runs/reconcile.go:1226`=`return "interrupted"`, два пина в `gracekill_test.go`, коммит `00d590e`, принято `D39.242`), а ряд 394 протух и я поверил ряду вместо дерева. ⚠ Ещё три денежные: предмет капа уже стоит в регистре зоны весом `info` с прописанным лечением, а я назвал его «самым денежным» · механизм счётчика описал неверно (он живёт на ПОПЫТКЕ, а рестарт открывает новую строку, поэтому кап на попытку повторил бы дефект) · согласие нельзя сделать соразмерным силами платформы: проекции в точке решения нет по построению, и код это записал со ссылкой на эрратy, а ряд размечен двухзонным. ⚠ И ловушка, которой не было в первой редакции: словарь причин отказа закрыт в ТРЁХ носителях, включая констрейнт базы, и не стережётся НИ ОДНИМ гейтом (0 хитов при контроле 12 у соседа) — четвёртое значение прошло бы `make check` зелёным и упало в проде | | 16 | бэкенд | АНГЛИЙСКАЯ ПАРА en→ru: слой ДАННЫХ английского языка как ПРОДУКТ (слово владельца 17.09 — «данные надо написать… уникально описать английский язык… от этого качество перевода зависит»), две стены `EXIT 10` (нет промт-пакета пары · гейт терминолога при пустом паке), порог эха `0.15` унаследован от китайского бенчмарка, второй детектор латиницы без гейта, нарезка книги Кристоффа | `textmachine-main-c5` | ✅ **эхо принято 17.09** — своими словами, семь пунктов, механика а не текст; ⭐ в нём взята ПОПУЛЯЦИЯ ГРУППЫ, а не документа, то есть моя собственная ошибка первой редакции НЕ унаследована, и сквозная проверка манифеста поставлена ПЕРЕД письмом данных | 🔴 **ИДЁТ** — выдан после акта `D39.266`, слот освободил акт, а не сдача работы. Два рубежа промта пройдены: механическая сверка 13 блоков (29 адресов, битых 0) и субагент-опровергатель — **15 находок, 9 приняты, 6 уточнены моими числами**, из них ЧЕТЫРЕ мои ошибки ПОПУЛЯЦИИ (документ вместо группы · отозванная формулировка ряда 315 прочитана как живая · строка ноты обрезана на 200 знаках и объявлена «телом без содержимого» · сравнение лучшего префикса с перелётом). ⚠ Fable 5 разрешён исполнителю ОДИН — владельцем и именно под верификацию ДАННЫХ. $0 по умолчанию; единственная платная проба — через моё слово. ⛔ Открытый вопрос владельцу, сессии сообщён: размеченного корпуса для en→ru нет вовсе, человеческий эталон вне репозитория ⇒ качество данных числом не предъявимо, и самодельную метрику заводить запрещено | | 17 | бэкенд | ДОСТИЖИМОСТЬ ПАР-ДАННЫХ перед прогоном: манифест нулевых каналов (347) · сайзинг терминолога · курсив на провод (500) · пар-связанные ключи брифа (272) · исход при упоре в баланс провайдера (502) · омографы латинских ключей банка | `textmachine-main-c8` | ✅ **эхо принято 18.09** — своими словами, механикой; ⭐ её формулировка сильнее моей: «§4.1 первым, потому что он **не пункт, а условие измеримости**». Названо и то, чего НЕ делает: диакритику не возвращает, инлайн-теги в блочный набор не кладёт, версию промта не бампает, файл структуры не заводит | 🔴 **ВЫДАН 18.09**, лендинг `dbbfd52`. ⛔ **ПРЕДМЕТ ПЕРЕ-ОПРЕДЕЛЁН ЗАМЕРОМ ПО ДОРОГЕ, и это главное открытие дня:** я заказывал «убрать китайское из Go», а перепись дала **шесть упоминаний кодов языка при контроле 154 файла, живых ветвлений два, оба законны**. ⇒ остаточная зависимость движка от одной пары есть **НЕДОСТИЖИМОСТЬ ДАННЫХ**, а не грязь в коде. Три рубежа, каждый сломал своё: **опровергатель** — 8 мажоров, из них ТРИ моих якоря целили не туда (включая файл, которого в дереве нет), и один пункт вынут замером (гейт латиницы: на прогоне не меняет ничего, что видит модель, а бамп версии двигает снапшот ОБЕИХ книг); **пять верификаторов** — пере-сняли исполнением, что английская книга ГРОМКО отказывает до первого цента, корень один, снимается тремя строками, китайский пакет байт-идентичен; **ревью сдавшей сессии** — нашло то, чего не увидели первые два: §4.2 был ВЕРЕН построчно и позволял **закрыть пункт, не сделав работу** — исполнитель прошёл бы все проверки, написал честный отчёт, и в платный прогон уехал бы китайский по форме размер батча. ⭐ Класс находки: **линза «где формулировка заказа позволит отчитаться, не сделав» ловит то, что не ловит линза «найди неверное»** | -| 18 | бэкенд | ГРАНИЦА ГЛАВЫ: грамматика на обоих путях ингеста (ряд 303 — «пак 2», `D39.270`) · тождество ярлыка и тела · граница как объединение навигации и грамматики · резка внутри документа · провенанс смешанной нарезки · 346(б) · система счисления данными | `textmachine-main-7b` | ✅ **эхо принято 19.09** — своими словами, механикой: формула границы, единица-абзац, система счисления мимо `numeral.txt`, дифф-пин в обе стороны, замер впереди Go. ⭐ В эхе же нашла противоречие МОЕЙ ноты: п.1 `D39.270` «302 не входит» против п.10(б) «грамматическая форма входит» — исправлено `d1b6558`. Уточнено ей: «без книжных данных» — требование к решению, не запрет ступени; стандарт `D39.258` п.3 — пункт §13 · ✅ **ЗАПИСКА-ПЛАН ПРИНЯТА 19.09** (`backend/docs/CHAPTER_BOUNDARY_PLAN.md`, ред. 2 после её советчика): N = **95**, корпус «до/после» — 0 ложных границ, gu-zhenren 2283 = 2283 побайтно. Четыре пункта «сверх промта» ПОДТВЕРЖДЕНЫ, каждый с условием: **D7** разделы по печатному оглавлению — отрицательный пин «не-оглавление, строка равна первому абзацу чужого документа ⇒ раздела нет»; **D4** выбор формы — «2» той же константой, что пол структуры, отказ правила назван в докблоке; **D10** `combined` — контракт объявляет словарь открытым (`openapi.yaml` ~:1852), перечень в контракте допишу я при лендинге, ряд на платформу (доверие к `combined` для заказа по главам) — мой, ветка `scanAll` только TXT; **D9** соревнование со spine. Приняты интерпретации D1 · D2 · D11 · D13. Открыто к отчёту: честность отпечатка структуры при смене `ParseHeader` · текст оглавления в последней главе как объявленный остаток | 🔴 **ВЫДАН 19.09.** ⭐ Предмет нашёл владелец одной фразой — «статический код … должно склеиваться»: `ingestEPUB` грамматики не получает. ⛔ Три круга проверки, и ТРЕТИЙ изменил предмет, а не формулировки; в первых двух я шесть раз подал вывод как замер. Второй рубеж сперва был проведён не в форме ноты (опровергатель мерил факты, а не соответствие 13 блокам и листам владельца) — пере-проведён воркфлоу. «ВЫДАН» было записано в README до того, как нашёлся адресат, — снято и возвращено только сейчас | +| 18 | бэкенд | ГРАНИЦА ГЛАВЫ: грамматика на обоих путях ингеста (ряд 303 — «пак 2», `D39.270`) · тождество ярлыка и тела · граница как объединение навигации и грамматики · резка внутри документа · провенанс смешанной нарезки · 346(б) · система счисления данными | `textmachine-main-7b` | ✅ **эхо принято 19.09** — своими словами, механикой: формула границы, единица-абзац, система счисления мимо `numeral.txt`, дифф-пин в обе стороны, замер впереди Go. ⭐ В эхе же нашла противоречие МОЕЙ ноты: п.1 `D39.270` «302 не входит» против п.10(б) «грамматическая форма входит» — исправлено `d1b6558`. Уточнено ей: «без книжных данных» — требование к решению, не запрет ступени; стандарт `D39.258` п.3 — пункт §13 · ✅ **ЗАПИСКА-ПЛАН ПРИНЯТА 19.09** (`backend/docs/CHAPTER_BOUNDARY_PLAN.md`, ред. 2 после её советчика): N = **95**, корпус «до/после» — 0 ложных границ, gu-zhenren 2283 = 2283 побайтно. Четыре пункта «сверх промта» ПОДТВЕРЖДЕНЫ, каждый с условием: **D7** разделы по печатному оглавлению — отрицательный пин «не-оглавление, строка равна первому абзацу чужого документа ⇒ раздела нет»; **D4** выбор формы — «2» той же константой, что пол структуры, отказ правила назван в докблоке; **D10** `combined` — контракт объявляет словарь открытым (`openapi.yaml` ~:1852), перечень в контракте допишу я при лендинге, ряд на платформу (доверие к `combined` для заказа по главам) — мой, ветка `scanAll` только TXT; **D9** соревнование со spine. Приняты интерпретации D1 · D2 · D11 · D13. Открыто к отчёту: честность отпечатка структуры при смене `ParseHeader` · текст оглавления в последней главе как объявленный остаток · ⚠ **К ПРИЁМКЕ:** её живое дерево 19.09 транзиентно роняет 10 якорей `docs/BACKLOG.md` в `chunker.go` · `ingest.go` · `epubtoc.go` · `render.go` — не чинить до лендинга, пере-нацелить ПОИСКОМ по лендинг-дереву тем же движением, что акт | 🔴 **ВЫДАН 19.09.** ⭐ Предмет нашёл владелец одной фразой — «статический код … должно склеиваться»: `ingestEPUB` грамматики не получает. ⛔ Три круга проверки, и ТРЕТИЙ изменил предмет, а не формулировки; в первых двух я шесть раз подал вывод как замер. Второй рубеж сперва был проведён не в форме ноты (опровергатель мерил факты, а не соответствие 13 блокам и листам владельца) — пере-проведён воркфлоу. «ВЫДАН» было записано в README до того, как нашёлся адресат, — снято и возвращено только сейчас | ⛔ **ПОЛИГОН СНЯТ ВЛАДЕЛЬЦЕМ 11.09.** Я предлагал пак трижды — `ed`, `5c` (обе отработавшие, отказались ПО НОРМЕ и были правы) и свежей `37`, — после чего владелец сказал «полигон не надо выдавать». Выдача `37` ОТОЗВАНА тем же часом. ⚠ Урок не про полигон: **я трижды искал адресата для заказа, приоритет которого не подтверждал у владельца.** Слот зоны свободен ≠ работу зоны надо заказывать.