Gate the cut per distinct source rather than per config, and name what happens to a pair file that lives on another branch

This commit is contained in:
heaven 2026-09-05 22:01:14 +03:00
parent 5a502e7c43
commit cd553290d0

View file

@ -71,11 +71,15 @@
**А `langpack_root` / `langpack_extend` НЕ трогай** — они только читаются, и подмена дала бы
другой `Pack.Version()`, то есть другой `cutTag`: пин снялся бы с другого разреза, и сравнивать
было бы нечего.
⛔ **И знай, КУДА они указывают: у большинства стендовых конфигов `langpack_root` смотрит в
СОСЕДНЕЕ дерево** (`/home/ubuntu/projects/textmachine/backend/configs/langpacks`), а деревья
различаются — комментарий одного из конфигов прямо говорит, что `ru/` есть только там. **Поэтому
§7 разрешает ЧТЕНИЕ соседнего дерева ровно по тем путям, на которые указывают конфиги стенда.**
Перенаправлять их нельзя (см. выше), писать туда нельзя.
⛔ **И знай, КУДА они указывают: у ДВАДЦАТИ конфигов из 31 `langpack_root` смотрит в СОСЕДНЕЕ
РАБОЧЕЕ ДЕРЕВО, а оно на ДРУГОЙ ВЕТКЕ** (`/home/ubuntu/projects/textmachine`, ветка `polygon`);
ещё девять — в твоё (`main`), два не объявляют его вовсе. **§7 разрешает ЧТЕНИЕ соседнего дерева
по этим путям.** Перенаправлять нельзя (см. выше), писать туда нельзя.
⚠ **Прежняя редакция обосновывала это тем, что «деревья различаются, `ru/` есть только там» —
ЛОЖНО и снято:** замерено 05.09, каталоги `configs/langpacks` в обоих деревьях **байт-в-байт
идентичны** (`diff -rq` пуст, sha256 `heading.txt` совпадают). Комментарии в конфигах стенда,
утверждающие обратное, ПРОТУХЛИ — класс строки 299; править их не твоя зона, но и верить им
нельзя. Чтение разрешено по-прежнему, но не по этому доводу.
2. **Синтетические фикстуры по стандартам:** EPUB 3 с `nav`, EPUB 2 с NCX. Сегодня тестовый билдер
пишет только `container→OPF→spine→xhtml` и **nav/NCX не пишет вовсе** (`chunktest/epub.go:42-82`).
3. **Оракул — КОД, не замер:** EPUB с `nav` разворачивается в txt, путь разреза обязан восстановить
@ -88,9 +92,14 @@
**ПРО НОСИТЕЛЬ ГЕЙТА, иначе пин повиснет в воздухе:** конфигов `book.yaml` для 蛊真人 в дереве книг
ДЕСЯТОК, и **ни один не указывает на полную книгу** — все на срезы (`slice25`, `ch1-10`, `ch1-5`,
`ch4-5`). Полный `guzhenren-gb18030.txt` не привязан ни к одному конфигу.
**Гейт §3 = КАЖДЫЙ существующий конфиг 蛊真人 воспроизводит свой разрез байт-в-байт.** Пин снимается
по каждому, не по «стенду вообще». Полную книгу гоняешь ОТДЕЛЬНО, своим конфигом в своём каталоге;
её результат идёт числом в отчёт и гейтом НЕ является — базовой линии для неё не существует. ⚠ Платная книга платформы `bk_SS5VES2JELESJSTR` живёт в
⇒ **Гейт §3 = каждый РАЗЛИЧНЫЙ ИСХОДНИК воспроизводит свой разрез глав. Их ДЕВЯТЬ, а конфигов 31.**
Это не сужение, а верный предикат: **разрез ГЛАВ есть функция байтов исходника, кодировки и данных
структуры — от пар-пака он не зависит** (шапки ищутся по embedded `cjk-section.txt`, не по паре).
Конфиги, делящие исходник, дают тот же разрез по построению, и тридцать один пин мерил бы одно и то
же девять раз. ⚠ Тридцать один понадобился бы только для сравнения unit-id — а их из гейта вывела
находка 4.
Полную книгу (2283 главы) гоняешь ОТДЕЛЬНО, своим конфигом в своём каталоге; её результат идёт числом
в отчёт и гейтом НЕ является — базовой линии для неё не существует. ⚠ Платная книга платформы `bk_SS5VES2JELESJSTR` живёт в
workdir платформы, **гейту §3 не видна и в него не входит**; её заметки теряются по слову оркестратора.
### 2.2 Данные структуры — ПО ИСТОЧНИКУ, вне пар-пака
@ -164,6 +173,18 @@ and the read-only path so status/export/report reproduce the identical snapshot
`EmbeddedVersion``cutTag`, и такой лендинг НЕ кладётся, пока жива книга платного прогона.**
Оставить там же мёртвые копии ключей тоже нельзя — это класс строки 299.
⛔⛔ **ЧТО ДЕЛАТЬ С ПАР-ФАЙЛОМ, КОТОРЫЙ ЖИВЁТ В ЧУЖОЙ ВЕТКЕ.** Вынув `marker`/`units` из
`zh-ru/heading.txt`, ты обязан решить, как `parseHeading` встретит СТАРЫЙ файл — а он останется
лежать в соседнем дереве на ветке `polygon`, куда тебе писать запрещено. **Ратифицировано:
парсер ОТВЕРГАЕТ `marker`/`units` с ЯВНЫМ переходным сообщением** («moved to source structure data;
remove them from heading.txt»), а не молча их глотает. Терпимость завела бы ровно тот мёртвый ключ,
который запрещён абзацем выше, и превратила бы громкий отказ в тихое расхождение.
**И знай цену, которую это назначает НЕ ТЕБЕ:** двадцать конфигов с корнем в `polygon` сломаются
не при твоём лендинге в `main`, а в тот момент, когда полигон **вольёт main в свою ветку** — до
этого он собирается из своего дерева со своим файлом и своим парсером. Это межветочная зависимость
данных, которую никто не проектировал. **Твоё дело — назвать её числом в отчёте; предупредить
полигон и завести строку — моё.**
### 2.3 EPUB по стандарту
- Читать **`nav` (EPUB 3) и NCX (EPUB 2)**; spine — порядок ЧТЕНИЯ, а не оглавление.