textmachine/docs/archive/reports/BANK_CONSILIUM_INPUTS_2026-09-15/02-design-v1-fable.md

18 KiB
Raw Permalink Blame History

Проект старшего коллеги (Fable 5), 15.09: целевой банк памяти длинной книги — одна архитектура

ОТОЗВАНО 15.09 — АРХИВ-УЛИКА, НЕ ПЛАН. Проверка 03 нашла в этой редакции шесть блокеров, сверка 05 — 12 расхождений итоговой редакции с решённым и замеренным. Порядок стройки, «слово владельца» и прочие инструкции ниже НЕ исполнять. Читать только вместе с README.md этого каталога.

Предмет проверки. Автор — Fable 5 (советчик оркестратора). Утверждения о коде — по дереву 5dbb5cb (/home/ubuntu/tm-verify-1509). Пометка [мнение] — мнение автора. Текст ниже — дословно из его отчёта.

0. Диагноз одной фразой

Сегодня банк — пересчёт: на каждой границе прогона движок заново спрашивает модель обо всём и переписывает файл целиком (mining.go:766-775; проход куплен заново на подписи и на каждой покупке — volume.go:333-352 говорит это сам). Все восемь проблем списка — следствия трёх вещей: решение не записывается как решение, тождество ключа определено сырой строкой, а исход «не закон» не существует. Лечится не заплатками, а сменой природы банка: банк — журнал решений с окнами, свёрнутый в закон.

1. Что банк есть

