61 KiB
Журнал прогресса
⟶ ТЕКУЩЕЕ СОСТОЯНИЕ (обновляемый блок; на 2026-07-12). Источник истины по РЕШЕНИЯМ —
architecture/05-decisions-log.md(D1–D30); этот файл — ЖУРНАЛ, не спека.
- Фаза: 0 ✅; Ф1-машинерия ✅ (D21–D28); приёмка этап A ✅ с оговорками (D24); этап B заморожен (D26) до читаемых 25 глав. exp12-диагностика ПРИНЯТА (D30): «нечитаемо» = пассивный моно-редактор + кривой сид + построчная вёрстка от промптов + нет санитайзера; дефекты смысла — в черновике. Ратифицировано D30: флип D1 моно→билингв (supersede D17.в; re-gate верности на пере-прогоне обязателен), reflow-вёрстка (промпты чинятся), output-санитайзер (новый гейт-класс), глоссарий v2 условно (спорные → draft до подписи владельца), exp13 бейк-офф ПЕРЕВОДЧИКОВ (deepseek качеством не мерен — главный невыжатый рычаг), COGS флипа +15–25% (~$0.85/ранобэ; «$1.5–2» = отдельная опция Б). Очередь: бэкенд-пакет D15.2 (
BACKEND_D152_SESSION_PROMPT.md: этап А=промпты+санитайзер гейтит пере-прогон; Б=v3.1+реализация; В=export/override D29) ∥ полигон exp13 (POLYGON_EXP13_SESSION_PROMPT.md: переводчики + сид v2) → единый resnapshot → пере-прогон 25 глав кандидатом → чтение владельца → этап B. Трек владельца: дешёвые модели сейчас, фронтир потом (архитектура конфиг-первая — D30.7). Решающая точка — пилот Ф2.5 (блокеры: билингв-якорь/аннотаторы ≥3 — D25.9-Q1, корпус, проба судьи-дублёра — D22.6).- Стек (пост-D30): черновик — кандидат по exp13 (интерим deepseek-v4-flash, thinking ON — эхо-мина) · редактор — БИЛИНГВ (D30.1), кандидат glm-5-билингв (gemini — премиум-эскалация за санитайзером; grok reasoning-off из редакторов СНЯТ — no-op) · судья/апекс Gemini 3.1 Pro (слаг
-preview; mandatory thinking;additive_total— D22.3) · эскалация A: DeepSeek V4 Pro → GLM-5.1 → Gemini-preview · канал B (18+): Mistral · эскалация grok-4.3 reasoning-ON (⚠ не на архаичных zh — D22.5) · abliterated-скрининг · судьи: эротика — Grok (дублёр гейтится пробой D22.6), violence/SFW — Grok+Gemini (DeepSeek в explicit запрещён ToS — D14.1). 7 ключей.- Экономика:
experiments/08-cost-model-v2.md(~$0.69 ранобэ / ~$10.94 вебновелла-500). ⚠ Resume: любой--resnapshot= переоплата книги — онгоинг гейтится D15.2 (v3.1 → реализация); exp08 v3 (annotator/voice-строки) заказан D21.8. Gemini-недоучёт 146×/вызов закрыт additive_total (D22.3).- Ждём от владельца: подпись спорных терминов сида v2 (修炼/культивация · 人祖/Первопредок · род «гу» · 花酒行者 — таблицу даст exp13) · флагман-сверка exp13 (переводчики, monitor-паттерн) · DashScope-ключ для qwen-арма exp13 (опционально) · планка запуска (лучше-фана/гибрид/издательский + готовность к COGS опции Б ~$1.5–2 — мемо-эскалация exp12; интерим D30.7: «лучше фана» на дешёвом миксе) · решение по билингв-якорю пилота (D25.9-Q1) · «да/нет» митигации контаминации пилотного корпуса (D27.4) · publishable/waiver — при экспорте (D25.1) · FN-bound L3 — при спеке (D25.4) · провенанс 12-*-доков · юр-пакет (+rights manifest, D25.8).
- Записи ниже — хронология; РАННИЕ (день-0, 04.07) содержат устаревшие цифры/решения (COGS $2–4, BYOK, Anthropic-Sonnet), переопределённые позже — см. блок выше и 05-decisions-log.
Приёмка Ф1 — 蛊真人 zh→ru, этап A (25 глав), 2026-07-10
Приёмочная сессия по ACCEPTANCE_SESSION_PROMPT.md. Прогон реальной книги end-to-end, вердикт по критериям 02-mvp-plan §Приёмка Фазы 1. Ничего не закоммичено (лендинг — оркестратору). Все производные (store.db, срез, выходы, отчёты) — ВНЕ git (/home/ubuntu/books/gu-zhenren/acceptance/). Дерево backend/ чистое (мои правки = 0; docs/research/17-* — чужая GPT-сессия, не трогал).
Конфиг прогона (по контракту): срез 25 глав (57 чанков) из guzhenren-gb18030.txt (GB18030, ре-энкод среза лосслесс), сид 49 терминов; draft=deepseek-v4-flash (thinking ON), editor=glm-5 (D20.3 — чистого xAI-ключа нет), draft escalate_to=deepseek-v4-pro, escalation.budget_usd=2.0 (D22.11), гейты дефолтные (coverage OFF, postcheck-гейт OFF=флаггер). Промпты/версии/пороги — байт-в-байт из pipeline-c1.
Чек-лист приёмки (каждое — исполнением)
| # | Пункт | Как проверено | Результат |
|---|---|---|---|
| 1 | committed == SUM(checkpoints) |
SQL по живому store на 3 срезах | ✅ ТОЧНО: honest-stop $0.07446423; пережил SIGKILL $0.08639944 (32 ckpt); финал $0.408077 (испр. оркестратором: на финале после redrive инвариант по D15.3 — «≥»: SUM(130 ckpt)=$0.405370; «==» держалось до redrive и на конец полного прогона) |
| 1 | Честный стоп потолка (committed+reserved) | book_usd=$0.08 → отказ резервации | ✅ отклонён ch5/1 edit (испр. оркестратором: denied estimate=$0.00732 по phase1.log:74, не $0.0733), reserved=$0, «raise ceilings.book_usd or stop», exit 1 (код-путь tmctl, в логах не зафиксирован), резюмируемо |
| 1 | kill -9 посреди этапа → без переоплаты | реальный SIGKILL в in-flight glm-5 вызове | ✅ orphan-резервация $0.0075 восстановлена («recovered 1 stale reservation»), committed==SUM пережил краш, ≤1 вызов |
| 1 | resume не переоплачивает | поднял потолок $0.08→$2.0 (wiring-поле, не snapshot) → translate | ✅ (испр. оркестратором — два resume смешаны в одну строку, оба чистые: ceiling-resume переиграл гл.1–5 за $0, первый платный — ровно отклонённая потолком стадия ch5/1 edit; пост-SIGKILL resume переиграл гл.1–6 за $0 (24 tm_hit), первый платный — ровно убитая стадия ch6/1 edit) |
| 2 | echo-эскалация стреляет и ре-гейтится (D18) | ch1/0,1: cjk_artifact 76–82% | ✅ → deepseek-v4-pro → ре-гейт → флаг остаётся (fallback тоже провалил), edit skip, мусор в TM НЕ коммитится |
| 2 | refusal/empty → flag+skip+continue | 4 флага (cjk_artifact×2 стойких, length×2) | ✅ edit пропущен (DispSkipped), FinalText="" не течёт в TM/экспорт/STM |
| 2 | tmctl redrive на реальном флаге |
dry-run (план 4) + real --chapter 1 --chunk 4 |
✅ флаг RESCUED (length был транзиентным бюджетом → ok, attempts=2); флагов 4→3; committed≥SUM (D15.3: сброшенный $0.0027 остаётся в committed) |
| 2 | tmctl status живой при прогоне (OpenReadOnly) |
status / status --json / report при активном translate | ✅ работают без flock; --json exit 2 (флаги); D23 orphan reserved-хвост виден до recovery |
| 3 | Консистентность D10 ≥98% (все approved) | замер ниже (нативный post-check + независимый пересчёт) | ⚠️ суть выполнена (0 реальной терминодрейфа); флаггер шумит из-за неполноты decl сида — разбор ниже |
| 4 | Ноль молчаливых потерь глав | ingest 25 глав → 57 чанков, spine consistent | ✅ все 25 глав обработаны, 0 U+FFFD, 0 потерь. (coverage-гейт OFF по дефолту — ≥90%-recall искусств. пропусков не гонялся, отдельный тест) |
| 5 | Честная оговорка D1.1 | — | ✅ приёмка = инфраструктура; верность НЕ мерена (это пилот Ф2.5) |
Деньги (этап A, весь прогон)
- committed = $0.408077, reserved = $0.000000, потолок $2.00 (20.4%). committed ≥ SUM(checkpoints)=$0.405370 (разница $0.0027 = (испр. оркестратором) ДВА сброшенных пре-redrive draft-вызова ch1/4, побайтно $0.0010117+$0.0016956; честное направление D15.3).
- $/глава = $0.0162 (25 глав). Проекция полной книги (2283 гл.) ≈ $37 — в коридоре промта $25–55, ниже человеческого якоря $100.
- Доля стадий: editor(glm-5) 83.3%, draft(deepseek-flash) 15.3%, эскалация(deepseek-pro) 1.4%.
- Санити vs exp08 (честно, не подгоняя): exp08 моделировал editor 88–90% на grok-4.3. Здесь 83.3% — ниже, потому что (а) 3 флагнутых чанка пропустили дорогой edit (испр. оркестратором: финально 3 — ch1/4 после redrive edit получил) и (б) draft тяжелее (deepseek reasoning subset + ретраи length + эскалации). ⚠️ Клейм промта «glm-5 дешевле grok» неверен по выходу: glm-5 output $3.2/M против grok $2.5/M = +28% за токен; итоговая $/глава ниже якоря из-за размера глав и пропуска edit флагнутыми, НЕ из-за дешевизны glm-5.
- Телеметрия чиста: deepseek reasoning=subset (внутри completion,
reasoning_tokens-поле=0 — не путать с thinking-off), glm-5 billed по факту, эскалация billed отдельной осью (2 ckpt, $0.0056). Gemini/grok на wire-пути дефолт-конфига НЕТ (ожидаемо).
Консистентность D10 — разбор (числитель/знаменатель + классы промахов)
Нативный post-check (retrieval_state, decl-aware, реальный матчер) на 57 чанках: 55 confirmed-промахов, 14 style-флагов, инъекций(точных)=529, sticky=166. Независимый пересчёт по сиду+выходам (author≠reviewer, дважды):
- Occurrence-level D10 = 1780/1938 = 91.8%; presence-level = 370/390 = 94.9%. По типам (presence): имена 98.5%, места 100%, титулы 99%, термины 89%. (Пометка оркестратора: точные числители/знаменатели метод-зависимы и без приложенного скрипта третьей стороной не воспроизводятся — независимая реплика под 6 конвенциями матчинга даёт occurrence 83.1–93.8% / presence 91.6–99.3%, отчётные значения внутри диапазонов, качественная структура (термины — слабейший класс, места 100%) совпадает; с decl-докредитом (база+мн.ч.) occurrence-реплика = 99.0% ≥ 98%. Методику пересчёта на этапе B приложить скриптом.)
- Классификация ВСЕХ 55 confirmed-промахов (по фактическим выходам):
- 37 = nominative_gap — approved-dst присутствует в ИМЕНИТЕЛЬНОМ, но
decl.formsперечисляет только косвенные падежи, а фолбэк на базовый dst вdstFormPresent(mempostcheck.go:85-96) срабатывает ТОЛЬКО при пустом decl. Пример:方源→Фан Юань— «Фан Юань» есть в выходе (+«он» ×4–10 для прочих упоминаний), но флагается. - 18 = inflection_gap — корень dst присутствует в форме, которой нет в сиде (обычно МН.Ч.):
元石→первокаменьрендерится «первокамней/первокамни/первокамнями» (сид дал только ед.ч.); так же凡人→смертный→«смертных/смертными»,蛊师→гу-мастер→«гу-мастеров». - 0 = genuine drift — среди 55 промахов флаггера реального рассогласования терминологии НЕТ. (Уточнение оркестратора: адверсариальный поиск ВНЕ зоны видимости флаггера нашёл ровно 1 дрейф-вхождение — гл.18/0 рендерит 古月方源 раздельно «гу юэ фан юань» против «гуюэ…»×35 и «гуюэ»×154 в остальном корпусе; post-check структурно слеп к этому классу: полное имя longest-match'ится на 方源, чей dst присутствует → промах не фаерится. Alias-слепое пятно зафиксировано в D24.)
- 37 = nominative_gap — approved-dst присутствует в ИМЕНИТЕЛЬНОМ, но
- Вывод: машинерия (инъекция + decl-aware post-check + флаггер) работает; истинная терминоконсистентность ≈ 99.5% (1 наблюдение дрейфа на ~190 поверхностей клан-имени, вне видимости флаггера) (испр. оркестратором: было «≈100% (0 дрейфа)»). Измеренный <98% — целиком артефакт неполноты decl в сиде (нет именительного-в-decl + нет мн.ч.), воспроизведён двумя независимыми методами. Порог 98% ДОСТИЖИМ; правка — сиду (дописать nom+мн.ч. в
decl.forms) ИЛИ post-check (всегда проверять базовый dst, а не только при пустом decl). Это ровно почемуpostcheck_gateдефолтно OFF (флаггер): флип ON сейчас = флаг-шторм на легитимных именительных.
G2 flag-rate (первый замер человеческой петли на реальной книге)
- 3/57 чанков (5.3%) флагнуто после redrive (4/57=7.0% до redrive; redrive снял 1 транзиентный length).
- Концентрация: 2 из 25 глав несут все флаги — гл.1 (классический зачин «第一节:纵身亡魔心仍不悔» — эхо на плотной архаике, ср. register-оговорка D22.5) и гл.10 (length). 23/25 глав — чисто. Человеческая петля front-loaded на классику/плотный ханьский зачин, не размазана.
- Стиль-флаггеры (наблюдаемость): 14, все
dialogue_dash(0 ё / 0 транслит-междометий / 0 разрядов 万億).
Находки для оркестратора (НЕ чинил — правят wire/вердикты → изменение поведения)
- [major] Эскалация draft→deepseek-v4-pro неэффективна под дефолтным max_tokens. deepseek-thinking требует ≥8000 (quirks), а
max_output_ratio=2.2+min_max_tokens=2048дают ~2–3k на чанк → эскалация возвращает empty/length (finish=length), сжигая ~3× цену draft впустую. На ch1/0,1 хоп deepseek-v4-pro дал compl=2048/3291 finish=length. Известный техдолг («min-budget Kimi≥16k/Gemini≥8k — комментарии, не схема») подтверждён эмпирически для deepseek. Вопрос: ввести per-model floor max_tokens для thinking-моделей (schema, не комментарий)? Правит снапшот → решение оркестратора/владельца. - [major] Post-check
dstFormPresentне проверяет базовый dst (именительный) при непустомdecl.forms(mempostcheck.go:87-89: фолбэк на base только при пустом decl). Даёт 37/55 ложных промахов на именительных. Правка: либо сиду дописать nom+мн.ч. вdecl.forms(зона полигона), либо коду — всегда добавлять базовый dst к проверяемым формам (правит вердикты флаггера → изменение поведения). Гейтит осмысленность/флипpostcheck_gate. - [info] deepseek-flash эхает на классическом зачине гл.1 (cjk_artifact 76–82%, finish=stop — интринсик, не бюджет). Ожидаемо (D18/D22.5), гейт ловит корректно. Не баг.
Вердикт
Критерии приёмки Фазы 1 (02-mvp-plan) ВЫПОЛНЕНЫ — как инфраструктурная веха — С ОГОВОРКАМИ.
- Деньги (committed==SUM, честный потолок, resume $0, kill-9 ≤1 вызов, budget_usd-гейт эскалации), диспозиции (echo-эскалация+ре-гейт, flag+skip+continue, мусор не в TM), redrive (rescue+D15.3), живой OpenReadOnly-status, телеметрия/паспорта — подтверждены исполнением, без исключений.
- Консистентность D10: суть выполнена (дрейф ≈0: 1 вхождение вне видимости флаггера — см. разбор); формальный порог 98% по флаггеру не достигнут из-за неполноты decl-сида — не машинный/модельный отказ, воспроизведено, actionable (находка 2).
- Верность НЕ мерена (D1.1, по контракту — пилот Ф2.5).
- (Оговорки вердикта дополнены оркестратором при верификации, D24): (а) объём: прогнан срез 25/2283 глав (~80k zh-символов), не «том целиком» буквы критерия 1 — полный объём двигается в этап B по этапности промта; (б) coverage-гейт: recall-тест «≥90% искусственных пропусков» НЕ гонялся (гейт OFF по дефолту) — остаётся отдельной задачей, вторая половина критерия 4 (ноль молчаливых потерь) выполнена; (в) grok-биллинг (под-критерий 2) не мерен — редактор glm-5 по D20.3, grok на wire отсутствовал; (г) budget_usd эскалации проверен только в направлении «>0 → стреляет» (D22.11), отказ по исчерпанию не исполнялся; (д) parallel-экспорт устарел для спасённого redrive'ом ch1/4 (показывает старый флаг без перевода) — перегенерить на этапе B.
Вопросы владельцу
- Этап B (полная книга 2283 гл.): да / нет / потолок? Этап A стоил $0.41 за 25 глав; полная проекция ~$37 (glm-5-editor). Нужен явный «да» +
ceilings.book_usd/day_usd(согласие на трату, Р6). Рекомендация:book_usd≈45,day_usdпо темпу (сейчас ~$0.016/гл × скорость). - Редактор этапа B: glm-5 (как A) или ждать чистый xAI-ключ под grok-4.3? По D20.3 glm-5 для приёмки допустим (B — та же инфра-веха). Напоминание: glm-5-output на 28% дороже grok/токен.
- Сид перед этапом B: дописывать полноту decl (nom+мн.ч.) сейчас (полигон), чтобы D10-флаггер стал осмысленным, или гнать этап B с флаггером как есть (гейт OFF, прогон не блокирует — просто шумный retrieval_state)? Приёмку инфры B не гейтит; но без этого D10-число останется заниженным.
(Ревью оркестратора 11.07, воркфлоу 5 осей — всё исполнением по копии store/логам/экспортам: деньги воспроизведены до float-epsilon (все 130 чекпоинтов пересчитаны из usage×прайсов), классификация 55 промахов реплицирована бит-в-бит независимой реализацией матчера, SIGKILL/honest-stop/resume сверены по phase-логам, конфиг-паритет с pipeline-c1 подтверждён diff'ом с ровно двумя санкционированными дельтами. Правки текста и дополнительные оговорки внесены выше с пометками «испр. оркестратором». Ратификация вердикта и обе развязки — D24; ответы на вопросы 1–3 — в D24.4–24.5.)
2026-07-11 — Оркестратор №3: лендинг приёмки этапа A и research/17, D24/D25, задания
Передача роли №2 принята (промт 4c48f89). Два ревью-цикла, оба мультиагентными воркфлоу, всё исполнением/по первоисточникам:
- Приёмка этапа A — верифицирована и залендена (
7ca14c2), вердикт ратифицирован D24. 5 осей ($0, по копии store/логам/экспортам): все хедлайны воспроизведены — деньги до float-epsilon, классификация 55 промахов бит-в-бит, SIGKILL/стоп/resume по логам, конфиг-паритет. Найдено и исправлено при лендинге: денежная опечатка ×10 ($0.0733→$0.00732), смешение двух resume в одной строке, «committed==SUM» после redrive (корректно «≥», D15.3), «0 дрейфа»→«≈99.5%» (1 вхождение гл.18/0 古月方源 раздельно — alias-слепое пятно вне видимости флаггера, зафиксировано D24.2); вердикт дополнен оговорками (объём 25/2283; coverage-recall не гонялся; grok-биллинг не мерен; budget_usd-отказ не исполнялся). Числа собственного пересчёта отчёта (1780/1938 и 370/390) третьей стороной не воспроизводятся (метод не приложен; реплики дают диапазоны, вывод устойчив) — методика этапа B обязана быть скриптом. - Развязки приёмки ратифицированы (D24.3–24.4): per-model floor
min_max_tokensсхемой (deepseek 8000 / gemini 8000 / kimi 16000; хоп берёт флор своей модели; блокер этапа B — при прайоре эха 25% без флора ≈$3.6 эскалаций-пустышек на книге) и post-check «базовый dst всегда проверяется» (код, не сид; 37/55 ложных) + сид-обогащение мн.ч. (полигон; 18/55). Порядок: фиксы → единый resnapshot → этап B (~300 глав по переопределению владельца, ~$5; редактор glm-5). - research/17 — ревью завершено, залендено с ревью-шапкой (
a148f41), абсорбция D25. 12 агентов: 19/19 первоисточников существуют (0 несуществующих; 8 с нюансами — ключевой: морф-оговорка Exel et al. процитирована с инверсией); анти-якорение критиком соблюдено (лексический аудит §A, errata-паттерн), но НАШ мандат засеял §A осями и списком дыр → конвергенция ≠ независимое подтверждение (урок D25.10); метки §B2/«Итога» переграждены в PLAUSIBLE. Абсорбция: release-state контракт (задача с гейтом «до читательского экспорта»), fidelity-каскад shadow (Ф2, НЕ вперёд пилота), sequential-судья только как вложенный анализ D13.3, L3-расширения в спеку D22.7 (методика валидации — владельцу: конфликт с гардрейлом «не анализировать»), trust boundary в контракт сейчас (action-gate — именованный блокер Ф3), review bundle в minimal-форме, echo-калибровка полигону, over-stylization метрика в voice-арм. Курс не разворачивается; пилот Ф2.5 остаётся решающей точкой и не разбавляется. - Задания выданы:
BACKEND_PACKAGE5_SESSION_PROMPT.md(floor + post-check + golden re-capture + coverage-recall/budget-отказ тесты + D23.4-микро) ∥POLYGON_PACKAGE4_SESSION_PROMPT.md(сид мн.ч. — гейтит этап B; D22.8 major; проба судьи-дублёра; echo-калибровка; дополнения пре-регистрации пилота; P4-хвост) → затем этап B (ACCEPTANCE_SESSION_PROMPT.mdред. 11.07). Доко-дрейф ja-приёмки в 02-mvp-plan закрыт (v3.1); GPT_EXTERNAL_ASCENT_PROMPT — в архив. - Владельцу (сводно, см. CURRENT-STATE): «да»+потолок на этап B (после лендинга №5+сида); билингв-якорь пилота (Q1 — рекрут vs en-мост в пре-регистрации); publishable/waiver-подпись — при постройке экспорта; L3 FN-bound и методика валидации — при спеке; юр-пакет и чистый xAI-ключ — висят.
2026-07-11 (позже) — Оркестратор: качество-первым (D26)
Владелец прочитал 25 глав этапа A — нечитаемо, слабейшее звено редактура. Первый человеческий замер читаемости на реальной книге; D24 не пересматривается (приёмка мерила инфраструктуру по D1.1), но очередь перестроена — D26: этап B заморожен до читаемого конфига на 25 главах; полигону выдан промт exp12 «диагностика качества» (POLYGON_QUALITY_DIAG_SESSION_PROMPT.md: армы draft-only / glm-5-моно / glm-5-билингв / grok-моно / grok-билингв / gemini-премиум / grok-без-констрейнтов на 3 чистых главах; слепые пакеты владельцу; LLM-судьи вторично с билингвальной сверкой смысла; root-cause разбор худших мест; кап $5; текущий xAI-ключ допустим — D19.4); полигон №4 — второй приоритет; бэкенд №5 без изменений, после него — пакет D15.2 (пер-стадийный reuse = дешёвая итерация редактора). Оценка research/17 владельцу дана честно (~6/10: две контракт-аддиции + задачи, по качеству перевода — ничего, не его мандат). Разъяснена «гигиена чистого ключа» (без data-sharing + без NSFW-истории; к exp12 не требуется).
Позже (11.07, ночь): D27 — ключевая политика xAI по решению владельца. Отдельный чистый ключ не заводится: текущий (с data-sharing-промо — уточнение владельца, supersedes скобку D19.4) идёт на все тесты и пилот, data-sharing отключается перед продом. «Чистый ключ» снят из блокеров пилота; вынужденная glm-5-замена умирает (grok доступен для exp12/пере-прогона/этапа B). Риски зафиксированы принятыми (копирайт 蛊真人 в обучение — только свои тесты; NSFW-история аккаунта), рекомендация-митигация: пилотный корпус (вне претрейна!) гнать при временно выключенном data-sharing — ждёт «да/нет» владельца. Механику отключения сверить с вендор-докой перед релизом (в чек-лист первого боевого прогона). Инцидент git при синке D26: add -A подмёл чужие незакоммиченные правки живой бэкенд-сессии №5 — размотано soft-reset'ом немедленно, содержимое чужих файлов не тронуто; впредь стейджинг только пофайловый.
Ночь: бэкенд-пакет №5 отревьюирован и залендён (aa47e25), ратификация D28. Внешнее ревью 5 осей исполнением в scratchpad-копиях (при двух живых сессиях в дереве), ~10 мутаций переисполнено независимо: все оси ACCEPT, 0 critical/major. Гипотеза «фиксы мертвы (golden пуст)» убита исполнением в обе стороны (флор фикстурной модели валит golden wire-диффом; oblique-only сид флипает вердикты 2/1/2→1/0/1) — пустой дифф data-driven. Scope чист (ровно 4 флора в models.yaml, exp12-файлы полигона не тронуты). D24.4 амендирован (recall-трейдофф — поймал сам пакет); fix-лист D28.3 (fbHash-пин хопа, provider_local×floor note, косметика, models.yaml→D27) — в пакет D15.2, промт которого выдаётся после развязки exp12 (D28.4: reuse×смена-редактора взаимодействуют).
12.07 (позже): exp12 отревьюирован и залендён (75db9e1), ратификация D30 — флип D1 и пакет качественных фиксов. 4 оси ревью, всё исполнением по diag/-артефактам и store-копии: ядро диагноза подтверждено (пассивность моно-редактора бит-в-бит: 3/6 grok-чанков байт-идентичны черновику; вёрстка — от промптов дословно; дефекты — в черновике; риг A1′≈прод). Снято ревью: «единогласный #1 A2» (gpt-5-mini 9/9 за A5; выбор glm-5 = цена ×13 + чистота), «fidelity-гейт пройден 5.0» (судьи давали 5.0 сырому черновику; A2 сам внёс инверсию «пожертвуй мной» → re-gate верности обязателен на пере-прогоне), утечка gemini 6/6 (не 4), мина статусов сида v2 (спорные со status:approved ушли бы в hard-constraints — до подписи владельца → draft). Ратифицировано D30: флип D1 моно→билингв (supersede D17.в), reflow, санитайзер, глоссарий v2 условно, exp13 бейк-офф переводчиков (+grok-ON арм), COGS-рамка (флип +15–25%, «$1.5–2»=опция Б отдельно), трек дешёвых моделей владельца (архитектура конфиг-первая — фронтир позже без переделки кода). Промты выданы: BACKEND_D152_SESSION_PROMPT.md (этап А гейтит пере-прогон) ∥ POLYGON_EXP13_SESSION_PROMPT.md.
12.07: research/16 «Ридер-IDE» отревьюирован и залендён (458b0ea), ратификация D29. 4 оси (источники ×2 по первоисточникам, независимая реплика $0-пробы, red-team контракта против кода/D15.2-спеки): ACCEPT_WITH_FIXES. Ядро принято: чанк = несущий якорь; precision-гейт YELLOW перед показом цветов (<10% ложных/флаг); детект-флаггер, не форс-структура; числовой confidence — никогда без QE. Поправки ревью: числа пробы — верх метрик-диапазона 44–58% на stale-базе (DB-истина 57.4%/70.4%, редактор 90.7%, не 93%); «полностью из read-model» — оверклейм (src/dst_range, source_file_hash, спаны = net-new → нужна настоящая tmctl export-команда с ассемблером); passport-3-тир = явный амендмент вердикт-правила D12/exp07 (при gate-on glossary_miss уже катится в fail); override-ключ = хеш СЫРОГО src-текста (не content_hash=rendered msgs — ловушка), override — новое provenance-состояние, не «verdict-нейтрален». Плюс находка реплики: 8/54 финалов несут markdown-### → нормализация выхода в экспорт-контракт. Абсорбция: D29.1(а–д) в пакет D15.2; полигону 4 задачи (precision — только post-hoc, пре-регистрацию exp12 не трогать); Ф3-хвост — в F3-brief.
Бэкенд
(Закрытая хроника пакетов №0–№4 (04–10.07) перенесена в archive/PROGRESS-2026-07-04-10.md — ревизия D31.)
2026-07-11 (пакет-5) — Фиксы приёмки этапа A (D24.3/24.4) + тесты-оговорки + D23.4-хвосты ЗАВЕРШЕНО
По BACKEND_PACKAGE5_SESSION_PROMPT.md. Ничего не коммичено (лендинг — оркестратор). go build ./... && go vet ./... && go test -race ./... — зелёные. Все новые тесты mutation-verified (реверт фикса валит именно его тест — подтверждено исполнением). Финал — агентское адверсариальное ревью диффа (4 оси find→refute-by-default verify, author≠reviewer): 1 CONFIRMED minor (неточность коммента о recall у union — закрыт, см. оговорку 4), 0 critical/major. Осведомлён о D26-заморозке этапа B: пакет №5 остаётся в очереди (line-4 CURRENT-STATE) и гейтит этап B; фиксы валидны независимо от editor-диагностики exp12.
Сделано:
-
Per-model floor
min_max_tokens(D24.3) — смена wire-поведения. Поле в схемуcapabilities(config.CapabilitiesConfig.MinMaxTokens), резолвится черезResolveCapability(провайдер→модель) и живёт вllm.Capability(тегjson:",omitempty") → фолдится в snapshot автоматически и для primary (ResolveCapability(st.Model)), и для hop (ResolveCapability(st.EscalateTo)) — правка флора = громкий--resnapshot. Применение:Runner.applyModelFloor(base, model)ДО request_hash — на праймари (stagerun.go, поst.Model) И на хопе (escalation.gomaybeEscalate, поst.EscalateTo:hopMaxTokensв fbHash И в runAttempt — ровно фикс этапа A, где хоп наследовал 2048/3291 → finish=length). Флоры вmodels.yaml: deepseek-v4-flash/pro 8000, gemini-3.1-pro-preview 8000, kimi-k2.6 16000; glm-5/5.1/grok-4.3 — без поля. Комментарии-заглушки «дать ≥8000/16000» → схема. Валидацияmin_max_tokens<0. README-техдолг обновлён (комментарий→схема). Флор не течёт в тело как ключ (applyToBodyего не читает) — только через max_tokens; резерв EstimateUSD растёт на флорнутых вызовах, committed по факту не меняется. -
Post-check
dstFormPresent: базовый dst всегда проверяется (D24.4) — смена вердиктов. Множество проверяемых форм ={normalizeTargetForm(dst)} ∪ declFormsВСЕГДА (было: база — только фолбэк при пустом decl). Закрывает 37/55 ложных промахов этапа A (nominative_gap: approved-dst в именительном, decl только косвенные). Union монотонен (только промах→пасс) → precision↑; poisoning ловится по-прежнему (тест). recall на измеренных данных не страдает, НО строго это precision/recall-трейдофф с узким классом ложных пропусков — см. оговорку 4. inflection_gap (18/55, мн.ч.) остаётся сид-фиксом полигона. -
Golden re-capture — дифф-класс ПУСТОЙ (byte-identical, sha256 совпал, git diff пуст). Прогон
TM_UPDATE_GOLDEN=1не изменилcapture.golden. Причина (проверено чтением фикстуры): (а) фикстура использует ТОЛЬКО нефлорнутыеfake-model/fake-fallback→ floor 0 → нет wire-изменений;omitemptyдержит Capability-JSON нефлорнутых моделей байт-в-байт → snapshot неизменен; (б) в сиде каждый entry с непустым decl уже несёт базовый dst первой формой, а два записанных промаха (紋章→герб ch1/0; 竜の紋章→Драконья печать ch2/0) НЕ имеют в проверяемом выходе ни базовой формы, ни decl-формы → union не спасает ни один → вердикты неизменны. Пустой дифф ⊆ санкционированных классов {(a) max_tokens флорнутых, (b) postcheck-вердикты}. Оба новых поведения покрыты выделенными mutation-verified юнит-тестами (golden их не упражняет — нет флорнутых моделей/oblique-only-сида в фикстуре). -
Тесты (все новые mutation-verified; числа):
TestMinMaxTokensFloorPrimary/Hop/FoldedIntoSnapshot(maxtokens_floor_test.go, новый): primary флор на wire (max_tokens==8000); хоп re-флорится по СВОЕЙ модели (primary=512, hop=9000 — доказывает per-call, не global); правка флора двигает snapshotID. Мутации: снять primary-флор → 512≠8000 FAIL; хоп наследует базу → 512≠9000 FAIL.TestPostcheckBaseDstAlwaysChecked(memory_e1_test.go): repro этапа A (方源→Фан Юань, oblique-only decl + именительный в выходе → промаха НЕТ) + негатив (dst и все формы отсутствуют → промах ЕСТЬ). Мутация: реверт к empty-decl-фолбэку → положительный кейс валится с[{方源 Фан Юань confirmed}].TestRunnerEscalationBudgetExhaustionDeniesLaterHop(escalation_budget_test.go, новый; D24.1г): 2-главный epub, оба чанка эхают, budget 0.001 < 1 хоп. Гл.1 хоп допущен (spent 0<budget) → OK; гл.2 хоп ДЕНИЕД (spent≥budget) → флаг остаётся, edit skip, escalation-spend ровно 1 хоп (денег на деньед-хоп $0), 4 вызова, exit 2. Мутация:spent<budget+1e9→ гл.2 эскалирует, 6 вызовов FAIL.TestCoverageGateCatchesArtificialExcision(D24.1б, предсуществовал — пакет coverage-гейта): синтетические пропуски (drop 30/40/50/60% предложений × zh/ja/en) → recall 12/12 = 100%, контроль 0 ложных. Усилил: recall-число теперь ПИННУЕТСЯ ассертом (caught==total), не только логом; ≥90%-бар приёмки сохранён.TestErrTailTruncatesOnRuneBoundary(render_test.go; D23.4): >120 байт с континьюейшн-байтом на офсете 120 → валидный UTF-8, без U+FFFD, суффикс «…». Мутация:!RuneStart(...)&&false→\xd1…невалид FAIL (реверт фикса раньше выживал сьют — гэп закрыт).TestRetryLoopLogsWillRetryOnlyWhileAttemptsRemain(httpllm_test.go; D23.4, slog-capture): персистентный 5xx, MaxAttempts=3 → ровно 2 «will retry» (не на последней попытке), несутretry_in, финал — «exhausted». Мутация: снятьatt+1>=MaxAttempts break→ 3 «will retry» FAIL.- kill9 rounds 3→5 (
kill9_test.go, D23.4). Комментарий golden_test.go:32 смягчён (AMBIGUOUS-ячейка: выбрано смягчение коммента, НЕ правка фикстуры — держит golden байт-в-байт; ambiguous=0 в капче задокументирован, AMBIGUOUS>0-ячейка = опц. расширение фикстуры отдельной ратификацией).
Оговорки / вопросы оркестратору:
- Golden не упражняет новые поведения (флор/union) — фикстура нефлорнута и сид уже полон базой-в-decl. Покрытие — выделенными тестами. Рекомендация (опц., отдельная ратификация): при следующем осознанном golden-рефреше добавить в фикстуру (i) стадию на флорнутой модели и (ii) entry с oblique-only decl + именительным в выходе — тогда golden запинит и wire-max_tokens флора, и union-вердикт. Не делал сейчас: это правка фикстуры = golden-дифф класса ВНЕ {a,b} санкции пакета.
- Реальный
configs/models.yamlтеперь даёт другой snapshot для deepseek/gemini/kimi (флор в Capability). Ожидаемо и совпадает с планом D24.5 «фиксы → единый resnapshot → этап B»; книга gu-zhenren вне git, resnapshot на её стороне. Тесты boevoy-конфига (echo_mine) зелёные. - Порядок floor vs global MinMaxTokens: оба — max(), порядок неважен; флор только ПОВЫШАЕТ (0 не понижает). Хоп:
max(унаследованная_база_праймари, флор_хопа)— наследование бюджета сохранено (мандат), флор добавлен сверху. - ⚠ Пинг (зона docs/, формулировка D24.4): «recall не страдает» у union-фикса — НЕТОЧНО. Адверсариальное ревью пакета (4 оси find→verify, 1 CONFIRMED minor) поймало: расширение accepted-set монотонно (только промах→пасс), это precision/recall ТРЕЙДОФФ, не бесплатный выигрыш. На данных этапа A убранные промахи — все ложные (precision↑, 37/55). Но есть узкий РЕАЛЬНЫЙ класс потери recall: entry, у которого decl БЕЗ именительного И база — нарицательное слово, которое встречается в выходе отдельно, тогда как сам термин для своего вхождения ДРОПНУТ (
剑→мечдропнут как «клинок», но «меч» стоит рядом не по делу) → bag-of-words-проверка пасует, дроп замаскирован. На реальных данных редко (транслит-имена не совпадают случайно) и ТЕРПИМО пока это ФЛАГГЕР. Еслиpostcheck_gateкогда-либо флипается в hard-gate — обязателен пере-замер recall на нарицательных терминах (не предполагать). Код НЕ менял (union = ратифицированный D24.4); поправил только собственный коммент вmempostcheck.goна честный трейдофф + предупреждение о промоушене. Поведение/golden не тронуты. Рекомендация: в D24.4-логе смягчить «recall не страдает» → «на измеренных данных recall не страдает; hard-gate требует пере-замера».
Полигон
(секция параллельной сессии — записи добавлять сюда)
(Закрытая хроника сессий 1–3, 18+ пакетов и exp10/11 (04–10.07) — в archive/PROGRESS-2026-07-04-10.md, D31.)
2026-07-11 — exp12 «диагностика качества 25 глав» (D26, приоритет №1) — армы+судьи+root-cause СДЕЛАНЫ, чтение владельца ждём
Мандат POLYGON_QUALITY_DIAG_SESSION_PROMPT.md + аддендум оркестратора (D27: единый xAI-ключ, grok-армы без ограничений; backend/ — живая сессия №5, ничего там не гонял/не читал WIP; пакеты чтения → diag/reading/). Ничего не закоммичено. Отчёт: docs/experiments/12-quality-diagnosis.md. Артефакты/тексты — /home/ubuntu/books/gu-zhenren/diag/ (ВНЕ git). Скрипты eval/exp12_*.py. Потрачено ≈$2.22 из капа $5 (армы $0.78 / судьи $1.31 / демо $0.13; 0 ошибок).
Дизайн (пре-регистрация §1 заморожена ДО платных вызовов): 3 чистые главы выбраны формулой (диалого-плотность на исходнике, high/mid/low = гл.7/5/14, не черри-пик); армы A0 черновик · A1 glm-моно(=этап A, store $0) · A2 glm-билингв · A3 grok-моно · A4 grok-билингв · A5 gemini-билингв · A6 grok-моно-без-констрейнтов; +A1′ контроль рига. Инъекция глоссария реконструирована из retrieval_state.injected_ids (воспроизводит боевой блок; rig-фиделити A1′≈A1 sim 0.984–1.0).
Находки (мех. + судьи вторично; чтение владельца — главный, ещё не пришло):
- Ядро: моно-редактор ПАССИВЕН. Активность (1−sim к черновику): glm-моно 0.013, grok-моно 0.001 (3/6 чанков char-identical!), grok-моно-без-констр 0.004, grok-билингв тоже 0.006 (reasoning-off инертен в ОБОИХ режимах). Реально правят только glm-билингв 0.14 и gemini-билингв 0.34. На всех 54 чистых чанках этапа A медиана draft→final sim 0.978, канцелярит-маркеров снято 0. «Нечитаемо, слабейшее редактура» = редактор почти не редактирует; нечитаемость унаследована от черновика.
- Монолингвальный режим (D1/D17) — корень. Моно-редактор и пассивен, и структурно СЛЕП к искажениям черновика (без исходника не знает, что «ударил головой»=磕头 земной поклон). Фикс = билингв (флип D1 — ратификация оркестратора).
- grok-4.3 reasoning-off непригоден как редактор (no-op; худший у судей). exp04-ранг-1 был на дефолт-reasoning+билингв; боевой off = инертен (quality-transfer риск exp08/D26 подтверждён числами). Грок-редактор — только reasoning-ON (D6.2-резерв).
- Судьи (gemini+grok+gpt5-mini, кросс-семейно, self-family excl, 26/27 парс): билингв ≫ моно; A2 glm-билингв единогласный #1 по стилю И верность 5.0 — fidelity-гейт «гладко-неверное» пройден (билингв не купил гладкость ценой смысла — страх кальки D1 на срезе не подтвердился). Оговорка: судьи держат вёрстку константной → недооценивают структурный дефект; валидируют модель×режим, не фикс вёрстки.
- Root-cause (кейсы владельца, гл.1 сцена смерти, сверено с zh): структурный дефект №1 = построчные абзацы (оба промпта велят «Сохраняй разбивку на абзацы» → пайплайн копирует кит. «предложение=строка», для ru деструктивно; бьёт по всем главам). Остальные кейсы — ошибки ЧЕРНОВИКА deepseek (时辰 не переведён, 派→«фракции» вместо секты, 磕头→«ударил головой», 练成→«совершенствование»), НЕ спасённые пассивным моно-редактором; 1 «smooth-wrong»-подозрение (清白之身→«невинность») проверено — верно. Демо §2.6 (gemini-билингв + разрешение реверстать абзацы + жанр-правила) чинит ПРАКТИЧЕСКИ ВСЕ кейсы одним прогоном (абзацы 49→25, «фракции»→«школы», «обесчестил»).
Рекомендация конфига (provisional, §3; смену дефолта НЕ делаю — ратифицирует оркестратор): три ортогональных фикса — (а) убрать «Сохраняй разбивку на абзацы» из брифа zh→ru + разрешить реверстку (дешевле всего, заметнее всего); (б) редактор билингв, не моно (флип D1); (в) модель — glm-5 билингв (судейский #1, верность 5.0, $0.42/25 гл), премиум-потолок gemini-билингв ($5.6/25 гл, селективно); grok-off снять. Плюс курация глоссария (моя зона): 春秋蝉 «Цикада Весны и Осени»? · 派→секта · 时辰→глосса. Дорожка: ратификация (флип D1+вёрстка = D-блок) → пере-прогон 25 глав кандидатом → чтение владельца → этап B.
Раунд 2 (чтение владельца состоялось, §4 отчёта): вердикт — ни один из 7 не дотягивает до чтения («машинный, модели не следят за сюжетом»). Новое: (1) ⚠ gemini (A5) ТЕЧЁТ преамбулой в выход («Вот отредактированный перевод…», wire-verified 4 чанка) → дефект продакшн-редактора + раздул мою метрику активности A5; glm/grok чисто → gemini понижен. (2) Глоссарий — сквозная первоклассная проблема (владелец прав): все армы делят один сид; 修炼/人祖 — GAP (не в сиде, «совершенствование»/«Первопредок» = выбор модели → засидить культивация/Рен-Зу?), 蛊师/蛊虫/甲乙丙丁/花酒行者 — lock (гу-мастер/гу-тварь/разряд-Г/Винный-Странник → переголосовать с владельцем); таблица current→pref в §4.2, пере-курация = моя зона после утверждения. (3) Идея «модель гуглит термины» (владелец) — в доках НЕТ; ближайшее D25.5 (веб=недоверенные данные, webfetch=Ф3-блокер) → автолукап = Ф3+, near-term = засид глоссария из фан-конвенций; пинг оркестратору зафиксировать owner-proposal в архитектуру. (4) Кандидат-фикс (glm-билингв+реверстка+конвенции, diag/arms/CAND/) — конвенции ставит, БЕЗ утечки, но реверстку абзацев делает нестабильно → layout надёжнее отдельным reflow-пассом/сильной моделью. (5) Монитор diag/reading/monitor.html (локальный, вне хостинга — копирайт) — оригинал+варианты+кандидат, кнопки копировать для флагман-сверки владельца. Рекомендация §3 дополнена: 4-й равноправный фикс — пере-курация глоссария; gemini понижен.
Раунд 3 (флагман-сверка состоялась, §5 отчёта): владелец прогнал монитор через ДВА фронтир-флагмана (GPT + Claude) слепо + любительский релейный перевод (контроль). Un-blind по ключу монитора (diag/reading/_РАСШИФРОВКА_ФЛАГМАНОВ.md; полный разбор Claude — ОЦЕНКА_ФЛАГМАНА.md). Корректность проверена: оба читали monitor.html (8 вариантов — столько только у монитора) + translate.txt, ключи не открывали, конфаундинга меток монитор↔пакеты нет (чистые 8-ранги), «переработки» выведены чтением и un-blind'ятся ровно в {A5,A2,CAND} = доказательство слепоты; единственный de-blind — gemini сам палит утечкой (мой стриппер снял ведущую форму, пропустил хвостовую в A5/5_1). Конфиг-итог (оба флагмана СОГЛАСНЫ): gemini-билингв (GPT 7.7 / Claude ранг 1.0 — лучшее ЯДРО, но течёт) > glm-билингв (7.3/2.7) ≈ КАНДИДАТ (7.2/2.3) ≫ glm-МОНО=этап A (6.2/6.0, низ — подтверждает «нечитаемо») ≈ черновик/grok-no-op (~5). Тройная триангуляция (механика §2.2 + судьи §2.3 + 2 флагмана): билингв-переработка ≫ моно/пассив; практич. выбор — glm-билингв/КАНДИДАТ. Флагманы добавили сверх: (а) никто не publishable («крепкий сетевой», не издательская проза); (б) чтобы победить фан — 3 вещи: принудительный глоссарий + евро-вёрстка с тире + сноски на аллюзии; (в) нужен output-санитайзер (утёкшие заметки/непереведённые слова/латиница-в-кириллице/диакритики/битые словоформы — новый класс дефектов вне гейтов); (г) сквозные ошибки ЧЕРНОВИКА deepseek (族长≠家老, 本命蛊, 长生=бессмертие не долголетие, 失神, 花酒行者 теряет 花); (д) экспертные глоссарии от обоих — материал для пере-курации. Стратегия честно: сценарий A+B — инкремент даёт «лучше фана», но «издательский уровень» требует более сильного ЯДРА (переводчик, пилот Ф2.5) → приоритет ядра растёт.
Ждём: (1) Пере-курация глоссария — утверждение владельцем терминов (§4.2 + флагман-таблицы: врата→апертура, 真元, 本命蛊→жизненный гу, 长生→бессмертие, 族长/家老; спорное — Первопредок/Жэнь Цзу, культивация/совершенствование — за владельцем) → засид GAP + переголос lock → resnapshot. (2) Оркестратору: ратификация флипа D1 (моно→билингв) + бриф вёрстки + новые задачи: output-санитайзер (класс «мгновенной нечитаемости»), сноски-на-аллюзии, и — по сигналу флагманов «издательский уровень требует ядра» — поднять приоритет выбора базового переводчика/пилота Ф2.5; фиксация owner-proposal «автолукап терминов = Ф3». Дефолт сам не трогаю. (3) Полигон №4 (сид мн.ч.) — второй приоритет, не начат.
Память
(секция ресёрч-сессий памяти — записи добавлять сюда)
(Хроника валидации банка (04–05.07, research/13–14, вердикт GO) — в archive/PROGRESS-2026-07-04-10.md, D31.)
Голос и состояние
(секция ресёрч-сессии — записи добавлять сюда)
(Хроника сессии «Голос и состояние» (09.07 → research/15, D21) — в archive/PROGRESS-2026-07-04-10.md, D31.)
Ридер-IDE
(секция ресёрч-сессии — записи добавлять сюда)
(Хроника сессии «Ридер-IDE» (11.07 → research/16, D29) — в archive/PROGRESS-2026-07-04-10.md, D31.)