# Входы консилиума по банку памяти — доказательная база смены 15.09 > ⚠ **АРХИВ-УЛИКА. НЕ РЕШЕНИЯ И НЕ ЗАКАЗ.** Здесь собрано то, что оркестратор №23 (продолжение, сессия > `textmachine-main-75`) и его советчик Fable 5 выяснили, спроектировали и опровергли 15.09, прежде чем передать > предмет консилиуму. Инструкции отсюда НЕ исполняются. Заказ — `docs/BANK_MEMORY_CONSILIUM_SESSION_PROMPT.md`, > итог консилиума — `docs/research/35-bank-memory-consilium.md`. > Код, по которому всё снято, — `5dbb5cb` (рабочее дерево `/home/ubuntu/tm-verify-1509`); `backend/` и `platform/` > закоммиченного `9241934` те же. Незакоммиченные правки бэкенд-сессии в главном дереве сверщики не смотрели. Базы > прогонов и транскрипт сессии лежат вне репозитория и умрут вместе с машиной. ## Файлы | файл | что это | кто сделал | статус | |---|---|---|---| | `01-premises-verification.json` | Проверка посылок прежнего оркестратора: приём в банк по разнобою черновиков, отказ терминолога, закрытие ряда 330. Три линзы (`A`, `B`, `C`) и критик, код `5dbb5cb`, улики прогонов A/B | воркфлоу оркестратора (Opus) | ОПРОВЕРГНУТЫ: `T4` (отказ у терминолога есть) · `T7` (оба числа провалов — классификатора) · `P1` (подмешать решения в партии терминолога без перекупки нельзя: сообщения собраны заранее) · `B2` (неподписанная строка с передачей едет редактору законом) · `B3` (петли «банк → черновик» нет) · `P2` (смена приёма двигает `memory_version`) · `R2` · `R3` | | `02-design-v1-fable.md` | Проект «банк — журнал решений с окнами», первая редакция | Fable 5 | ⛔ отозван; проверен в `03`, шесть блокеров | | `03-design-v1-verification.json` | Адверсариальная проверка v1: факты кода (`L1`) · ратифицированное и перекрой глав (`L2`) · миграция, деньги, детерминизм (`L3`) · критик | воркфлоу (Opus) | критик: «Как направление для владельца проект годен… В нынешнем виде нести его нельзя» | | `04-design-v2-and-owner-proposal.md` | Вторая редакция Fable и предложение, ушедшее владельцу | Fable 5 + оркестратор | ⛔ **ОТОЗВАНО 15.09**: 12 расхождений с решённым, замеренным и собственным планом (`05`) | | `05-prior-art-map.json` | **Главный вход.** Сплошная сверка репозитория по банку. Сверщики: `S1` решения и планы (60 находок) · `S2` исследования, эксперименты, бриф владельца (69) · `S3` код, построенное и выключенное (52). Сводчик `synthesis`: `per_element` · `missed_smart` · `contradictions` · `must_change` · `sync_honest` · `owner_summary` · `obstacles` | воркфлоу (Opus) | 180 цитат проверены скриптом: 178 дословных, но у 2 из них неверная атрибуция; 1 не найдена; 1 сводчиком не учтена (`synthesis.obstacles`). ⚠ Сверщики читали не всё, знаменатели — оценка снизу. D5 п.1 сверка нашла (`S1` и `S2`, элемент E4; в `synthesis` 6 упоминаний), а оба проекта его не использовали | | `06-owner-words-and-freeze-answers.md` | Выписка скриптом из транскрипта: сообщения владельца 15.09 о банке целиком (одно — из очереди), его реплики из вставки разговора 12.09 и ответы оркестратора о заморозке банка (строки 840, 870, 896, 920, 1038) | скрипт оркестратора | ⛔ ответы оркестратора — отозванное предложение; неподтвердившиеся утверждения перечислены в баннере файла | ## Замеры оркестратора 15.09 Прибор: `python3`, `sqlite3.connect('file:<база>?mode=ro&immutable=1', uri=True)`. Базы: `~/tm-coldrun-a/stand/books/bk_ROEHZBD46ALFI43E/project.db` (A) и `~/tm-coldrun-b/stand/books/bk_NH6275ZIRFFTLZHG/project.db` (B). Сайдкары стопа банка: `books/gu-zhenren/door-to-file/bankstop-paid/` (A) и `books/gu-zhenren/door-to-file-b/bankstop/` (B). ⚠ **Ловушка имён (найдена приёмкой 16.09).** У этих баз есть побайтные близнецы в дереве книг под другими именами: `door-to-file-b/smoke-dbs/migrated-from-runA-v16-to-v18.project.db` — это прогон A (69 строк, 33 вызова, $0.419423), а `door-to-file-b/paid-final-project.db` — прогон B (66, 35, $0.396657). При этом каталоги `books/gu-zhenren/coldrun-a` и `coldrun-b` — ДРУГИЕ, более старые артефакты (ноль строк глоссария; у `coldrun-a` 99 вызовов и $0.126068). Имя `coldrun` обманывает: мерить по ним — замер чужой клетки. ⚠ `books` — симлинк на `/home/ubuntu/projects/textmachine/books`, и `find` без `-L` в него не заходит — даёт ложный ноль. Все числа ниже независимо пере-сняты опровергателем промта тем же прибором и сошлись. - **Пере-решение между стопом и финалом.** Сравнивались `proposed[].dst` из `project.db.bank.json` стопа и `glossary.dst` полной базы, ключ — `src`. - A: все 69 предложенных есть в финале, передача сменилась у 12. - B: все 66 есть в финале, сменилась у 14. - Все сменившиеся строки в финале со статусом `draft`. - ⚠ В обоих прогонах между стопом и финалом был второй проход терминолога после ЧЕЛОВЕЧЕСКОЙ подписи двух термов. - Подпись лежит в `mined-delta.yaml` стендов: по два `status: approved` (`方源`, `古月山寨`). - `docs/experiments/25-door-to-file-b.md:88`: «заход терминологии ИЗМЕНИЛ передачу у **12 термов из 69**». - Эррата 11.09-и (греп `Эррата 11.09-и` в `docs/architecture/05-decisions-log.md`) называет это ценой пере-майнинга после подписи: «Хороши ли эти 12 замен — вопрос КАЧЕСТВА». - Пере-решение на следующей ПОКУПКЕ глав выведено из кода, живьём на многотомной книге не наблюдалось: - предупреждение `a VOLUME ceiling on a book that MINES its bank` (`backend/internal/pipeline/volume.go:351`); - порядок «новые юниты раньше пере-делки» (`:410-427`, `DELIVERY BEFORE REWORK`). - **Разнобой черновиков.** Термов со `spread ≥ 2` на стопе: A — 9, все 9 в финальном glossary; B — 8, все 8 в финале. - **INVENTED** (строки `INVENTED(no draft proposed it)` в `project.db.bank-stop.txt`): A — 11 из 69, B — 17 из 66. - **Одна передача у разных `src`.** `宗族祠堂` и `宗祖祠堂` → «родовой храм предков»: в финале у B, на стопе у A. В финале A и на стопе B совпадений нет. По контекстам `bank-stop.txt` это один зал в одной сцене. - **Подписанные строки финала** — по 2: `方源` → «Фан Юань» в обоих; `古月山寨` → «горная крепость Гуюэ» (A) и «крепость Гу Юэ» (B). - **Деньги.** Суммы `request_log.cost_usd` и `checkpoints.cost_usd` совпадают в обеих базах. | | весь прогон | терминология | classifier | terminologist | 1-й проход | 2-й проход | |---|---|---|---|---|---|---| | A | $0.419423 (33 вызова) | $0.065297 = 15.6% | $0.035803 (6) | $0.029494 (7) | $0.036554 (id 10–16) | $0.028742 (id 23–28) | | B | $0.396657 (35 вызовов) | $0.083339 = 21.0% | $0.045313 (6) | $0.038026 (8) | $0.049546 (id 12–18) | $0.033793 (id 25–31) | Проходы разделены вызовами черновой стадии: id 17–22 в A и 19–24 в B. У классификатора B 2 из 6 вызовов закончились `finish_reason = length`, у классификатора A — 0 из 6. - **Размышление модели этими полями не видно.** `request_log.reasoning_tokens` = 0 у всех ролей обеих баз. `ReasoningTokens` в `checkpoints.usage_json` равно 0 или отсутствует (у части вызовов черновой стадии). ⚠ **Испр. 16.09 (находка консилиума, пере-снята мною):** «размышление не видно» верно ТОЛЬКО для этих двух полей. В базе B есть колонка `request_log.reasoning_in_completion`, и по ней размышление составляет 75–98 % оплаченных completion-токенов: classifier 97.6 %, terminologist 92.5 %, translator 85.3 %, editor 75.2 %. В базе A этой колонки нет вовсе. ## Что снято в эту смену — не повторять - «Приём в банк по разнобою черновиков» вакуумен: термы со `spread ≥ 2` уже в банке. - «Партия терминолога увидит решения предыдущих партий» даром не получается: сообщения всех партий собраны до первого вызова, и хеш каждой следующей зависел бы от ответов предыдущих (`01`, `P1`). - «У терминолога нет отказа» — есть: ⟦TM-NO-DST⟧ или молчание. Но строка сохраняет передачу из черновика (`backend/internal/miner/miner_emit.go:261-268`). Как механизм сигнал отказа закрыт D39.102 п.2. - «Петля банк → черновик следующих глав» — нет: черновая волна идёт по базовому банку без `Source:mined`-строк (`01`, `B3`; ряд 409). - «Ряд 330 исполнен по построению» — нет (`01`, `R2`). Хранилище сравнивает сырую строку намеренно: «族長 and 族长 with one sense and window are two accepted rows, not one» (`backend/internal/membank/memseed.go:874-876`). И «одно определение тождества за $0» тоже нет: нормализация меняет байты инъекции (`05`, `must_change`). - «Первое решение живёт до правки человеком» — против риска B1 (`docs/architecture/06-memory-risk-registry.md:44`: «первый (наименее информированный) перевод имени лочится на 1000 глав»). И против D39.69: «гипотеза первенства ОПРОВЕРГНУТА — роль не первовхожденческий и не частотный выбиратель, ре-решает контекстом». - Это же посылка предложения «заморозка + сверка + менять замороженное только человеку» (`06`, строка 870). - Владелец назвал его логичным и спросил, что при нём ломается. Ответы оркестратора — в `06`, с оговорками баннера. - «Улики только из переведённой части книги» — против D39.42. ⚠ **Испр. 16.09, точная форма:** список терминов, частоты и KWIC-контексты берутся из ИСХОДНИКА всей книги и полны после первой покупки (D39.170, ловушка 1); из черновиков купленных глав приходят только варианты передачи. - «Оговорка области употребления опровергнута экспериментом 18» — неточно. `docs/experiments/18-editor-wire-probe.md:621`: «Не подтверждено: оговорка области §B … В движок не вносить.» А D39.104 п.1 её ратифицирует. - «`hidden` — исход классификатора» — нет: `backend/prompts/zh-ru/classifier.md:10-11` держит его ручным полем сида. ⚠ **Но у смены пола уже есть ратифицированный ответ: сверка `05` его нашла, а оба проекта не использовали.** - D5 п.1: проактивная эвристика `gender=hidden` и ретро-патч «с тома N — так» со стоимостью пере-перевода. - D7 правка 1: `gender` — «с проактивной установкой `hidden` Analyst-ом на неоднозначности (D5.1)»; ты/вы — журнал событий переходов. - D19 п.3(в): `白凝冰` этой же книги — «хрестоматийный кейс механизма D5.1». - Построена ручная половина: у этой книги `hidden` выставлен в сиде (греп `сид финализирован (白凝冰` в журнале решений). Проактивной установки нет, и это расхождение ратифицированного с построенным не снято. - Вынос свёрток написания из ядра в данные языка двигает `NormVersion`, а он входит в тег нарезки и в ключ манифеста (`backend/internal/pipeline/manifest.go:282`, `:384`). Это событие класса перекроя глав. - `bankTermID` не двигать: D39.245 п.7 (перечеканка экспортных id уронила бы каждый банк-экспорт платформы) и `backend/docs/CHAPTER_STRUCTURE_DESIGN.md:693` (§4.2). Акт D39.245 ратифицирует предмет структуры глав, а не механику. - Ряд 130 — открытое СТОП-решение владельца, материалом для которого станет WARN второго прогона; «запретом» он не является. Запрет D39.144 п.1 касается проектирования продуктового цикла пост-ридинговых правок. D39.165 его сужает, греп `ОБЛАСТЬ D39.144 п.1 СУЖЕНА ЯВНО`. - Откуда числа предложения. Сверка `05` (`sync_honest`): «14 из 66» на момент сверки было только в собственном плане (`docs/NEAR_TERM_PLAN.md`, п.10), внесённом этой же сменой (`4200036`), а «INVENTED 17/66» не найдено ни в эксп-24 и эксп-25, ни в журнале, ни в бэклоге. ⚠ **Испр. 16.09:** число 14 всё же стоит в `docs/experiments/25-door-to-file-b.md:378` — но ТАБЛИЧНОЙ формой («| B | 66 | **14** |»), которую подстрочный поиск формулировки «14 из 66» не находит. Оба — замеры оркестратора 15.09; «14 из 66» линза `B` в `01` сняла и сама. Выше оба пере-сняты. ## Проверено по коду в эту смену (якоря по `5dbb5cb`; сомневаешься — пере-сними) - Движок по умолчанию не останавливается на подпись: `backend/cmd/tmctl/invocation.go:141` (`--verify-bank`, «Default: never stop»). В коде это записано и так: `backend/internal/pipeline/bookconsistency.go:31`. У платформы `stop_for_signing` обязателен: `platform/internal/httpapi/v0.go:655`. - Платформа декодирует из банк-экспорта только `terms`: `platform/internal/ingest/bank.go:58-70`. Секция `proposed` отбрасывается. - У двери правки банка два глагола, `approve` и `decline` (`backend/internal/membank/decisions.go:61-62`). Род решением не принимается (`:84-88`). Окно одним решением не правится, а `decline` снимает все окна поверхности (`:90-92`). - Окон у движковых строк почти нет (замер 16.09, базы A/B): `since_ch` > 0 только у 2 строк на книгу (`方正` = 2, `沈翠` = 3), у 67 из 69 и 64 из 66 строк он 0; `until_ch` = 0 у всех. Нижнюю границу по первому появлению ставит только детерминированный канал майнера (`backend/internal/miner/miner_emit.go:210`, `:387-399`); кандидаты только из банкноты идут с `SinceCh: 0` (`backend/internal/pipeline/mining.go:612`). - Свёртки написания исходника зашиты в ядро: таблица трад.→упрощ. встроена `backend/internal/text/norm.go:47` (`data/trad2simp.txt`). Подбор строк нормализует и ключи, и текст куска: `backend/internal/membank/memory.go:333`, `:574`. - Контексты терминолога собирает `AttachKWIC` (`backend/internal/terminology/terminology.go:340`), вызов — `backend/internal/pipeline/terminologist.go:280`. Куски упорядочены по (глава, кусок), то есть берутся ПЕРВЫЕ вхождения по книге (`terminology.go:344-349`). Число и ширина берутся из конфига, затем из данных пар-пака (`kwic_per_term`, `kwic_width`; `backend/internal/lang/langpack.go:744`), иначе действуют умолчания 3 и 40 (`terminologist.go:75-76`, `:232-247`). В `configs/pipeline-c1.yaml` и `configs/langpacks/zh*` ключей `kwic` нет, так что сегодня это три первых вхождения ±40. - Редактору велено: «Род и форму имён и терминов сверяй по глоссарию» (`backend/prompts/zh-ru/editor.md:10`). Банкнота черновика несёт три поля — термин, перевод, тип — и рода не несёт (`backend/prompts/zh-ru/translator-banknote.md:20`). - `wave_selection` — только наблюдение: `backend/internal/pipeline/waveselection.go:22`.