Aim the file:line anchors of the chapter act at the code that now carries their claims, and state which note bodies keep their old addresses
This commit is contained in:
parent
e008c9b881
commit
0f69d031f2
3 changed files with 6 additions and 6 deletions
|
|
@ -413,7 +413,7 @@
|
|||
| 508 | **МИНИ-ГЛАВЫ: ТИТУЛЫ ЧАСТЕЙ И ФРОНТМАТТЕР СТАНОВЯТСЯ ОТДЕЛЬНЫМИ ГЛАВАМИ — каждая стоит минимум один чанк со своими вызовами и полным контекстом, а платформа берёт ставку за главу.** Так HEAD уже режет книги, чья навигация перечисляет части и фронтматтер (Standard Ebooks); резка по якорям (`D39.273`) распространяет это на книги с несколькими главами в документе: «Война и мир» +17 глав по 14–25 знаков, Кристофф по симуляции советчика — «Dedication» 27 знаков, «Copyright Notice» 340. Дефект не в разрезе — части и фронтматтер есть единицы книги, — а в ЦЕНЕ единицы, которая от её размера не зависит. Варианты политики: продавать как есть · ставка по размеру · склейка малых единиц в чанкере (ломает идентичность главы — без дизайна ряда 161 нельзя) | владелец | скоро (вернуться с числами) | ✅ **СЛОВО ВЛАДЕЛЬЦА 20.09: «пока продавать как есть».** Единица заказа сама по себе РЕШЕНА и не пере-открывается: `D39.196` п.1 — объём заказа в ГЛАВАХ, когда книга распозналась, в ЗНАКАХ, когда нет, и о нераспознавании говорим явно. Открыто только одно: ЧТО считать главой как единицей цены, когда запись навигации называет «Посвящение» в 27 знаков. Закрывается числом из отчёта пака глав (распределение длин по корпусу и Кристоффу) и следующим словом владельца | `D39.273` п.6; ревью советчика оркестратора 19.09 (Д1) |
|
||||
| 509 | **EPUB С INTERNET ARCHIVE ОТБИВАЕТСЯ НА ВХОДЕ: spine ссылается на id, которого нет в манифесте.** 3 из 4 OCR-книг IA корпуса 19.09 падают с `spine references 1 manifest id(s) with no manifest item [cover]` и на HEAD, и на дереве пака глав; четвёртая — одна глава (одна запись навигации на 408 документов-страниц). Читалки такую ссылку пропускают. Решить: пропускать с нотой ингеста и счётчиком или отказывать, как сейчас, — с доводом | бэкенд | когда-нибудь | решение + пин на выбранный исход | `docs/archive/reports/CHAPTER_STRUCTURE_RESEARCH_2026-09-19/3-real-epubs.md` §4.3 |
|
||||
| 510 | **ЧАСТОТА БИТОЙ НАВИГАЦИИ НА ЦЕЛЕВОМ ЖАНРЕ НЕ МЕРЕНА; КОРПУСУ ГЛАВ НУЖЕН ПОСТОЯННЫЙ ДОМ.** Класс Кристоффа — 1 книга из 100 чистых EPUB (Standard Ebooks, Gutenberg, издательская вёрстка, перегонки Calibre); ранобэ-EPUB из скрейперов и конверсий из Kindle без оглавления в корпусе нет ни одного, а «массовый случай» в `research/27` §5 п.4 — слова панели моделей, не замер. От частоты зависит, нужна ли книге с исходом «структура не подтверждена» отдельная машинерия (арбитр-модель по согласию пользователя, `research/27` §3а). ✅ **ДОМ КОРПУСА ЗАКРЫТ 20.09 словом владельца «клади в репозиторий книг сам»:** `books/corpus-chapters/` — **88 книг** с `README.md` и `CORPUS.tsv` (язык · лицензия · размер · sha256 каждого файла), коммиты `82cef3b` и `b9e06a0`; исключены 5 книг Доктороу и 4 их перегонки Calibre (CC BY-NC-SA, продукт коммерческий; вместе с ними ушёл единственный датский текст). Тесты читают корпус штатным `standdata`, новой переменной нет. ⛔ **Живой остаток строки — только частота на ЦЕЛЕВОМ жанре** | бэкенд | когда-нибудь (целевой жанр) | замер на корпусе ранобэ-EPUB из скрейперов и конверсий из Kindle | `D39.273`; `CHAPTER_STRUCTURE_RESEARCH_2026-09-19/0-synthesis.md` §3, «Пределы» |
|
||||
| 511 | **СОВЕТ ДВИЖКА «ОБЪЯВИТЕ КОДИРОВКУ ЯВНО» ВЫПОЛНИТЬ НЕЛЬЗЯ НИ ДЛЯ ОДНОГО ЯЗЫКА, КРОМЕ КИТАЙСКОГО: набор имён — закрытый свитч в Go.** `backend/internal/chunk/ingest.go:471`=`switch enc := strings.ToLower(strings.TrimSpace(encoding)); enc {` принимает `auto`, `utf8`, `gb18030`, `gbk`, `gb2312`; всё прочее уходит в `default` с текстом, который советует ровно те же имена. **Замер зоны исполнением** (проба зовёт `decodeSourceBytes` напрямую): ja Shift-JIS · ko EUC-KR · ru CP1251 — отказ и при `auto`, и при ЯВНОМ объявлении; контрольная строка zh GB18030 при `auto` — принято, то есть прибор спросил существующий предмет. Декодеры уже в `go.mod` (`golang.org/x/text/encoding/japanese`, `korean`, `charmap`). Лечение — таблица «имя кодировки → декодер» поверх уже подключённого `x/text/encoding`. ⛔ **ЧЕГО ДЕЛАТЬ НЕЛЬЗЯ, и это ратифицировано:** привязка АВТО-пробы к китайскому (`backend/internal/chunk/ingest.go:533`=`zhScoped := sourceLang == ""`) — не дефект, а решение с доводом: GB18030 отображает почти любую последовательность байт в ханьские кодпоинты, поэтому проба на японском или латинском файле даёт не отказ, а правдоподобную кракозябру, неотличимую от китайского (`backend/internal/chunk/ingest.go:512`=`Chinese encoding that maps almost every byte sequence to Han-shaped codepoints`). Сам китайский декодер и его проба обязательны по `D17` п.5(а) и `D18` (`docs/archive/architecture/05-decisions-D1-D38.md:216`, `:226`). ⇒ общая форма НЕ «пробовать всё подряд», а «какие legacy-кодировки языку позволено авто-пробовать — данные его языка»; у английского список пуст, и это правильно. ⚠ Текст существующих книг правка не двигает, окна пере-кроя не требует | бэкенд | скоро (кандидат в пак языковых плоскостей) | таблица имён кодировок + ключ «авто-пробы» в данных языка + пины: явное объявление принято · чужая кодировка при `auto` падает громко · zh-проба цела | находка бэкенд-сессии `textmachine-main-c9` 20.09 (её же сверка ратификации), пере-проверена оркестратором чтением кода и журнала; перепись языковых правил 19.09 этой оси НЕ касалась |
|
||||
| 511 | **СОВЕТ ДВИЖКА «ОБЪЯВИТЕ КОДИРОВКУ ЯВНО» ВЫПОЛНИТЬ НЕЛЬЗЯ НИ ДЛЯ ОДНОГО ЯЗЫКА, КРОМЕ КИТАЙСКОГО: набор имён — закрытый свитч в Go.** `backend/internal/chunk/ingest.go:471`=`switch enc := strings.ToLower(strings.TrimSpace(encoding)); enc {` принимает `auto`, `utf8`, `gb18030`, `gbk`, `gb2312`; всё прочее уходит в `default` с текстом, который советует ровно те же имена. **Замер зоны исполнением** (проба зовёт `decodeSourceBytes` напрямую): ja Shift-JIS · ko EUC-KR · ru CP1251 — отказ и при `auto`, и при ЯВНОМ объявлении; контрольная строка zh GB18030 при `auto` — принято, то есть прибор спросил существующий предмет. Декодеры уже в `go.mod` (`golang.org/x/text/encoding/japanese`, `korean`, `charmap`). Лечение — таблица «имя кодировки → декодер» поверх уже подключённого `x/text/encoding`. ⛔ **ЧЕГО ДЕЛАТЬ НЕЛЬЗЯ, и это ратифицировано:** привязка АВТО-пробы к китайскому (`backend/internal/chunk/ingest.go:533`=`zhScoped := sourceLang == ""`) — не дефект, а решение с доводом: GB18030 отображает почти любую последовательность байт в ханьские кодпоинты, поэтому проба на японском или латинском файле даёт не отказ, а правдоподобную кракозябру, неотличимую от китайского (`backend/internal/chunk/ingest.go:512`=`Chinese encoding that maps almost every byte sequence to Han-shaped codepoints`). Сам китайский декодер и его проба обязательны по `D17` п.5(а) и `D18` (`docs/archive/architecture/05-decisions-D1-D38.md:216`=`GB18030-детект/конверсия в ingest`, `:226`). ⇒ общая форма НЕ «пробовать всё подряд», а «какие legacy-кодировки языку позволено авто-пробовать — данные его языка»; у английского список пуст, и это правильно. ⚠ Текст существующих книг правка не двигает, окна пере-кроя не требует | бэкенд | скоро (кандидат в пак языковых плоскостей) | таблица имён кодировок + ключ «авто-пробы» в данных языка + пины: явное объявление принято · чужая кодировка при `auto` падает громко · zh-проба цела | находка бэкенд-сессии `textmachine-main-c9` 20.09 (её же сверка ратификации), пере-проверена оркестратором чтением кода и журнала; перепись языковых правил 19.09 этой оси НЕ касалась |
|
||||
| 512 | **ДАННЫЕ ЯЗЫКА МОГУТ УРОНИТЬ ДВИЖОК ПАНИКОМ, и зовётся это каждый прогон.** Реестр письменностей — закрытая Go-карта шести имён (`backend/internal/lang/script.go:19`=`var scriptRanges = map[string]*unicode.RangeTable{`), её докблок обещает «add a script is one row here plus the data that names it», но имя, которого в карте нет, даёт не громкий отказ загрузки, а `panic` (`backend/internal/lang/script.go:77`=`panic(fmt.Sprintf("lang: lang-script names script %q with no Unicode range`), и путь боевой (`backend/internal/pipeline/runner.go:442`=`r.checkers.SetSourceScripts(lang.LangScripts(r.Book.SourceLang))`). **Замер зоны на копии:** строка `el greek` в `internal/lang/data/lang-script.txt` ⇒ PANIC; контроль `ru cyrillic` ⇒ 1 диапазон; контроль языка вне файла ⇒ 0 диапазонов без паника. ⇒ обещание «новый язык добавляется данными» в один шаг ведёт к падению | бэкенд | скоро (кандидат в пак языковых плоскостей) | неизвестное имя письменности — отказ загрузки пакета с именем и списком известных, пин на отказ и на живое имя | находка бэкенд-сессии `textmachine-main-c9` 20.09, пере-проверена оркестратором чтением |
|
||||
| 513 | **У «ПЛОТНОЙ ПИСЬМЕННОСТИ» ДВА ДОМА, И НИ ОДИН ПИН ИХ НЕ СВЕРЯЕТ — распад ратифицированной консолидации (ряд 34, `D39.64`).** `backend/internal/text/runes.go:87`=`func DenseScript(r rune) bool` (руны Han · Hiragana · Katakana · Hangul) и `backend/internal/lang/script.go:31`=`var cjkScriptNames = map[string]bool{` — оба докблока называют себя единственным домом; слить нельзя по построению (`lang` импортирует `text`, обратной дороги нет). Читает первый ДЕНЕЖНЫЙ путь: резервирование вывода, бюджет нарезки, прайс-проекция, бюджет глоссария. **Замер зоны:** тестовых файлов, упоминающих `DenseScript`, — 0; `cjkScriptNames` — 0. ⇒ добавивший плотную письменность в данные оставит денежную таксономию прежней, и не покраснеет ничего | бэкенд | скоро (кандидат в пак языковых плоскостей) | один источник имён письменности для обоих домов ИЛИ пин, краснеющий при расхождении списков | находка бэкенд-сессии `textmachine-main-c9` 20.09, пере-проверена оркестратором чтением |
|
||||
| 514 | **САНИТАЙЗЕР ЧИТАЕТ ВЕРНУЮ ПРОЗУ CJK-ЦЕЛИ КАК УТЕЧКУ: у латинского класса гард цели есть, у CJK-класса — нет.** Соседние строки одной функции: `backend/internal/checks/sanitizer.go:239`=`if c.TargetScriptNonLatin() {` против `backend/internal/checks/sanitizer.go:249`=`if n, det := detectCJKLeak(folded); n > 0 {`. Текст оператору вдобавок зашивает цель словом (`sanitizer.go:671`, «CJK leak in the ru output»). **Замер зоны прогоном класса:** верная японская проза — 3 «утечки», китайская — 3, корейская — 10; контроль верной русской — 0; контроль настоящей китайской вставки в русском — 1 (прибор не залипший). ⇒ первая же пара →ja/→zh/→ko получит каждый чистый кусок помеченным | бэкенд | скоро (до первой пары с CJK-целью) | гард цели у CJK-класса + текст оператору из данных, пины в обе стороны | находка бэкенд-сессии `textmachine-main-c9` 20.09, пере-проверена оркестратором чтением |
|
||||
|
|
|
|||
|
|
@ -5221,7 +5221,7 @@ EPUB настоящим ингестом; ревью-шапка там же).
|
|||
|
||||
**2. КОРЕНЬ — ЗАКАЗ ОРКЕСТРАТОРА, И ЭТО ЗАПИСАНО, ЧТОБЫ НЕ ЛЕЧИЛИ ИСПОЛНИТЕЛЯ.** Промт пака велел резать по объединению
|
||||
навигации с заголовками грамматики «в любой позиции» и запретил читать якоря и трогать `extractXHTML`. Первое снял
|
||||
FIXLIST-2 (принцип лицензии); второе — эта нота. Движок выбрасывает `#id` (`backend/internal/chunk/epubtoc.go:95`) и не читает
|
||||
FIXLIST-2 (принцип лицензии); второе — эта нота. Движок выбрасывал `#id` в `hrefTarget` — адрес этой строки НЕ привожу намеренно: пак её и переписал, теперь якорь возвращает `hrefParts` (`backend/internal/chunk/epubtoc.go:100`=`func hrefParts(baseDir, href string) (doc, anchor string, insideDoc bool)`) — и не читал
|
||||
ссылок текста книги, после чего восстанавливает то же сопоставлением названий — самая слабая улика в файле. Индустрия
|
||||
(читалки, Calibre `create_toc_from_links`, требование KDP «must be HTML links») сшивает оглавление с текстом ССЫЛКОЙ.
|
||||
|
||||
|
|
@ -5355,11 +5355,11 @@ Gutenberg, дерево ДО против лендинг-дерева): **1 гл
|
|||
якоря nav, спроецированные на поток») ПОДТВЕРЖДЁН стройкой. Ряды **508**–**511** и **516**–**518** заведены этой сменой.
|
||||
Ряд **346** закрыт целиком: его половина (б) ехала в этом паке по `D39.270` п.7, и предикат заголовка теперь ОДИН —
|
||||
`lang.SourceStructure.ParseHeader` с потолком `lang.HeaderMaxRunes`, его зовут и чанкер (`chunker.go:173`), и решение
|
||||
(`cut/headings.go:66`). ⚠ **Ряд 302 ратифицировал ещё и WARN `targets collapsed` — его диспозиция:** смысл «разрез грубее»
|
||||
(`backend/internal/cut/headings.go:66`=`if h, ok := st.ParseHeader(u.text); ok {`). ⚠ **Ряд 302 ратифицировал ещё и WARN `targets collapsed` — его диспозиция:** смысл «разрез грубее»
|
||||
умер вместе со схлопыванием, нота заменена на `entries_sharing_a_position`; счётчик `out.collapsed` в `resolveTOC` остался
|
||||
без читателя и с докблоком, утверждающим снятый смысл, — ряд **521**.
|
||||
⚠ **Что НЕ закрыто, и первая редакция говорила это неверно:** отказ интейка «книга меньше чем из двух глав» — предикат над
|
||||
ДВИЖКОВЫМ числом (`platform/internal/books/parse.go:219`), строить платформе нечего: где движок отдал ≥2 глав, отказ не
|
||||
ДВИЖКОВЫМ числом (`platform/internal/books/parse.go:219`=`if m.ChaptersTotal < 2 && atIntake {`), строить платформе нечего: где движок отдал ≥2 глав, отказ не
|
||||
срабатывает сам. После пака класс китайских EPUB (1 → 107 · 90 · 38 · 41 · 41) проходит; ОСТАЮТСЯ книги, которые движок
|
||||
честно режет в одну главу — OCR из Internet Archive и любая книга с одной размещённой записью без грамматики. Платформенное
|
||||
здесь одно: формулировка отказа («Our reach, not their file») для починенных классов протухла.
|
||||
|
|
@ -5368,7 +5368,7 @@ Gutenberg, дерево ДО против лендинг-дерева): **1 гл
|
|||
они РАЗОВЫЕ — ряд **522**.
|
||||
|
||||
**7. ДЕНЬГИ И ПЛАТФОРМА.** `detected` остаётся единственным словом, по которому платформа предлагает заказ главами
|
||||
(`platform/internal/ingest/manifest.go:304`), и пак его не расширял. ⚠ Посылка платформы «`declared` не доверяем, потому
|
||||
(`platform/internal/ingest/manifest.go:304`=`return m.Structure == StructureDetected`), и пак его не расширял. ⚠ Посылка платформы «`declared` не доверяем, потому
|
||||
что движок не читает nav» (`manifest.go:288–292`) ПРОТУХЛА: движок читает навигацию с якорями. ⚠ **И довод «это просто исполнение `D39.196`» — мой, и он неверен:** какие СЛОВА провенанса
|
||||
означают «книга распозналась», решил отдельный платформенный акт 05.09 (`detected` и только он), поэтому включение
|
||||
`declared`/`repaired` — НОВАЯ ратификация и правка кода платформы, а не применение старой. Пинг в платформенный журнал
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
Заландён движковый пак «граница главы», акт **`D39.274`**. Пинг, а не заказ: правки в вашей зоне делает зона.
|
||||
|
||||
**1. Протухла посылка в вашем коде, и она несущая для денег.** Докблок `ChapterOrdersOffered`
|
||||
(`platform/internal/ingest/manifest.go:288–292`) объясняет, почему `declared` не доверяется: «the real chapter boundaries
|
||||
(`platform/internal/ingest/manifest.go:288`=`the table of contents: the real chapter boundaries live in`) объясняет, почему `declared` не доверяется: «the real chapter boundaries
|
||||
live in `nav`/NCX, **which the engine does not read yet**». С этого акта движок читает `nav`/NCX ЦЕЛИКОМ — каждую запись
|
||||
и её якорь, с точностью до абзаца; на корпусе из 85 читаемых книг 79 получают `declared` именно по записям навигации, а
|
||||
не «по документам». Довод недоверия в прежней форме больше не верен. ⛔ Это НЕ значит «начните доверять»: решение о
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue