textmachine/docs/archive/reports/COLDRUN_HANDOFF_2026-07-31.md

56 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Хендофф оркестратору: холодный мини-прогон (бэкенд-сессия 31.07)
**Статус:** сессия закрыта владельцем ПОСЛЕ банк-стопа, до подписи и edit-волны. Дерево НЕ закоммичено. Факты и числа — `COLDRUN_REPORT_2026-07-31.md` (§0 пре-регистрация написана до первой траты, §9 — критик полноты). Здесь только то, что нужно для лендинга и решений.
## 1. Что лендить
11 изменённых файлов бэкенда + 2 новых теста. Содержательно — пять вещей:
1. **Правило src банкноты пар-слепое** (бэклог 19 закрыт): «исходная строка непуста и встречается в книге» вместо ханьского диапазона. Канал перестал быть мёртвым для не-CJK и начал отсекать выдуманные поверхности.
2. **Восстановление порядка колонок** тем же инвариантом — не терпимость, а определение: сторона исходника та, которую свидетельствует книга; объявленный порядок побеждает всегда, когда засвидетельствован.
3. **Разделение версий канала**`bankSliceVersion` фолдится (его выход = оплаченный чекпойнт), `bankParseVersion` едет с прогоном (его выход = улики, пересчитываются каждым прогоном). Слитая версия штрафовала за починку правила разбора полной перекупкой черновой волны.
4. **Секция редактора по провенансу** (S7): подписанная владельцем строка больше не попадает в секцию «никем не утверждено» из-за коллизионного ключа. `Ambiguous` остался стражем матча.
5. **Два линта пар-пакетов промптов** + правки данных: формат каналов ПОКАЗАН настоящей табуляцией. Линт нашёл второй экземпляр дефекта, которого никто не искал.
**Приёмка сессии:** мутации 12/12 красные (одна выжила на первом круге → дыра теста закрыта пином → красная), сьюта `-race` 14/14, vet/gofmt чисты, **golden не пере-капчен и не покраснел**, стендовые артефакты байт-неподвижны (33 хеша).
## 2. Решения, которые нужны
| # | Решение | Готовность |
|---|---|---|
| Р1 | **Ратифицировать путь (ii) по S7** — версии не бампались, экспозиция строго ноль (1119 пар «запись×ключ» на 32 банках, позитивный контроль рабочий). Владелец санкционировал заранее при условии нуля; условие выполнено и доказано диффом. | к подписи |
| Р2 | **Ратифицировать разделение версий канала** — это правка контракта инварианта №2 (что именно фолдится). Прецедент в кодовой базе: `gates.terminology`/`gates.voice` не фолдятся по той же причине. | к подписи |
| Р3 | **Валидация поля `type`** — оно решает «транслитерировать или переводить», приходит третьей колонкой от черновой модели и не проверяется ничем. Механизм жалобы владельца «слишком китаизированно» (`元石` пришёл типом `name` ⇒ «юаньши»). Дизайн — центы. | нужен дизайн |
| Р4 | **Второе мнение по банку** (архитектура глав: две разные модели). Отложенный судья-с-декоем в роли РЕЦЕНЗЕНТА: несогласия отдельной колонкой в подписной таблице, решает владелец. Условие возврата («после холодного старта») наступило. | нужен дизайн |
| Р5 | **Формат каналов — в шаблон движка** (`{{banknote_format}}`), пар-пакет несёт только язык и обёртку. Сегодня контракт пересказан прозой в каждом пар-промпте, парсер живёт в Go, связи нет. | нужен дизайн |
| Р6 | **Эксперимент «язык промптов»** (гипотеза владельца 31.07, строка 30в): арм A ru / арм B en при неизменных инъекциях, метрика — детерминированные счётчики формата, судья не нужен. Зона полигона, ≈$0.020.05. | к выдаче |
| Р7 | **Довести ли холодный прогон** (подпись → edit-волна → авто-режим проекта Б, ≈$0.12) или считать замер достаточным. Владелец склонился ко второму; фиксирую как решение, а не как незакрытый хвост. | принято владельцем |
## 3. Дельта бэклога
**Закрыты:** 17 (совместный recall — **0.918/0.980** против 0.0690.103 у майнера соло) · 19 (парсер) · 23 (утечка алфавита — 0 из 150) · часть 20 (язык при пустом якоре: `off_language`=0 на 149 консолидациях; четыре сэмпла банкноты) · часть 24 (эхо-метрика на живом эхе; покрытие WHAT→WHICH при непустом пересечении — 14 «оба канала»).
**Переформулированы:** 18 — механизм доставки односимвольного терма проверен $0-пином, но `蛊` **не приходит ни одним каналом никогда** (модель объявляет составные, майнер режет по длине) ⇒ это не «правка данных сида», а структурная дыра эмиссии на голове частотного понятия.
**Остаются открытыми:** 16 (полная цена холодного старта — edit-волна не гонялась) · 21/22 (сырьё есть, метод полигонский) · 13б (`speech-cue.txt` — оси голоса «не измерено», см. ниже) · остальное 24 (авто-режим).
**Новые строки:**
- Тип терма не валидируется, а решает ветку транскрипции (Р3).
- Консистентность серий не обеспечена: `甲等 → класс Цзя` против `乙等/丙等/丁等 → ранг И/Бин/Дин` — одна серия, два родовых слова, потому что термы в разных батчах роли.
- Проводной формат каналов дублируется в пар-промптах (Р5); линты держат класс, дублирование остаётся.
- Квадратичность правила src при промахе чанк-пути (рядом со строкой 37).
- **Эхо-мина жива при thinking-ON** — 2/20 черновиков вернулись чистым исходником; гейт поймал, эскалация вылечила. «echo 0» пере-прогона (D39.20) был свойством выборки, а не гарантией.
**Строка 13б осталась неразрешимой этим прогоном** и по моей вине частично: `gates.voice` был включён, но реестр флаггера собирается ТОЛЬКО из `voices:`/`addresses:` сида — при пустом сиде оси пусты по построению. Я поднял это в синке до трат (Q1), владелец санкционировал мини-профили при подписи, но подписи не было. Черновик профилей заземлён на текст среза и лежит в `coldrun-a/SIGN-PACKAGE.md` §3 — готов к любому следующему прогону.
## 4. Мои ошибки (методические, для нормы следующего промта)
1. **$0.010064 сожжено** на оборванной волне: начал пере-драфт со старым промптом и остановил, когда пришло правило владельца о воркэраундах. **$0.046341 — переработка**: разделение версий канала надо было спроектировать ДО первой платной волны. Норма среза — одна волна $0.0247; заплачено четыре.
2. **Первую починку `<TAB>` я сделал терпимостью парсера** — то есть спрятал дефект наших же данных в движок. Владелец это назвал, и он прав; откатил, починил корень, поставил линт над классом. Урок в норму: правка, которая делает движок терпимым к нашему собственному тексту, — почти всегда воркэраунд.
3. **В пар-промпт я вписал канон конкретной книги** (`方源 → Фан Юань` как пример формата). Это ровно то, что норма §0 запрещает; поймал владелец, не я. Заменено на нейтральное `师父 → наставник`.
**Процессное предложение из этого опыта:** байты промпта фолдятся в снапшот черновой волны, поэтому каждая итерация промпта стоит полную волну. Итерировать промпты надо на проекте-пробе в 12 главы (≈$0.005), и только потом покупать полный срез. Этого нет ни в одной норме, а цена ошибки — вся волна.
## 5. Одно суждение
Прогон ответил на свой главный вопрос лучше ожидаемого: холодный банк восстанавливает 45 из 49 подписанных термов и приходит к владельцу **полностью переведённым** (149 из 150 строк с dst), а не голым — контраст с тёплым прогоном 25.07, где владелец получил голые исходные термы. Слабое место оказалось не в покрытии, а там, где его никто не мерил: **банк, который потом связывает каждую главу книги, переводится одним проходом самой дешёвой модели без второго мнения**, а решение «транслитерировать или переводить» принимается по непроверенному полю, которое та же модель дописала третьей колонкой. Если из всего списка выбирать одно — я бы взял Р3 (валидация типа), а не Р4: второе мнение без валидации типа будет спорить о переводе там, где спорить надо о классе.