Follow the third pass: the lost half of a closed row returns as its own line, pointers to ten closed rows stop sending readers to the dead, and two errata labels swap back

This commit is contained in:
heaven 2026-09-05 06:05:15 +03:00
parent 69a430ec17
commit 51dbf178a1
10 changed files with 44 additions and 28 deletions

View file

@ -150,8 +150,12 @@ sol-border, эксп-23 §12в). Закрытие пункта = **непуст
10. Нумерация: два «п.7» в §8 эксп-23; порядок пунктов §9 эксп-22 (17, 911, 8) — перенумеровать,
ссылки поправить.
11. `eval/README.md`: добавить `editor_tier/` в карту действующих харнессов.
12. Остаток строки 167 (передан фазе Д): статус-баннеры на отчётах экспов, где их нет, +
актуализация шапки эндпоинтов `00-provider-quirks.md`.
12. ✅ **ПУНКТ ИСЧЕРПАН — не делать (проверено исполнением 05.09, строка 167 закрыта D39.200).**
Статус-баннеры: у ВСЕХ отчётов `docs/experiments/**` они есть — прогони сам, команда
`for f in docs/experiments/*.md; do head -12 "$f" | grep -qiE 'ревью-шапка|⚠|статус|superseded|отработан|принят|переопределено' || echo "$f"; done`
даёт пусто. Шапка эндпоинтов `00-provider-quirks.md` пере-снята зоной 10.08.
⚠ Пункт оставлен видимым, а не стёрт: он был выдан заказом, и молча исчезнувший пункт
читается как потерянный, а не как исполненный.
## Нормы рига (ЖЁСТКИЕ; нарушение = аннулирование куска)

View file

