Ratify D39.89: owner bank-arbitration hypothesis taken as testable, Q2 widened with confidence calibration and cluster coherence, research prompt issued with two-dollar ceiling

This commit is contained in:
Claude (backend session) 2026-08-02 15:48:11 +03:00
parent 2b166b7e2e
commit f278b5966b
5 changed files with 149 additions and 5 deletions

View file

@ -0,0 +1,128 @@
# Промт ресёрч-сессии: АРБИТРАЖ БАНКА ПАМЯТИ — консилиум, уверенность моделей, инжект/фетч (строки 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.md`**D39.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-номер лендинга проставит оркестратор. **СТОП — приёмка оркестратора.**
**Легитимные исходы пака, которые НЕ являются провалом:** «консилиум не бьёт базис — закрыть» · «уверенность не разделяет — закрыть» · «голда недостаточно, вот точный запрос владельцу — остальное неинтерпретируемо» · «рычаг лежит в инжекте, а не в арбитраже».

File diff suppressed because one or more lines are too long

View file

@ -15,7 +15,7 @@
- `experiments/` — эмпирика полигона: [00-provider-quirks.md](experiments/00-provider-quirks.md) — **читать перед любым вызовом провайдера**; [08-cost-model-v2.md](experiments/08-cost-model-v2.md) — денежная модель; [09-pilot-protocol.md](experiments/09-pilot-protocol.md) — пилот Ф2.5; остальные 0116 — отчёты закрытых экспериментов (судьба — в баннерах/D-логе).
- `research/` — фактура ресёрчей 0122; у принятых — ревью-шапки, часть тел под ⚠ superseded: **читай баннер прежде содержимого**. Ключевые для навигации: 15 голос · 16 ридер-IDE · 17 внешняя критика · 18 рычаги качества · 19 нарезка · 20 банк-майнинг · 21 обзор транспорта · 22 доменные харнессы · 23 шов движок↔платформа (читать перед любым кодом стыка).
- [PROGRESS.md](PROGRESS.md) — журнал: CURRENT-STATE + **ЕДИНЫЙ БЭКЛОГ** (единственный трекер) + живой хвост хроники. НЕ источник решений.
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен). [BACKEND_EFFORT_HANDLE_SESSION_PROMPT.md](BACKEND_EFFORT_HANDLE_SESSION_PROMPT.md) (**текущий бэкендный**, D39.87: ручка эффорта для ролей без неё · экран целевого языка · добивка холодного прогона; предшественник coldrun-b отработан фазами A/B и заархивирован, D39.86). Фронт-промт — в чужой зоне `frontend/docs/`.
- Активные хендофф-промты сессий (состав обновляется при каждом лендинге — норма D39.80): [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояния не дублирует) · [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md) (полигон, отложен). [BACKEND_EFFORT_HANDLE_SESSION_PROMPT.md](BACKEND_EFFORT_HANDLE_SESSION_PROMPT.md) (**текущий бэкендный**, D39.87: ручка эффорта для ролей без неё · экран целевого языка · добивка холодного прогона; предшественник coldrun-b отработан фазами A/B и заархивирован, D39.86) · [BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md](BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md) (**ресёрч+полигон**, D39.89: арбитраж банка — критика текущего кода · голд · калибровка уверенности моделей · формы консилиума · инжект/фетч · рекомендации; расширение Q2 строки 5, запуск по слову владельца). Фронт-промт — в чужой зоне `frontend/docs/`.
- Зоны фронта (чужие, читать при касании стыка; каждая ведёт СВОЙ зонный бэклог — единый бэклог их строк не принимает, D39.84): [../frontend/](../frontend/) — веб-интерфейс: промт фронт-сессий S0S7 + [STACK_DECISIONS.md](../frontend/docs/STACK_DECISIONS.md) (пины версий точными числами и ловушки, сверены с вебом 02.08) + [BACKLOG.md](../frontend/docs/BACKLOG.md) · [../platform/](../platform/) — SaaS control plane: README-заглушка + [BACKLOG.md](../platform/BACKLOG.md).
- `archive/` — история ([правила архива](archive/README.md)): закрытые промты (`prompts/`) · отчёты с ревью-шапками (`reports/` — на них ссылаются приёмки) · исполненные арх-доки (`architecture/`) · слайсы хроники `PROGRESS-*.md`. Инструкции оттуда не исполнять.
- Диаграммы: [../backend/docs/components.puml](../backend/docs/components.puml) · [../backend/docs/pipeline.puml](../backend/docs/pipeline.puml) — дом рядом с кодом (D39.80), правятся бэкендом одним коммитом с кодом; вручную НЕ рендерить (владелец смотрит PlantUML-расширением VS Code).

