56 lines
12 KiB
Markdown
56 lines
12 KiB
Markdown
# Хендофф оркестратору: холодный мини-прогон (бэкенд-сессия 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.02–0.05. | к выдаче |
|
||
| Р7 | **Довести ли холодный прогон** (подпись → edit-волна → авто-режим проекта Б, ≈$0.12) или считать замер достаточным. Владелец склонился ко второму; фиксирую как решение, а не как незакрытый хвост. | принято владельцем |
|
||
|
||
## 3. Дельта бэклога
|
||
|
||
**Закрыты:** 17 (совместный recall — **0.918/0.980** против 0.069–0.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 запрещает; поймал владелец, не я. Заменено на нейтральное `师父 → наставник`.
|
||
|
||
**Процессное предложение из этого опыта:** байты промпта фолдятся в снапшот черновой волны, поэтому каждая итерация промпта стоит полную волну. Итерировать промпты надо на проекте-пробе в 1–2 главы (≈$0.005), и только потом покупать полный срез. Этого нет ни в одной норме, а цена ошибки — вся волна.
|
||
|
||
## 5. Одно суждение
|
||
|
||
Прогон ответил на свой главный вопрос лучше ожидаемого: холодный банк восстанавливает 45 из 49 подписанных термов и приходит к владельцу **полностью переведённым** (149 из 150 строк с dst), а не голым — контраст с тёплым прогоном 25.07, где владелец получил голые исходные термы. Слабое место оказалось не в покрытии, а там, где его никто не мерил: **банк, который потом связывает каждую главу книги, переводится одним проходом самой дешёвой модели без второго мнения**, а решение «транслитерировать или переводить» принимается по непроверенному полю, которое та же модель дописала третьей колонкой. Если из всего списка выбирать одно — я бы взял Р3 (валидация типа), а не Р4: второе мнение без валидации типа будет спорить о переводе там, где спорить надо о классе.
|