textmachine/docs/BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md

36 KiB
Raw Blame History

Промт ресёрч-сессии: АРБИТРАЖ БАНКА ПАМЯТИ — консилиум, уверенность моделей, инжект/фетч (строки 5/36б · 48 · 16)

Выдан 02.08.2026, оркестратор №10, по прямому запросу владельца. Ты — ресёрч+полигон сессия. Зона записи ровно три места: docs/research/24-bank-arbitration.md (свой файл, других в docs/research/ не трогать) + eval/bank_arbitration/ (свои харнессы; сырьё моделей — durable в ~/books/, НЕ в scratch) + своя секция в docs/PROGRESS.md## Полигон. ⚠ eval/ — зона полигона: на момент выдачи полигон-сессий не запущено, но перед первой записью git status и опознание чужого; своё держать в своей папке. НЕ коммитить — лендит оркестратор. Первый деливерабл — эхо-блок ≤10 строк (первым сообщением ДО работы: как понял скоуп · четыре работы и их СТОП-точки · потолки денег · что вне скоупа; подтверждения не жди — работай до СТОП-условий).

Деньги (жёстко): работы A и D = $0. Пробы работ B и C ≤ $2.00 суммарно, суб-потолки: калибровка уверенности ≤$0.60 · арбитраж ≤$0.80 · инжект ≤$0.60. Каждая проба пре-регистрируется: критерий успеха/провала записан в отчёт ДО запуска (норма D39.46). Превышение любого суб-потолка = СТОП+релей, а не «добрать немного». В отчёте — деньги по каждой пробе отдельно и суммой; сырые выходы моделей персистить в ~/books/gu-zhenren/bank-arbitration/ (урок 01.08: платное сырьё в эфемерном scratch = потеря).


§0. Рамка и ГЛАВНЫЙ мандат

Слова владельца дословно (02.08): «банк памяти сейчас центральная ценность при переводе… туда нужен как грамотный инжект так и фетч по книге, прям очень грамотно алгоритмически продуманный»; про перевод банка — «тут нужен консилиум без голоса… либо если модели не равноправные, то склонять вес перевода в какую-то сторону»; «могут ли вообще модели устанавливать уверенность… можно ли на таком построить банковский перевод»; и оговорка — «только тут надо ещё осторожно подходить, чтобы учитывался общий контекст и стиль, а то мы можем выбрать перевод какой-то модели, который разобьёт стиль перевода другой».

Это гипотеза владельца, поданная на проверку, а не спецификация на стройку. Твой мандат — проверить её, а не исполнить.

  1. МАНДАТ РЕВИЗИИ ПОСЫЛОК (норма D39.68, обязателен). Каждый предлагаемый механизм получает вердикт-тройку: посылка (источник, актуальна ли) · нужность (что даёт НА ДАННЫХ; не даёт — «закрыть») · форма (лучшая из ≥2 альтернатив по названному критерию). Допустимый исход любого пункта — «не строить». Замер, бьющий по ПОСЫЛКЕ задачи, обязывает остановиться и поднять через канал вопросов, а не выдать формально требуемый артефакт (процессное правило №4, D39.47).
  2. БАР (по образцу research/14). Любой новый механизм обязан: (а) оставить детерминированное ядро авторитетным; (б) влезть в стоимостный контур; (в) эмпирически побить бесплатный детерминированный базис — сегодняшнюю формулу §C2-3 (частота × конформность × согласие с подписанной строкой × лемма-штраф); (г) оправдать сложность. Не проходит (в) → не мёржить. Это главный фильтр пака: у нас уже есть бесплатные сигналы, и платный консилиум обязан их ПЕРЕИГРАТЬ, а не продублировать.
  3. Ревью-вопрос общности: «заработает ли на паре, которой в репо ещё НЕТ, без правки Go?» Арбитраж не имеет права стать пар-словарём: D39.47 отменил жанровый словарь КАК КЛАСС — решение о переводе принадлежит подписи владельца на банк КНИГИ, пар-словарь форсит один регистр как единственно верный. Консилиум, приносящий «правильный русский регистр» из пар-данных, воспроизводит ровно отменённое.
  4. Инвариант, который нельзя размывать: терминолог не может ничего утвердить — тронутый им терм эмитит draft (помеченный ⟨проверить⟩), отказ эмитит auto (terminologist.go:31-35, §C2-7). Худшее, что делает плохой вызов, — кладёт помеченное предложение перед редактором и владельцем. Любой дизайн консилиума обязан сохранить это свойство и явно сказать, как. «Три модели согласились ⇒ канон» — запрещённая форма.
  5. Самопроверка исполнением обязательна (свой код + сформированные запросы к моделям + полученные результаты). Полигон регулярно багует, и это искажает эксперименты (D37). Вывод на агрегате до вскрытия единиц запрещён — перед любым «сигнал работает» открой глазами хотя бы по одной живой единице с каждой стороны. В конце — адверсариальный проход author≠reviewer по своим выводам (норма 01.08: соло-самопроверка платные пробы НЕ закрывает).

