Keep the embedded cut data untouched so the landing rule still holds, give the gate configs that exist, and let the stand's langpack root be read where it actually lives
This commit is contained in:
parent
24f02bb774
commit
23b00a31af
1 changed files with 41 additions and 9 deletions
|
|
@ -71,6 +71,11 @@
|
|||
⚠ **А `langpack_root` / `langpack_extend` НЕ трогай** — они только читаются, и подмена дала бы
|
||||
другой `Pack.Version()`, то есть другой `cutTag`: пин снялся бы с другого разреза, и сравнивать
|
||||
было бы нечего.
|
||||
⛔ **И знай, КУДА они указывают: у большинства стендовых конфигов `langpack_root` смотрит в
|
||||
СОСЕДНЕЕ дерево** (`/home/ubuntu/projects/textmachine/backend/configs/langpacks`), а деревья
|
||||
различаются — комментарий одного из конфигов прямо говорит, что `ru/` есть только там. **Поэтому
|
||||
§7 разрешает ЧТЕНИЕ соседнего дерева ровно по тем путям, на которые указывают конфиги стенда.**
|
||||
Перенаправлять их нельзя (см. выше), писать туда нельзя.
|
||||
2. **Синтетические фикстуры по стандартам:** EPUB 3 с `nav`, EPUB 2 с NCX. Сегодня тестовый билдер
|
||||
пишет только `container→OPF→spine→xhtml` и **nav/NCX не пишет вовсе** (`chunktest/epub.go:42-82`).
|
||||
3. **Оракул — КОД, не замер:** EPUB с `nav` разворачивается в txt, путь разреза обязан восстановить
|
||||
|
|
@ -78,8 +83,14 @@
|
|||
4. **Замеры ДО правок, каждый числом в отчёт:** есть ли `\f` в стенд-книгах · есть ли главы-огрызки
|
||||
от print-TOC · сбрасывается ли нумерация по томам.
|
||||
|
||||
**Файлы стенда — поимённо** (см. §7 о доступе): 蛊真人 (GB18030 txt, ~2283 «第N节») · EPUB владельца
|
||||
Кристофф/en · EPUB владельца isekai/ja. ⚠ Платная книга платформы `bk_SS5VES2JELESJSTR` живёт в
|
||||
**Файлы стенда — поимённо** (см. §7 о доступе): 蛊真人 (GB18030 txt, **ровно 2283** «第N节») · EPUB
|
||||
владельца Кристофф/en · EPUB владельца isekai/ja.
|
||||
⛔ **ПРО НОСИТЕЛЬ ГЕЙТА, иначе пин повиснет в воздухе:** конфигов `book.yaml` для 蛊真人 в дереве книг
|
||||
ДЕСЯТОК, и **ни один не указывает на полную книгу** — все на срезы (`slice25`, `ch1-10`, `ch1-5`,
|
||||
`ch4-5`). Полный `guzhenren-gb18030.txt` не привязан ни к одному конфигу.
|
||||
⇒ **Гейт §3 = КАЖДЫЙ существующий конфиг 蛊真人 воспроизводит свой разрез байт-в-байт.** Пин снимается
|
||||
по каждому, не по «стенду вообще». Полную книгу гоняешь ОТДЕЛЬНО, своим конфигом в своём каталоге;
|
||||
её результат идёт числом в отчёт и гейтом НЕ является — базовой линии для неё не существует. ⚠ Платная книга платформы `bk_SS5VES2JELESJSTR` живёт в
|
||||
workdir платформы, **гейту §3 не видна и в него не входит**; её заметки теряются по слову оркестратора.
|
||||
|
||||
### 2.2 Данные структуры — ПО ИСТОЧНИКУ, вне пар-пака
|
||||
|
|
@ -124,11 +135,15 @@ workdir платформы, **гейту §3 не видна и в него не
|
|||
**unit-id**. `manifestKey` фолдит компоненты ПОРОЗНЬ (`manifest.go:336-354`), и одного его
|
||||
НЕДОСТАТОЧНО: правка данных перережет книгу, а id юнитов переживут — ровно тот дефект, ради которого
|
||||
тег и заведён. **В снапшот волн — НЕ класть.** Тест `TestEveryCutInputMovesTheTag`
|
||||
(`cuttag_test.go:26`) получает новый компонент.
|
||||
(`cuttag_test.go:26`) подвинется САМ — он идёт по полям рефлексией. ⚠ Ручной список живёт в соседнем
|
||||
**`TestTheCutTagActuallyCarriesTheEngineData` (`cuttag_test.go:54-61`)** — новый компонент туда сам
|
||||
не попадёт, добавляй руками.
|
||||
|
||||
**ФОРМА компонента — не на твоё усмотрение, она уже задана прецедентом:**
|
||||
`Structure: <версия парсера> + sha256(байты структурных данных, РЕАЛЬНО загруженных для этой книги —
|
||||
`<source>/structure.txt` либо дефолт по скрипту)`. **Никогда `omitempty`** — дефолт есть всегда.
|
||||
`<source>/structure.txt` либо дефолт по скрипту)`. **Никогда `omitempty`** — дефолт есть всегда. ⚠ И не копируй тег с `Langpack`
|
||||
буквально: у него `omitempty` КАК РАЗ стоит, и в голдене `langpack_version` отсутствует вовсе. Бери
|
||||
из его формы ПРИНЦИП — «считается одинаково на пишущем и читающем пути», — а не строку тега.
|
||||
Считается ОДИНАКОВО на пишущем и читающем пути (`runner.go:384-386`: «loaded on BOTH the write path
|
||||
and the read-only path so status/export/report reproduce the identical snapshot»). Это ровно форма
|
||||
`Langpack: r.packVersion()`.
|
||||
|
|
@ -137,7 +152,17 @@ and the read-only path so status/export/report reproduce the identical snapshot
|
|||
**остаются в `data/cjk-section.txt`**. Их читает не только ингест — на них стоят ДЕНЕЖНЫЕ $0-гейты
|
||||
величины чисел (`checks/cheapgates.go:601, 636, 649, 666` — `lang.DefaultCJKSection()`), а это
|
||||
ВЕРДИКТНЫЕ данные, и им место в снапшоте. Уносишь числительные — **молча меняются вердикты гейтов**.
|
||||
Переезжают ТОЛЬКО `marker` / `units` / грамматика шаблона.
|
||||
Переезжают ТОЛЬКО `marker` / `units` / грамматика шаблона — **и переезжают они из ПАР-ФАЙЛА
|
||||
(`zh-ru/heading.txt`), а НЕ из `cjk-section.txt`.**
|
||||
⛔⛔ **`internal/lang/data/cjk-section.txt` НЕ ПРАВИТСЯ ВООБЩЕ — ни одной строкой.** Он уже объявляет
|
||||
себя единственным источником истины для разреза, и чанкер просто начинает читать ЕГО (через
|
||||
`lang.DefaultCJKSection()`) вместо своей отставшей копии — **вот этим дрейф и закрывается.**
|
||||
Тронешь файл — сдвинется `EmbeddedVersion`, а он тянет три вещи, каждая из которых тебя остановит:
|
||||
голден несёт **четыре строки `embedded_version`** наравне с `chunker_version`;
|
||||
`TestChapterMarkerIsData` (`langpack_test.go:454`) краснеет НЕ заказанным; и — главное —
|
||||
**CURRENT-STATE (`docs/PROGRESS.md`) держит правило лендинга: правка `lang/data/*.txt` двигает
|
||||
`EmbeddedVersion` → `cutTag`, и такой лендинг НЕ кладётся, пока жива книга платного прогона.**
|
||||
Оставить там же мёртвые копии ключей тоже нельзя — это класс строки 299.
|
||||
|
||||
### 2.3 EPUB по стандарту
|
||||
|
||||
|
|
@ -321,8 +346,10 @@ and the read-only path so status/export/report reproduce the identical snapshot
|
|||
- **Платформенное:** предикат «двух свидетелей» и `structure_version` · снятие временного правила
|
||||
по `declared` (строка 297) · глагол «перечитать журнал» — **всё это НЕ твоя зона.** Не добавляй
|
||||
полей «для платформы».
|
||||
- ⛔ **Рендер при сбросе нумерации по томам — ВОПРОС ВЛАДЕЛЬЦА, не чинить.** Ты УВИДИШЬ в `nav`
|
||||
платного EPUB несколько глав с одним номером. Это выбор рендера (номер книги против плотного
|
||||
- ⛔ **Рендер при сбросе нумерации по томам — ВОПРОС ВЛАДЕЛЬЦА, не чинить.** ⚠ Прежняя редакция
|
||||
обещала, что ты увидишь это «в `nav` платного EPUB» — **неверно и снято**: платная книга платформы
|
||||
собрана из десятиглавого txt-среза, `nav` там нет вовсе, и сброса по томам в главах 1–10 быть не
|
||||
может. Увидеть это можно только на ПОЛНОЙ 蛊真人, где нумерация и сбрасывается. Это выбор рендера (номер книги против плотного
|
||||
ординала), он вне пака. Увидел — запиши числом в отчёт и иди дальше.
|
||||
- **`narezka.py` полигона** (второй приватный zh-детектор) — пинг полигону от оркестратора, не твоё.
|
||||
- ⛔ **Сквозного прогона не-CJK НЕ БУДЕТ и не заказывается:** промтов пары для en/ja не существует
|
||||
|
|
@ -353,7 +380,10 @@ and the read-only path so status/export/report reproduce the identical snapshot
|
|||
|
||||
- **Доступ к книгам.** `books/` — симлинк в соседнее дерево. **ЧИТАТЬ файлы под `books/` РАЗРЕШЕНО
|
||||
и необходимо** (§2.1 без этого неисполним). ⛔ **ЗАПРЕЩЕНО:** любая запись под `books/`, любые
|
||||
git-операции там, и что-либо ещё в `/home/ubuntu/projects/textmachine` вне `books/`.
|
||||
git-операции там, и любая ЗАПИСЬ в `/home/ubuntu/projects/textmachine`. ⚠ **ЧТЕНИЕ соседнего
|
||||
дерева разрешено там, куда указывают конфиги стенда** — прежде всего `backend/configs/langpacks`
|
||||
(`langpack_root`): без этого §2.1 неисполним, потому что пин обязан сниматься ровно с тем
|
||||
пар-паком, с которым книга резалась.
|
||||
- **Тесты и гейты не подгонять под зелень.** ⚠ Правка, вызванная **заказанной** сменой поведения, —
|
||||
обслуживание. **Заказанные здесь правки тестов, поимённо:**
|
||||
· `priceprojection_test.go:144` — кейс «a form feed is the format speaking» ждёт
|
||||
|
|
@ -361,7 +391,9 @@ and the read-only path so status/export/report reproduce the identical snapshot
|
|||
· тест V2-7 «формат провёл ВСЕ границы» — меняются ДВА кейса, не один: «один случайный `\f`
|
||||
среди шапок» (шапки побеждают, книга `detected`) **и ПЕРВЫЙ кейс `ingest_test.go:68`
|
||||
«the format drew every boundary» (`ГЛАВА A\fГЛАВА B` → `StructureDeclared`), который становится
|
||||
`delimited`**. ⚠ А у кейса `ingest_test.go:74` ожидание НЕ меняется (`detected` и до, и после) —
|
||||
`delimited`**. ⚠ Уточнение, чтобы ты не искал несуществующего: **ассерт переезжает РОВНО ОДИН** —
|
||||
тест сверяет только `doc.Structure`; у кейса с одним `\f` среди шапок ожидание то же и до, и
|
||||
после, у него меняются объясняющий комментарий и ЧИСЛО глав (§4 п.5). ⚠ А у кейса `ingest_test.go:74` ожидание НЕ меняется (`detected` и до, и после) —
|
||||
у него меняется **ЧИСЛО ГЛАВ**, которого никто не проверяет: см. §4 п.5. ⛔ И **само имя** `TestTXTStructureIsDeclaredOnlyWhenTheFormatDrewEVERYBoundary`
|
||||
после конкуренции ни во что не разрешается — **переименовать тем же актом** (класс строки 299,
|
||||
который этот же промт требует ниже для комментариев);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue