# Эксперимент 16. Банк-майнинг W1.5 (полигон-стадия research/20 §D) > **Статус:** полигон-сессия exp16 (2026-07-18), исполняет пре-рег дизайн **research/20 §D** (дизайн-оф-рекорд, > D39.6). Зона: `eval/exp16/` + этот файл. Артефакты — ВНЕ git (`/home/ubuntu/books/gu-zhenren/exp16/`). > **Коммичу ТОЛЬКО пре-рег фриз** (единственный коммит, ДО первого платного вызова — D30.10/D37); результаты > сдаются этим отчётом, лендит оркестратор. Бюджет платных армов: жёсткий кап **$10** (решение владельца 17–18.07). > > Структура: **§0** пре-задача (ре-аудит exp14b, D39.9) · §1 пре-рег фриз · §2 GT/материал · §3 результаты по > армам · §4 решающие правила + маршрутизация слепых зон · §5 деньги · §6 самопроверка + отклонения. --- ## §0. Пре-задача ($0, ДО фриза): ре-аудит exp14b исправленными правилами (D39.9) **Мандат (промт §пре-задача):** Q4a (D39.9) вскрыл, что (i) правила скорера exp14b (`rule_counterfactual`/`polarity_envy`/`b1`) дефектны, а исправленные оверрайды лежат в [q4a_traps.py](../../eval/exp15/q4a_traps.py); (ii) харнес [exp14_common.call](../../eval/exp14/exp14_common.py#L104-L113) НЕ отклоняет `finish=length` — усечённый выход возвращается как валидный (`err=None`). Задача: (1) пере-скорить СОХРАНЁННЫЕ exp14b-выходы исправленными правилами; (2) свип `finish_reason=length` по exp14/14b-леджерам; (3) отчёт-дельта: какие пер-класс вердикты D38 сдвинулись. **Флип любого несущего → СТОП + пинг оркестратору (errata — его зона).** Код (аддитивный, риг exp14/14b НЕ тронут — импорт read-only): [reaudit_14b.py](../../eval/exp16/reaudit_14b.py), [length_sweep.py](../../eval/exp16/length_sweep.py). Length-гейт для СВОИХ будущих генераций чинится у себя (exp16-харнес), риг exp14 не трогаю. ### §0.1. Результат ре-скоринга (задача 1) — D38 DET-ядро ДЕРЖИТСЯ D38 (`14b-meaning-battery.md` §2.1) скорил DET **ручной span-читкой** (авто-скорер был само-отвергнут как бракованный). Исправленный `q4a_traps` — это тот самый скорер, но починенный (предложение-скоуп, исправленные a1/a2/b1/b2/c1/d1/d2; звук b2, c2=`rule_grade_bing`, c3=`rule_patriarch` реюзаны verbatim). Self-test корректных правил: 19/19 pass. Ре-скор всех сохранённых выходов арма C/F/X/D/M (+ K где есть, + P0-референс): | Трап (класс) | glm-5 C | gpt-5.4 F | grok X | deepseek-pro D | mistral M | сходится с D38? | |---|---|---|---|---|---|---| | **a1** двойн.отриц (крит) | fail | **fix** (лок.gap→разрешён) | fail | fix | fix | ✅ все | | **a2** 无不 | fix | fix | fix | fix | fix | ✅ все | | **b2** 四成四=44% | fix | fix | fix | fix | fix | ✅ все | | **c1** 人上之人 (крит) | fix | **fix** (лок.gap→разрешён) | fail | fail | fix* | ✅ (M: `?`→fix, апгрейд) | | **c3** 族长 (глосс-конфаунд) | fail | fix | fix | fix | fail | ✅ все | **Каждая ячейка, которую исправленный скорер СМОГ локализовать, совпадает с ручным вердиктом D38 дословно** — включая паттерн глосс-конфаунда c3 (C/M=fail «старейшина», F/X/D=fix «глава») и c1 M=`?`. Единственные два расхождения — **a1 F** и **c1 F**: D38=fix → исправленный скорер=`?` (пустой span). Это НЕ семантический флип, а **пробел покрытия локатора** q4a на перефразе gpt-5.4 (окно story→knowledge 90 симв. перелетело; `над людьми` разорвано словом `обычными`). `?` = «не локализовано / не классифицируемо — ИСКЛЮЧЕНО из ставок, НИКОГДА не тихий pass». Разрешение span-читкой (мануально + независимо, §0.3): gpt-5.4 верно рендерит оба («…не было ни одного человека, который бы его не знал» = верная двойная негация; «…подняться над обычными людьми» = верное 人上之人). **D38 «fix» стоит.** Исправленные fix-rate по армам (9 DET-инстансов, `?` исключён из знаменателя): C 7/9 · F 5/6 · X 7/9 · D 7/9 · M 5/7 · P0 4/5. (b1/c2/d1/d2 не были в ручной D38-таблице §2.1 — свежие данные, не «сдвиги».) **Несущие выводы D38 под исправленными правилами — БЕЗ изменений:** - «Только gpt-5.4 чинит смысл» **опровергнуто**: a1 чинят F, **D и M**; валят glm(C) и grok(X). Провалы РАЗБРОСАНЫ по модель×конструкция (a1: C+X; c1: X+D; c3-глосс: C+M). Нет модели безупречной/безнадёжной. - c3 = **глоссарий-енфорсмент**, не способность (C/M подтянули approved-сосед `家老→старейшина` к draft-целевому `四代族长`) — подтверждено внутренней консистентностью (ни один арм не мешает глава/старейшина). ### §0.2. Свип finish_reason=length (задача 2) — ни одна несущая DET-ячейка не заражена 8 леджеров, 477 записей: `stop` 413 · `length` **32** · `(none)` 32. Разбор 32 `length`-записей: | Источник | n | Приняты как валидные? | Затрагивает несущую DET-ячейку? | |---|---|---|---| | gemini-3.1-pro (G-base/G-disc, exp14) | 11 | да (баг-гейт) | **нет** — gemini ДРОПНУТ как арм (exp14b §1.1); не в C/F/X/D/M | | kimi-k2.6 (K-арм + судьи, exp14/14b) | 19 | 2 приняты (10.1/11.1), 17 отвергнуты (empty) | **нет** — K-арм ДРОПНУТ (D38); 10.1/11.1 не несущие | | deepseek-v4-pro **D 2.1** (exp14b) | 1 | **да** (comp_tok=8000, оборван на «…Ступа[й]») | **нет** — 2.1 = e2 (SOFT/судейский), не DET; **НОВАЯ находка** | | gpt-5-mini (regate-судья) | 1 | нет (отвергнут empty) | нет — судья, не редактор | Прямая проверка длин 7 несущих DET-чанков (7.0/17.0/16.0/6.0/9.1/10.1/19.0) по C/F/X/D/M: все консистентны и завершены (ни один аномально короткий, ни один в свипе). **Несущие DET-вердикты сидят на полных выходах.** D 6.0 (упомянут в D38 как оборванный→перегнан на 16k) — сохранённый файл полный (10054 симв, `stop`); в свипе как `length` не значится (финальная перезапись). **Новая находка:** D 2.1 (e2, SOFT) — принятая усечёнка; судьи e2 скорили оборванный выход D. Влияния на несущее нет (e2-вердикт D38 = «большинство correct, чэнъюй-сплющивание универсально» — усечёнка не рождает ложную катастрофу), но фиксирую как риг-гигиену. ### §0.3. Независимая верификация несущих (author≠reviewer) + дельта-вердикт (задача 3) Промт требует: «несущие a1-вердикты span-верифицированы независимо». Исполнено воркфлоу из 4 независимых refute-by-default ридеров (a1 ×2, c1, c3), читавших СЫРЫЕ выходы армов, вердикт fix/fail/omit + цитата-span. **Все 4 подтвердили каждую несущую ячейку**, включая двойное подтверждение a1 F=fix и c1 F=fix (моё разрешение локатор-gap'ов независимо подтверждено). a1: C=fail×2, F=fix×2, X=fail×2, D=fix×2, M=fix×2. c1: C/F/M=fix, X/D=fail. c3: C/M=fail, F/X/D=fix. **ДЕЛЬТА-ВЕРДИКТ:** **0 семантических флипов несущих вердиктов D38.** DET-ядро D38 держится под исправленными правилами, тройно подтверждено (D38-ручной × исправленный авто-скорер × независимый refute-by-default ридер). Два расхождения (a1 F, c1 F) — пробелы покрытия локатора, разрешены в `fix`; одно улучшение (M c1 `?`→fix). **СТОП-гейт НЕ сработал; пинг оркестратору по флипу НЕ требуется** (условие пинга — флип, его нет). **Риг-находки в реестр (не блокеры, для протокола):** (а) исправленный `q4a_traps`-локатор имеет пробелы покрытия на не-S2′ материале → выдаёт `?` (безопасно: не тихий pass) — подтверждает правоту D38 скорить DET ручной span-читкой; (б) харнес exp14 принял усечёнку D 2.1 (e2 SOFT) — единственная новая жертва length-бага вне дропнутых армов; (в) для СВОИХ генераций exp16 length-гейт реализуется в exp16-харнесе (отклонять `finish=length` как reject/flag) — §1. Артефакты: `exp16/reaudit_14b.json`, `exp16/length_sweep.json`, `exp16/pretask_independent_verify.json`. **⟶ Гейт пройден: ядро держится. Перехожу к пре-рег фризу (§1).** --- ## §1. Пре-рег фриз (miner-v1) — коммит ДО первого платного вызова (D30.10/D37) Замораживается дословно из research/20 §D + конкретизации. Детектор-код детерминирован (сортировки, версия `miner-v1`, версионированные словари) — повторный прогон байт-в-байт (§D4-е). ### 1.1. Материал и Ground Truth - **GT = сид v2 пост-reseed**, `guzhenren-seed-v2.yaml` **sha256 `175a67ad2f05…c408f4`** (совпадает с реф-хешем промта; 人祖=male, 古月=n-a подписаны — exp15-преп). **GT = 57 термов + 2 алиас-поверхности.** - **Фильтр вхождения (§D1):** каждый GT-терм имеет ≥1 вхождение src/алиаса в source (Aho-Corasick-эквивалент БЕЗ suppressContained, D24.2). Проверено исполнением: 57/57 проходят **с** аннотацией, 54/57 **без**. - **BLURB-ПРАВИЛО (решение полигона, пре-рег):** аннотация гл.1/чанк0 СЧИТАЕТСЯ вхождением ⇒ **GT=57**. 3 blurb-терма (血颅蛊 since193, 一气金光虫/青丝蛊 since47) встречаются по 1 разу только в аннотации ⇒ страта **f<3**. (Альтернатива «аннотация ≠ вхождение» дала бы GT=54; репортим f<3-recall в обоих разрезах для этих 3 термов.) **Частотные страты GT (incl. аннотация): f≥10 — 40 · f3-9 — 7 · f<3 — 10.** - **(source, draft) пары:** `rerun/records.json` **sha256 `3de49eaf…928d`** — 57 чанков (гл.1–25), черновики deepseek-v4-flash. ⚠ **Конфаунд инъекции (§D1):** черновики генерились С глоссарий-инъекцией сида (budget 800, `pipeline-rerun.yaml`) ⇒ спред на GT подавлен ⇒ метрики спреда/канона на них = НИЖНЯЯ граница; несущие выводы — по cold-start срезу (§1.6). ### 1.2. Армы (A1–A3+абл) | Арм | Детектор | Определение | |---|---|---| | **A1** | V-A | Han-n-граммы 1–6 × частотный floor 3 × c-value (nested-дисконт, g(L)=log₂(L+1)) × weirdness (контраст с общим zh) | | **A2** | V-B | A1 + translation-spread (Dice/LTCR по ru-черновикам, pymorphy3-леммы) + dst-варианты | | **A3** | V-C | A2 + паттерны: 百家姓-якорь, титул/топо-суффиксы, rank/grade-композиция, продуктивная морфология (авто-формант по over-rep), Палладий ru-канал | | **A3-абл** | V-C, λ=0 | V-C без spread-сигнала — изолирует вклад каждого сигнала (§D2) | ### 1.3. Замороженные пороги (miner-v1) — выбраны на тюнинг-половине ch1–15, ±50%-стабильны `freq_floor=3` (§A1 C-value канон) · `subsume_alpha=0.80` (nested-консолидация ранжирования; 0.5 слишком агрессивно роняет GT) · `ngram_max=6` · `formant_min_over_rep=15.0` · `formant_min_partners=3` · `lam=0.0` на инъектированных черновиках (spread вредит ранжированию — конфаунд §D1; на cold-start λ свипается) · pattern-бонусы `{name/place 140, title 120, term 80}` × source-weight. **Свип ±50% (§1 tuning_sensitivity.json): A3@f≥3=1.0 инвариантно по ВСЕМ настройкам; catastrophe PASS везде.** ### 1.4. Метрики (все детерминированные, $0, кроме адъюдикации) 1. **recall@PROPOSED** (членство в кандидат-сете = ось «где арм слеп», §D3) — первичная recall-метрика, по типам (name/title/place/term/nickname) и стратам (f≥10/3-9/<3). 2. **recall@top-K + pseudo-precision@K** (ось ранжирования/точности) + trade-off кривая. 3. **precision@30 адъюдицированная** (топ-30 не-сидовых A3): владелец по карте ИЛИ кросс-семейный судья закалённого паттерна `judges.py` (per-vote, оба порядка, полно-evidence) — precision@сид НЕ метрика (§D1). 4. **canon-recovery** (§C2): покрытие подписанных лемм предложением канона; несущее — на cold-start. 5. **алиас-precision** рёбер R1–R3 (entity-B³, не MUC) + мини-голд владельца для recall (§E-1 тачпойнт). 6. **стабильность порогов** ±50%. 7. **A6b** accuracy верификации/линковки. ### 1.5. Порог-дисциплина 60/40 (анти-подгонка, §D1) Тюнинг = ch1–15, тест = ch16–25. Пороги выбраны на тюнинге, заморожены этим коммитом; **первичный репортируемый результат — тест-половина**; full-срез — вторичка (catastrophe/trade-off/дамп). ### 1.6. Cold-start срез (пре-рег фиксирует главы) **Главы [1, 4, 5, 7, 9]** (жадное GT-покрытие: **52/57** сущностей, **14 чанков** — 6 в гл.1). Свежие flash-черновики БЕЗ глоссарий-инъекции, 2 конфига: `plain` (=срез, spread+canon-recovery) и `banknote` (§B3-инструкция, канал сноски A4). Промт translator — `backend/prompts/translator.md` **sha256 `35d3ad6e…`**, brief из `rerun/book.yaml`, БЕЗ инъекц-блока (порт `coldstart_gen.py`). ⚠ **DeepSeek-долина обязательна** (пики UTC 01–04/06–10 ×2, D39.7 — `coldstart_gen.in_deepseek_peak()` отказывает в пик). ### 1.7. Катастроф-скрин (§D4-в) 方源 · 蛊 · 蛊师 · 古月 обязаны быть в **топ-50 победителя**; промах = провал арма. **Пройден на full (ranks 0/1/2/13/…)** — g(L)=log₂(L+1) держит одночарный 蛊 (nested в 蛊师/蛊虫/月光蛊) на ранге 1. ### 1.8. Карта независимости сигналов (§D4-а — против manufactured convergence) Сигналы репортятся РАЗДЕЛЬНО: A1(частота×контраст), spread(A2−A1 / A3−A3абл), паттерны(A3−A1). Сведение «N сигналов сходятся» — только с leave-one-out. Spread на инъектированных = ~0/негатив (изолирован), измеряется экологически лишь на cold-start. ### 1.9. Бюджет и порядок (§D5) Платный кап **$10** (владелец 17–18.07), per-call gate + hard-cap (`exp15_llm.Spender`). Порядок: A1–A3+абл ($0) → алиас ($0) → A6/A6b (стенд $0) → cold-start (копейки) → A4/A5 (платные, последними, отменяемы). **Length-гейт (D39.9):** ВСЕ свои генерации отклоняют `finish=length` (не наследуем баг exp14). ### 1.10. Хеши (версионирование детектора) - Код `miner-v1` (SHA256): exp16_common `92bc737a` · detectors `89059e53` · patterns `7ac8240c` · spread `5422415f` · palladius `a071295e` · arms `a5ed2ae2` · run_arms `c4e3e17d` · banknote `069ad8fe` · coldstart_gen `70c8d9c1` · alias `354172fa` · canon `e947ebf3` · reaudit_14b `8d95ad58` · length_sweep `59a60b15`. - Словарь-артефакт (контраст): `data/jieba_dict_general_zh.txt` **sha256 `7197c321…e12a8`** (jieba 0.42.1 `dict.txt`, общий zh word-freq; вне git — воспроизводим из jieba 0.42.1, SHA пиннится здесь). - Сид `175a67ad…` · records `3de49eaf…` · translator.md `35d3ad6e…` · бэкенд HEAD `b9e62a7`. ### 1.11. Решения владельца, вшитые (17–18.07, НЕ пересматривать) Жанр-паки НЕ строятся (V-C только универсальные каналы; авто-формант, не хардкод 蛊). Майнер НИКОГДА не пишет `approved` (auto/draft + карта подписи); канон = по ВСЕМ вхождениям × Палладий-конформность × полнота леммы. Пол в сиде подписан (人祖=male, 古月=n-a); счётчики 他/她 = evidence, вердикт = владелец. ja→ru реплика — след-за-§D (отдельный мини-фриз). **⟶ Фриз коммитится. Результаты (§3+) — ПОСЛЕ, лендит оркестратор.** --- ## §2. GT и материал (см. §1.1) · §3. Результаты по армам · §4. Решающие правила + слепые зоны · §5. Деньги · §6. Самопроверка *(заполняются после прогонов; тест-половина — первичка)*