View file

@ -1,4 +1,4 @@
# Журнал решений оркестратора — контракт D1D39.88 (развязки 04.07 · пакеты 0910.07 · приёмка/качество-первым/пивот/эмпирика 1112.07 · арх-ресет+стройка пере-прогонного стека 1319.07)
# Журнал решений оркестратора — контракт D1D39.89 (развязки 04.07 · пакеты 0910.07 · приёмка/качество-первым/пивот/эмпирика 1112.07 · арх-ресет+стройка пере-прогонного стека 1319.07)
> **КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто:
> ⚠ **Навигация (актуализация 01.08):** карта ниже детально покрывает D1D39.28; решения D39.29+ живут хронологически в теле файла, **свежая голова — С ХВОСТА** (новые ноты аппендятся вниз). Сводка текущей головы и очередь — CURRENT-STATE в `../PROGRESS.md`.
@ -1291,3 +1291,15 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу
**Поэтому норма записана как ПРОТОКОЛ, а не как призыв** (канон — `CLAUDE.md` §Гардрейлы, «Git-координация мультисессий»): коммит ТОЛЬКО с явным списком путей `git commit -- <пути>` (pathspec-форма чужой индекс не трогает) · **никогда** `git add -A` / `git add .` / `git commit -a` · перед каждым коммитом `git status` + `git diff --cached --name-only`, и чужой путь в индексе не «прибирать», а обойти pathspec-формой · свои файлы не держать застейдженными между шагами (стейдж и коммит одной командой) · `reset --hard`/amend/rebase несвежих коммитов/checkout поверх грязного дерева — запрещены · чужое уехало в твой коммит → историю НЕ переписывать, сообщить владельцу · не коммитить `START_PROMT.MD` и `.claude/settings.local.json`.
**Носители (правило обязано доехать до сессии, а не только до канона):** `CLAUDE.md` — таблица зон получила колонку «Коммитит сама?» + протокол в гардрейлах · `frontend/docs/FRONTEND_SESSION_PROMPT.md` — раздел «Коммит-права и git-протокол» перед первым коммитом (правка чужой зоны сделана оркестратором по прямому указанию владельца «надо ему явно это прописать»; прежняя формулировка §«Кто ты и твоя зона» несла только общий запрет и не давала механики) · `platform/README.md` — то же плюс ревью-гард модулей D39.85, потому что отдельного промта платформы ещё нет, а правило нужно ДО первой строки кода. ⚠ Фронт-сессия на момент ратификации ЖИВАЯ: правило доедет до неё только РЕЛЕЕМ владельца — бегущая сессия файл промта не перечитывает (норма хендофф-промтов п.4) (02.08.2026, оркестратор №10). ✅
## D39.89 — БАНК КАК ЦЕНТРАЛЬНАЯ ЦЕННОСТЬ: ГИПОТЕЗА ВЛАДЕЛЬЦА О КОНСИЛИУМЕ И УВЕРЕННОСТИ МОДЕЛЕЙ ПРИНЯТА К ПРОВЕРКЕ, ТРЕК = РАСШИРЕНИЕ Q2 (строка 5/36б), НЕ НОВЫЙ; ПРОМТ ВЫДАН (02.08, оркестратор №10). ✅
**Вход владельца (02.08, дословные опоры):** «банк памяти сейчас центральная ценность при переводе… туда нужен как грамотный инжект так и фетч по книге, прям очень грамотно алгоритмически продуманный»; перевод банка требует **«консилиума без голоса»** (равноправные модели; при неравноправии — склонять вес); открытый вопрос — **могут ли модели вообще устанавливать уверенность** (числами или словами) и можно ли на скоре строить выбор перевода терма; оговорка — выбор по-терминно может **разбить стиль/систему** соседних решений. Отдельно владелец потребовал в промте секцию **рекомендованных дальнейших алгоритмов/доработок и критики текущего решения в коде**.
**Диспозиция: это НЕ новый трек.** Маршрут «второе мнение по банку» уже ратифицирован — **D39.69** закрыл бэкенд-стройку 36б по нужности и оставил ПОЛИГОН-ЗАМЕР нужности рецензента другого семейства поверх §1 (серия-батчинг) + §2 (тип-классификатор); **D39.70 (Q2)** санкционировал замер «ДО любой стройки», слотом при ре-пробе 74 (строка 5). **Новое в входе владельца, чего в Q2 не было:** (i) калибровка САМООЦЕНКИ моделей как сигнала; (ii) взвешенный арбитраж вместо равноправного; (iii) **связность системы термов как ограничение арбитража**; (iv) инжект/фетч как отдельная ось. Поэтому Q2 РАСШИРЕН этими вопросами, а не продублирован новой строкой.
**Разбор оркестратора, вошедший в промт как приоры (грунтованы, не мнение):** **(1) экономическая асимметрия** — арбитраж платится раз на книгу и по числу РАЗЛИЧНЫХ термов (насыщается: замер строки 16 — терминолог $0.0060.013/проход), инжект платится на каждом чанке каждой волны каждой роли (`membank/memory.go:523`, `Select(chunk, chapter, sticky, budgetTokens)`) ⇒ на книге оси расходятся на порядки, и «покупать качество расточительно» законно именно в арбитраже; **(2) три наших замера уже бьют по наивной форме гипотезы** — слепой судья = катастроф-ЭКРАН, а НЕ ранжировщик (D39.46); канал отказа роли нестабилен (⟦TM-NO-DST⟧ размах 0.375, выдумывание dst 7782% на хвосте — D39.50); согласие прогонов само по себе слабое (Жаккар банкноты 0.0770.40 между прогонами одних глав, D39.50); **(3) единица арбитража** — сегодня `ScoreVariants` ранжирует варианты ОДНОГО кандидата, единственный межстрочный сигнал `Neighbours` работает лишь при уже существующей подписи, а автономный банк подписи не имеет ⇒ связность системы термов на холодном старте держится ТОЛЬКО со-батчингом серий (`series.go`), и это ровно тот дефект, который был измерен и вылечен со-батчингом (D39.65 строка 21: 甲等→«класс» против 乙丙丁等→«ранг» через границу батча) ⇒ по-терминный argmax вернул бы его классом ⇒ **дизайн обязан оперировать КЛАСТЕРОМ (семья корня · серия · регистр · алиас-граф), а не строкой**; **(4) инвариант эмиссии** (терминолог не может утвердить — `draft`/`auto`, D39.42 §C2-7) размывать запрещено: «три модели согласились ⇒ канон» — запрещённая форма; **(5) D39.47** запрещает арбитражу превратиться в пар-словарь, форсящий один регистр.
**Промт выдан — `docs/BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md`** (ресёрч+полигон сессия; зона: `docs/research/24-bank-arbitration.md` + `eval/bank_arbitration/` + секция PROGRESS; НЕ коммитит). Четыре работы: **A** критика текущего алгоритма в коде ($0, вердикт-тройки, дефекты классами сломано/хрупко/дорого/слепо) · **B** арбитраж (B1 голд — гейт остального; ядро уже есть: `guzhenren-seed-v2.yaml` 58 записей / 53 `approved` + дистилл-фикстура BANK-FULL 150 поверхностей + банк coldrun-a, смещение выборки назвать честно; B2 калибровка уверенности ≤$0.60 — разделяющая способность, числа против слов, устойчивость к повтору, **сравнимость МЕЖДУ моделями**, канал отказа, и обязательный БАР против бесплатного базиса §C2-3; B3 формы консилиума ≤$0.80 с контролем «одна модель N раз» — ответ на Q2) · **C** инжект/фетч ≤$0.60 (мерить ПОСЛУШАНИЕ и ВРЕД, не recall) · **D** рекомендованные алгоритмы тремя корзинами (строить сейчас · измерить · закрыть по нужности; последняя обязана быть непустой). Потолок **$2.00** с суб-потолками и пре-регистрацией критерия до каждой пробы. **Легитимные исходы, объявленные заранее:** «консилиум не бьёт базис — закрыть» · «уверенность не разделяет — закрыть» · «голда мало, вот точный запрос владельцу» · «рычаг в инжекте, а не в арбитраже». Мандат ревизии посылок (D39.68) и правило №4 (D39.47) вшиты.
**Гигиена выдачи:** промт холодно аудирован автором перед выдачей по `file:line`/D-номерам; исправлена одна мис-атрибуция (фактура премеров — **D39.50**, отчёт `archive/reports/POLYGON_PREMEASURE_2026-07-26.md`, а не D39.71). ⚠ **Коллизия зон названа в промте:** `backend/` ЖИВАЯ (сессия строк 104/46/16), `coldrun-a` — замороженный эталон только на чтение, `coldrun-b` — стенд живой сессии; пробы гонять СВОИМ харнессом против API, не через движок. Валидный базлайн качества банка — **coldrun-a**, НЕ coldrun-b (там терминолог сломан транспортом: 1 терм из 81, D39.86) — сравнение с поломкой даст фальшивую победу консилиума и будет отклонено приёмкой.

View file

@ -21,7 +21,7 @@
| ID | Требование (источник) | Статус | Носитель / доказательство |
|---|---|---|---|
| ПТ-8 | Банк памяти на всю книгу, «крайне точный» (V0-п.78; Выводы-п.1) | ✅ | D39.69/75/77/78; recall банка 0.918/0.980 на холодном прогоне (D39.58). Смежный остаток H6 (running-summary): carryover закрыт замером (D39.7/8), проза-суммарайзер закрыт (D39.69), нарратив-состояние = строка 80 (гейт пилота Ф2.5) |
| ПТ-9 | Глоссарий автосборкой: модель переводит термины с контекстом/жанром (V4-п.4, H15) | ✅ | терминолог пака-20 (D39.4153), KWIC-контексты, подписной цикл |
| ПТ-9 | Глоссарий автосборкой: модель переводит термины с контекстом/жанром (V4-п.4, H15) | ✅ | терминолог пака-20 (D39.4153), KWIC-контексты, подписной цикл. **Вход владельца 02.08 (D39.89):** банк = центральная ценность, арбитраж перевода термов должен быть консилиумом со скорами уверенности, но не ломать связность системы термов ⇒ качество МЕХАНИЗМА поставлено на проверку (строка 5, промт `BANK_ARBITRATION_RESEARCH_SESSION_PROMPT.md`); статус ПТ-9 «построено» не меняется — под вопросом не наличие, а алгоритм |
| ПТ-10 | Веб-фетч для терминов без культурного контекста (V0-п.16, V4-п.4) | ⭕ | гейт action-security = строка 70 (Ф3); до него — сид/бриф |
| ПТ-11 | Голоса персонажей консистентны на книгу (V1-п.2; канон §1) | 🔶 | схема голосов построена (пак-19, D39.55/56); оси не подписаны — замер добора (строки 24 · 13б) |