@ -19,7 +19,7 @@
> - **Курс:** этапы ОБЩНОСТЬ · КАЧЕСТВО БАНКА · ПАКЕТ-ЧЕКЕРОВ · ФРОНТ-ЭРА · шов/платформа/движковые блокеры — ПРОЙДЕНЫ (D39.59123). Хвосты курса живут строками: 16 (полная цена холодного старта; edit-волна на малых прогонах отработала и оплачена — 58 вызовов волновым драйвером 2325.07 плюс 648 до драйвера, счёт по леджерам `~/books/gu-zhenren/**/*.db`) · coldrun-b фаза C заморожена чекпойнтом легитимно (D39.86; эталон денег/поведения — coldrun-a, read-only); развилка 0731 решена и исполнена (D39.87/91, код `553f1a3`).
> - **Горизонт (D39.62/67, освежён D39.95):** **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · цена 16; остаток арбитража банка = рецензент спорных кластеров при ре-пробе — D39.102). ⚠ **Испр. 05.09 (D39.198 п.5):** прежняя редакция держала здесь ТРИ предусловия, снятых владельцем, — жильцы ролей (149: разморозка ничего не разблокирует, пока идут доработки) · веса K1K12 (13а: веса не нужны, мерить по узлам) · вне-претрейн чекпоинт (55: прогоняем на тех же текстах, оговорка — ограничение ВЫВОДА, а не требование новой книги) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 6268, 85) → Ф3 ридер-IDE (6971). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 (⚠ + x/text Unicode 17 тем же тулчейном — строка 119, реестр §Б-108 справочника якорей) · платные прогоны разблокированы (проба провода — D39.97, конфиги 112 залендены).
> - **Стек (полная карта роль→модель→конфиг→квирки — [STACK.md](STACK.md), D39.126):** draft deepseek-v4-flash thinking-ON `low` **⚠0731** → терминолог (та же модель) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (топология ПОДТВЕРЖДЕНА при неразличимости жильцов — D39.117; закон-блок ОБЯЗАТЕЛЕН и ВНЕСЁН — D39.104 п.2, вайр-батч принят D39.199; glm-5 резерв; вахта маппинга эффорта pro — §Б-108) → судья gemini (Ф2, в движке НЕ построен — строка 33); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — ⚠ **ТРИГГЕР ПЕРЕ-КАЛИБРОВКИ СРАБОТАЛ 31.08** (испр. 02.09): платный прогон отработал и дал собственную оценку движка `projected_book_usd = 1.1377277707` на десяти главах при куплённых $0.436110; число D30.4 держать как июльское. ⚠ **Вендор-факты 1315.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137):** таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.24.4 в пике / ×2.12.2 в долине — замер по трём прогонам); ⚠ **испр. 05.09: носители про эффорт `pro` БОЛЬШЕ НЕ ПРОТИВОРЕЧАТ** — и квирки (§3г), и `STACK.md` говорят одно: ручка ДОХОДИТ до модели с вендор-апдейта 13.08. Живой остаток один — вендор-сверка маппинга и ВЕЛИЧИНА эффекта, строка **237**(б); ⚠ ВЕСА pro сменились под тем же слагом (V4-Pro-0813, класс D39.61) — вахта-риг готов (остаток 172); покупки фазы Д на deepseek до 16.08 16:00 UTC — по старым ценам. ⚠ **ВЕСЬ банковый контур (банкнота+терминолог+классификатор) ВКЛЮЧЁН в shipping-c1 с `b8154cd`**`enabled: true` у обоих гейтов и `classify_types: true`, бюджеты по $1.00 (прежде жил только ран-локальным конфигом книги; строка 140 — ⛔ его единственный вход `mining.contrast_path` в git ОТСУТСТВУЕТ, развёртывание обязано положить артефакт, иначе контур не исполняется вовсе, носитель — строка 251; сверка STACK.md 09.08 — факт шире прежней декларации «одна банкнота»); эскалация в shipping за `budget_usd: 0` (STACK.md §примечания).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 05.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **210** строк · зона бэкенд **105** строго / **142** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **82** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 05.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **211** строк · зона бэкенд **106** строго / **143** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **82** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже).
> - Архивы хроники: `archive/PROGRESS-2026-07-04-10.md` (D31) · `-10-13` (D39.6-гигиена) · `-13-25` (стройка паков 1116, rerun2) · **`-25-31` (паки 1720 · мини-прогон · полигон-пакеты 58 · ToS · холодный прогон; D39.2658)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.5990, срез D39.105)** · **`-08-02-04` (сессии №11№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91105 + снимок шапки эры №15)** · `-08-04-09` (пинги закрытых паков эры №15) · **`-08-14-15` (закрытые бэкенд-записи №1617: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139)**. Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139).
## 📌 СОСТОЯНИЕ ПАКОВ
@ -31,11 +31,11 @@
> **(2) ⚠ ДАННЫЕ ЯЗЫКОВОГО ПАКЕТА — ТОЖЕ.** Правка `backend/internal/lang/data/*.txt` двигает `EmbeddedVersion``cutTag` (докстринг `backend/internal/pipeline/manifest.go`: «the embedded data feeds the CJK numerals and sentence terminators that place boundaries») → ключ валидности манифеста → на платформе `recut := storedKey != in.ManifestKey` (`platform/internal/pgstore/readmodel.go`) → `delete from unit_resolutions where book_id`. То есть у книги, за которую заплачено, исчезают замечания читателя и счётчики глав — это строка бэклога **198**. ⇒ **Лендинг правки данных не кладётся, пока книга платного прогона живая**; порядок лендинга — обязанность оркестратора, зоны об этом предупреждены пингами 04.09. Рычаг у бэкенда есть и он объявлен предпочтительным: снять рендер в Go, данные не трогать): бэкенд — вайр-батч `docs/BACKEND_WIREBATCH_SESSION_PROMPT.md`; платформа — «закрыть цикл» `docs/PLATFORM_EXPORT_SESSION_PROMPT.md`. ⚠ Строка **160** взята, но идёт СВОИМ паком ПОСЛЕ двери: она бампает `manifestVersion`, у которого безопасного порядка деплоя нет (`D39.190` п.2). Строка **142** — после шагов 01 полигона (`D39.190` п.3).
> **Предыдущие паки ОТРАБОТАНЫ 03.09, ПРИНЯТЫ С ДОФИКСОМ и заленджены**`D39.187` движок, `D39.188` платформа; составы и приёмочные дампы ТЕЛАМИ НОТ, промты в `archive/prompts/` с баннерами исхода, план паков — `archive/reports/NEXT_PACKS_PLAN_2026-09-03.md`, решения — D39.190. ⚠ Живое отсюда одно и оно уже вылечено паком P13: **у формы манифеста БЕЗОПАСНОГО ПОРЯДКА ДЕПЛОЯ НЕТ** — гейт интейка сравнивает версию со строгим равенством одной константе (`platform/internal/ingest/manifest.go`, греп `KnownManifestVersion`), окна двух версий нет, поэтому порядок «сначала платформа, потом движок» из рантбука разворачивается на обратный.
**Проводка `--max-units` в платформу остаётся ГЕЙЧЕНОЙ. Живое основание одно и оно механическое:** единственный писатель `bank_moved_at` — дверь правок банка (`platform/internal/runs/bank.go:182`), а рост АВТО-банка от майнинга этого флага не ставит, поэтому майнящая книга на второй покупке идёт без `--resnapshot` и умирает на снапшот-гарде движка — холд взят, попытка сожжена (`PD-422`). Это чинится проводкой признака движения банка от майнинга, а не решением владельца.
**Проводка `--max-units` в платформу остаётся ГЕЙЧЕНОЙ. Живое основание одно и оно механическое:** единственный писатель `bank_moved_at` — дверь правок банка (`platform/internal/runs/bank.go:182`), а рост АВТО-банка от майнинга этого флага не ставит, поэтому майнящая книга на второй покупке идёт без `--resnapshot` и умирает на снапшот-гарде движка — холд взят, попытка сожжена (`PD-422`).**Сюда же переехал остаток закрытой строки 234 (испр. 05.09): проводка полей `rebill_*` через шов — часть ЭТОГО гейта, а не отдельная работа**; ревизия справедливо заметила, что после закрытия 234 её остаток остался без видимого носителя. Это чинится проводкой признака движения банка от майнинга, а не решением владельца.
**ОТКРЫТО НА ОРКЕСТРАТОРЕ №22:**
~~**Ресёрч-сессия `textmachine-36`** — лендинг `research/29`~~ **ЗАКРЫТО 04.09.** Оба отчёта топологии заленджены полигоном на СВОЕЙ ветке по прямому указанию владельца (`a7951a7`) и приехали в `main` мержем ветки — то есть маршрутом, который и был назван правильным. Файлы на месте: `docs/research/29-harness-topology-survey.md` и `…-codex.md`.
> ⚠ **ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ, и он на оркестраторе.** У `research/29`, `29-codex` и `30` нет шапки «что доказано / что СНЯТО / что не проверено», а шапка самого 29 до сих пор говорит «НЕ закоммичено — лендинг за оркестратором», хотя файл в `main` с `a7951a7`. До шапок читать оба отчёта как ФАКТУРУ, не как ратифицированное. ⚠ Формулировка, которую шапка обязана нести, иначе следующая сессия выбросит замеры топологии: **судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть.****Маршрут закрыт словом владельца 02.09: «не трогай соседнюю git tree ветку вообще»** — файл принадлежит ветке `polygon`, в `main` приезжает мержем ветки, копированием из соседнего worktree — никогда (№22 так сделал, был поправлен, лендинг откачен).
> ⚠ **ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ, и он на оркестраторе.** У `research/29`, `29-codex` и `30` нет шапки «что доказано / что СНЯТО / что не проверено», (⚠ испр. 05.09: сама шапка 29 уже поправлена — «НЕ закоммичено» помечено протухшим, файл в `main` с `a7951a7`; здесь остаётся долг ШАПКИ, а не факта о коммите). До шапок читать оба отчёта как ФАКТУРУ, не как ратифицированное. ⚠ Формулировка, которую шапка обязана нести, иначе следующая сессия выбросит замеры топологии: **судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть.****Маршрут закрыт словом владельца 02.09: «не трогай соседнюю git tree ветку вообще»** — файл принадлежит ветке `polygon`, в `main` приезжает мержем ветки, копированием из соседнего worktree — никогда (№22 так сделал, был поправлен, лендинг откачен).
**НОРМЫ, ЗАРАБОТАННЫЕ ЭТИМИ ПРИЁМКАМИ:**
- **Зелёная батарея — это ПОЛНЫЙ список пакетов ПЛЮС отсутствие FAIL**, а не отсутствие FAIL: обёртка
@ -138,7 +138,7 @@
| 11 | Флип coverage-гейта (`enabled:false`, D12-Q4) — за подписью владельца ; при флипе решить судьбу v1.1 quote-absorption (D12-Q1, Python-first лок-степ) | владелец | когда-нибудь | отдельное решение | D39.34(2) |
| 12 | **`postcheck_gate` в hard-gate** — требует пере-замера recall (recall чекеров измерен и низок); ⚠ «fn=0» демоции #10 класс-вакуумен на labels (ноль одно-Han-позитивов, D39.78) — пере-замер обязан добрать одно-Han-позитивы, на «fn=0» не опираться; одно-Han-класс при gate-on вне гейта (Unverified+Demoted); тем же решением строится HARD-value-детектор 成/万 (Q3 §6 — честный hard-gate требует value-чека; либо раньше при ненулевом потоке value-дефектов добора, D39.79; **$0-прототип получен эксп-21: `battery.check_numbers`, симметричный разбор, синтетика 16/16 — D39.117**) · recall существующих гейтов печатал арм C эксп-21 на контаминированном срезе (D39.108/D39.117) | владелец | когда-нибудь (после фазы 2) | отдельное решение | D39.34(2), D24.4+D28.1, D39.39, D39.78, D39.79 |
| 13 | **Включение платной петли ремонта + per-class исходы ремонта** (схемное решение принимается вместе) — вернуться при расширении классов детекторов и ненулевом остатке; ⚠ при включении: репэйр-гард №5 после #10 слеп на одно-Han-дифференциал (демоция в обоих прогонах ⇒ 0>0 — репэйр, стёрший верно отрендеренный одно-Han-термин, не ветируется; D39.78-ревью) | владелец | когда-нибудь | отдельное решение | D39.38, D39.39(а), D39.78, CURRENT-STATE |
| 13б | **`speech-cue.txt` zh НЕ шипить до замера голос-флаггера; замера НЕТ (D39.86) — оси не считались НИ РАЗУ.** ⚠ **Причина ПЕРЕ-НАЗВАНА: прежний довод «редакторская волна не гонялась» ПРОТУХ 31.08** (холодный прогон `coldrun-v16` её гонял и оплатил — строка 16); живой блокер — ПУСТОЙ РЕЕСТР профилей, см. ниже. ⚠ **ГЕЙТ ПЕРЕ-СНЯТ 05.09:** прежний требовал «подписанных профилей (строка 24)», а подпись владелец снял (D39.198 п.5) — значит гейтом остаётся ОДНО: первый прогон добора идеала С редакторской волной. ⛔ **Но снятие подписи открыло дыру, и её надо закрыть раньше стройки:** реестр `voices:`/`addresses:` физически заполняет только подпись (`backend/internal/config/seed.go`, греп `no miner emits them`), и если подписи нет — заполняет НИКТО. Вопрос вынесен строкой 24. ⚠ Сам гейт в схеме ЕСТЬ (`internal/config/pipeline.go` `VoiceGate`, пак-19/D39.55). ⚠ `rules=` в отчёте = «гейт СКОНФИГУРИРОВАН», не «отработал» — до фикса 105 читать по знаменателям `replies=`. Археология дословно — `architecture/13-tech-debt-anchors.md` §Б-13б. ⚠ **ПОПРАВКА 23.08 (№19):** заполнить `voices:`/`addresses:` может только подпись владельца (`internal/seed/seed.go:23`=`Voices and Addresses are the two D21 record types` — «no miner emits them»), а при пустом реестре `RunVoiceChecks` выходит на `!reg.HasData()` ДО ВСЕХ осей, поэтому нулями отдаются и оси, и знаменатели — «ноль флагов» неотличим от «оси не считались». ⚠ Отдельно: `gates.voice` отсутствует в `backend/configs/`, НО в конфигах реальных прогонов (вне git) он ВКЛЮЧЁН — `~/books/gu-zhenren/coldrun-a/pipeline.yaml:68` и `coldrun-b:71`, `enabled: true`; дыра не «оператор забыл включить», а «шаблоны репозитория гейт не несут» | владелец | отложено-до-замера | первый прогон добора идеала С РЕДАКТОРСКОЙ ВОЛНОЙ (оси голоса, строка 24) → отдельное решение | D39.56, PACK19_BUILD §7.2, чат 31.07, D39.86 |
| 13б | **`speech-cue.txt` zh НЕ шипить до замера голос-флаггера; замера НЕТ (D39.86) — оси не считались НИ РАЗУ.** ⚠ **Причина ПЕРЕ-НАЗВАНА: прежний довод «редакторская волна не гонялась» ПРОТУХ 31.08** (холодный прогон `coldrun-v16` её гонял и оплатил — строка 16); живой блокер — ПУСТОЙ РЕЕСТР профилей, см. ниже. ⚠ **ГЕЙТ ПЕРЕ-СНЯТ 05.09:** прежний требовал «подписанных профилей (строка 24)», а подпись владелец снял (D39.198 п.5) — значит гейтом остаётся ОДНО: первый прогон добора идеала С редакторской волной. ⛔ **Но снятие подписи открыло дыру, и её надо закрыть раньше стройки:** реестр `voices:`/`addresses:` физически заполняет только подпись (`backend/internal/config/seed.go`, греп `no miner emits them`), и если подписи нет — заполняет НИКТО. Вопрос вынесен строкой 24. ⚠ Сам гейт в схеме ЕСТЬ (`internal/config/pipeline.go` `VoiceGate`, пак-19/D39.55). ⚠ `rules=` в отчёте = «гейт СКОНФИГУРИРОВАН», не «отработал» — до фикса читать по знаменателям `replies=` — носитель **292** (испр. 05.09: 105 закрыта D39.200 только половиной (а), знаменатели уехали в 292). Археология дословно — `architecture/13-tech-debt-anchors.md` §Б-13б. ⚠ **ПОПРАВКА 23.08 (№19):** заполнить `voices:`/`addresses:` может только подпись владельца (`internal/seed/seed.go:23`=`Voices and Addresses are the two D21 record types` — «no miner emits them»), а при пустом реестре `RunVoiceChecks` выходит на `!reg.HasData()` ДО ВСЕХ осей, поэтому нулями отдаются и оси, и знаменатели — «ноль флагов» неотличим от «оси не считались». ⚠ Отдельно: `gates.voice` отсутствует в `backend/configs/`, НО в конфигах реальных прогонов (вне git) он ВКЛЮЧЁН — `~/books/gu-zhenren/coldrun-a/pipeline.yaml:68` и `coldrun-b:71`, `enabled: true`; дыра не «оператор забыл включить», а «шаблоны репозитория гейт не несут» | владелец | отложено-до-замера | первый прогон добора идеала С РЕДАКТОРСКОЙ ВОЛНОЙ (оси голоса, строка 24) → отдельное решение | D39.56, PACK19_BUILD §7.2, чат 31.07, D39.86 |
| 14 | **Четыре data-инженерных флага фазы-2 общности, каждый с рекомендованным дизайном** (§5 отчёта): ё-фолд → target-данные (`char_fold`; смена сигнатуры core-примитива через вердикт-несущий банк, сдвиг `memory_version`) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка `pipeline.go:839-848` + голден-фикстура на нём; лечение — объявить блок в голден-yaml) · `Fertility` per-script map (калибровка ждёт боевого токенизатора) · `source-encoding.txt` + Go-реестр декодеров | владелец | когда-нибудь (следующий пак общности) | отдельное решение | D39.64, GENERALITY_PHASE2 §5.15.4 |
| 86 | **Мелкие открытые решения одним списком** (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) | владелец | когда-нибудь | отдельные решения | D39.66, D39.69(feed_cap закрыт §1) |
| **— ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) —** | | | | | |
@ -266,7 +266,7 @@
| 52 | **Ф2-гейты вне идеала**: морфо-гейты канцелярита + L1-лемматизация (python-сайдкар) · полный OpenCC · опциональный пре-перевод гейт ; состав явно: канцелярит + РОД (строка 82) + класс Ф2-гейтов карты 04-unhappy (обсцен-гейт/феминитивы/время сцены — состав решить паком) ; + класс идиоматики (свип-хвост, D39.73): сехоуюй-словарь · вэньянь-классификатор (zh) · васэй-эйго ложные друзья (к ja-паку 81) — данные пары или закрытие «банк книги покрывает» тем же паком | бэкенд | когда-нибудь | отдельное решение | D39.34(4) |
| 54 | Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела). ⚠ **Дописка инвентаря №18 (D39.147 п.2г):** жёстких потолков размера в коде НЕТ, но исходник читается в память целиком (`chunk/ingest.go:98`), чтения стора беспагинационны под `opTimeout = 10s` (`store/store.go:39`) и бюджеты нарезки калиброваны на 25 главах (`config/pipeline.go:126-138`) — ни одно из трёх на 2283 главах не проверено ничем | бэкенд | когда-нибудь (последним по курсу) | МАСШТАБ | D39.33, CURRENT-STATE |
| **— ПОЛИГОН (кандидаты пакетов) —** | | | | | |
| 55 | **`dialogue_dash` мерить только на невиданном тексте** (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73). **Частично закрыта эксп-21 (D39.117):** направление главного вывода воспроизведено на чистом en-материале (узнавание 1/5), $0-довесок исполнен частично; ⚠ **ПЕРЕ-СНЯТА 05.09 (D39.198 п.5): требования НОВОЙ книги здесь НЕТ.** Владелец: прогоняем на тех же текстах (мастер Гу и Жан-Кристоф), а «известность модели по претрейну» остаётся ОГРАНИЧЕНИЕМ ВЫВОДА — результат на классике читается как предварительный, и это пишется в вывод, а не покупается новой книгой. Прежняя редакция несла ЖЁСТКИЙ платный заказ полигону. **срез эксп-21 НЕ купил** (главный zh-замер на книге 4/5, без пинга) — остаток = неконтаминированный zh-срез | полигон | скоро (эксп-22 Ф0 — повторный ЖЁСТКИЙ заказ, стоп при неисполнимости) | эксп-22 | D39.37(4), D39.40, D39.46, D39.108, **D39.117** |
| 55 | **`dialogue_dash` мерить только на невиданном тексте** (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73). **Частично закрыта эксп-21 (D39.117):** направление главного вывода воспроизведено на чистом en-материале (узнавание 1/5), $0-довесок исполнен частично; ⚠ **ПЕРЕ-СНЯТА 05.09 (D39.198 п.5): требования НОВОЙ книги здесь НЕТ.** Владелец: прогоняем на тех же текстах (мастер Гу и Жан-Кристоф), а «известность модели по претрейну» остаётся ОГРАНИЧЕНИЕМ ВЫВОДА — результат на классике читается как предварительный, и это пишется в вывод, а не покупается новой книгой. Прежняя редакция несла ЖЁСТКИЙ платный заказ полигону. **срез эксп-21 НЕ купил** (главный zh-замер на книге 4/5, без пинга) — остаток = **ОГОВОРКА В ВЫВОДЕ**, а не покупка: замер идёт на мастере Гу и Жан-Кристофе, а «модель знает текст по претрейну» пишется ограничением результата (⚠ испр. 05.09 — колонки продолжали заказывать неконтаминированный zh-срез уже ПОСЛЕ того, как шапка строки его сняла: полигон читает колонки) | полигон | когда-нибудь (оговорка вывода, не заказ) | формулировка в отчёте | D39.37(4), D39.40, D39.46, D39.108, **D39.117** |
| 56 | Ёфикатор/санитайзер-классы не размечены (§6.5 отчёта пакета-6) | полигон | когда-нибудь | полигон-пакет | D39.46, CURRENT-STATE |
| 57 | Пере-замер «контексты — главный рычаг» на трудной выборке пакета-7 с боевой сборкой (до него kwic-веса/семантику не трогать; перф-хвост AttachKWIC — строка 37: фикс-пак 128 закрыт D39.118, опция в нём не взята, семантика не менялась) — напряжение с D39.46 названо, не отменено | полигон | когда-нибудь | полигон-пакет | D39.50, D39.118 |
| 58 | **Не покрыто пакетом-8**: вторая книга/пара/модель · строка `drafts:` · ось `batch_runes` · разметчики-модели (не люди) · precision роли на «расширенном, но осмысленном» материале ; + контрастивный регрессионный сьют по каталогам режимов отказа (12-*) · чистовик exp15-выводов | полигон | когда-нибудь | полигон-пакет | POLYGON_PREMEASURE §1.8/§2.5/§3.5/§7.6 |
@ -349,11 +349,24 @@
| 289 | ⛔ **ДВЕ ВЕТКИ `CheckKeys` ДАЮТ ПРОТИВОПОЛОЖНЫЙ ОТВЕТ НА ОДИН И ТОТ ЖЕ КОНФИГ, а новый тест закрепляет лейбловую на фикстуре, где её собственная посылка ЛОЖНА.** Безлейбловая ветка требует ключ хопа ТОЛЬКО при `Escal.BudgetUSD > 0` (и это ратифицировано комментарием); лейбловая берёт `ReachableModels()`, куда `ResolvedHop` попадает БЕЗУСЛОВНО. При бюджете 0 хоп в рантайме не стреляет никогда. Зонд верификатора: одна стадия с `escalate_to` на провайдере без ключа, бюджет 0 ⇒ безлейбловая `nil`, лейбловая `missing API keys`. ⚠ Что внёс `74ffe4f`: кейс «the stage's escalation hop» и `why` записи `WB65` («a labelled run CALLS its escalation hop») стоят на фикстуре БЕЗ бюджета — то есть тест ПИНИТ требование ключа для модели, которую этот прогон вызвать не может. **Зеркало класса, который пак сам и нашёл: пин на «достижима» не есть пин на «вызывается».** Лечится либо бюджетом в фикстуре, либо приведением веток к одному правилу | бэкенд | скоро | свести ветки к одному правилу ЛИБО починить посылку фикстуры | верификатор приёмки 05.09, зонд вне карты |
| 290 | **ARM 1 нового теста банкноты проходит ВАКУУМНО, если каталог пары переедет — класс `WB41`, названный самой сессией.** Тест вписывает `langpack_root`, но не проверяет, что пак ЗАГРУЗИЛСЯ (`r.pack != nil`). Предъявлено: с несуществующим корнем все три плеча зелёные, а посадка `WB58` (снятие плеча контраста) **ПЕРЕЖИВАЕТ**. То есть красный `WB58` держится не тестом, а наличием каталога на диске. Лечение — посылка о состоянии пака в самом тесте. ⚠ Тот же класс: **тест исчерпаемости флагов слеп ещё на ДВЕ формы** сверх найденной первым верификатором — `var X = FlagReason("…")` на уровне пакета и `const` ВНУТРИ тела функции: обе посадки прошли, ни пол `found < 15`, ни сверка с картой не сработали (объявлено 17, найдено 16, карта 16). Итого форм пять, тест держит две, комментарий обещает «обе» | бэкенд | скоро | посылка о загрузке пака + покрыть или сузить обещание исчерпаемости | верификаторы приёмки 05.09 |
| 291 | **ОТКАЗ РЕЗЕРВАЦИИ НА РЕТРАЕ НЕ ДЕГРАДИРУЕТ И НЕ ОСТАВЛЯЕТ СЛЕДА — юнит может заклинить НАВСЕГДА, а волна не может продолжиться без дыры.** `maxTokensForAttempt` удваивает бюджет на каждой регенерации (`backend/internal/pipeline/disposition.go`, греп `maxTokensForAttempt`), так что attempt 1 резервирует вдвое больше attempt 0. Отказ ретрая уходит наверх из цикла попыток (`backend/internal/pipeline/stagerun.go`, греп `return nil, err` в цикле попыток) **РАНЬШЕ `UpsertChunkStatus`** ⇒ чекпойнт attempt 0 есть (реплей за $0), **строки `chunk_status` НЕТ**, читающие модели видят юнит как `pending`, экспорт не отдаёт ничего. **Следствия два.** (1) Если потолок покупки не вмещает attempt 1 — юнит не доделается НИКОГДА: каждый резюм реплеит attempt 0 за $0 и умирает на attempt 1, прогон уходит exit 4 при ПОЛНОСТЬЮ доставленных купленных юнитах. (2) Продолжить волну после отказа ретрая нельзя без ДЫРЫ в непрерывном префиксе — то есть цена глобальной защёлки (недодача юнитов, которые влезали; разброс резервов внутри волны замерен ×2.976) различителем «свежий/ретрай» НЕ снимается. ⚠ **Оркестратор предлагал такой различитель на посылке «ретрай оставляет ФЛАГОВАННЫЙ юнит» — посылка ЛОЖНА, опровергнута зоной по строкам.** **Два пути лечения, ВЫБОР НЕ СДЕЛАН:** (а) отказ ретрая деградирует во флаг attempt 0 — смена `D2.3`, закрывает ОБА следствия; (б) минимальная покупка платформы ≥ `step_max_usd` движка (он включает ретраи именно поэтому) — закрывает только (1) и стоит продукту минимальной покупки ~5 глав | бэкенд+платформа | скоро | выбор владельца между (а) и (б) + пин | бэкенд-сессия денежного стопа 05.09, формулировка зоны |
| 292 | ⛔ **ЧЕСТНОСТЬ ТРЁХ СТРОК НАБЛЮДАЕМОСТИ — ЖИВАЯ ПОЛОВИНА (б) ЗАКРЫТОЙ СТРОКИ 105, заведена 05.09 отдельным носителем.** Закрытие 105 сняло только половину (а) — предикат `isBankRole`; половину (б) чинить никто не заказывал, а на неё ссылались ДВА носителя как на «до фикса 105». Три дефекта, все воспроизведены: **(1)** строка `VOICE` берёт `rules=` из конфига ВРЕМЕНИ ОТЧЁТА (`backend/internal/pipeline/quality.go`, греп `rules=`), поэтому включение `gates.voice` ПОСЛЕ прогона печатает «измерено, чисто» для книги, которую никто не мерил; **(2)** та же строка печатается при ВЫКЛЮЧЕННОМ гейте, если `SpoilerLeaks>0` — поведение верное, неверна формулировка отчёта; **(3)** знаменатель `BANKNOTE` = `len(states)` вместе с призрачными строками `retrieval_state`, тогда как соседний агрегатор их фильтрует ⇒ после пере-чанковки покрытие ЗАНИЖАЕТСЯ. ⚠ Цена молчания прямая: отчёт говорит «измерено», когда не мерили, — это ложь читателю в том самом месте, куда смотрят, решая, готова ли книга. Печатает `cmd/tmctl/render.go` (греп `rules=`), пин — `render_observability_test.go`. | бэкенд | скоро | правка формулировки + знаменателя + тест на «включил гейт после прогона» | D39.86, D39.200; археология — `architecture/13-tech-debt-anchors.md` §Б-105 п.(б) |
*(Указатели на архив-слайсы хроники — бюллетенем «Архивы хроники» в CURRENT-STATE; здесь копий нет.)*
## Бэкенд
**⚠ ПИНГ ОРКЕСТРАТОРА №22 — 05.09: СЕМЬ ЯКОРЕЙ В ВАШИХ ДОКАХ ГНИЮТ НА HEAD (правки зонные, рукой не трогаю).**
Найдено третьим проходом ревизии; я сам сначала объявил всю гниль транзиентной и был опровергнут — эррата 05.09-в.
Дерево `backend/docs/` при этом ЧИСТО, то есть незакоммиченной работой это не объясняется.
**Съехали** (`docs/scripts/counts.py --lint` печатает их каждый прогон): `DISCLOSURE_LAW_DESIGN.md:40`
`quality.go:233` · `:41``status.go:734` · `:42``status.go:817` · `:43``bookbuild.go:227` ·
`:44``status.go:275`. **УМЕРЛИ, а не съехали**`:264` и `MONEY_HONESTY_REPORT.md:285` целят в
`chunkrun.go:40`=`SourceEchoExpected: role == roleTerminologist`, а этой подстроки на HEAD НЕТ ВОВСЕ:
её съел ваш же вайр-батч, предикат теперь `isBankRole` (`chunkrun.go:61`). ⇒ Мёртвый якорь тут не
косметика: он документирует поблажку по СТАРОМУ правилу, и читающий док получит снятую механику как
действующую. Токен обновлять вместе с текстом, который его объясняет.
> **Состояние зоны на 05.09:****активный промт ЕСТЬ**`docs/BACKEND_MONEYSTOP_SESSION_PROMPT.md` («денежный стоп перестаёт быть аварией», выдан 05.09), дерево `backend/` НЕ чисто: в нём работа этой сессии. Прежняя редакция («на 31.08 активного промта нет, дерево чисто») читалась как текущее и приглашала следующего править чужое дерево. Ратифицированные лендинги
> зоны: входная дверь шва — **D39.158** (`d1eb8a9`) · «тихая порча» — **D39.164** (`7d0c6f2`) · «деньги» —
> **D39.170** · гейт схемы — **D39.173** · «писатель книги» — **D39.175** (`8adcb86`) · «деньги и честность
@ -906,10 +919,8 @@ bidi-переопределений (Trojan Source), при этом ZWJ/ZWNJ/LR
**278** (событие) — недостача едет в `ceiling`, `StreamVersion` 1.2 → 1.3, денежный леджер в `finished`.
(4) строка **278** (проекция) — цена книги ДО покупки в `manifest --json` и `status --json`.
**Числа, каждое получено командой (полный список — §6.7 отчёта):** тестовых функций **1172 → 1202
(+30)**, все тридцать в трёх новых файлах; `git diff -U0 -- backend | grep -E '^[+-]func Test'` ПУСТ —
ни одна существующая не удалена и не переименована, два протухших починены внутри тела. Каталог мутаций
**158 → 185**. Батарея: `make battery``MAKE_EXIT=0`, 18 пакетов, линтер 0 issues (и `go vet -vettool`
**Числа, каждое получено командой (полный список — §6.7 отчёта):** тестовых функций **1172 → 1207 (+35)**, все тридцать пять в трёх новых файлах; `git diff -U0 -- backend | grep -E '^[+-]func Test'` ПУСТ —
ни одна существующая не удалена и не переименована, два протухших починены внутри тела. Каталог мутаций **158 → 191**. Батарея и каталог — цифры финального прогона в §6.1/§6.5 отчёта (и `go vet -vettool`
собственного анализатора зоны — чисто; он поймал у меня один хенд-билд `config.Stage`, см. отчёт).
⛔ **ТРИ ВЕЩИ, КОТОРЫЕ ОРКЕСТРАТОРУ НАДО ЗНАТЬ ДЛЯ ЛЕНДИНГА:**
@ -1105,7 +1116,7 @@ CJK-ONLY.** Сопоставление заголовков в интейке и
**⚠ Пинг оркестратора №18 — 20.08 (протухшие цены в квирках, чинить вашей рукой).** `docs/experiments/00-provider-quirks.md` до сих пор утверждает, что цены после катовера НЕ изменились («flash $0.14/$0.28»). Это опровергнуто пере-пином 1315.08 (D39.137): таблица запинена ПИКОМ — flash 0.44/1.32 при кэш-хите **0.014**, pro 1.32/3.96 при кэш-хите **0.044** за 1M (сверено с `backend/configs/models.yaml:182,198`=`cached_per_m` и телом D39.137 §2а), и счёт шиппинга = 100% DeepSeek ⇒ ×4.24.4 в пике. Квирки — ваша зона, рукой не трогаю; поправьте при ближайшем касании, потому что по ним считают деньги проб. ⚠ **ВТОРОЙ пункт этого пинга СНЯТ 05.09 как ЛОЖНОЕ ОТРИЦАНИЕ оркестратора.** Он утверждал, что факт про пиковые окна цен «в квирках ОТСУТСТВУЕТ (греп = 0)». Факт ТАМ ЕСТЬ (`docs/experiments/00-provider-quirks.md`, греп `ПИК DEEPSEEK`) — и несёт поправку, которой не было в моей копии: **пик только ПО БУДНЯМ, выходные целиком идут по офф-пику**. То есть оркестратор, живший по своей копии, отодвигал платное на вдвое дороже по выходным. Копия снята, единственный носитель — квирки. Отрицание было получено грепом, который не мог сработать; урок общий: **команда, на которой стоит отрицание, приводится в тексте, чтобы её мог воспроизвести другой.** ⚠ Третий пункт того же аудита (`eval/README.md` держит мёртвый СТОП на платные прогоны) сведён ниже, в пинг №20 — один носитель на факт.
**Тем же касанием — вторая протухшая клетка справочника (аудит доков 22.08, живо и на 02.09):** квирки и `docs/STACK.md` утверждают, что ручки эффорта у `deepseek-v4-pro` НЕТ (`low``high`) и веса вендором не тронуты, — а вахта §Б-108 сработала 13.08 changelog'ом вендора (pro/flash получили low/high/max). Это боевой РЕДАКТОР и апекс эскалации; замера ПОВЕДЕНИЕМ после 13.08 нет ни у одной стороны, из репозитория вендорская сторона НЕ выводится. **Закрывается вендор-сверкой, а не выбором стороны** (гардрейл владельца) — и вы это только что делали по Gemini, то есть заход дешёвый. Носитель в трекере — строка **237**(б).
**ВТОРОЙ пункт этого пинга ПЕРЕ-СНЯТ 05.09: спора нет и не было.** Он утверждал, что квирки и `docs/STACK.md` говорят «ручки эффорта у `deepseek-v4-pro` НЕТ» — оба говорят ОБРАТНОЕ (квирки §3г: «параметр `low` на `pro` ТЕПЕРЬ ДОХОДИТ ДО МОДЕЛИ», $0.038276, 79 prompt_tokens; `STACK.md:11` — то же). ⚠ Это был ЧЕТВЁРТЫЙ носитель фантомного противоречия, снесённого D39.200 п.4(а), и он пережил первую зачистку. Живой остаток один и он не спор: **вендор-сверка САМОГО МАППИНГА (`low` → что именно) и ВЕЛИЧИНА эффекта** — замера поведением после 13.08 нет ни у кого. Это боевой РЕДАКТОР и апекс эскалации. **Закрывается вендор-сверкой, а не выбором стороны** (гардрейл владельца) — и вы это только что делали по Gemini, то есть заход дешёвый. Носитель в трекере — строка **237**(б).
**⛔ ПИНГ ОРКЕСТРАТОРА №20 ЗОНЕ — ТРИ ПРОТУХШИХ МЕСТА, все три ЖИВЫ на 02.09 (правки зонные, рукой не трогаю).**
1. **`eval/README.md` первой врезкой держит СТОП на платные прогоны** — «Платные прогоны/докупки СТОП до ре-пробы

View file

@ -28,7 +28,7 @@
- ✅ ПОСТРОЕНО (адрес — шапка-таблица `09-target-architecture.md`): границы доверия памяти D16 (D39.2) · `tmctl status`+redrive (D15.3) · дешёвые гейты 04-unhappy §6/§9 (`checks.cheapgates`, v2 — D20.4) · output-санитайзер D30.3 (`checks/sanitizer.go`) · автопопуляция G1 — Go-майнером (`internal/miner`, D39.10/D39.14/D39.17), а не спот-локалью из exp06. Живой остаток: **диалог-флаггер парности (D29.1д)** — в `internal/checks` его нет; **чек-лист ja-книги — kana-написания сид-имён вносить aliases руками (D16.4)**.
- Реальный прогон end-to-end **приёмочной книги 蛊真人 zh→ru (D18; ja→ru понижен до второго прогона при появлении ja-epub)**. *(этап A ✅ 10.07 — D24; этап B НЕ открыт: пере-прогон исполнен, планка не пройдена — шапка, D39.20/D39.22.)*
- Режим онгоинга (`add-chapters`) — **сдвинут в Фазу 1.5**: гейтится resume-экономикой (D15.2 — content-addressed reuse чекпоинтов или селективный redrive; спека в Фазе 1, реализация Ф1.5). До этого онгоинг не продаётся.
- Экспорт txt/epub + отчёт (D29.1): ✅ ПОСТРОЕНА ассемблер-часть — `tmctl export` + `checks.ExportNormalize` + паспорт-rollup (`pipeline.ChapterPassport`). НЕ построено (греп по `backend/`, `platform/`, `frontend/` — 0 хитов): `annotations.json`, политика красных, цвет-мап+GREY, `human_override` LOCK; плюс release-state лестница D25.1 — до первого reader-facing артефакта.
- Экспорт txt/epub + отчёт (D29.1): ✅ ПОСТРОЕНА ассемблер-часть — `tmctl export` + `checks.ExportNormalize` + паспорт-rollup (`pipeline.ChapterPassport`). НЕ построено (греп по `backend/`, `platform/`, `frontend/` — 0 хитов): `annotations.json`, политика красных, цвет-мап+GREY, `human_override` LOCK; плюс release-state лестница D25.1 — **испр. 05.09: reader-facing артефакт УЖЕ ЕСТЬ** (EPUB настоящего платного перевода выдан через API 04.09, D39.194), так что лестница из «до артефакта» стала открытым вопросом владельца ЗДЕСЬ И СЕЙЧАС: какая ступень даёт читателю копию БЕЗ пометки и что печатать на титуле (ПТ-44).
**Правило 18+:** приёмочный корпус — только SFW. Маршрутизация чувствительного контента — не «канал B» фиксированным составом (состав D19.1/D22 отставлен паком-17: D39.25/D39.26D39.28, шапка `09-target-architecture.md`), а `content_labels` × `accepts_labels`. Живые ограничения данных: DeepSeek для explicit ЗАПРЕЩЁН его ToS (D14.1); ⚠ эскалация на grok reasoning-ON НЕ снимает эхо на архаичном плотно-ханьском (D22.5); эротику судит только Grok — Gemini fail-closed `PROHIBITED_CONTENT` (D22.6); OpenAI в explicit-роутинг не включать; refusal-blacklist-гейт перед коммитом в TM обязателен (ветка `content_filter` мертва у OpenAI-совместимых — exp07; у Gemini 3.x жива составной строкой — D21.9). **L3-скрин обязателен до первой erotica-книги в проде (D22.7 + D25.4).**

View file

@ -1,13 +1,13 @@
# Журнал решений оркестратора — контракт D1D39.200 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
> **КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто:
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 живёт ниже в этом файле (голова D39.106+).
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+).
> ⚠ **Эррата 15.08 (D39.132):** D39.131 п.2(а) перечисляет полосу отказов «10 конфиг · 11 источник · 12 лок · 19 безымянный» — читать через D39.132 п.2(г): полоса ДОПОЛНЕНА **exit 13 = `schema_mismatch`** (~~обе зоны сошлись на числе независимо~~; ратифицирован направлением, ФИНАЛИЗИРОВАН приёмкой D39.134).
> ⚠ **Эррата 15.08-б (D39.134 п.2а, вписана по аудиту корпуса):** клейм «зоны сошлись на 13 НЕЗАВИСИМО» (строкой выше и в D39.132 п.2г) СНЯТ — платформа прочитала число из незакоммиченного дерева движка и сама это записала (`platform/internal/ingest/exit.go:63-64`); на силу ратификации не влияет.
> ⚠ **Эррата 15.08-в (D39.136 п.5):** форма контракт-ревью «фазный воркфлоу оркестратора» ОТМЕНЕНА словом владельца тем же днём — исполняет ОТДЕЛЬНАЯ СЕССИЯ со своим онбордингом (норма D39.120 п.2; оркестратор — автор части ратификаций 0.2.3, author≠reviewer); запущенная воркфлоу-фаза 1 остановлена, её результаты выброшены; промт — `docs/CONTRACT_REVIEW_SESSION_PROMPT.md`.
> ⚠ **Эррата 16.08-д (D39.144 п.3) — ЧИТАТЬ С ПОПРАВКОЙ 22.08:** её хвост «гейт полноты УЖЕ ОТЛИТ в коде платформы, демонтаж заказан» ПРОТУХ — пер-термный write-путь банка СНЯТ зоной 22.08 целиком (`PD-370`, D39.154), гейта полноты в коде платформы больше нет, а якорь хвоста указывает в чужой код. Живой остаток вопроса — ДВИЖКОВЫЙ пер-термный гейт (`mining.go`), он сегодня лишь обойдён, и это строка бэклога 203(з). Тело эрраты ниже не переписано (D23.3).
> ⚠ **Эррата 22.08-а — ПОПРАВКА К ЭРРАТЕ 16.08-д (D39.144 п.3)** *(ярлык дан 05.09: обе носили одинаковое «16.08-д» и адресовать их порознь было нельзя; ⚠ первая попытка переименования 05.09 тронула НЕ ТУ — переименовала оригинал, на который ссылается реестр D39.145 «вычищена эрратой 16.08-д», и была откачена в тот же час)***:** её хвост «гейт полноты УЖЕ ОТЛИТ в коде платформы, демонтаж заказан» ПРОТУХ — пер-термный write-путь банка СНЯТ зоной 22.08 целиком (`PD-370`, D39.154), гейта полноты в коде платформы больше нет, а якорь хвоста указывает в чужой код. Живой остаток вопроса — ДВИЖКОВЫЙ пер-термный гейт (`mining.go`), он сегодня лишь обойдён, и это строка бэклога 203(з). Тело эрраты ниже не переписано (D23.3).
>
> ⚠ **Эррата 16.08-е (D39.144 п.3)** *(испр. 05.09: две эрраты подряд носили один ярлык «16.08-д», и адресовать их порознь было нельзя)***:** клейм «`bank_decisions_incomplete` в файле 0» проверял ТОКЕН, а не ПРАВИЛО — четыре места канона/компаньона продолжали нести снятый гейт полноты прозой (`BankDecisionsResult.complete` «stop clears ONLY on a complete set» · `BankPage.complete` «can be cleared» · компаньон §2.14 и А-2); дочищены 16.08 при пересборке промта P7 (нашёл опровергатель промта). Плюс факт, который D39.144 не назвала: гейт полноты УЖЕ ОТЛИТ в коде платформы (`internal/runs/reconcile.go:934-938`) — его ДЕМОНТАЖ заказан P7 явным пунктом.
> ⚠ **Эррата 16.08-д (D39.144 п.3):** клейм «`bank_decisions_incomplete` в файле 0» проверял ТОКЕН, а не ПРАВИЛО — четыре места канона/компаньона продолжали нести снятый гейт полноты прозой (`BankDecisionsResult.complete` «stop clears ONLY on a complete set» · `BankPage.complete` «can be cleared» · компаньон §2.14 и А-2); дочищены 16.08 при пересборке промта P7 (нашёл опровергатель промта). Плюс факт, который D39.144 не назвала: гейт полноты УЖЕ ОТЛИТ в коде платформы (`internal/runs/reconcile.go:934-938`) — его ДЕМОНТАЖ заказан P7 явным пунктом.
> ⚠ **Эррата 16.08-г (D39.138 п.2а, часть «TermStatus снять с провода»):** ОПРОКИНУТА пост-ревью АВТОРА отчёта research/28 (по заказу владельца, речек оркестратора уликами): обоснование Б-0 «ни один экран их не рисует» подменяло «экрана подписи ещё НЕТ» — ось статуса ПРОДУКТОВАЯ (спека `:1070-1072`: «главный фильтр работы» S5; шов клиента уже потребляет — `frontend/src/api/vocabulary.ts:159-163`). Читать так: ось `TermStatus` ОСТАВИТЬ, движковые слова значений переименовать в продуктовые; «`TermOrigin` снять/переименовать» (`ruby` — паро-специфика) — В СИЛЕ. Контекст метода: Б-0/Б-11а/Б-23 добавлены в отчёт ПОСЛЕ раунда адверсариального судейства сессии — их основания проверять строже (помечено в ревью-шапке отчёта).
> ⚠ **Эррата 20.08 (D39.153 п.7б):** D39.144 п.2 атрибутирует пер-термный гейт полноты банка «изобретению КОНТРАКТНОЙ линии (Ф-14 → спека → 0.3.0)» — верно про ГЕЙТ и **неверно про ФОРМУЛУ**. Формула «стоп очищается, когда каждый терм промоутнут ИЛИ отклонён» родилась 19.07 В ДВИЖКЕ как лечение ливлока R1-FL-B (отклонённый терм переспрашивался каждый прогон — тело D39.19, слайс `../archive/architecture/05-decisions-D39-arch-reset.md:22`) и живёт там до сих пор (`backend/internal/pipeline/mining.go:80-82,243`); контрактная линия 04.08 переписала её дословно и вывела из неё ЭКРАННЫЙ гейт — счётчик «решено N из M» и запрет продолжить (коммит `16e20e5`, `frontend/docs/API_CONTRACT_INPUT.md:258-264`). **Следствие, из-за которого эррата несущая:** снимая гейт, D39.144 адресовала только контракт, поэтому движковая половина осталась БЕЗ явной отмены — она сегодня ОБОЙДЕНА платформой (флаг не передаётся на resume), а не устранена; носитель — строка 191(б), развилка — строка 203(з).
> ⚠ **Эррата 27.08 (D39.158 п.7):** D39.153 п.7б объявляет «ОСТАТКА-РАТИФИКАЦИИ НЕТ… гейт проверяет полноту ФАЙЛА решений, а не подписей, и ОДИН файл со всем банком его снимает — конфликта с моделью владельца нет». Читать так: диспозиция отвечала на вопрос «снимает ли гейт один файл» (снимает) и верифицировала СОСТАВНОЕ поведение — платформа снимает флаг, движок уходит по авто-ветке. Вопрос «работает ли флажок БЕЗ обхода» ею не закрывался, и заказанное той же строкой 191(б) «ослабить границу самой паузы» исполнено не было. Исполнено D39.158: движковая половина УСТРАНЕНА, не обойдена.
@ -39,8 +39,9 @@
> далёк в обоих случаях, вывод приёмки не меняется, но в каноне стоит число из гейта, а не из грепа.
> ⚠ **Эррата 02.09-а (D39.182, «три блокера приёмки закрыты») — у ТРЕТЬЕГО блокера не осталось носителя.** Заголовок и §1 ноты держат счёт «3 блокера», но отчёт пака называет сегодня только два: ревизия доков 02.09 сняла из `backend/docs/MONEY_HONESTY_REPORT.md` разделы «Сверка с заказом по пунктам» и «ПРИЁМКА: три блокера и пять дофиксов» (проверка: греп `^## 9.11` и `^## 1\.` по файлу — пусто, при живом `^## 6.2`). **Третий блокер — вердикт «предъявлено» поверх неработающего пути:** в снятом §1 отчёта вердикты **A0** и **A6** стояли «предъявлено» на НЕПОЛНОЙ проверке и были сняты вместе с блокером 2, а пере-предъявлены посадками `TestAHealthyGlossaryPassIsNotReportedAsALoss` и `TestTheCONSENTGateSeesAnInPlaceSourceEdit` (грепаются по `backend/`). Дословный текст снятых разделов — `git show bd2077b:backend/docs/MONEY_HONESTY_REPORT.md`. Тело ноты не переписывается (D23.3).
> ⚠⚠ **Эррата 05.09-в (D39.200 п.8б) — «ВСЕ 17 ПРОТУХШИХ ЯКОРЕЙ ТРАНЗИЕНТНЫ» НЕВЕРНО: СЕМЬ ГНИЮТ НА HEAD.** Пункт 8(б) обосновывал отказ чинить якоря тем, что все они целят в код под руками живых сессий, и предъявлял ЧЕТЫРЕ из семнадцати против `git show HEAD:` — четыре действительно стояли точно. **Обобщение с четырёх на семнадцать было выводом, а не замером, и ревизор его опрокинул проверкой всех.** Гниют на HEAD семь, все в `backend/docs/` (дерево этой зоны ЧИСТО, транзиентностью не объясняются): `DISCLOSURE_LAW_DESIGN.md:40` (`quality.go:228`, токен на `:233`) · `:41` (`status.go:684``:734`) · `:42` (`status.go:733``:817`) · `:43` (`bookbuild.go:221``:227`) · `:44` (`status.go:249``:275`) — эти СЪЕХАЛИ; а `:264` и `MONEY_HONESTY_REPORT.md:285` целят в `chunkrun.go:40`=`SourceEchoExpected: role == roleTerminologist` — этой подстроки на HEAD НЕТ ВОВСЕ, её съел вайр-батч (`isBankRole`), то есть якорь не съехал, а **умер**. ⇒ Десять остальных транзиентны, как и сказано, но вывод пункта в целом ложен. Носитель починки — зона бэкенда (её доки), пинг выписан в секции «Бэкенд» `docs/PROGRESS.md`. ⚠ **Норма, которую это покупает, и она дороже самой ошибки: выборка, предъявленная как доказательство, доказывает ровно себя.** Четыре проверенных якоря обосновывают четыре, а не семнадцать; фраза «я проверил четыре, значит транзиентны все» — тот же класс, что «SURVIVED без доказательства, что посадка меняет поведение». Если проверять все дорого — так и писать: «проверено четыре из семнадцати, остальные НЕ проверены».
> ⚠ **Эррата 05.09-б (D39.199 п.3) — ГРАНИЦА ПРИЁМКИ ЗАКРЫЛАСЬ ЧЕРЕЗ НЕСКОЛЬКО МИНУТ ПОСЛЕ АКТА.** Пункт 3 говорит «верификатор №2 успел прогнать 5 записей из 19, остальные 12 принял НА СЛОВО зоны» — это было верно на час написания. Прогон добежал: **19 mutation(s) run, 0 unexpected outcome(s), EXIT=0** — 18 RED плюс `WB62` `survives` как записано. ⇒ Утверждение зоны «все 17 новых записей предъявлены красными» подтверждено **ПРОГОНОМ**, а не со слов; ни один вывод верификатора не пересмотрен. ⚠ Что этим НЕ отменяется: находки вне карты (строки 287290) сидят ВНЕ авторского списка, и красный прогон авторских записей их не опровергает — в частности `WB58` красна лишь потому, что каталог пары лежит на диске; при его отсутствии та же запись ПЕРЕЖИВАЕТ (строка 290). Остаток границы прежний: `-race` целиком не гонялся, живой 401 на хопе — PLAUSIBLE.
> ⚠⚠ **Эррата 05.09-а (D39.84 п.1 и D39.100 К-8) — ЗАПРЕТ «ДЕНЕЖНЫХ ПОЛЕЙ В UI НЕТ ВОВСЕ» ОТОЗВАН ВЛАДЕЛЬЦЕМ, тела нот об этом НЕ ЗНАЮТ.** Тела D39.84 («оплат в MVP нет, денежных полей в UI нет вовсе») и D39.100 («запрет денег на экране D39.84 в силе и НЕ superseded») переписывать нельзя (D23.3), а читающий их ПО НОМЕРУ — как велит канон — видит запрет действующим. **Читать оба через `D39.196`:** владелец 05.09 отозвал запрет, баланс аккаунта, потолок заказа и холд ВЫХОДЯТ наружу деньгами; запрещённым остаётся другое и оно НЕ отменялось — цены моделей, стоимость стадий и вызовов, структура НАШИХ расходов (ПТ-33). ⚠ Носители запрета, которые обязан закрыть пак формы заказа, полным списком (⚠ **испр. 05.09: прежняя редакция называла несуществующую секцию yaml «§Credit» — такой секции в каноне нет, и идущий по списку упирался в пустоту; верный адрес — схема `Usage` и путь `/usage`**): `14-api-contract/openapi.yaml` §Transport · схема **`Usage`** · **`CeilingBounds`** · `docs/architecture/15-money-path.md` §1 · §4 · таблица §6 · `docs/product-requirements.md` ПТ-35 · **`docs/glossary.md`** · **`docs/architecture/13-tech-debt-anchors.md` §Б-126** · зеркало фронта · `frontend/docs/API_CONTRACT_INPUT.md` §4.8 · `platform/docs/ENGINEERING_STANDARDS.md` (зонный) · **`platform/README.md`** (зонный; добавлен 05.09 — в первых двух редакциях списка его не было). Первая редакция списка в компаньоне канона была НЕПОЛНА — три носителя добавлены ревизией 05.09, ещё один и поправка адреса — ревизией того же дня. ⚠ **Прозаические указатели на отзыв уже проставлены 05.09** в `15-money-path` (§1/§4/§6), ПТ-35, глоссарии и в yaml (`Usage`/`CeilingBounds`/шапка §Transport); ПОЛЯ приезжают паком — схема впереди кода не едет.
> ⚠⚠ **Эррата 05.09-а (D39.84 п.1 и D39.100 К-8) — ЗАПРЕТ «ДЕНЕЖНЫХ ПОЛЕЙ В UI НЕТ ВОВСЕ» ОТОЗВАН ВЛАДЕЛЬЦЕМ, тела нот об этом НЕ ЗНАЮТ.** Тела D39.84 («оплат в MVP нет, денежных полей в UI нет вовсе») и D39.100 («запрет денег на экране D39.84 в силе и НЕ superseded») переписывать нельзя (D23.3), а читающий их ПО НОМЕРУ — как велит канон — видит запрет действующим. **Читать оба через `D39.196`:** владелец 05.09 отозвал запрет, баланс аккаунта, потолок заказа и холд ВЫХОДЯТ наружу деньгами; запрещённым остаётся другое и оно НЕ отменялось — цены моделей, стоимость стадий и вызовов, структура НАШИХ расходов (ПТ-33). ⚠ Носители запрета, которые обязан закрыть пак формы заказа, полным списком (⚠ **испр. 05.09: прежняя редакция называла несуществующую секцию yaml «§Credit» — такой секции в каноне нет, и идущий по списку упирался в пустоту; верный адрес — схема `Usage` и путь `/usage`**): `14-api-contract/openapi.yaml` **§Boundaries** (⚠ испр. 05.09 второй раз: две предыдущие редакции звали этот абзац «§Transport» — секция `## Transport` в файле есть, но денежный абзац лежит в `## Boundaries`; ошибка того же класса, что несуществующий «§Credit») · схема **`Usage`** · **`CeilingBounds`** · `docs/architecture/15-money-path.md` §1 · §4 · таблица §6 · `docs/product-requirements.md` ПТ-35 · **`docs/glossary.md`** · **`docs/architecture/13-tech-debt-anchors.md` §Б-126** · зеркало фронта · `frontend/docs/API_CONTRACT_INPUT.md` §4.8 · `platform/docs/ENGINEERING_STANDARDS.md` (зонный) · **`platform/README.md`** (зонный; добавлен 05.09 — в первых двух редакциях списка его не было). Первая редакция списка в компаньоне канона была НЕПОЛНА — три носителя добавлены ревизией 05.09, ещё один и поправка адреса — ревизией того же дня. ⚠ **Прозаические указатели на отзыв уже проставлены 05.09** в `15-money-path` (§1/§4/§6), ПТ-35, глоссарии и в yaml (`Usage`/`CeilingBounds`/шапка §Transport); ПОЛЯ приезжают паком — схема впереди кода не едет.
> ⚠⚠ **Эррата 04.09-д (D39.195) — ПАК НЕ ПРИНЯТ, заголовок ноты ЛОЖЕН, и ошибка классификации — оркестраторская.** Нота объявила движковый вайр-батч «ПРИНЯТ И ЗАКРЫТ» и перевела найденное кругом 4 в строки бэклога **256264**. **Владелец поправил зону прямо: «сворачивал — да, но сдавать несданную багованную работу не говорил».** Он прав. «Прекратить полировку» было применено к вещам, полировкой НЕ бывшим: ложный пин (`WB15`, тот же дефект, что чинился в `WB36`), близнец денежной дыры на лейбловой ветке `CheckKeys`, разрыв фингерпринта каталога, и семь пинов, которые слабее собственных формулировок. **Отчитаться о баге — не значит его сдать**, и различение это принадлежит владельцу, а не сессии и не оркестратору. ⚠ **Классифицировала зона, но РАТИФИЦИРОВАЛ оркестратор** — ошибка моя не меньше: акт приёмки существует, чтобы такую подмену ловить, а он её узаконил. Зона чинит и держит сдачу; строки 256264 закрываются её лендингом, а не остаются долгом. ⚠⚠ **ЭТА ЭРРАТА ИСЧЕРПАНА 05.09 АКТОМ `D39.199`: пак ПРИНЯТ С ДОФИКСОМ на приёмочном коммите `74ffe4f`. Читающий её сегодня — читает историю, а не действующее указание** (испр. 05.09: сутки она стояла первой строкой, которую видел идущий к D39.195 по номеру, и предписывала считать пак непринятым). Ниже — как было. **До нового акта пак считать НЕ ПРИНЯТЫМ**; коммиты `b8154cd`/`c77c3ba`/`ecf063e`/`2e13cd1` в дереве остаются (код рабочий и батарея зелёная), но приёмкой они не покрыты. ⚠ Норма, которую это покупает: **свёрнутый круг закрывает ПОИСК, а не ПОЧИНКУ уже найденного** — найденное и не починенное не превращается в долг решением о темпе.
> ⚠ **Эррата 04.09-г (D39.191) — ЧЬЯ СЕССИЯ КРУТИТ ПЕТЛЮ. Норма в её нынешнем виде НАРУШАЕТ правило проекта «сессия отрабатывает свой скоуп и завершается», и нарушает по вине автора нормы (оркестратор №22).** Эррата 04.09-б передала петлю ЗОНЕ — и этого мало: зона прочитала её как «той же сессии», отчего сдавшая пак сессия жила ещё четыре круга после того, как её скоуп был отработан. Читать так: **петлю над готовым паком крутит СЛЕДУЮЩАЯ сессия, а не сдавшая.** Тогда цела и цель нормы (свежий глаз по исходному заказу — прежняя сессия свежей быть не может по построению), и правило про скоуп. ⚠ Практическое следствие для промтов: круг петли — это отдельный пак с собственным промтом и собственным онбордингом, а не «доработка» выданного. Слово владельца 04.09, прямая формулировка: «сессии отрабатывают свой скоуп, затем завершаются».
> ⚠ **Эррата 04.09-в (D39.194 п.3) — МИНОР 0.10.0 БЫЛ РАТИФИЦИРОВАН БЕЗ СВОЕЙ КОДОВОЙ ПОЛОВИНЫ, и это дефект акта оркестратора, а не зоны.** Канон уехал на `0.10.0` (`58bca19`), а сборка платформы продолжала объявлять `0.9.0`, потому что константу и рукописную карту причин никто не поднял: ратификация создала обязанность ВНУТРИ зоны и осталась жить только в голове оркестратора. Цена названа замером зоны — **один рабочий день, всё это время код на проводе был ложным**: шестнадцатая причина `off_target_lang` доезжала читателю как `unspecified` со ступенью «взгляд», хотя канон уже объявлял `wrong_language`. Поймала ЗОНА своей пере-проверкой ПОСЛЕ того, как оркестратор сказал «приёмка закончена»; гейт `platform/internal/gates/contract_test.go` сравнивает константу сборки с каноном НА ДИСКЕ и покраснел сразу — второй копии числа в зоне нет, и это окупилось. Починено `7e204db` (5 файлов). ⚠ **Класс, предсказанный `PD-246` и потому НЕ закрытый им:** словарь причин движковый, карта платформы рукописная, релизы независимые — окно рассинхрона закрывает механизм, которого нет. **Норма:** ратификация, порождающая обязанность в зоне, выдаётся зоне ЯВНО и тем же актом; «я решил, значит зона узнает» — не передача.