§1. Онбординг (карта чтения; доки целиком НЕ читать)

  1. CLAUDE.md — «Цели и мерило» (6 пунктов) + гардрейлы (.env НЕ читать · DeepSeek thinking НЕ отключать · аномалия провайдера → вендор-дока, не гадать) → CURRENT-STATE в docs/PROGRESS.md, строки 5, 36б, 48, 48б, 16, 37, 80.
  2. docs/architecture/05-decisions-log.mdD39.69 целиком (три примитива банка §1§3 + список закрытого ПО НУЖНОСТИ, там же диспозиция 36б), D39.70 (ответы владельца Q1Q8), D39.46 (что именно измерено про контексты и про судью), D39.47 (жанровый словарь отменён как класс), D39.42 (роль терминолога, эмиссия auto/draft), D39.77 (политика подписи: банк обязан приходить верным АВТОНОМНО; сид — другой артефакт).
  3. docs/research/20-bank-mining.mdамендмент-шапка + §C2 + §E (открытые вопросы, в т.ч. §E-1 мини-голд). research/13 — TL;DR + Q-структура (там же eval/retrieval_bench.py). research/14 — TL;DR и правило БАР (образец дисциплины: «не бьёт базис — не мёржить»). research/15 — через ⚠-амендмент 26.07 (двухсекционная инъекция).
  4. Код (читать, НЕ править): internal/terminology/ (terminology.go — Merge/AttachKWIC/ScoreVariants; series.go; classify.go) · internal/pipeline/terminologist.go + banknote.go · internal/membank/memory.go (Select, trust-ранги, RenderGlossaryBlock/RenderEditorConstraintBlock) + mempostcheck.go + memvoice.go · internal/miner/.
  5. eval/README.md + docs/experiments/00-provider-quirks.md (шапка + секция DeepSeek-V4-Flash-0731 целиком) — перед любым платным вызовом.

§2. Что УЖЕ установлено замером — не пере-открывать (приоры; опровергаются аргументом или замером)