(a) Тождество ключа — одно определение, параметризованное данными исходного языка. Ядро даёт ровно одну функцию Identity(surface) = универсальные шаги (NFKC · lower · drop-ignorables · апостроф) + шаги, ОБЪЯВЛЕННЫЕ данными configs/langpacks/<src>/ (таблица свёртки рун, флаг «снять комбинирующие знаки», диапазонные свёртки). Сегодня трад→упрощ. таблица и кана-свёртка зашиты в ядро и применяются к ЛЮБОМУ источнику (text/norm.go:47-48 //go:embed data/trad2simp.txt; :141-153 — trad2simp и 0x30A1..0x30F60x60 безусловно; сам файл называет свой скоуп «zh/ja»: :28). Это нарушает §0.1/§0.5 норматива общности и ломает японский: 後 «после» и 后 «императрица» — оба живые кандзи — схлопываются в один ключ, ハル (имя) = はる (весна); симметрия свёртки спасает матчинг, но даёт ЛОЖНЫЕ тождества, а майненые строки и промт терминолога получают чужое письмо (mining.go:82 src = нормализованный текст; terminology.go:774 печатает его модели). Прецедент выноса есть: письмо источника уже данные (lang/data/lang-script.txt: zh/ja/ko/en/ru), pack.Version() фолдит байты пакета в снапшот (langpack.go:204; §0.1 норматива) — громкий --resnapshot сохраняется. Аналоги в других языках — класс универсальный, только таблица своя: ja — старые/новые кандзи (舊/旧), кана и её ширина; ko — ханча↔хангыль, пробелы; de — ß/ss, ä/ae; fr/es/pt — потеря диакритики в скрапах, капитель без акцентов; ru-источник — ё/е, й/и; ar — харакат, варианты алефа إأآا, ة/ه, ي/ى; he — никкуд. NFKC ничего из этого не сворачивает, кроме лигатур и ширины; ё→е сегодня зашито на ЦЕЛЕВОЙ стороне (norm.go:203-205) и уже стоит в очереди владельца как «данные» (D39.64 §5, ряд 14). Все двери сравнивают по Identity — сид-линт, дельта, загрузчик авто-банка (сегодня сырой кортеж mining.go:717-733), майнер, реверс, уступка на проводе (сегодня сырой src memory.go:905,925), UNIQUE схемы (migrate.go:203,389 — по сырому src). Хранимый src остаётся авторским — для показа. ⇒ ряд 330 исчезает как класс для любого языка: две строки одного Identity в пересекающихся окнах — одна поверхность; движок такого не производит, рука получает отказ линта или требование sense/окна. «Разные написания — китайская проблема?» — нет; китайской была только таблица в ядре.

(b) Единица закона = (Identity, sense, окно [since, until]) → dst, gender. Схема это уже держит (UNIQUE migrate.go:203; окна memory.go:681-689). Меняется роль окна: из спойлер-гейта оно становится ЕДИНСТВЕННЫМ инструментом изменения закона по ходу книги. sense — только рукой и без рантайм-дизамбигуации (матчер ключуется только по src: memseed.go:203-207) ⇒ полисемия ВНУТРИ окна в банке невыразима — и не должна быть: по принципу 6 такой surface либо не закон, либо закон плюс оговорка области употребления у редактора (D39.104 п.1 её обещал; в editor.md её нет — только :5 идиомы и :7 «СТРОГО»). Оговорка — обязательная часть архитектуры, а не патч: она и есть механизм «имя против обычного слова» (方正).

(c) Решение — событие с провенансом, а не пересчёт. Кто решил (терминолог/владелец), в каком прогоне, на каких уликах (окна источника, варианты черновиков, уверенность, INVENTED), с каким исходом. Банк книги = детерминированная свёртка журналов по окнам: журнал владельца (дельта/rejects, дверь) и журнал движка (авто-банк — из «проекции этого прогона» становится append-журналом). Онтология 18 сохраняется буквально: источники → вид → проекции, у каждого источника один писатель, вид пересобирается целиком на границе; меняется лишь то, что источник движка накопительный, как и все прочие источники. Следствия, которые раньше были заплатками: «заморозка» — нечего пере-решать, решение уже записано; повтор прогона реплеит события, а не модель (принцип 8); терминолог вызывается только для Identity без действующего закона в окне — цена падает с томами, а не растёт (pipeline-c1.yaml:161-162 называет сегодняшнюю обратную кривую).

(d) Приём — закрытый словарь исходов. Номинация — открытый набор каналов (майнер по источнику, банкнота черновиков, владелец; позже — любой канал данных, напр. частотный по паре); архитектура впуск обычных существительных не закрывает и не открывает — это остаётся решением владельца по замеру (D39.47/ряд 440; сегодня 家族/族 режет срез top-200 ДО типа, miner_emit.go:126-129). Решение терминолога — один из: law(dst, gender, conf) · not-a-term (принцип 6: слово остаётся свободным, закона НЕТ) · polysemous (нужен sense/окно; на лист, не закон) · undecided (нет улик; не закон; спросить снова, когда появятся новые улики — новый том номинировал повторно). Парсер принимает только словарь + рендеринг в целевом письме; сегодня «не термин» и «90» становятся законом, а ⟦TM-NO-DST⟧ отдаёт закон догадке черновика (terminology.go:1115-1121miner_emit.go:261-269). Предохранитель «имя выкинуть нельзя» — не тип (стохастичен, B7), а ДЕТЕРМИНИРОВАННАЯ улика майнера (Evidence, terminology.go:106; паттерны фамилий/титулов/топонимов — данные пары): при ней not-a-term запрещён, отказ превращается в undecided. Улики решению — не «первые три вхождения» (terminology.go:375-396), а выборка по всей книге и вокруг расхождений черновиков (параметры — данные пары/гейт; тот же вызов, другой вход — позиция 5 владельца).

(e) Изменение по ходу книги — преемник. Событие «с главы N: dst'/gender'» закрывает прежнее окно (until=N1) и открывает новое. Источники: владелец через дверь ОДНИМ глаголом (succeed; сегодня два глагола, окно одним решением не правится, decline стирает все окна — decisions.go:33-34,86-92) или движок по детектору — по умолчанию ПРЕДЛОЖЕНИЕ на лист, исполнение — ручка. Детекторы — данные пары: местоимения рода по главам (<src>/pronouns.txt: 他/她 · he/she · er/sie), расхождение черновиков нового тома по конвенции ≥K кусков. Главы ≤N не трогаются по построению: их строка провода не меняется ⇒ $0-репин (volume.go:798-840, repin.go:305-327); дверь пишет только дельту (Source:mined, до черновиков не доходит — decisions.go:50-57, bankmaterialize.go:318-333), сид не трогается никогда ⇒ «пол книги перегенерировать» невозможно без явного заказа пере-прохода (принцип 7).

(f) Провод и рычаги. Редактору — как сегодня, один закон на Identity в окне куска (D39.104) плюс оговорка области употребления; черновик по-прежнему без движковых строк — это правильно: черновик остаётся СВИДЕТЕЛЕМ (варианты), а не потребителем закона, и черновая волна не перекупается никогда. Проекции с названным читателем: terms = действующий закон по окнам, proposed = события этого прогона (новое, undecided, polysemous, предложения преемников, споры) — платформа обязана читать обе (сегодня только terms, platform/internal/ingest/bank.go:57-70); лист подписи = дельта событий; отчёт сборки — по отгрузке. Рычаги человека без обязательного человека: approve · decline · succeed.

2. Как проходит каждая проблема

пере-решение на подписи/покупке → решения — события, терминолог только для новых Identity, резюм — реплей · сущность меняется → преемник (dst и род — поля события), детектор по данным пары, один глагол двери · два закона на поверхность → Identity + окна структурно; написания — таблица <src>/; рукописные пары — линт · отказ = догадка законом → словарь исходов; not-a-term/undecided не порождают закон · тип/род стохастичны → тип закона не несёт; род — поле события с преемником; регенерация классификатора — инженерное · одно наблюдение / INVENTED → улики по всей книге, INVENTED — метка события на лист, повторный вопрос только при новых уликах (undecided), не ре-ролл · нет читателя → proposed читает платформа, лист = дельта · обычные существительные → номинация открыта, исход not-a-term держит принцип 6, решение о расширении — владельца.

3. Трейдоффы

Первое решение живёт до преемника — цена принципа 2; смягчается уликами и N=2-согласием на спорных (центы) [мнение]. Детектор преемника ошибается в сторону ложного разреза ⇒ по умолчанию предложение. Журнал вместо перезаписи — миграция формата авто-банка; кап 200 — на события прогона, не на размер банка; рост банка упирается в бюджет инъекции 800/кусок, вытеснение по-кусковое и логируемое (memory.go:662-672). Identity по данным пары: правка таблицы = --resnapshot книг пары (как сегодня NormVersion, только через pack.Version()); zh-книги переживут один пере-снапшот при выносе — в фазе «одна платная книга» это $0 (D39.63). Оговорка в промте редактора фолдится в снапшот — окно пере-снапшота. Терминолог остаётся единственным стохастическим шагом — теперь его выход записывается.

4. Порядок стройки

Пакет 1 (бэкенд, $0 + центы перекупки банк-ролей): журнал событий движка (append) + свёртка по окнам + терминолог только по новым Identity + реплей-пины (стоп→подпись→резюм; том 2 не меняет закон тома 1) · словарь исходов в промте (данные) + парсер + защита по улике · Identity в ядре с таблицей в configs/langpacks/zh/, дедуп/уступка/загрузчик по Identity, UNIQUE по Identity (миграция схемы) · преемник — движковая половина + глагол двери (контрактный минор) · proposed с исходами и спорами · счётчик промахов по неподписанным. Пакет 2: платформенный читатель proposed (зона платформы, ряд 224) · детектор рода по местоимениям и детектор споров (данные пары) как предложения · расширенные улики терминологу · регенерация классификатора. В окне пере-снапшота (вместе со структурой глав): оговорка области употребления в промте редактора; ё-фолд цели в данные. Позже, по слову владельца: авто-исполнение преемника; расширение номинации на обычные существительные.

5. Слово владельца — три пункта

  1. Банк — журнал решений: принятое не пересчитывается, меняется только преемником с главы N (человеком или предложением детектора). 2. Исход «не термин» оставляет слово свободным, а детерминированная улика имени запрещает этот исход — так держится «не обеднять язык» без человека. 3. Автоматические преемники без человека — выключены до статистики первой длинной книги (или «никогда без человека» — тогда детекторы только предлагают).