From cd553290d049a4b2e80f8d4982ba25f40db85b66 Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 5 Sep 2026 22:01:14 +0300 Subject: [PATCH] Gate the cut per distinct source rather than per config, and name what happens to a pair file that lives on another branch --- docs/CHAPTER_STRUCTURE_SESSION_PROMPT.md | 37 +++++++++++++++++++----- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/docs/CHAPTER_STRUCTURE_SESSION_PROMPT.md b/docs/CHAPTER_STRUCTURE_SESSION_PROMPT.md index a5133e47..91940fbe 100644 --- a/docs/CHAPTER_STRUCTURE_SESSION_PROMPT.md +++ b/docs/CHAPTER_STRUCTURE_SESSION_PROMPT.md @@ -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 — порядок ЧТЕНИЯ, а не оглавление.