Это самая важная секция промта: половина наивных форм консилиума уже фальсифицирована НАШИМИ данными.

  • Судья-модель — катастроф-ЭКРАН, а не ранжировщик (D39.46, измерено). Слепой LLM-судья различает «сломано / не сломано», но не расставляет годные варианты по качеству. Это прямой приор ПРОТИВ схемы «модель ставит скор → скор выбирает победителя»; чтобы её принять, нужен замер, бьющий этот вывод.
  • Контексты — главный рычаг терминолога (D39.46, ратифицировано): разрыв 6 термов при размахе 1. То есть качество арбитража сегодня двигает ПОДАЧА улик, а не количество мнений.
  • Канал отказа модели НЕСТАБИЛЕН (пакет-8, D39.50; отчёт archive/reports/POLYGON_PREMEASURE_2026-07-26.md): на хвосте расширенной эмиссии роль выдумывает dst 7782% стабильно, а сентинел ⟦TM-NO-DST⟧ различает «переводимо», а не «терм», и нестабилен даже там — размах 0.375. ⇒ «модель скажет „не уверен“» — уже проверявшаяся и провалившаяся форма. Хочешь строить на отказе/уверенности — обязан показать конструкцию, в которой этот замер не воспроизводится.
  • Согласие прогонов само по себе слабое (D39.50): банкнота невоспроизводима между прогонами одних и тех же глав — Жаккар 0.0770.40. Консенсус-механика, молча считающая согласие сильным сигналом, стоит на песке; мерить надо согласие ПО КОНКРЕТНОМУ ТЕРМУ, а не по составу списка.
  • Роль ре-решает контекстом, а не первым вхождением и не частотой (first-occurrence-тест $0 исполнен, гипотеза первенства ОПРОВЕРГНУТА — D39.69).
  • Со-батчинг — единственное, что чинит расхождение внутри системы термов (D39.65 строка 21 → D39.69 §1): черновики расходились по общей ГОЛОВЕ серии через границу батча (甲等→«класс», 乙丙丁等→«ранг»); порядковые и частотные трюки этого не чинят, чинит только показ набора целиком. Это ядро возражения к по-терминному арбитражу — см. §4.
  • KWIC-дефолт 3×40 достаточен (D39.50): ни одна точка сетки «подача × контекст» не отличима, 0×0 — лучшая. Не пере-открывать без нового носителя.
  • Формула §C2-3 намеренно НЕ мажоритарна (terminology.go:363-387): частотный фактор ограничен 2× (floor 0.5), конформность может его перебить, согласие с подписанной строкой — отдельный фактор. Комментарий там же формулирует «почему»: N согласных чанков — это N независимых догадок из N ЧАСТИЧНЫХ видов книги, а не N подтверждений.
  • Деньги (замер, строка 16): черновая волна + банкнота $0.0247/волна, терминолог $0.0060.013 за проход — на 10 главах сопоставимо. Но: арбитраж платится раз на книгу и по числу РАЗЛИЧНЫХ термов (насыщается), а инжект — на каждом чанке каждой волны каждой роли (memory.go:523, Select(chunk, chapter, sticky, budgetTokens)). На книге эти оси расходятся на порядки. Отсюда рабочая гипотеза пака, которую надо подтвердить или опровергнуть числами: в арбитраже качество можно покупать расточительно, в инжекте каждая строка платная навсегда.
  • Банк обязан приходить верным АВТОНОМНО (D39.59/67/77): подпись владельца опциональна и не является частью нормального пути. Дизайн, который «дотягивается качеством» за счёт того, что владелец всё вычитает, — не решение.
  • Терминолог на весах 0731 сломан не алгоритмом, а транспортом: 4 батча из 5 возвращались пустыми, банк консолидировал 1 терм из 81 (было 21/21 до смены весов; D39.86). Валидный базлайн качества — coldrun-a, НЕ coldrun-b. Сравнить консилиум с этой поломкой = получить фальшивую победу; такой вывод приёмка отклонит.

§3. Работа A — КРИТИКА ТЕКУЩЕГО АЛГОРИТМА В КОДЕ ($0, обязательный деливерабл)

Прямой запрос владельца. Разбери сегодняшний путь терма от поверхности до инъекции и назови его дефекты — с file:line, а не по заголовкам. Маршрут: майнер (miner/) → банкнота (banknote.go, голоса чанков) → Merge + AttachKWIC + ScoreVariants (terminology.go) → серия-батчинг (series.go) → классификатор типов (classify.go, §2 D39.69) → терминолог (terminologist.go, эмиссия auto/draft) → банк (membank/memory.go) → отбор и рендер инъекции → пост-чек (mempostcheck.go).

На каждый найденный дефект — вердикт-тройка §0 п.1 и класс: сломано (даёт неверный результат) / хрупко (верно случайно) / дорого (стоит непропорционально) / слепо (класс явлений не покрыт вовсе). Обязательно ответь по этим точкам, каждая — с собственным вердиктом (не пересказ, а проверка):

  • Единица решения. ScoreVariants ранжирует варианты ОДНОГО кандидата независимо от соседей; единственный межстрочный сигнал — Neighbours (согласие с уже подписанной строкой), то есть работает только когда подпись УЖЕ есть. Автономный банк подписи не имеет ⇒ на холодном старте связность системы термов не защищена ничем, кроме со-батчинга серий. Так ли это? Насколько широко? (серия ловит равнодлинные наборы с общей головой — а семьи с общим КОРНЕМ, регистры обращения, алиас-графы одной сущности?)
  • Related/containmentRelations (terminology.go:242-256) обрезан на 4 и заявлен как «контекст для человека и модели, не индекс». Это честно — но достаточно ли для системной связности?
  • Однопроходность. Терминолог видит книгу один раз; решения ранних батчей не пересматриваются поздними. Где это стоит качества?
  • Потери на швах: foldVariants · OriginAlias-путь «не потерять поверхность» (terminology.go:180-192) · строка 48 «направленная банкнота» · строка 37 (квадратичность AttachKWIC: 16.8 с на 2000 кандидатов) · строка 28 (7 строк утечки латиницы через экран).
  • Инжект-сторона: Select — precision over recall (memory.go:42), trust-ранги, sticky-окно, токен-бюджет. Что режется при переполнении бюджета и по какому правилу? Двухсекционная инъекция (закон CONFIRMED + ⟨проверить⟩) — есть ли замер, что помеченная секция читается моделью МЯГЧЕ, чем закон? (приор: замера нет).
  • Наблюдаемость арбитража: можно ли сегодня по артефактам прогона ответить «почему у этого терма такой dst»? Если нет — это дефект класса «слепо», и он гейтит любой будущий арбитраж (нельзя улучшать то, чего не видно).

Не чинить. Работа A — диагноз, а не правка. Код бэкенда — чужая зона и прямо сейчас в ней ЖИВАЯ сессия (строки 104/46/16: internal/config/, internal/pipeline/, новый internal_call.go). Твои находки уезжают строками бэклога и рекомендациями §6.


§4. Работа B — АРБИТРАЖ: голд → уверенность → консилиум (≤$1.40 из общего потолка)

Порядок жёсткий: без B1 остальные пробы неинтерпретируемы.

B1. Голд-набор ($0, гейт остального). Без размеченной истины любое правило арбитража нефальсифицируемо. Ядро уже есть: ~/books/gu-zhenren/guzhenren-seed-v2.yaml — 58 записей, 53 approved с подписанным владельцем dst; плюс дистилл-фикстура BANK-FULL (150 поверхностей побайтно равны боевому TSV, D39.75-ж) и банк coldrun-a. Собери из этого голд и честно назови его смещение: сид — это термы, до которых у владельца дошли руки, то есть выборка сдвинута к важным и уже спорным. Нужны ли добавки (мини-голд алиасов §E-1 research/20 — вопрос владельцу, ответа на него нет с 17.07) — реши и сформулируй запрос конкретным списком, а не «нужна разметка». Голд персистить в eval/bank_arbitration/gold/, провенанс каждой строки — обязателен.

B2. Калибровочная проба (≤$0.60): МОГУТ ЛИ наши модели оценивать свою уверенность. Прямой вопрос владельца, и он не выводится из литературы — только замером на НАШИХ моделях и НАШЕЙ задаче. Пре-регистрируй критерий. Замерь разделяющую способность, а не точность: попадает ли верный по голду dst в верхнюю часть шкалы чаще неверного (ранговая мера — AUC или её непараметрический эквивалент; на десятках термов доверительный интервал широкий, и это надо честно напечатать). Обязательные срезы:

  • числа против слов (0100 против «точно / скорее да / не уверен / не знаю») — какая форма разделяет лучше и стабильнее при повторе;
  • устойчивость к повтору (тот же вопрос дважды — тот же скор?) и к перестановке вариантов;
  • сравнимость МЕЖДУ моделями — ключевой вопрос: «0.9» модели A и «0.9» модели B это одна шкала? Приор: нет, и тогда сырой кросс-модельный скор как решающее правило запрещён без калибровки;
  • канал отказа — воспроизводится ли нестабильность ⟦TM-NO-DST⟧ (§2) в лучшей конструкции;
  • против бесплатного базиса: бьёт ли уверенность сегодняшние даровые сигналы (частота по чанкам, конформность, лемма, согласие вариантов) — это БАР (в). Не бьёт → в отчёт идёт «уверенность как арбитр закрыта по нужности», и это полноценный результат пака, а не провал.

B3. Консилиум (≤$0.80): форма, а не факт. Владелец назвал «консилиум без голоса» (равноправные модели) и допустил взвешивание. Сравни на голде минимум три формы против базиса §C2-3:

  • (и) равноправный совет — N моделей независимо, агрегатор детерминированный;
  • (ии) улики-первым — §C2-3 решает, совет только на спорных (близкая верхушка) — дешевле в N раз, потому что спорных меньшинство;
  • (иии) взвешенный — веса из B2/голда, а не назначенные. Плюс обязательный контроль: одна модель, спрошенная N раз (само-согласованность). Если она даёт тот же выигрыш, что совет разных моделей, то «разные семейства» не окупаются, и это ровно вопрос Q2 (строка 5), на который пак и обязан ответить.

Главное возражение, которое обязано быть проверено, а не обойдено — СВЯЗНОСТЬ СИСТЕМЫ. Строки банка не независимы: они образуют системы (семья общего корня, серия рангов, регистр обращения, алиас-граф одной сущности). По-терминный argmax ломает систему, даже когда каждый выбор локально лучший — и это у нас уже измерено на серии (§2, D39.65 строка 21). Пример класса, НЕ покрытого сегодняшним DetectSeries (равная длина + общая голова): семья общего корня, где члены разной длины и голова разная — модель A даёт связную тройку «энергия/камень/жила», модель B связную «ци/камень ци/канал ци», а по-терминный победитель собирает химеру из обеих. Требование к дизайну: единица арбитража — КЛАСТЕР, а не строка; совет голосует за согласованный набор, а отклонение отдельной строки от набора — исключение, требующее улик. Проверь это на голде и назови, какие кластеры сегодня детектируются, а какие нет.

Стоимость обязана быть посчитана в терминах КНИГИ, а не пробы: число различных термов насыщается, число глав — нет. Дай оценку «$ на книгу в 1000 глав» для каждой формы, с названным допущением о росте словаря.


§5. Работа C — ИНЖЕКТ/ФЕТЧ (≤$0.60)

Владелец назвал инжект и фетч отдельно, и по §2 это ось РЕКУРРЕНТНЫХ денег. Известное: recall банка на холодном прогоне 0.918/0.980 (D39.58). Но recall — не продуктовая метрика. Мерить надо ПОСЛУШАНИЕ и ВРЕД: раз модели инъекцию слушают (наша же эмпирика), они одинаково послушно берут и неверную строку.

  • Что мерить: доля инъецированных строк, реально отражённых в выходе; доля случаев, где инъекция ИСПРАВИЛА выход против безинъекционного контроля; и доля, где она его УХУДШИЛА (неверная строка, неуместный падеж/регистр, вытеснение более нужной строки бюджетом).
  • Ручки, которые стоит различить: объём инъекции (токен-бюджет) · порядок · пометка (закон против ⟨проверить⟩) · sticky-окно · разница между черновой и редакторской формой (RenderGlossaryBlock против RenderEditorConstraintBlock).
  • Проба маленькая и адресная: это не полный эксп-пакет, а замер, отвечающий «есть ли здесь вообще управляемый рычаг». Нет рычага — так и скажи, строка уедет в бэклог с честным «не окупается мерить дальше».
  • Не строй эмбеддинг-ретривал. Закрыт по нужности (D39.69), реопен = измеренный recall-разрыв НА МАСШТАБЕ, и только batch-time лейн. Если твой замер такой разрыв покажет — это находка, а не разрешение строить.

§6. Работа D — РЕКОМЕНДОВАННЫЕ ДАЛЬНЕЙШИЕ АЛГОРИТМЫ ($0, обязательный деливерабл)

Прямой запрос владельца. Отдельной секцией — ранжированный список того, что делать дальше с банком, как инженерная рекомендация, а не как список идей. На каждый пункт: что даёт (по возможности числом или названным ожидаемым эффектом) · чего стоит (деньги и сложность) · на чём стоит (какой замер его обосновывает) · чем опровергается · зависимость от других пунктов. Явно раздели три корзины: строить сейчас · измерить прежде чем решать · закрыть по нужности (последняя обязана быть непустой — если у тебя всё «надо строить», ты не применил §0 п.1).

Обязательно накрой: арбитраж (итог §4) · связность кластеров · инжект (итог §5) · наблюдаемость «почему такой dst» · холодный старт против накопленного банка · перенос на вторую пару (ja→ru; ⚠ не-CJK детектора не существует — строка 35, en-майнер даёт 0 эмиссии, ja с zh-таблицами активно неверен 0/10) · серийный шаринг банка между книгами (строки 48а/48б).

Свободная критика приветствуется. Если считаешь, что центральная ценность лежит не там, где мы её ищем, — скажи это с обоснованием: это ровно тот случай, ради которого написано процессное правило №4.


§7. Чего НЕ делать

backend/ не править ВООБЩЕ (чужая зона; там ЖИВАЯ сессия — незакоммиченные internal/config/, internal/pipeline/, новый internal_call.go) · frontend/, platform/, START_PROMT.MD, .claude/settings.local.json — не трогать · ~/books/gu-zhenren/coldrun-a/ — ЗАМОРОЖЕННЫЙ ЭТАЛОН, только чтение; coldrun-b/стенд живой бэкенд-сессии, не трогать вовсе · пробы гонять СВОИМ харнессом в eval/bank_arbitration/ против API напрямую (не через движок — так проба не зависит от незакоммиченного кода; перенос выводов в движок обязан быть назван явно) · .env НЕ читать · слаги моделей — live-фактчеком /models, не по памяти · DeepSeek thinking НЕ отключать; помни, что бэнк-роли на вендор-дефолте high сейчас упираются в потолок (§2) — в СВОЁМ харнессе эффорт задаёшь ты сам, и это надо напечатать в отчёте, иначе числа несравнимы · тексты книги в доки НЕ цитировать (сырьё durable в ~/books) · не коммитить · не строить механизм, потому что он красивый — только под измеренную нужду (канон целей, п.3).

Фолд-ось: любое предложение обязано назвать свою цену детерминизма. Строки банка фолдятся в memory_version, резолвнутая конфигурация — в снапшот → RequestHash → чекпойнты. Смена правила арбитража меняет банк ⇒ меняет инъекции ⇒ промахивает чекпойнты и перекупает прогон. Рекомендация без ответа «что это двигает и сколько стоит пере-покупка» неполна.


§8. Отчёт и СТОП

docs/research/24-bank-arbitration.md: эхо-шапка · §A критика текущего кода (дефекты с file:line, классами и вердикт-тройками) · §B арбитраж (голд и его смещение · числа калибровки со знаменателями и интервалами · формы консилиума против базиса §C2-3 · кластерная связность · $ на книгу) · §C инжект/фетч · §D рекомендации тремя корзинами · вопросы владельцу отдельным коротким списком (если нужен мини-голд — конкретным перечнем) · критик полноты против себя (обязательная секция: какой класс явлений не покрыт, какая проба не гонялась, какой вывод стоит на одном источнике) · адверсариальный проход author≠reviewer по своим выводам · заявление = команда: каждое число сопровождено командой/скриптом, которым получено (приёмка их пере-ранит) · провенанс сырья · деньги по пробам и суммой.

Краткий итог — docs/PROGRESS.md, секция ## Полигон, СВЕРХУ; бэклог-таблицу и CURRENT-STATE НЕ трогать. D-номер лендинга проставит оркестратор. СТОП — приёмка оркестратора.

Легитимные исходы пака, которые НЕ являются провалом: «консилиум не бьёт базис — закрыть» · «уверенность не разделяет — закрыть» · «голда недостаточно, вот точный запрос владельцу — остальное неинтерпретируемо» · «рычаг лежит в инжекте, а не в арбитраже».