From 8fd3b8a236fc14e61d692f4096866a6ee36f784e Mon Sep 17 00:00:00 2001
From: heaven
Date: Fri, 18 Sep 2026 02:22:51 +0300
Subject: [PATCH] Sharpen the polygon measurement row so it closes by buying
the missing arm rather than by carrying a permanent disclaimer
---
docs/BACKLOG.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/BACKLOG.md b/docs/BACKLOG.md
index 7664025e..2351527e 100644
--- a/docs/BACKLOG.md
+++ b/docs/BACKLOG.md
@@ -409,4 +409,4 @@
| 497 | ⛔ **ПИН КВАДРАТИЧНОСТИ ФЛЕЙКУЕТ НА ЗДОРОВОМ ДЕРЕВЕ И КРАСИТ ЧУЖОЙ ЛЕНДИНГ.** `TestEvidenceWindowsDoesNotGrowQUADRATICALLYWithTheBook` (`backend/internal/terminology/evidence_test.go:77`=`linear ≈4, quadratic ≈16`; размеры входа объявлены строками выше — `measure(2000)` и `measure(8000)`) утверждает ОТНОШЕНИЕ времён, и его докблок объясняет выбор так: «IT ASSERTS A RATIO, NOT A DURATION. A wall-clock threshold on a shared machine is a flake; the shape of the curve is the property». ⛔ **Посылка опровергнута замером: отношение защищает от РОВНОЙ нагрузки и слепо к её ИЗМЕНЕНИЮ между половинами.** Обе половины меряются ПОСЛЕДОВАТЕЛЬНО, а `go test ./...` гоняет пакеты параллельно — выросла контенция между малым и большим замером, и отношение раздулось, ничего об этом не сказав. ⚠ **Улика — два вердикта на ОДНОМ коммите `871e0af`:** приёмка оркестратора дала `MAKE_EXIT=0`, входная батарея следующей сессии — `MAKE_EXIT=2` с `ratio ×16.5` при пороге 16 (малый замер прошёл на 42.5 мс против изолированных 22, то есть уже вдвое медленнее). Изолированно пять прогонов оркестратора дают 4.3 · 4.3 · 3.1 · 4.6 · 5.7 — свойство ДЕРЖИТСЯ, негоден прибор. ⇒ **зелень приёмки была везением, а не замером**, и цена дефекта не в этом тесте, а в том, что он красит лендинг чужой зоны и заставляет её доказывать невиновность. **Форма лечения названа сессией:** мерить половины ВПЕРЕМЕЖКУ (A-B-A-B, брать медиану) либо нормировать на опорный замер той же секунды — тогда общая нагрузка сокращается по-настоящему, а не по предположению. ⚠ Родня ряда про «пин, флейковый на мутанте, измеряет пустой сценарий», но здесь хуже: флейк на ЗДОРОВОМ дереве | бэкенд | скоро | пин краснеет только на настоящей квадратичности: посадка «вернуть квадратичный `window()`» краснеет им, а десять прогонов полной батареи подряд — зелёные | найдено `textmachine-main-c5` на входной батарее 17.09, пере-снято оркестратором пятью изолированными прогонами |
| 499 | ⛔ **ИНГЕСТ EPUB ЧИТАЕТ СТРОКУ СТИХА КАК АБЗАЦ ПРОЗЫ.** ⚠ **ИСПР. 18.09 — ПРЕЖНИЙ ЗАГОЛОВОК НАЗЫВАЛ НЕ ТОТ ПРЕДИКАТ, и опроверг его ИСПОЛНЕНИЕМ полигон (`textmachine-b5`), а не рассуждение.** Было: «вложенность блочной цитаты умножает переносы». Неверно: `backend/internal/chunk/chunker.go:470`=`func splitParagraphs(chapter string) []string` делит по `\n\n` и **отбрасывает пустое** ⇒ избыток переносов безвреден, вложенность в десять уровней роли не играет. **Настоящий механизм виден в коде:** `blockTags` эмитит `"\n\n"` и на открытии (`backend/internal/chunk/ingest.go:1157`=`body.WriteString("\n\n")`), и на закрытии (`:1185`), тогда как `
` даёт одиночный `\n` (`:1152`=`body.WriteByte('\n')`) ⇒ **вложенный `` внутри `
` — разметка издателя для СТРОКИ стиха — получает АБЗАЦНЫЙ разрыв**, и эпиграф из четырёх строк приезжает переводчику четырьмя независимыми абзацами прозы. ⭐ **Лечение по роду (формулировка полигона):** не «меньше переносов», а КЛАСС цитатно-стиховых контейнеров, внутри которых вложенный `` даёт строчный перенос, а сам контейнер — абзацный; стих приезжает одним абзацем из строк, состав класса — данные. ⚠ **Побочный эффект назван автором находки ДО приёмки:** многоабзацная цитата ПРОЗЫ тоже склеится в один абзац с переносами — меньшее зло, чем разорванный стих, но решение владельца предмета. ⛔ **Альтернатива «абзац не кончается знаком конца предложения ⇒ это строка» ОТВЕРГНУТА обеими сторонами:** знаки препинания у пар разные, это ветвление по языку, которого инвариант не допускает. ⚠ Дефект живёт только на EPUB-парах: китайская боевая пара идёт из txt и потому не проявляет его — он прожил незамеченным именно поэтому. ⚠ Адрес `ingest.go:614` из пинга полигона относится к ДРУГОМУ срезу (основной чекаут против воркри); в этом ряду адреса мои. `backend/internal/chunk/ingest.go:978`=`"h5": true, "h6": true, "li": true, "blockquote": true` — каждый блочный тег отдаёт перенос, и набор существует НАМЕРЕННО: соседний докблок (`:975`=`survives extraction; without them a whole chapter collapses into one paragraph`) объясняет, что без него глава схлопывается в один абзац. ⛔ Но у книги, где эпиграф набран ВЛОЖЕННЫМИ `blockquote` — по одному на типографскую строку, — переносы умножаются на глубину. **Замер пере-снят оркестратором своим прибором и сошёлся с зонным знак в знак: 382 тега `blockquote` в 12 документах из 126, максимальная вложенность 10.** Следствие на входе модели (замер сессии по всем 71 главам движка): непустых абзацев 11 203, из них **726 не кончаются знаком конца предложения** — 6.5 % абзацев и 1.7 % рун, то есть обрывки фразы; прогонов из 8 подряд переносов — 101, из 16 — 66, встречается до 24. Обычная проза при этом ЦЕЛА (контроль: 2532 абзаца в крупнейшей главе) ⇒ предмет именно вложенность, а не блочность. ⛔ **Цена — качество перевода:** модель получает стих как набор обрывков, разделённых восемью пустыми строками, и сшивает их по своему усмотрению. ⚠ **Сегодня это обойдено ПРАВИЛОМ В ПРОМТЕ английской пары («собери такой блок в целую фразу»), и сессия сама назвала это КОСТЫЛЁМ вслух** — обход прячет цену, пока нет механизма. Лечение по роду: вложенная цитата есть ОДИН блок, а не N; условие снятия костыля — пин, краснеющий на вложенности ≥2 | бэкенд | скоро | вложенный `blockquote` даёт один перенос, а не по одному на уровень; пин на книге с вложенностью ≥2; правило-костыль снято из промта и названо в отчёте | замер `textmachine-main-c5` 17.09, пере-снят оркестратором (382/12/10 — сошлось) |
| 500 | ⚠ **ПОДОЗРЕНИЕ, А НЕ ЗАМЕР: ИНГЕСТ EPUB, ПОХОЖЕ, ТЕРЯЕТ КУРСИВ ЦЕЛИКОМ — и носитель курсива тут НЕ инлайн-тег.** `backend/internal/chunk/ingest.go:1085`=`func extractXHTML(data []byte) (string, []RubyReading, error)` пишет текстовые токены; разметка следа не оставляет. Для художественного перевода курсив несёт эмфазу, мысль героя, чужеязычное слово и эпиграф — авторское средство, и восстановить его данными нельзя: его нет на входе. ⛔ **Разметка честная: сквозного замера «курсив не доезжает до чанка» НЕ делал никто** — ни сессия, ни оркестратор; сделано только чтение кода и счёт спанов. ⚠ **И поправка к МЕХАНИЗМУ, снятая оркестратором: `` — 0, `` — 0.** Курсив в этой книге несёт **CSS-класс**, и счёт спанов расходится по популяциям: у оркестратора 4842 (`class="…ital…"`), у советчика сессии 4863. ⇒ формулировка «инлайн-теги не оставляют следа» описывает не тот носитель, и починка «читать ``/``» не сработала бы вовсе: читать надо класс. Прежде чем строить — сквозной замер на одном документе: доезжает ли хоть один курсивный спан до текста чанка | бэкенд | скоро (сперва ЗАМЕР, потом решение) | предъявлен сквозной замер «курсив на входе → курсив в чанке» с названным знаменателем; по его итогу — ряд на починку либо закрытие с доводом | подозрение сессии `textmachine-main-c5` 17.09; механизм поправлен оркестратором (класс, а не тег) |
-| 501 | ⚠ **АНГЛИЙСКАЯ ОСЬ ПОЛИГОНА СНЯТА НА СПЛОШНОМ БЛОКЕ: ИСКАЖЁН АБСОЛЮТНЫЙ УРОВЕНЬ, КОНТРАСТЫ АРМОВ ЦЕЛЫ.** ⛔ **Разметка: это утверждение ПОЛИГОНА (`textmachine-b5`) о собственной работе, оркестратором НЕ пере-снятое**; носителем оно стало потому, что на этих числах стоят промты боевой английской пары — то есть предмет ратификаций, а не внутреннее дело зоны. Английский экстрактор полигона (`pair_en.raw_text`) сносил из epub теги регексом вместе с `
`: `eval/dovodka/podacha.py:19`=`11 447 абзацев, медиана 62 знака` — модель получала сплошной блок вместо одиннадцати тысяч абзацев. **Затронуты ВСЕ 273 английские клетки**, а не отдельные армы: восстановленную подачу получает единственный арм `RA` (`eval/dovodka/rol.py:162`=`RESTORE_ARMS = ("RA",)`), и он НЕ КУПЛЕН — 0 клеток ⇒ **цена дефекта не измерена ни разу**. ⭐ **Но контрасты держатся, и дефект был обойдён ОСОЗНАННО, а не пропущен:** вход у всех армов одинаково плоский, и довод автора стоит в самом коде (`eval/dovodka/rol.py:126`=`RA / RN — эффект ПОДАЧИ`; парная строка выше даёт `RN / ZP` как эффект ПРОМТА при одинаковом входе) ⇒ сравнение армов между собой чисто, искажён общий УРОВЕНЬ, на котором стоят все. **Уцелевает:** контрасты промтов и топологий (`RB > RC > RN`), вендорские сравнения, основание выбора формулировки владельца. **НЕ уцелевает:** любое утверждение об АБСОЛЮТНОМ качестве английского текста, о вёрстке, об абзацном строе и длине абзаца — и любой перенос английского числа на пару, где исходник абзацы не терял. **Два числа боевых промтов en-ru стоят на этом и помечены в доке зоны в месте цитирования:** вес ролевого промта 1.50/1.13 и «редактор на английском покупает» 1.22 против 2.78 ошибок на единицу — оба судейские, на английской панели, при разрешении прибора `eval/dovodka/KONSILIUM-22-08.md:159`=`разрешение 1.63 места на китайском` против 2.15 на английском. ⛔ **Починка экстрактора ретроактивно обнуляет адресацию купленного:** uid единицы есть `sha1(source.strip())`, любая правка пробелов переименовывает ВСЕ единицы — 289 оплаченных клеток на $2.64 теряют адресата вместе с судейскими ответами; поэтому диспозиция зоны (`eval/dovodka/KONSILIUM-22-08.md:141`=`Починка экстрактора абзацев`) велит чинить НА ПОДАЧЕ (`eval/dovodka/podacha.py:203`=`def restore_paragraphs`), сохраняя uid. ⚠ **Не путать с рядом 499:** там дефект ДВИЖКА (`` внутри `
` читается как абзац прозы), здесь — дефект ПОЛИГОННОГО экстрактора (регексп снёс `
`); одной правкой не чинятся и в один ряд не сливаются. ⚠ **Третья оговорка автора, без которой ряд придётся переписывать:** после починки ингеста движка старые полигонные числа станут НЕСОПОСТАВИМЫ с новыми движковыми — они сняты на разном тексте, и следующая смена иначе сравнит несравнимое. Китайская пара не затронута вовсе: исходник txt, абзацы не терялись, арма `RA` у неё «нет и быть не может» | полигон (носитель — оркестратор) | скоро (гейт: перед любым ПЕРЕНОСОМ английского числа полигона в ратификацию) | либо арм `RA` куплен и цена подачи измерена числом, либо каждое английское число полигона в носителях несёт пометку «абсолютный уровень искажён, контраст чист» | утверждение `textmachine-b5` 18.09; все пять адресов пере-проверены оркестратором |
+| 501 | ⚠ **АНГЛИЙСКАЯ ОСЬ ПОЛИГОНА СНЯТА НА СПЛОШНОМ БЛОКЕ: ИСКАЖЁН АБСОЛЮТНЫЙ УРОВЕНЬ, КОНТРАСТЫ АРМОВ ЦЕЛЫ.** ⛔ **Разметка: это утверждение ПОЛИГОНА (`textmachine-b5`) о собственной работе, оркестратором НЕ пере-снятое**; носителем оно стало потому, что на этих числах стоят промты боевой английской пары — то есть предмет ратификаций, а не внутреннее дело зоны. Английский экстрактор полигона (`pair_en.raw_text`) сносил из epub теги регексом вместе с ``: `eval/dovodka/podacha.py:19`=`11 447 абзацев, медиана 62 знака` — модель получала сплошной блок вместо одиннадцати тысяч абзацев. **Затронуты ВСЕ 273 английские клетки**, а не отдельные армы: восстановленную подачу получает единственный арм `RA` (`eval/dovodka/rol.py:162`=`RESTORE_ARMS = ("RA",)`), и он НЕ КУПЛЕН — 0 клеток ⇒ **цена дефекта не измерена ни разу**. ⭐ **Но контрасты держатся, и дефект был обойдён ОСОЗНАННО, а не пропущен:** вход у всех армов одинаково плоский, и довод автора стоит в самом коде (`eval/dovodka/rol.py:126`=`RA / RN — эффект ПОДАЧИ`; парная строка выше даёт `RN / ZP` как эффект ПРОМТА при одинаковом входе) ⇒ сравнение армов между собой чисто, искажён общий УРОВЕНЬ, на котором стоят все. **Уцелевает:** контрасты промтов и топологий (`RB > RC > RN`), вендорские сравнения, основание выбора формулировки владельца. **НЕ уцелевает:** любое утверждение об АБСОЛЮТНОМ качестве английского текста, о вёрстке, об абзацном строе и длине абзаца — и любой перенос английского числа на пару, где исходник абзацы не терял. **Два числа боевых промтов en-ru стоят на этом и помечены в доке зоны в месте цитирования:** вес ролевого промта 1.50/1.13 и «редактор на английском покупает» 1.22 против 2.78 ошибок на единицу — оба судейские, на английской панели, при разрешении прибора `eval/dovodka/KONSILIUM-22-08.md:159`=`разрешение 1.63 места на китайском` против 2.15 на английском. ⛔ **Починка экстрактора ретроактивно обнуляет адресацию купленного:** uid единицы есть `sha1(source.strip())`, любая правка пробелов переименовывает ВСЕ единицы — 289 оплаченных клеток на $2.64 теряют адресата вместе с судейскими ответами; поэтому диспозиция зоны (`eval/dovodka/KONSILIUM-22-08.md:141`=`Починка экстрактора абзацев`) велит чинить НА ПОДАЧЕ (`eval/dovodka/podacha.py:203`=`def restore_paragraphs`), сохраняя uid. ⚠ **Не путать с рядом 499:** там дефект ДВИЖКА (`` внутри `
` читается как абзац прозы), здесь — дефект ПОЛИГОННОГО экстрактора (регексп снёс ``); одной правкой не чинятся и в один ряд не сливаются. ⚠ **Третья оговорка автора, без которой ряд придётся переписывать:** после починки ингеста движка старые полигонные числа станут НЕСОПОСТАВИМЫ с новыми движковыми — они сняты на разном тексте, и следующая смена иначе сравнит несравнимое. Китайская пара не затронута вовсе: исходник txt, абзацы не терялись, арма `RA` у неё «нет и быть не может» | полигон (носитель — оркестратор) | скоро (гейт: перед любым ПЕРЕНОСОМ английского числа полигона в ратификацию) | ⚠ **КРИТЕРИЙ ПЕРЕ-РЕШЁН 18.09 ПО ВОЗРАЖЕНИЮ АВТОРА НАХОДКИ, и прежний был слабее:** я ставил закрытием «носить пометку», то есть документировал предмет бессрочно вместо того, чтобы его закрыть. Пометка не несёт МАСШТАБА — из неё нельзя узнать, искажение это два процента или полтора места, — и потому обесценивает чистые числа ровно настолько же, насколько защищает грязные. **Закрывается:** куплен арм `RA` (16 единиц, промт и жилец как у `RN`, отличие ТОЛЬКО в подаче) и контраст `RA/RN` даёт число цены подачи. ⛔ **Ограничение покупки, без которого она бесполезна:** `RA` берётся на ТОМ ЖЕ жильце и с ТЕМ ЖЕ уровнем усилия, что `RN` (`eval/dovodka/rol.py:623`=`dspro: вендор-дефолт high` — оба на вендор-дефолте), иначе контраст смешает подачу с усилием и родит второй такой же ряд вместо закрытия первого. **До покупки** каждое английское число полигона в носителях несёт пометку «абсолютный уровень искажён, контраст чист, **величина искажения НЕ измерена**»; пометка ВРЕМЕННАЯ и снимается или уточняется величиной по итогу `RA/RN`. ⚠ **Цена — вход владельцу, а не санкция:** ≈$0.45–0.51 (сумма купленных клеток `RB` $0.5089 и `RN` $0.4454 — пере-снято оркестратором, сошлось до цента; ⚠ знаменатель расходится по провенансу: 16 ЕДИНИЦ против 32 ФАЙЛОВ, у каждой единицы есть спутник `.ERROR.json`, и медиана по файлам вчетверо ниже медианы по единицам). Зона полигона выведена из скоупа словом владельца 11.09 ⇒ покупку решает ОН | утверждение `textmachine-b5` 18.09; все пять адресов пере-проверены оркестратором |