View file

@ -111,7 +111,7 @@
- **Уточнение 2: ruby — СИД в auto-кандидатный пул с приором `occurrences`, НЕ прямо в approved** (статус-машина G1: высоко-частотное чтение → auto-кандидат; батч-судья/человек промоутит в approved до распространения на будущие главы).
- **Уточнение 3: `decl`/`gender` ruby НЕ даёт** — они с term-commit LLM-пасса (decl) и контекста (gender). Ruby сидит src+reading→dst, остальное достраивается.
> ⚠ **Перед реализацией прочитай `research/13` §«Честные слабые места рекомендаций».** Живым остался второй из двух названных там пунктов (F1-развилка закрыта стройкой — «материализующий» вариант): **E1 post-check** — несущий гейт, но его надёжность в русской морфологии сама невалидирована (склонение-осознанный матч шумит → ложные флаги → редакторы игнорируют → safety рушится). Померить пост-check на русском ДО того, как доверять ему как гейту. Исполняемый эталон механизма (не продукт) — `eval/memory_hotpath.py` (T1T10 → Go-юниттесты).
> ⚠ **Перед реализацией прочитай `research/13` §«Честные слабые места рекомендаций».** Живым остался второй из двух названных там пунктов (F1-развилка закрыта стройкой — «материализующий» вариант): **E1 post-check** — несущий гейт, но его надёжность в русской морфологии сама невалидирована (склонение-осознанный матч шумит → ложные флаги → редакторы игнорируют → safety рушится). Померить пост-check на русском ДО того, как доверять ему как гейту. Исполняемый эталон механизма (не продукт) — `eval/memory_hotpath.py` (T1T10 → Go-юниттесты).**испр. 05.09: харнесс УСТАРЕЛ и эталоном больше не является** — зонный `eval/README.md` (греп `memory_hotpath`) объявляет его контрактом до `cc57c7b` и запрещает переиспользование; зона тут позднее и она права. Живой эталон — сами Go-юниттесты.
## In-house eval — обязателен (числа литературы не переносятся)

View file

@ -3,7 +3,7 @@
> **Часть находок ниже уже ЗАКРЫТА — закрытие помечено по месту D-номером, счёт закрытий в трекер не дублируется (D39.101).**
> **Единственный трекер — таблица «Бэклог» в `../PROGRESS.md`.** Этот файл — справочные file:line-якоря и скоуп-заметки к её строкам (вынесен из архива решением владельца — содержимое ЖИВОЕ). Актуализируется лендингами паков, которые трогают эти строки; исполненный пункт помечать ссылкой на D-номер, не удалять.
> **Снятая мёртвая половина** (историческая улика ОТСУТСТВИЯ механизмов — снимок свипа 26.0701.08 с file:line того времени) живёт носителем: `docs/archive/architecture/05-decisions-D39-59-90.md`, греп `D39.66-пост-сверка`; исполнение среза строки 25 — там же греп `D39.78`; закрытия банк-арки — `D39.69`. Здесь оставлен только ДЕЙСТВУЮЩИЙ статус.
> ⚠ **Второй гвоздь под якоря НЕ строить — гейт уже построен и ратифицирован (D39.126):** `docs/scripts/counts.py --lint` сверяет якорь ПО СОДЕРЖИМОМУ через опт-ин токен `` `путь:123`=`подстрока` ``, органический остаток мигрируется на ЗАТРОНУТЫХ строках (бэклог-строка 205). Этот док — концентрат якорей, и органика на нём не сработала: токен-форму несут единицы, остальные гейт не видит ПО ПОСТРОЕНИЮ. Правильное действие — пакетная миграция якорей в токен-форму, не новый механизм.
> ⚠ **Второй гвоздь под якоря НЕ строить — гейт уже построен и ратифицирован (D39.126):** `docs/scripts/counts.py --lint` сверяет якорь ПО СОДЕРЖИМОМУ через опт-ин токен `` `путь:123`=`подстрока` ``, органический остаток мигрируется на ЗАТРОНУТЫХ строках (бэклог-строка 205 — ЗАКРЫТА D39.200: гейт построен, миграция корпуса на токен-форму органическая и носителя больше не требует). Этот док — концентрат якорей, и органика на нём не сработала: токен-форму несут единицы, остальные гейт не видит ПО ПОСТРОЕНИЮ. Правильное действие — пакетная миграция якорей в токен-форму, не новый механизм.
## Срез: строки 81/83/85 + инфра-дописки
@ -147,7 +147,7 @@ Go-гейт стоит на v1 без поглощения кавычек: backe
### Б-13б — тело строки 13б на 09.08.2026
**`speech-cue.txt` zh НЕ шипить до замера голос-флаггера на холодном прогоне** (данные для недоказанного детектора = инерция; вывод обсуждения 31.07): оси пустые → файл не нужен, оси ловят → решение владельца о шипе (байты двигают `LangpackVersion`). ⚠ **Замера ВСЁ ЕЩЁ НЕТ (D39.86):** поверхность вывода построена (строка `VOICE` в `tmctl report`), и живое чтение coldrun-a даёт `flags=0 over attributed=0 of replies=0` — но это НЕ «оси пустые»: флаггер живёт на ФИНАЛЬНОЙ волне (`waverun.go:392,512`), а редакторская волна там не гонялась ⇒ оси не считались НИ РАЗУ. ⚠ И поле `rules=` в новой строке говорит «гейт СКОНФИГУРИРОВАН» (читается из конфига ВРЕМЕНИ ОТЧЁТА, `quality.go:436`), а не «гейт отработал» — честный дискриминатор это ЗНАМЕНАТЕЛИ (`replies=`); читать так до фикса (строка 105)
**`speech-cue.txt` zh НЕ шипить до замера голос-флаггера на холодном прогоне** (данные для недоказанного детектора = инерция; вывод обсуждения 31.07): оси пустые → файл не нужен, оси ловят → решение владельца о шипе (байты двигают `LangpackVersion`). ⚠ **Замера ВСЁ ЕЩЁ НЕТ (D39.86):** поверхность вывода построена (строка `VOICE` в `tmctl report`), и живое чтение coldrun-a даёт `flags=0 over attributed=0 of replies=0` — но это НЕ «оси пустые»: флаггер живёт на ФИНАЛЬНОЙ волне (`waverun.go:392,512`), а редакторская волна там не гонялась ⇒ оси не считались НИ РАЗУ. ⚠ И поле `rules=` в новой строке говорит «гейт СКОНФИГУРИРОВАН» (читается из конфига ВРЕМЕНИ ОТЧЁТА, `quality.go:436`), а не «гейт отработал» — честный дискриминатор это ЗНАМЕНАТЕЛИ (`replies=`); читать так до фикса — строка **292** (испр. 05.09: строка 105 закрыта D39.200 половиной (а); эта поправка — половина (б), и она переехала в 292)
### Б-44 — тело строки 44 на 09.08.2026

