220 lines
27 KiB
Markdown
220 lines
27 KiB
Markdown
# ПЛАН 21.08 — ДОФИКСЫ И ДОСНЯТИЕ. Заказ владельца 21.08
|
||
|
||
> Заводится по прямому слову владельца: «завести актуальный план, куда ты дампнешь все необходимые
|
||
> дофиксы, и мы пойдём доделывать и доснимать проблемные места… заодно получится следовать ровно
|
||
> по этому плану и не ошибиться».
|
||
> Предыдущие слои: `PLAN-17-08.md` (курс, частью исполнен) · `HANDOFF-21-08.md` ·
|
||
> `SESSION2-LOG.md` §16 · отчёт `docs/experiments/23-editor-tier.md` секции Д21–Д29.
|
||
> Читать ЦЕЛИКОМ, не грепом.
|
||
|
||
---
|
||
|
||
## 0. ⛔ ПОРЯДОК РАБОТ. Он важнее содержания и меняется по сравнению с прошлым планом
|
||
|
||
**Сначала ГЛОБАЛЬНОЕ РЕВЬЮ (шаг 1), потом фиксы (шаги 2+).** Основание — не осторожность, а
|
||
арифметика: за 21.08 найдено ПЯТЬ дефектов класса «реализация не то, чем названа», и **ни одного
|
||
из них не поймал ни один гейт**. Склейку поймал владелец вопросом; конфигурацию `glm-5` — я
|
||
случайно, глядя в счета; ошибку в собственном отчёте — только когда владелец потребовал
|
||
расшифровать термины. Значит плотность необнаруженных дефектов этого класса ненулевая, и чинить
|
||
до ревью — значит чинить не то и потом пере-ревьюить изменённое.
|
||
|
||
---
|
||
|
||
## 1. ШАГ 1 — ГЛОБАЛЬНОЕ АДВЕРСАРИАЛЬНОЕ РЕВЬЮ ВСЕГО ЭКСПЕРИМЕНТА ($0, воркфлоу)
|
||
|
||
Заказ владельца 21.08: «надо какое-то после плана запланировать воркфлоу ревью всего экспа,
|
||
глобальное. На поиск подобных проблем».
|
||
|
||
**Прецедент, показывающий, что это работает:** адверсариальная приёмка другим модельным семейством
|
||
за прошлую сессию нашла 8 дефектов замера и 4 неверных утверждения в моём же отчёте.
|
||
|
||
### 1.1 Что ревью обязано проверять — по классам найденных дефектов, а не «вообще»
|
||
|
||
| класс | образец, уже случившийся | что искать |
|
||
|---|---|---|
|
||
| **промт не то, чем назван** | склейка с мета-фразой «редактора после тебя не будет» подавалась как продуктовая однопроходка | ПРОЧИТАТЬ полный текст системного промта КАЖДОГО арма; искать мета-фразы про наш конвейер, указания про несуществующие тексты, следы измерительного происхождения |
|
||
| **конфигурация модели ≠ фон** | ростер гасил размышление `glm-5`; вывод «промт не переносим» был бы ложным наоборот | для каждого арма распечатать `call_kwargs` и сверить с ролью: reasoning, температура, потолок вывода |
|
||
| **число в отчёте ≠ число в данных** | опубликовано ×1.05/×1.08 объёма промта, намерено ×1.24/×1.28; вывод «конфаундер не воспроизводится» ложен | пере-считать КАЖДОЕ число отчёта Д17–Д29 из сырья; расхождение = находка |
|
||
| **арм не отличается от другого арма** | `Z7` побайтно равен `ZP` на 12 главах из 15 | сверить тексты армов ПОПАРНО во всех панелях |
|
||
| **клетка негодна, но гейта нет** | `contour.base_a0` читает `content` без проверки `finish`; оборванная клетка попала в панель | пройти ВСЕ источники текстов армов и проверить наличие гейта годности |
|
||
| **гейт сертифицирует не то** | гейт покрытия засчитал правило словом из ПРОТИВОПОЛОЖНОГО правила | для каждого гейта: что он ЗАЯВЛЯЕТ и что реально проверяет; уронить на заведомо больном входе |
|
||
| **инструмент признан негодным, а ссылки на него живут** | `promptdiff.py`, `canon.py`, `material_ja.py` объявлены негодными внутри ревизии; на `promptdiff` ссылается шапка английского пар-пакета как на гейт | найти все ссылки на негодные инструменты как на основание |
|
||
| **обязательство закрыто артефактом, а не действием** | «выпущено/ждёт владельца» вместо исполнения | сверить обязательства сессий против фактов на диске |
|
||
|
||
### 1.2 Обязательные правила ревью
|
||
|
||
* **Author ≠ reviewer.** Ревьюит НЕ та сессия, что писала. Модельное семейство — другое.
|
||
* **Грунтовать `file:line` или цитатой из сырья.** «Выглядит подозрительно» — не находка.
|
||
* **Три исхода, а не два:** подтверждено · опровергнуто · **НЕ ПРОВЕРЕНО** (упал по лимиту,
|
||
не хватило доступа). Урок приёмки П7: 55 находок сочли опровергнутыми, а рефутеры просто упали,
|
||
и оба блокера были среди них. Сверять `agents_done` против `agent_count`.
|
||
* **Ревью читает ТЕКСТЫ, а не хеши.** Все пять дефектов 21.08 невидимы для проверки «файл на
|
||
месте, длина сходится, побайтно совпало».
|
||
* **Результат — список находок с диспозицией**, вливается в этот план как шаг 2а.
|
||
|
||
### 1.3 Чего ревью НЕ решает
|
||
|
||
Оно не судит переводы и не переоценивает вердикты. Его предмет — **реализация и отчётность**,
|
||
а не качество перевода.
|
||
|
||
---
|
||
|
||
## 2. РЕЕСТР УЖЕ НАЙДЕННЫХ ДЕФЕКТОВ — чинить ПОСЛЕ ревью, порядком ниже
|
||
|
||
Статусы: `ФИКС` — правка кода/доков · `ЗАМЕР` — надо доснять · `ВОПРОС` — решает владелец.
|
||
|
||
### 2.1 Ошибки в собственных отчётах (ФИКС, $0)
|
||
|
||
| № | что | где | почему это важно |
|
||
|---|---|---|---|
|
||
| Ф-1 | Опубликовано «объём промта ×1.05 zh / ×1.08 en, конфаундер эксп-21 не воспроизводится». **Намерено по 32 главам: ×1.28 и ×1.24.** Вывод ЛОЖЕН | Д23.1 | это ровно тот конфаундер, ради снятия которого строилась склейка; смягчает лишь то, что лишний объём играл ЗА новый промт, и он всё равно не обошёл склейку |
|
||
| Ф-2 | Английские армы названы «продакшеном». **В `backend/prompts/` есть только `zh-ru`;** английский пар-пакет живёт ТОЛЬКО в `eval/role_topology/prompts/en-ru/` и в бэкенд не лендился | Д24, Д26, Д28, Д29 | сравнение внутри панели не портится (пакет у всех один), но слово неверное: это кандидатский пакет, а не прод |
|
||
| Ф-3 | «`Z7` ≡ `ZP` на 10 главах» — на самом деле **на 12**: ещё 2 главы фиксер ЗВАЛСЯ, был оплачен и вернул побайтно тот же текст | исправлено 21.08 в Д23.6 | ⚠ уже поправлено, оставлено в реестре как образец класса |
|
||
| Ф-4 | «gemini заблокирован материалом, срабатывания массовые» — **неверно**. Как переводчик: 172 клетки, **0 отказов**. Как СУДЬЯ: 318 клеток, 12 отказов (3.8%), все на одной главе, дата 08.08 | сказано владельцу устно 21.08 | поправка внесена в разговоре, в отчёт НЕ внесена — долг |
|
||
|
||
### 2.2 Дефекты кода (ФИКС/ВОПРОС)
|
||
|
||
| № | что | статус |
|
||
|---|---|---|
|
||
| К-1 | `contour.base_a0` читает `content` БЕЗ проверки `finish` (в отличие от соседнего `base_draft`, где гейт есть на обеих ветках). Через щель в китайскую панель прошла клетка `finish=length`. Масштаб: 1 из 22 | **ВОПРОС ВЛАДЕЛЬЦУ.** Функция питает ВСЕ прошлые замеры фазы; тихая правка рассогласует их с уже вынесенными вердиктами. Гейт сборки (`--verify-read`, ловит короткие тексты) уже заведён и закрывает класс на входе в панель |
|
||
| К-2 | Ростер шлёт `gpt-5.6-luna` с `reasoning_effort: "low"`. Замер Д28: ослабленное размышление роняет качество РАЗЛИЧИМО | **ФИКС ДО ПОКУПКИ.** Правка того же вида, что сделана для `glm-5` (арм `RGT`): гонять с вендор-дефолтным размышлением. Иначе получим ложное «luna не годится» — второй раз подряд той же ошибкой |
|
||
| К-3 | Фильтр замечаний критика выбрасывает **20.7% строк на китайском** (304 из 1469) против **0.6% на английском** (1 из 178). Что выброшенное — действительно согласия, НЕ ПРОВЕРЕНО | **ЗАМЕР $0.** Прочитать выброшенные строки. Асимметрия ×34 между парами подозрительна сама по себе; у фильтра уже была история — прошлая редакция ела отрицательные формы как согласия и выбросила 10 настоящих находок. И это ровно та пара, где «критик → перепис» берёт больше всех первых мест |
|
||
| К-4 | `promptdiff.py` признан негодным внутри ревизии (расхождение матчится по префиксу строки; отсутствующий файл пар-пакета гейт не роняет). При этом шапка английского `translator.md` ссылается на него как на гейт, удостоверяющий «расхождение РОВНО одно» | **ФИКС.** Утверждение 21.08 перепроверено НЕЗАВИСИМО и подтвердилось (переводчик: 1 расхождение; редактор: 7, все — парные замены того же правила, ничего не выброшено). Ссылку на негодный гейт заменить на ссылку на эту проверку |
|
||
| К-5 | Три инструмента зоны негодны, гейты числят их зелёными: `promptdiff.py` · `canon.py` (снятая ревью классификация всё равно пишется в артефакт) · `material_ja.py` (фильтр AI-меток объявлен механическим, кода не существует) | **ФИКС/ВОПРОС** — вскрывать перед любой опорой |
|
||
|
||
### 2.3 Незакрытые клетки замера (ЗАМЕР, деньги названы)
|
||
|
||
| № | что доснять | почему | цена |
|
||
|---|---|---|---|
|
||
| З-1 | **новый промт + канон-фиксер** | в панели фиксер стоял над СТАРОЙ склейкой; лучший промт с детерминированной страховкой не пробован ни разу | ~$0.10 |
|
||
| З-2 | **критик → ТОЧЕЧНАЯ правка над хорошим переводом** | это ядро V6 владельца. Мерился только фиксер над ДЕШЁВЫМ черновиком, и переносить тот отрицательный вывод сюда наш же план ЗАПРЕЩАЕТ: «там фиксер чинил дешёвый черновик, в V6 он чинит перевод хорошей модели — другая работа» | ~$0.35 |
|
||
| З-3 | **`gpt-5.6-luna` в роли однопроходки** | выход втрое дешевле dspro; в дорогой роли не мерен ни разу; в черновиках — ничья. Единственная оставшаяся крупная экономия | ~$0.14 |
|
||
| З-4 | **`gemini-3.1-flash-lite` в роли однопроходки** | то же; и как переводчик Gemini не отказывал ни разу (172 клетки) | ~$0.18 |
|
||
| З-5 | две недостающие клетки `RGT` | гард отказал на потолке ФД-N; панель собрана на 13 главах вместо 15 | $0.11 |
|
||
| З-6 | **вторая пятнадцатка читателей на те же пакеты** | разброс ПРИБОРА не мерен ни разу. Все выводы предполагают, что читатель устойчив; проверено только косвенно (близнецов не разводил, 12 тождественных пар связал знаком `=`) | **$0** |
|
||
| З-7 | `gemini-3.6-flash` — единственная непроверенная фронтир-модель | опционально; старший `pro-preview` закрыт как «не лучше, ×30 по цене» | ~$0.88 |
|
||
|
||
**Потолок ФД-N: $2.40 → $3.30** покрывает З-1…З-5. С З-7 — до $4.20. Пакетный резерв $1.96.
|
||
⛔ Поднимать потолок решением сессии ЗАПРЕЩЕНО: суммы названы, слово за владельцем.
|
||
|
||
### 2.4 Долги фазы, не двигающие знание, но без них фаза не сдаётся
|
||
|
||
Перенесены из `PLAN-17-08.md` §4, статус на 21.08 не изменился:
|
||
адъюдикация английской оси (блокирует единственный несущий вывод фазы) · 65 находок ревизии ·
|
||
секция Д5 (ручная пере-классификация 24 мест) · синхронизация отчёта (сводка Д9 против Д15–Д20,
|
||
деньги в Д17 протухли, тела эрраты Э-17.1 нет) · реестр требований (строк на Д17–Д20 нет,
|
||
16 самореферентных улик, R64 красный) · **пинг в `docs/PROGRESS.md`, последняя запись 15.08** ·
|
||
селфтесты `sud.py` красные на трёх осях (⚠ `MIN_FLOOR["d6"]=3` — константа под зелень, НЕ править,
|
||
вопрос владельцу) · `E1` побайтно равен черновику на 5 единицах из 16 · эррата zh-канона ·
|
||
`chtenie.py --score-calib` не пере-считывает число, ради которого объявлен.
|
||
|
||
**Долг ЧУЖОЙ ЗОНЕ (пинг оркестратору обязателен):**
|
||
английский экстрактор `pair_en.raw_text` сносит из epub все теги, включая `</p>`: в книге 11 447
|
||
абзацев, а модели едет один блок. Чинить на месте НЕЛЬЗЯ — `uid = sha1(source.strip())`, правка
|
||
пробелов переименует всё и повесит 289 оплаченных клеток на $2.64. Починка сделана НА ПОДАЧЕ
|
||
(`podacha.restore_paragraphs`), настоящая — в бэкенде.
|
||
**Сюда же Ф-2: английского пар-пакета в бэкенде нет вовсе.**
|
||
|
||
### 2.5 Открытые нормы и отступления
|
||
|
||
* **П-1 «два судейских семейства» не исполняется** — решение владельца 20.08 (Sol запаркован).
|
||
Объявленное отступление, писать рядом с каждым выводом.
|
||
* **P42 снят с повестки, но НЕ решён:** два пре-рег-правила о маржевом гейте противоречат.
|
||
* **Пре-рег Д23 разошёлся с панелью** (`RN2`/`RG`/`RK` обещаны, куплены `RC`/`RB`) — объявлено
|
||
девиацией Д23.5; **собственного пола замера (`RN`/`RN2`) не существует**, полом служит чужая
|
||
пара `Z0`/`ZF`.
|
||
|
||
---
|
||
|
||
## 3. ЧТО ЗАВЕСТИ, ЧТОБЫ КЛАСС БОЛЬШЕ НЕ ПРОХОДИЛ (ФИКС, $0)
|
||
|
||
**Гейт «промт на провод».** Перед КАЖДОЙ покупкой печатать ПОЛНЫЙ ТЕКСТ системного промта каждого
|
||
арма и требовать, чтобы его ПРОЧЛИ: сессия вслух в отчёте плюс приёмка другим семейством.
|
||
Не хеш, не длину, не «расхождение одно» — сам текст.
|
||
|
||
Обязательные пункты той же сверки, обе — из ошибок 21.08:
|
||
* **что реально уходит по проводу** — `call_kwargs` каждого арма (reasoning, температура, потолок);
|
||
* **сколько знаков инструкции** у каждого арма, отношение к базе контраста.
|
||
|
||
Почему это, а не ещё один структурный гейт: склейка несла прямым текстом «отдельного редактора
|
||
после тебя НЕ БУДЕТ». **Никакой механический гейт этого не увидит, а человек видит с первой
|
||
строки.** Все пять дефектов 21.08 — этого класса.
|
||
|
||
---
|
||
|
||
## 4. ПОРЯДОК ИСПОЛНЕНИЯ
|
||
|
||
1. **Шаг 1 — глобальное ревью** (§1). $0. Находки вливаются сюда как §2.6.
|
||
2. **Шаг 2 — фиксы отчётов** Ф-1, Ф-2, Ф-4 (§2.1). $0. Делать ПОСЛЕ ревью: оно может добавить.
|
||
3. **Шаг 3 — фиксы кода** К-2 (обязателен ДО покупок), К-3 (замер $0), К-4. К-1 — ВОПРОС.
|
||
4. **Шаг 4 — гейт «промт на провод»** (§3). $0. Ставится ДО покупок шага 5.
|
||
5. **Шаг 5 — покупки** З-1…З-5 по санкции владельца и поднятому потолку.
|
||
6. **Шаг 6 — второе чтение** З-6. $0. Даёт разброс прибора, которого нет ни у одного вывода фазы.
|
||
7. **Шаг 7 — долги фазы** (§2.4), начиная с адъюдикации английской оси и пинга в `PROGRESS.md`.
|
||
|
||
---
|
||
|
||
## 5. ЧЕГО НЕ ДЕЛАТЬ
|
||
|
||
* **Не покупать до шага 4.** Гейт «промт на провод» стоит $0 и ловит класс, стоивший фазе двух
|
||
ложных выводов за один день.
|
||
* **Не чинить `base_a0` тихо.** Он питает все прошлые замеры; правка без слова владельца
|
||
рассогласует их с вынесенными вердиктами.
|
||
* **Не поднимать потолки решением сессии.** Суммы названы, слово за владельцем.
|
||
* **Не переносить отрицательный вывод по точечным контурам на З-2.** Там фиксер чинил дешёвый
|
||
черновик; здесь — перевод хорошей модели. Другая работа, и это записано ещё в прошлом плане.
|
||
* **Не называть английские армы продакшеном** до тех пор, пока пар-пакет не залендён в бэкенд.
|
||
|
||
---
|
||
|
||
## 6. ИТОГ ШАГА 1 — РЕВЬЮ ИСПОЛНЕНО, И ЧТО УЖЕ ПОЧИНЕНО
|
||
|
||
**Ревью отработало целиком: 231 агент, 0 отказов, каждая находка через трёх адверсариальных
|
||
скептиков. 51 дефект: 11 блокеров, 22 важных, 18 мелочей. Находок «не проверено» — НОЛЬ.**
|
||
Полный свод — `REVIEW-21-08.md`. Эррата в отчёте — секция Д30, баннеры на девяти ложных
|
||
утверждениях в их родных местах.
|
||
|
||
### 6.1 Починено в коде (сделано 22.08)
|
||
|
||
| блокер | что было | что стало |
|
||
|---|---|---|
|
||
| **Б1** | `contour.a2_mandate` грузила `editor.md` по захардкоженному zh-пути → на en/ja в промт уезжали 时辰, чэнъюй, «китайский паратаксис» | грузит по `PAIR_DIR` своей пары. Проверено: английский промт чист, китайский свои правила сохранил, селфтест контура печатает zh-проводку как no-op (39/66 → 39/66) |
|
||
| **Б6/Б7/В22** | ростер кодирует одним режимом `none` вендор-дефолт HIGH у dspro и LOW у grok; `glm-5` гасился нашим кодом молча; luna пинилась на `low` | уровень размышления объявляется ПОАРМНО и ЗНАЧЕНИЕМ (`rol.THINK_LEVEL`), печатается гейтом провода. Заведены армы `RKT` (grok на `high`), `RL` (luna), `RE` (gemini-flash-lite) — все с явным уровнем |
|
||
| **Б8** | `base_a0` читал `content` без проверки `finish`; селфтест был слеп по построению | гейт на СБОРКЕ панели (`emit_read` спрашивает `contour.a0_ok`), плюс громкое имя дефекта в `base_a0` |
|
||
| **§3 плана** | гейта «промт на провод» не существовало | `rol.py --wire <пара> [--arm=X]` печатает ПОЛНЫЙ текст инструкций, тело вызова и отношение объёмов по каждому арму |
|
||
|
||
⚠ **Урок, купленный внутри самой починки Б8 и записанный в код:** первая редакция гасила текст
|
||
в `base_a0`, как это делает `base_draft`. Проверка исполнением показала, что это ХУЖЕ болезни:
|
||
негодная единица выпала из `pool()`, а `chosen()` берёт N_UNITS от хеша — **на её место молча
|
||
встала другая, и «те же 16 глав» перестали быть теми же.** Гейт годности обязан стоять на сборке
|
||
панели, а не на источнике текста.
|
||
|
||
### 6.2 Починено в отчёте
|
||
|
||
Секция **Д30** (одиннадцать подпунктов) плюс баннеры `⛔ ЛОЖНО, СМ. ЭРРАТУ Д30` на девяти местах:
|
||
объём промта ×1.05/×1.08 · числа банка в Д23.0 · «обогащение вредит» в Д24.3 и Д26.2 ·
|
||
«совпадающих армов нет» в Д26 · вердикт по grok в Д28.2 · подпись «один прайс» в Д29.1 ·
|
||
главное число фазы · живой ложный вывод про парафраз в Д14.6. Та же ложная строка про банк
|
||
вычищена из шапки `rol.py`.
|
||
|
||
### 6.3 ⛔ ЧТО ОСТАЛОСЬ ПОСЛЕ ПОЧИНОК — по убыванию тяжести
|
||
|
||
1. **Клетки `dv-b-e2-*` (en) и `dv-c-j2-*` (ja) сделаны заражённым промтом.** Код починен, данные
|
||
нет. Несущий контраст Д23 `RN/ZP` сравнивал новый промт со СЛОМАННОЙ базой — базу надо
|
||
пере-купить, иначе вывод о промте-роли остаётся условным.
|
||
2. **`RKT` не куплен** — пока его нет, вердикт «промт не переносим на grok» читается как свойство
|
||
связки «grok + low», и вывод Д28.5 «дешёвого вендора не нашлось» под риском (~$0.25–0.30).
|
||
3. **Вердикт H-4 на английской и японской ногах НЕ УСТАНОВЛЕН** (армы `E6`/`J6` шли с нулём
|
||
размышления). На японской конфаундер направлен против напечатанного порядка.
|
||
4. **Чувствительность вердиктов Д4/Д1 к выбросу единицы `41599f30df` не замерена никем.**
|
||
5. **`promptdiff.py` и `canon.py` негодны, а на них висят живые строки реестра.** Гейты якорить на
|
||
полную пару строк; `canon.py` либо не писать классы, либо метить артефакт.
|
||
6. **Ценовая таблица Д29.1 не пере-считана** к одной шкале; переворот «критик→перепис против glm-5»
|
||
надо печатать полосой, а не числом.
|
||
7. Незакрытые клетки замера З-1…З-7 из §2.3 — по ним ничего не менялось.
|
||
|
||
### 6.4 Порядок дальше
|
||
|
||
Шаг 2 (фиксы отчётов) и шаг 3 (фиксы кода) ИСПОЛНЕНЫ в объёме блокеров. Следующее по плану —
|
||
шаг 4 (гейт провода) ИСПОЛНЕН, значит открыт **шаг 5: покупки**. Перед первой покупкой прогнать
|
||
`--wire` и прочесть вслух; санкции владельца и поднятого потолка ФД-N по-прежнему нет.
|