View file

@ -980,7 +980,7 @@ $1.6, спишем по факту», и закрытие после прого
была НЕПОЛНА и вдобавок называла несуществующую секцию `§Credit`; полный список ведётся эрратой 05.09-а
в шапке журнала решений, здесь — его копия)***:** тело **D39.84** · **D39.100** К-8 («запрет в силе и
НЕ superseded») · `product-requirements.md` ПТ-35 · `15-money-path.md` §1 · §4 · таблица §6 ·
`openapi.yaml` §Transport · схема **`Usage`** · **`CeilingBounds`** · **`docs/glossary.md`** ·
`openapi.yaml` **§Boundaries** (не §Transport — испр. 05.09) · схема **`Usage`** · **`CeilingBounds`** · **`docs/glossary.md`** ·
**`13-tech-debt-anchors.md` §Б-126** · зеркало фронта · `API_CONTRACT_INPUT.md` §4.8 ·
`platform/docs/ENGINEERING_STANDARDS.md` и **`platform/README.md`** (зонные — чинит зона).
**Прозаические указатели на отзыв проставлены 05.09 везде, где носитель мой**; ПОЛЯ приезжают паком.
@ -1044,7 +1044,7 @@ $1.6, спишем по факту», и закрытие после прого
| К-3 | Метка «Глава N» как единственная форма | **✅ ЗАКРЫТ D39.100** (метка — из ДАННЫХ книги). 0.3.0: служебный рендер «Глава N» разрешён КЛИЕНТУ, в локали интерфейса |
| К-4 | Ревизия: сквозная или пер-ресурсная; несут ли её чтения | **✅ ОТВЕЧЕН P0**, подтверждён ревью с поправкой: ревизия и позиция потока — РАЗНЫЕ величины, совмещать в `id` нельзя (0.3.0, §2.11) |
| К-5 | Показывать ли ETA | **✅ ЗАКРЫТ D39.100** (`eta_seconds` в спеке; 0.3.0 сделал поле required+nullable) |
| К-6 | Ступени замечания: сколько и где граница | **◐ ДЕЛЕГИРОВАН ПРОЕКТУ (испр. 05.09): подписи владельца больше НЕ ждём** — D39.176 п.4 (30.08) отдал фразы В-3 · К-6 · Приложение А проекту, требование ИНЖЕНЕРНОЕ (фраза не литерал, а данные по коду причины и локали); живые носители — строки 203/204. Прежний статус «ОТКРЫТ, владелец» держал вопрос на человеке, который его уже отдал. Ответ 16.08: Ответ 16.08: «показывать ВСЕ; в тексте сворачивать и раскрывать по кнопке; как именно — решим потом». **Словарь ступеней проектировать заранее НЕ надо** — батч его и не проектировал. Зависимость закрыта: `Note.id` заведён (0.3.0), без него конкретное замечание нельзя свернуть и запомнить |
| К-6 | Ступени замечания: сколько и где граница | **◐ ДЕЛЕГИРОВАН ПРОЕКТУ (испр. 05.09): подписи владельца больше НЕ ждём** — D39.176 п.4 (30.08) отдал фразы В-3 · К-6 · Приложение А проекту, требование ИНЖЕНЕРНОЕ (фраза не литерал, а данные по коду причины и локали); живые носители — строки 203/204. Прежний статус «ОТКРЫТ, владелец» держал вопрос на человеке, который его уже отдал. Ответ 16.08: «показывать ВСЕ; в тексте сворачивать и раскрывать по кнопке; как именно — решим потом». **Словарь ступеней проектировать заранее НЕ надо** — батч его и не проектировал. Зависимость закрыта: `Note.id` заведён (0.3.0), без него конкретное замечание нельзя свернуть и запомнить |
| К-7 | Пагинация: курсор или один ответ | **✅ ОТВЕЧЕН P0.** 0.3.0 добавил недостающее: максимум `limit`, подрезание вместо понижения, объявленный порядок каждой коллекции, `maxItems` у `decisions` |
| К-8 | Стоп по потолку — каким статусом | **✅ ЗАКРЫТ D39.100** (`paused` + оповещение) |
| К-9 | Отказ прескрина не выразим статусами | **✅ ПРИНЯТО ВЛАДЕЛЬЦЕМ 16.08:** прескрин — ещё одна ПРИЧИНА, а не двенадцатый статус: `rejected` + ОДИН грубый код (`content_refused`), максимально абстрактно, без вариации между попытками (§8а). Заведено 0.3.0 |

View file

@ -1,4 +1,4 @@
# Путь денег — от гранта до settle (топикальный вход, строка 167)
# Путь денег — от гранта до settle (топикальный вход; строка 167 ЗАКРЫТА D39.200, файл живёт сам по себе)
> **Статус: топикальный ВХОД, НЕ источник истины.** Док собирает денежную тему, размазанную по D-нотам, реестру дефектов платформы, глоссарию и бэклогу, в один маршрут чтения. При конфликте с чем угодно побеждает `docs/architecture/05-decisions-log.md` (правило чтения — диета D39.125: живой файл + слайсы). Каждое утверждение здесь снабжено указателем на первичный носитель; формулы — дословно оттуда. Словарь терминов (холд · прирост · аргумент потолка · baseline · settle · leftover-reserved · SpendBound) — `docs/glossary.md` §«Деньги платформы» (`docs/glossary.md:55`=`**Деньги платформы:**`).
>
@ -30,7 +30,7 @@
1. **Грант.** `Grant` — строка леджера `kind='grant'`, идемпотентная по `(аккаунт, source, source_id)`: `on conflict (user_id, source, source_id) do nothing` (`platform/internal/pgstore/credits.go`, греп `func (s *Store) Grant(`; сама идемпотентность после пака sqlc уехала В ЗАПРОС — `platform/internal/pgstore/queries/credits.sql`, греп `on conflict (user_id, source, source_id) do nothing`). Фри-тир — тот же механизм в ТОЙ ЖЕ транзакции, что создание аккаунта (`platform/internal/pgstore/identity.go`, греп `appendLedger(ctx, tx, userID, "grant"`; ⚠ **дефолт `SignupGrantMicroUSD` — НОЛЬ** (`platform/internal/config/config.go`, греп `SignupGrantMicroUSD:`), а НЕ «5 × 1_000_000» — эта сумма ходила по докам и ложна: предложение «на бете дефолт в НОЛЬ» (D39.110 п.3) ИСПОЛНЕНО, `PD-104` в регистре стоит `fixed(P7, дерево сессии)`).
2. **Выбор потолка — шкала в ГЛАВАХ** (D39.110: от 1 до максимума, ноль не выбираем; потолок принадлежит ПРОГОНУ, в `book.yaml` не пишется). **Максимум = Balance КАК ЕСТЬ** (D39.115 п.2а; эррата в шапке D-лога — `docs/architecture/05-decisions-log.md:4`=`Balance КАК ЕСТЬ`): `Hold` — дебет в момент взятия, баланс уже не содержит открытых холдов, повторное вычитание вдвое укорачивает шкалу. Реализация: `pricing.Model.Scale``affordable = balance / PerChapter`, кламп по остатку глав, дефолт = верх шкалы (ратифицировано D39.123 п.2е; компромисс «весь баланс под одну книгу» принят осознанно) — `platform/internal/pricing/pricing.go`, греп `func (m Model) Scale(`.
3. **Ставка $0.03/глава — конфиг-константа платформы:** `DefaultPerChapter = 30_000` micro-USD (`platform/internal/pricing/pricing.go`, греп `DefaultPerChapter`), переопределяется `PerChapterMicroUSD` (`platform/internal/config/config.go`, греп `PerChapterMicroUSD`). ⚠⚠ **ЧИСЛА НИЖЕ — ИЮЛЬСКИЕ ДЕНЬГИ И С 16.08 НЕ ДЕЙСТВУЮТ (испр. ревизией 02.09).** D39.179 п.1 ратифицировал: DeepSeek пере-пинен под цены, вступившие **16.08 16:00 UTC**, множитель к июльским деньгам **×4.47**. ⇒ по действующему прайсу та же выборка даёт среднюю главу **≈$0.051$0.085** и максимум **≈$0.168**, то есть константа $0.03 не завышена, а **ЗАНИЖЕНА**, и знак вывода перевернулся. ⚠ Иллюстрация живыми деньгами (НЕ калибровка): холодный прогон 31.08 дал полную цепь главы $0.093 и $0.151 при `projected_book_usd = 1.1377277707` — но это **n=2 главы из десяти**, прогон остановлен снапшот-гардом, промпт черновика был банкнотным вместо конвенционного, и сам отчёт запрещает такое употребление дословно (`archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`, греп `калибровать ставку платформы`). **Провенанс ниже — ИСТОРИЯ (D39.165 §1, 28.08):** средняя **$0.0115$0.0190**, максимум одной главы $0.0375, «завышена в **1.62.6×**» — ⚠ но НЕ покрывает максимум: источник (D39.165 §1) добавляет «и отдельные главы её уже пробивают» ($0.0375 против $0.03 = ×1.25), и «купить 10 глав» отдаёт движку $0.30, покупающий ~1626 глав («денежная ручка с подписью „главы"», `PD-410`). РЕШЕНО: цена — от ОБЪЁМА ИСХОДНИКА (носитель `chapters.units_total`, пишется интейком за $0), настоящий стоп — объёмный потолок В ДВИЖКЕ (см. §2). ⛔ Константу по сегодняшним числам НЕ калибровать (D39.165 ⛔г) — гейт строка 202 бэклога (`docs/PROGRESS.md`, греп `Живой перевод книги НАСКВОЗЬ через API платформы`). Исторический провенанс: exp08 v2 $0.0219/глава → ревизия D30.4 +1525% → округление ВВЕРХ (низкая ставка опаснее высокой — прогон встанет на потолке посреди книги; `platform/internal/pricing/pricing.go`, греп `Provenance, so the number is auditable`). Временная мера беты — честная оценка движковая (строка 166 бэклога, `docs/PROGRESS.md`, греп `Движковая поверхность оценки`).
3. **Ставка $0.03/глава — конфиг-константа платформы:** `DefaultPerChapter = 30_000` micro-USD (`platform/internal/pricing/pricing.go`, греп `DefaultPerChapter`), переопределяется `PerChapterMicroUSD` (`platform/internal/config/config.go`, греп `PerChapterMicroUSD`). ⚠⚠ **ЧИСЛА НИЖЕ — ИЮЛЬСКИЕ ДЕНЬГИ И С 16.08 НЕ ДЕЙСТВУЮТ (испр. ревизией 02.09).** D39.179 п.1 ратифицировал: DeepSeek пере-пинен под цены, вступившие **16.08 16:00 UTC**, множитель к июльским деньгам **×4.47**. ⇒ по действующему прайсу та же выборка даёт среднюю главу **≈$0.051$0.085** и максимум **≈$0.168**, то есть константа $0.03 не завышена, а **ЗАНИЖЕНА**, и знак вывода перевернулся. ⚠ Иллюстрация живыми деньгами (НЕ калибровка): холодный прогон 31.08 дал полную цепь главы $0.093 и $0.151 при `projected_book_usd = 1.1377277707` — но это **n=2 главы из десяти**, прогон остановлен снапшот-гардом, промпт черновика был банкнотным вместо конвенционного, и сам отчёт запрещает такое употребление дословно (`archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`, греп `калибровать ставку платформы`). **Провенанс ниже — ИСТОРИЯ (D39.165 §1, 28.08):** средняя **$0.0115$0.0190**, максимум одной главы $0.0375, «завышена в **1.62.6×**» — ⚠ но НЕ покрывает максимум: источник (D39.165 §1) добавляет «и отдельные главы её уже пробивают» ($0.0375 против $0.03 = ×1.25), и «купить 10 глав» отдаёт движку $0.30, покупающий ~1626 глав («денежная ручка с подписью „главы"», `PD-410`). РЕШЕНО: цена — от ОБЪЁМА ИСХОДНИКА (носитель `chapters.units_total`, пишется интейком за $0), настоящий стоп — объёмный потолок В ДВИЖКЕ (см. §2). ⛔ Константу по сегодняшним числам НЕ калибровать (D39.165 ⛔г) — **испр. 05.09: гейт ПАЛ вместе со строкой 202** — живой платный прогон отработал 04.09 и показал, что ставка занижена ×4.47; строка 202 закрыта D39.200. Калибровка ставки теперь идёт заказом строк **278 · 281** (проекция цены и замер стоимости тысячи знаков), а не запретом. Исторический провенанс: exp08 v2 $0.0219/глава → ревизия D30.4 +1525% → округление ВВЕРХ (низкая ставка опаснее высокой — прогон встанет на потолке посреди книги; `platform/internal/pricing/pricing.go`, греп `Provenance, so the number is auditable`). Временная мера беты — честная оценка движковая (строка 166 бэклога, `docs/PROGRESS.md`, греп `Движковая поверхность оценки`).
4. **Холд прироста ДО спавна.** `holdTx` пишет отрицательную строку `('hold', -amount)` и тем же знаком двигает кэш баланса (`platform/internal/pgstore/credits.go`, греп `func holdTx(` — строку леджера пишет `appendLedger(… "hold", -amount …)`, кэш баланса двигает `MoveBalance` внутри неё); нехватка — `ErrInsufficientCredit`. Холд + прогон + попытка + очередь — одна транзакция (`platform/internal/pgstore/runs.go`, греп `func (s *Store) StartRun(`; рестарт — греп `func (s *Store) RestartRun(`; форма D39.123 п.2д).
5. **Аргумент движку: `bookCap = committed + прирост×ставка`, БЕЗ reserved — PD-158, дословно из кода: `return m.committed + increment`** (`platform/internal/runs/spawn.go`, греп `return m.committed + increment`). Обе фигуры читаются ОДНИМ вызовом `status --json` перед стартом (`bookMeter``platform/internal/runs/spawn.go`, греп `func (s *Service) bookMeter(`; отказы — греп `Absent is not zero`); отсутствие любой из них = отказ спавна («absent is not zero», PD-40). Почему без reserved: write-open движка занулит leftover до первой резервации, значит цифра из read-only status к моменту сравнения уже мертва; ратифицированная ранее формула с reserved переплачивала запасом ровно на leftover сверх холда — исполнено обеими формулами против гейта (D39.123 п.2б, поправка к D39.122(в)). Аргумент ≠ холд: он больше холда на committed (`docs/glossary.md:55`=`ЭТО НЕ ХОЛД — он больше холда`). Фактически ушедшее значение хранится в `run_attempts.ceiling_arg_micro_usd` (PD-144, миграция 00011); потолок уходит argv-шаблоном `{{usd}}` (шаблон — `platform/internal/config/config.go`, греп `CeilingArg`; подстановку делает `platform/internal/runner/engine.go`, греп `{{usd}}`; подстановку и рендер argv делает `platform/internal/runner/engine.go`, греп `func (t CeilingTemplate) Args(`; `platform/internal/runs/runs.go`, греп `func (s *Service) ceilingFor(` — однострочная делегация к нему; `spawn.go` потолок только передаёт); строка 145 закрыта D39.122.
6. **Baseline и списание.** `baseline = committed` книги на старте попытки (`platform/internal/runs/spawn.go`, греп `baseline, bookCap := m.committed`); списание попытки = разница счётчика с baseline; счётчик ниже baseline = подменённая БД, сеттлится в ноль с WARN — сами цифры в лог не идут (D39.84; `platform/internal/runs/reconcile.go`, греп `the book's meter reads below`).

View file

@ -98,13 +98,13 @@
| движковая оценка $/глава | строка **166**. Приоритет поднят: D39.165 §1 ратифицировал цену ОТ ОБЪЁМА исходника, и оценка перестала быть удобством. ⚠ Числа цены главы и их пере-пин под цены с 16.08 — только `15-money-path.md` §3 п.3, здесь копии нет |
| `tmctl init` (форма В) | строка **170**; приоритет ПАДАЕТ после двери 199(а) — та забирает её главный довод |
**ПОСТРОЕНЫ по этому закону и из таблицы сняты** (форма читается по ним как по образцам): приём правок банка движковым глаголом `tmctl bank-apply` — 27.08, D39.158, развилка владения `book.yaml` (строка 199а) растворена · `--keys-file` — движок 27.08 (D39.158), передача с платформы 28.08 (P9/D39.162), строка **211** ЗАКРЫТА и блокером живого прогона больше не является (⚠ строка **202** при этом жива, просто не заперта ею) · путь артефакта в ответе движка — конверт `StatusArtifacts` в `status --json`/`manifest --json` (`project_db` · `bank_export` · `mined_delta` · `mined_rejects` · `book_files`, D39.162/D39.175), строка **213** сужена до одной строки ДЕВ-супервизора · consent-флаги `--resnapshot`/`--accept-rebill` от платформы — 28.08, D39.166, продаются членом `RunRequest.re_pass` (канон контракта 0.7.0+); гейт «строка 192» СНЯТ владельцем (D39.165).
**ПОСТРОЕНЫ по этому закону и из таблицы сняты** (форма читается по ним как по образцам): приём правок банка движковым глаголом `tmctl bank-apply` — 27.08, D39.158, развилка владения `book.yaml` (строка 199а) растворена · `--keys-file` — движок 27.08 (D39.158), передача с платформы 28.08 (P9/D39.162), строка **211** ЗАКРЫТА и блокером живого прогона больше не является (⚠ ⚠ испр. 05.09: строка **202** ЗАКРЫТА D39.200 — прогон отработал; её остаток о непокрытых поверхностях живёт строкой **255**) · путь артефакта в ответе движка — конверт `StatusArtifacts` в `status --json`/`manifest --json` (`project_db` · `bank_export` · `mined_delta` · `mined_rejects` · `book_files`, D39.162/D39.175), строка **213** сужена до одной строки ДЕВ-супервизора · consent-флаги `--resnapshot`/`--accept-rebill` от платформы — 28.08, D39.166, продаются членом `RunRequest.re_pass` (канон контракта 0.7.0+); гейт «строка 192» СНЯТ владельцем (D39.165).
**Не установлено, проверить при постановке:** строка **198** (апгрейд стирает замечания) — возможно, подразумевает
глагол пере-анонса или бэкфилла, потому что движок анонсирует юнит один раз за жизнь книги
(`backend/internal/pipeline/events.go:404`=`func unitOnceKey(bookID string, k unitWave) string`); направление фикса консилиум НЕ установил.
**Из чего двери НЕ следует** (экономия паков): **202** — потребитель всего набора, своих команд не
**Из чего двери НЕ следует** (экономия паков): **255** (бывшая **202**, закрыта D39.200) — потребитель всего набора, своих команд не
несёт · **208** — фикс транспорта внутри движка · **210** — развилка данных/промпта, вайр-батч 182 ·
**164** — не команда, а починка: смета уже едет в `status --json`.

View file

@ -47,7 +47,7 @@
| ПТ-17 | Лимит размера входа настройкой (V2-п.3, H7) | ⭕ | строка 94 |
| ПТ-18 | Стоп и продолжение пайплайна; абьюзивный прогон НЕ продолжать (V2-п.2, H10) | 🔶 | graceful stop по сигналу (`cmd/tmctl/main.go` NotifyContext) + чекпойнты/redrive; продукт-кнопки и связка с прескрином = строка 94; API-форма в контракте 14 (D39.99: stop/resume; отказ прескрина — К-9 закрыт D39.138 п.2б) |
| ПТ-19 | Скорость: «очень быстрый перевод книги — киллерфича» (V4-п.1, H9); видимый прогресс/ETA — из Ф3-видения ридер-IDE (цветная полоса статуса), не из V4 | 🔶 | волны параллельны по чанкам; замер скорости и ETA на целой книге = строка 54 (МАСШТАБ); пофазные счётчики draft/edit НА ГЛАВУ построены движком (D39.122 — строка 99 ЗАКРЫТА); ETA ПОКАЗЫВАТЬ — решение владельца 04.08 (D39.100/К-5), `eta_seconds` в спеке (0.2.0+, D39.115); оценка $/глава движком = строка 166 |
| ПТ-44 | **Готовый перевод отдаётся ПОЛЬЗОВАТЕЛЮ файлом** — читаемая книга (EPUB 3 + чистый txt), а не JSON-выхлоп; неполная книга выдаётся ВСЕГДА, с пометкой на титуле и маркером на месте каждой дыры (слово владельца 30.08: «дверь ВСЕГДА строит файл — отказ юзеру не отдаётся»; отказ по умолчанию остаётся операторской ручкой CLI) | 🔶 | **Движковая половина ПОСТРОЕНА** (D39.175, `8adcb86`) — глагол `tmctl build`, пакет `backend/internal/bookfile`, шесть состояний честности и полоса отказов расшифрованы в `glossary.md`, флаги и оба конверта (`tm-build-v1` у глагола build, аддитивно расширенный `tm-export-v1`) — в теле ноты. ⚠ **испр. 05.09: дверь платформы ПОСТРОЕНА** (`adf5e53`, `D39.194`, три адреса) — прежнее «не построена» (`createExport`/`getExport`) — очередь CURRENT-STATE, п.4 «дверь выдачи», гейт: живой прогон п.3. Открытое на владельце: лестница D25.1 (какая ступень даёт копию БЕЗ пометки, что печатать на титуле) |
| ПТ-44 | **Готовый перевод отдаётся ПОЛЬЗОВАТЕЛЮ файлом** — читаемая книга (EPUB 3 + чистый txt), а не JSON-выхлоп; неполная книга выдаётся ВСЕГДА, с пометкой на титуле и маркером на месте каждой дыры (слово владельца 30.08: «дверь ВСЕГДА строит файл — отказ юзеру не отдаётся»; отказ по умолчанию остаётся операторской ручкой CLI) | 🔶 | **Движковая половина ПОСТРОЕНА** (D39.175, `8adcb86`) — глагол `tmctl build`, пакет `backend/internal/bookfile`, шесть состояний честности и полоса отказов расшифрованы в `glossary.md`, флаги и оба конверта (`tm-build-v1` у глагола build, аддитивно расширенный `tm-export-v1`) — в теле ноты. ⚠ **испр. 05.09: дверь платформы ПОСТРОЕНА** `createExport` · `getExport` · `downloadExport` (`adf5e53`, `D39.194`, контрактный минор 0.10.0 §2.23), цикл замкнут живьём: EPUB настоящего платного перевода выдан через API. Прежняя редакция после этой поправки продолжала хвостом слать «в очередь, гейт: живой прогон» — очереди больше нет. Открытое на владельце: лестница D25.1 (какая ступень даёт копию БЕЗ пометки, что печатать на титуле) |
## Фронт (Ф3)
@ -68,7 +68,7 @@
| ID | Требование (источник) | Статус | Носитель / доказательство |
|---|---|---|---|
| ПТ-25 | Валидация влияния каждого решения на качество, вкл. пагубное (V1-п.3, V3-п.1; Выводы) | ✅ | методология полигона (exp0121 приняты, 22/23 живые; labels, судья, пре-рег); держится нормами D39.46/47 |
| ПТ-25а | Онлайн- и оффлайн-замер КАЧЕСТВА прогона (V0-п.31, H5 in-loop signal) | 🔶 | детерминированный $0-слой в петле построен (гейты/чекеры, телеметрия качества — слой 5 в 09); семантический in-loop сигнал = Ф2 (судья, строки 33 · 13а · 90-метрики) |
| ПТ-25а | Онлайн- и оффлайн-замер КАЧЕСТВА прогона (V0-п.31, H5 in-loop signal) | 🔶 | детерминированный $0-слой в петле построен (гейты/чекеры, телеметрия качества — слой 5 в 09); семантический in-loop сигнал = Ф2 (судья, строки 33 · 90-метрики; ⚠ испр. 05.09: **13а** отсюда снята — веса рубрики сняты владельцем как неверная постановка, мерить по УЗЛАМ, D39.198 п.2) |
| ПТ-26 | Самоулучшение пайплайна по данным больших прогонов (V3-п.2, H16) | ⭕ | строка 90 (дизайн петли по данным судьи — при пилот-препе Ф2.5); AB-способность бэкенда — дальний хвост V1 (двойное хеджирование владельца), тем же дизайном |
| ПТ-27 | Без-LLM анализ книги в помощь переводу/валидации (V1-п.1/п.9) | ✅ | майнер, $0-гейты/чекеры, экраны, KWIC — весь детерминированный слой |
| ПТ-28 | Фронтир-модель внутри пайплайна / «судья над судьёй» (V3-п.3) | ❌ | отменено владельцем (V4-п.2) |