From 08219395d744235f88f9b7c3f66f519ac36b98ab Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 5 Sep 2026 20:43:48 +0300 Subject: [PATCH] Record the independent verification of both acceptance acts, correct three counts a journal signed as final three hours too early, and pay one review header --- docs/PROGRESS.md | 11 +++-- docs/architecture/05-decisions-index.md | 3 +- docs/architecture/05-decisions-log.md | 27 +++++++++- docs/research/22-domain-harness-survey.md | 2 +- docs/research/30-arhitektura-otvet.md | 60 +++++++++++++++++++++-- 5 files changed, 93 insertions(+), 10 deletions(-) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 794d8b7b..191a68fe 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-05, голова D39.206 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №22** (единственный носитель — здесь; роль передана 01.09, №21 закрыт нотой передачи D39.184). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **90** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 107 (major 5), всего рядов 453 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-05, голова D39.207 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и P7 его НЕ размораживает (D39.147). **ОЧЕРЕДЬ №22** (единственный носитель — здесь; роль передана 01.09, №21 закрыт нотой передачи D39.184). ⚠ **ЗАКАЗ ВЛАДЕЛЬЦА 01.09 — ПЕРВЫМ:** (0а) **ревизия документации на ПРОТУХШЕЕ** — по всем зонам, не только тронутым; (0б) **планы доработок в БЭКЕНД и ПЛАТФОРМУ** по остатку бэклога и регистра; (0в) **вынос неактуального в АРХИВ** (`docs/archive/`, `platform/docs/archive/`) — за сутки 31.08 закрыто много, и часть носителей стала историей. ⚠ Трезвость по масштабу (пере-считано 02.09): **90** живых дока в `docs/` (пере-счёт 04.09: `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`), 8 в `platform/docs`, 9 в `backend/docs` — ⚠ из 94 ВРЕМЕННЫЙ остался ОДИН (`DOC_CLEANUP_PLAN`, живой до закрытия батчей Б14/Б15/Б17); два прежних временных уехали в `archive/reports/` 02.09; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 107 (major 5), всего рядов 453 (пере-счёт `python3 docs/scripts/counts.py`; с 04.09 оба числа под гардом `--check`, прежние 95/3 разошлись молча) ⚠ (ревизией 02.09 ряды **154** и **157** переведены из «скоро» в «когда-нибудь»: их гейтом стоял первый холодный прогон, он ОТРАБОТАЛ 31.08 и оба предусловия оказались другими — разбор в самих ячейках, ни одна НЕ закрыта). ⚠ Числа доков `counts.py` НЕ сторожит — при переносе файлов пере-считывать руками командой `find docs -name '*.md' -not -path 'docs/archive/*' | wc -l`. ⚠ И предупреждение о МЕТОДЕ, купленное сменой №21: «выглядит протухшим» ≠ «протухло». Три факта оркестратора опровергнуты ЗАМЕРОМ сессий, а якоря `15-money-path.md` в девяти случаях из двенадцати РОДИЛИСЬ верными и сгнили дрейфом — то есть ревизия обязана быть исполнением, а не чтением. ⚠ **ОЧЕРЕДЬ, унаследованная от №21** (три лендинга 31.08 — секция «СОСТОЯНИЕ ПАКОВ» ниже): **(1) ~~РАЗРЫВ ЦИКЛА~~ ЗАМКНУТ ЖИВЬЁМ 04.09** — пользователь получил EPUB настоящего ПЛАТНОГО перевода ЧЕРЕЗ API, `epubcheck` 5.3.0 на СКАЧАННОМ файле 0/0/0/0 (книга `bk_SS5VES2JELESJSTR`, потрачено $0.278319 из гранта $0.60 при потолке пака $1.5, санкция D39.189). Дверь выдачи построена и проверена исполнением: `202`+`Location`, поллинг с `Retry-After`, Range 206 · второй клиент 200 · аноним 401 · чужая книга 404, TTL с GC, идемпотентность третьего создающего вызова. Все ТРИ сценария строки 216 предъявлены живьём (подпись банка · halt на потолке с exit 4 · `409 run_not_resumable/ceiling_reached` и лечение новым прогоном). > ✅ **ПОЧИНЕНО 05.09 ЛЕНДИНГОМ `616a8e4` (пак «денежный стоп», акт приёмки **D39.206**; ⚠ испр.: раньше здесь стояла D39.203 — это нота ВЛАДЕЛЬЦА про «сколько добавить», а не акт) — ниже до-паковая археология, читать как историю.** Отказ резервации больше не роняет волну: он ЗАЩЁЛКИВАЕТ её (новое не стартует, допущенное дорабатывается), а обязательный вызов ЖДЁТ settle, когда settle может помочь. ⇒ **порог «книга короче десяти глав не переводится» СНЯТ**; остаточный пол — одна резервация (~$0.07 ≈ 3 главы), и он ВЫВЕДЕН, а не замерен (замер — $0.15-прогон пятиглавой книги, передан полигону). ⚠ Разбор эрратой — `architecture/15-money-path.md`, греп `ЭРРАТА 05.09`. ⚠ **Эта строка сутки стояла непоправленной ПОСЛЕ лендинга и по ней оркестратор предупредил владельца о снятой стене как о действующей** — канон, не обновлённый лендингом, врёт громче отсутствующего. **НО КНИГУ ЧЕРЕЗ API НЕЛЬЗЯ БЫЛО ДОВЕСТИ ДО КОНЦА — найдено прогоном 04.09 и воспроизведено дважды.** Прирост потолка на прогон = `chaptersLeft × $0.03` (ставка `DefaultPerChapter`, занижена ×4.47 — D39.179 п.1), и после первой готовой главы это $0.27, тогда как движок при `waves.workers: 4` резервирует под редакторский шаг ~$0.28 ⇒ **отказ резервации, прогон встаёт, книга не двигается**. Два прогона подряд дали одно и то же: `committed` не сдвинулся, холд вернулся. ⇒ **занижение ставки — не «шкала короче», а СТОП ПРОДУКТА: с какого-то момента каждая следующая покупка не покупает ничего.** Лечить придётся согласованно двумя сторонами (ставка платформы + резерв движка под шаг с параллельными воркерами), носитель — ряд регистра зоны, вес `major` **за недостижимость продукта, а не за деньги**: сам стоп НЕ ЖЖЁТ ничего — замер платформы 04.09 показал отмену ДО ухода запроса (латентность 20–31 мс, `model_actual` пуст, токенов ноль), и вся книга сходится до микро-доллара по трём источникам (`request_log` 0.278319 · `spend.committed_usd` 0.278318752 · платформенный `committed` 278319 микро). > ⛔ **ЗАТО HALT НА ПРОГОНЕ, КОТОРЫЙ ПРОДВИНУЛСЯ, ЖЖЁТ — отдельная находка того же прогона и свежая датированная точка строки 78 («леджер = НИЖНЯЯ граница»).** Четыре редакторских вызова ушли параллельно; один дошёл ($0.063404) и своим коммитом сорвал потолок, три других отменены в тот же миг, **отработав 120756, 156469 и 156470 мс** — и легли в леджер нулём. Незаписанное ≈ **$0.05–0.19 на ОДИН halt** против $0.278 за всю книгу, то есть механизм, защищающий от перерасхода, сам создаёт неучтённый расход. ⚠ Списание провайдером НЕ доказано (биллинга у нас нет) — утверждается ровно наблюдаемое: вызовы шли 2–2.6 минуты, их цены в леджере нет. > ⇒ **Дыра НЕ в принципе, а в покрытии, и это делает её заказом, а не наблюдением** (разбор оркестратора 04.09 по коду): консервативная оценка уже построена и ратифицирована — `backend/internal/pipeline/stagerun.go`, греп `settling the reservation estimate to keep the ceiling honest` (pack-13 point-9), — но её условие требует ОТВЕТА провайдера (`resp.Usage`), а отменённый в полёте вызов ответа не получает и уходит другим путём. Направление лечения: сеттлить оценку при отмене вызова, который успел уйти; различитель — факт ухода (латентность кандидат, порог обязан быть обоснован замером, а не назначен). Половина ДВИЖКОВАЯ. ⚠ Прежняя формулировка пункта — ниже, она о состоянии ДО 04.09. Движок пишет файл с 30.08 (`tmctl build` — EPUB 3 + чистый txt, D39.175), и холодный прогон 31.08 предъявил это живьём: собранный EPUB настоящего перевода прошёл `epubcheck` 0/0/0/0 и передан владельцу. ⚠ **ЭТОТ АБЗАЦ ЗАКРЫТ 04.09 и оставлен как история:** дверь выдачи ПОСТРОЕНА и заленджена (`adf5e53`, D39.194), смонтировано **18 операций из 21** (три адреса двери: `createExport`/`getExport`/`downloadExport`), долг `П-17` зона пере-сняла. Прежняя проверка «`grep -rn 'createExport\|getExport' platform/internal/` — пусто» БОЛЬШЕ НЕ ПУСТА и как гейт не работает. Не смонтированы по-прежнему `getRun`, `updateBook`, `deleteBook` — `updateBook` несёт продуктовое следствие, строка бэклога 274 (имя книги в выданном файле не чинится ничем). **Слово «отдаёт результат» ложно по букве ТОЛЬКО платформенной половиной** (п.4) · **(2) ~~холодный прогон движка~~ ОТРАБОТАЛ 31.08, закрыт РЕШЕНИЕМ ВЛАДЕЛЬЦА «не доводить»** (отчёт — `archive/reports/COLDRUN_V16_REPORT_2026-08-31.md`, числа относятся к `065d8ac`). Потрачено **$0.436110** из санкции $0.80. ПРЕДЪЯВЛЕНО живьём: объёмный потолок · D39.158 ОБЕИМИ половинами (стоп и не-стоп) · exit 16 · строки 154/198/239/240. ⚠ ~~**Причина большой доли редактора НЕ УСТАНОВЛЕНА**~~ — **УСТАНОВЛЕНА пробой полигона 02.09 по четырём осям: РЕДАКТОР ДУМАЕТ, А НЕ ПИШЕТ.** Размышление — **77.9%** цены редактора без ручки и 45.7% с `low`; у `glm-5` с выключенным thinking — 0.0%. Замер куплен и закончен ($6.17 из $9.50). ⚠ `research/30` §2.4 того же полигона повторяет «причина не установлена» — это про ДРУГОЙ вопрос (доля роли в прогоне против доли размышления в цене роли), и различение обязано попасть в ревью-шапку 30. Доля редактора идёт с ДВУМЯ знаменателями: **49.3%** от всего прогона ($0.214865 из $0.436110) и **81.3%** внутри порции П1 (⚠ ходившее «73%» — фантом, в отчёте его нет ни разу). Следующий шаг — контролируемая проба по ЧЕТЫРЁМ осям (роли осей и три требования, купленные ошибками этого прогона, — §14 отчёта; ось `stale` НЕДОСТИЖИМА — §10 там же). ⚠ **Цена: слово владельца 31.08 — ≈$0.60, потолок $0.80, ДЕСЯТЬ глав ПОЛНОЙ цепью включая редакторскую волну.** ⚠ **КЛЮЧИ: гейт снят словом владельца 30.08, разбор двух путей — D39.176 п.6.** Живое отсюда: конвенционного `.env` НЕТ НИ У ОДНОЙ книги корпуса (заполнены только `projects/textmachine/backend/.env` и `.../eval/.env`), поэтому прогон движка обязан передавать `--keys-file` абсолютным путём и только на `translate`; для п.3 нужен ДРУГОЙ файл — `TM_PLATFORM_ENGINE_KEYS_PATH`, тоже АБСОЛЮТНЫМ путём (`platform/internal/config/config.go`, греп `must be an absolute path`). Лечение операционное и $0 — направить переменную на уже заполненный файл; проверять ПРОГОНОМ, не чтением (гардрейл `.env`) · **(3) живой сквозной прогон через API платформы** — форма манифеста, сайдкара банка и карта причин флагов сочинены платформой САМОСТОЯТЕЛЬНО. ⚠ Уточнено 01.09: гейт СНЯТ холодным прогоном, и настоящие артефакты движка теперь ЕСТЬ (каталог `books/gu-zhenren/coldrun-v16/`), но сверка вышла ТОНКОЙ: на шов реально вышло **одно значение `flag_reason` из пятнадцати** (`sanitizer_stripped`), остальные четырнадцать по-прежнему только чтением кода, а манифест против `platform/internal/ingest/manifest.go` не сверялся вовсе · **(4) дверь выдачи** — строго ПОСЛЕ (3) (⚠ слово владельца 30.08: дверь ВСЕГДА строит файл — отказ юзеру не отдаётся, неполная книга уходит с пометкой, т.е. дверь зовёт `tmctl build --partial`; отказ по умолчанию остаётся операторской ручкой CLI; D29.1(б) «fail-closed» читать как «никогда молча» — честность несут пометки) · **(5) проводка `--max-units`** — снятие гейта, а не стройка: механизм в движке стоит (D39.170), живое основание гейта — `PD-422` · **(6) разморозка фронта** — ПОСЛЕ (4): зеркало отстало на **ВОСЕМЬ** миноров (`frontend/docs/api-contract/openapi.yaml` — `0.2.3` против канона `0.10.0`, и первый из них — ЛОМАЮЩИЙ 0.3.0), **16 операций против 21**; зеркало последний раз двигали 15.08 — ⚠ ходившее «30.08» было взято из текста коммита, а не из `git log` (испр. 05.09), то есть расхождение старше на две недели; отставание ратифицировано D39.142 п.5 на время фриза и две ручки разъехались, размораживать раньше значит перегенерировать типы дважды. ⚠ **ДВА ЗАГЕЙЧЕННЫХ ТРИГГЕРА НАЖАТЫ И НЕ ОТРАБОТАНЫ — строка бэклога 237** (`go.work` · вендор-сверка эффорта `deepseek-v4-pro`; реестр `13-tech-debt-anchors.md` §Б-108). ⚠ **Состояние git — снимать КОМАНДАМИ, не чтением** (ветка `polygon` ушла вперёд, коммит здесь не цитирую): работа полигона лежит на ней и в `main` НЕ влита, а `git status -- eval/` в main-дереве пуст ПО ПОСТРОЕНИЮ и уводит в ложный вывод «работы нет»; ⚠ **«развязка git с origin» — арбитр ПЕРЕ-СНЯТ 04.09 и прежний вердикт БОЛЬШЕ НЕ ВЕРЕН:** `git merge-base --is-ancestor origin/main main` → **rc 1**, `git log main..origin/main` → `afa7700 temp` (коммит владельца 04.09, которым он передавал работу зон). Локальная линия ушла вперёд на семнадцать коммитов и содержит ВСЁ содержимое `afa7700` — оно снято `reset --soft` и заленджено раздельными зонными коммитами, — но формально ветки разошлись. Лечение — force-push рукой владельца; **не пуллить** (его же правило). ⚠ Пункт «развязка git с origin» в листе владельца ниже держится ТОЛЬКО как вопрос про force-push его рукой; утверждением о расхождении дерева он не является — арбитр этой пары именно здесь. @@ -19,7 +19,7 @@ > - **Курс:** этапы ОБЩНОСТЬ · КАЧЕСТВО БАНКА · ПАКЕТ-ЧЕКЕРОВ · ФРОНТ-ЭРА · шов/платформа/движковые блокеры — ПРОЙДЕНЫ (D39.59–123). Хвосты курса живут строками: 16 (полная цена холодного старта; edit-волна на малых прогонах отработала и оплачена — 58 вызовов волновым драйвером 23–25.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: разморозка ничего не разблокирует, пока идут доработки) · веса K1–K12 (13а: веса не нужны, мерить по узлам) · вне-претрейн чекпоинт (55: прогоняем на тех же текстах, оговорка — ограничение ВЫВОДА, а не требование новой книги) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** 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 держать как июльское. ⚠ **Вендор-факты 13–15.08 (пере-пин ИСПОЛНЕН и ПРИНЯТ, D39.137):** таблица цен запинена ПИКОМ (flash 0.44/1.32 · pro 1.32/3.96/кэш-хит 0.044 за 1M; счёт шиппинг-c1 = 100% DeepSeek ⇒ ×4.2–4.4 в пике / ×2.1–2.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** строк · зона бэкенд **103** строго / **144** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **83** (перечень — грепом по таблице, рукописный список снят D39.126) · гейт-строка эксп-22: 153 (плюс 150 — руки владельца; ⚠ 55 из гейтов СНЯТА — D39.198 п.5); строка 5 — остаток гейчен ре-пробой 74, носитель события теперь строка 188 (аудит D39.140); остальное «когда-нибудь». ⚠ Счёт — НИЖНЯЯ граница долга, не потолок (разбор — легенда таблицы ниже). +> - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). **СЧЁТ ОЧЕРЕДИ на 05.09 (скриптом по таблице — `python3 docs/scripts/counts.py`; обновлять при каждом лендинге):** всего **211** строк · зона бэкенд **104** строго / **145** широко (⚠ колонки счётчик читает С КОНЦА — испр. D39.116) · **блокеров очереди 0** (236 закрыта D39.175), платные прогоны разблокированы · «скоро» **84** (перечень — грепом по таблице, рукописный список снят 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` (стройка паков 11–16, rerun2) · **`-25-31` (паки 17–20 · мини-прогон · полигон-пакеты 5–8 · ToS · холодный прогон; D39.26–58)** · **`-08-01-02` (сессии №9/№10: общность · качество банка · coldrun-b · открытие фронта/платформы; D39.59–90, срез D39.105)** · **`-08-02-04` (сессии №11–№13: ручки эффорта · стандарты · контракт API · платформа P0 · банк-арбитраж; D39.91–105 + снимок шапки эры №15)** · `-08-04-09` (пинги закрытых паков эры №15) · **`-08-14-15` (закрытые бэкенд-записи №16–17: эмиттер шва · migrate · пере-пин DeepSeek; вынесено D39.139)**. Записи ниже — живой хвост (№16+, эра D39.124+; подрезка D39.139). ## 📌 СОСТОЯНИЕ ПАКОВ @@ -35,7 +35,7 @@ **ОТКРЫТО НА ОРКЕСТРАТОРЕ №22:** ~~**Ресёрч-сессия `textmachine-36`** — лендинг `research/29`~~ **ЗАКРЫТО 04.09.** Оба отчёта топологии заленджены полигоном на СВОЕЙ ветке по прямому указанию владельца (`a7951a7`) и приехали в `main` мержем ветки — то есть маршрутом, который и был назван правильным. Файлы на месте: `docs/research/29-harness-topology-survey.md` и `…-codex.md`. -> ⚠ **ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ, и он на оркестраторе.** У `research/29`, `29-codex` и `30` нет шапки «что доказано / что СНЯТО / что не проверено», (⚠ испр. 05.09: сама шапка 29 уже поправлена — «НЕ закоммичено» помечено протухшим, файл в `main` с `a7951a7`; здесь остаётся долг ШАПКИ, а не факта о коммите). До шапок читать оба отчёта как ФАКТУРУ, не как ратифицированное. ⚠ Формулировка, которую шапка обязана нести, иначе следующая сессия выбросит замеры топологии: **судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть.** ⛔ **Маршрут закрыт словом владельца 02.09: «не трогай соседнюю git tree ветку вообще»** — файл принадлежит ветке `polygon`, в `main` приезжает мержем ветки, копированием из соседнего worktree — никогда (№22 так сделал, был поправлен, лендинг откачен). +> ⚠ **ЖИВОЙ ОСТАТОК — РЕВЬЮ-ШАПКИ, и он на оркестраторе.** ✅ **У `research/30` шапка НАПИСАНА 05.09 — долг по нему закрыт** (попутно исполнена эррата, которую он сам требовал пять недель: `research/22` «LinguaGacha явно НЕ в мульти-агент/редактор» помечено протухшим; и снято его же требование к `29-codex` — якорь `:368` протух, реальный носитель `:108` говорит слабее и о другом). ⛔ У `research/29` и `29-codex` шапки «что доказано / что СНЯТО / что не проверено» ПО-ПРЕЖНЕМУ НЕТ, (⚠ испр. 05.09: сама шапка 29 уже поправлена — «НЕ закоммичено» помечено протухшим, файл в `main` с `a7951a7`; здесь остаётся долг ШАПКИ, а не факта о коммите). До шапок читать оба отчёта как ФАКТУРУ, не как ратифицированное. ⚠ Формулировка, которую шапка обязана нести, иначе следующая сессия выбросит замеры топологии: **судья как СТАДИЯ ДВИЖКА не построен и не вызывался (0 вызовов), но судьи в ПОЛИГОНЕ были и есть.** ⛔ **Маршрут закрыт словом владельца 02.09: «не трогай соседнюю git tree ветку вообще»** — файл принадлежит ветке `polygon`, в `main` приезжает мержем ветки, копированием из соседнего worktree — никогда (№22 так сделал, был поправлен, лендинг откачен). **НОРМЫ, ЗАРАБОТАННЫЕ ЭТИМИ ПРИЁМКАМИ:** - **Зелёная батарея — это ПОЛНЫЙ список пакетов ПЛЮС отсутствие FAIL**, а не отсутствие FAIL: обёртка @@ -349,6 +349,7 @@ | 296 | **ТОЧЕЧНАЯ ПЕРЕГЕНЕРАЦИЯ ПО ПРОМАХУ ГЛОССАРИЯ — направление владельца 05.09 («или флагать, или перегенерировать проблемный участок»), работы сегодня НЕТ.** Актуаторы ремонта — только `RepairLatinResidue` и `RepairBrokenWord` (`backend/internal/pipeline/repair.go`, греп `defaultRepairClasses`); `glossary_miss` нет ни там, ни в `knownRepairClasses`. Сегодняшние лекарства не точечные и обе дороги: удержать ВЕСЬ фрагмент (гейт) либо править глоссарий с `--resnapshot`, то есть ПЕРЕ-ОПЛАТИТЬ книгу. ⇒ заказ: `glossary_miss` как класс-актуатор — перегенерация участка с подписанной формой. ⚠ Гейтится строкой **295**: без замера точности перегенерация по ложному срабатыванию перепишет верный текст | бэкенд | когда-нибудь (после 295) | новый класс актуатора + пост-инвариант | **D39.205** | | 297 | ⛔ **СЛОВАРЬ ПРОВЕНАНСА СТРУКТУРЫ КОРОЧЕ НА ОДНО ЗНАЧЕНИЕ, И ПЛАТФОРМА ЖИВЁТ НА ВРЕМЕННОМ ПРАВИЛЕ.** Для EPUB-spine ложны ВСЕ ТРИ значения `Document.Structure` (`backend/internal/chunk/ingest.go:70-113`): `declared` = «ФОРМАТ назвал границу», а spine называет ПОРЯДОК ЧТЕНИЯ, и «документ = глава» — догадка движка, не слово формата; `detected` определено МЕХАНИЗМОМ «header-shaped lines in the prose» (`splitTextChapters`), которого здесь не было; `none` = «одна глава». ⚠ Само поле спроектировано ВЕРНО — оно отвечает на «КАКОЙ ПУТЬ провёл границы» (`:94-95`); неверна его же первая строка (`:70`), рекламирующая «how much the chapter cut can be trusted». Прибор отвечает на свой вопрос, а читают его как ответ на другой, и здесь неверное чтение НАПЕЧАТАНО ВНУТРИ прибора, двумя строками выше верного. Пока значения нет, платформа исполняет потребительское решение, прописанное в самом комментарии (`:93-94`, «decline to offer an order in chapters»): `declared` ведётся как `none` для целей ползунка заказа. **Правило ВРЕМЕННОЕ, и снятие его — уборка, а НЕ сцепленный деплой.** Добавить значение можно АДДИТИВНО: `manifestVersion` версионирует ФОРМУ ДОКУМЕНТА (`backend/internal/pipeline/manifest.go:40-46`), а новое значение строкового поля формы не меняет — так же приехали сами `Structure` и `Price`. Стоп-мир возник бы только из CHECK-ограничения схемы платформы (`platform/internal/pgstore/migrations/00033_order_and_price.sql:28`), которое противоречит её же обещанию «unknown → not recognised» и снимается ДО лендинга. ⇒ как только движок пошлёт новое значение для spine, платформа прочтёт неизвестное как `none` своим `StructureTrusted`, и ползунок станет верным САМ, без правки на её стороне. ⚠ По тому же правилу под недостающее значение попадает и `\f` в txt — form feed есть разрыв СТРАНИЦЫ, а не утверждение о главе, и сегодня он тоже `declared`; решает структурный пак | бэкенд+платформа | скоро (структурный пак) | недостающее значение на проводе, и `declared` означает ТОЛЬКО объявленную форматом структуру глав | **D39.202**, D39.205 | | 298 | ⛔ **`unit_resolutions` КЛЮЧЕВАНЫ ПОЗИЦИЕЙ, И ЛЮБОЙ ПЕРЕКРОЙ ИХ СНОСИТ ЦЕЛИКОМ.** Ключ `(book_id, chapter, unit, wave)` позиционен по построению, и миграция это прямо объявляет: «keyed by the ENGINE's own ordinals» (`platform/internal/pgstore/migrations/00015_seam_ceiling_and_units.sql:50-56`); событие `unit_done` несёт номер главы и ординал юнита, синк пишет их как есть (`platform/internal/pgstore/sink.go:249`). Потому при перекрое платформа ОБЯЗАНА удалять решения — иначе они перевесятся на чужую главу. Сегодня цена нулевая: решения есть только у стенд-книги, и это окно закрывается с каждой новой платной книгой. ⇒ разрешать `(chapter, unit)` в идентификатор ПРИ ПРИЁМЕ события, пока дерево у платформы на руках, и хранить идентификатор. Платформенная половина структурного пака: миграция плюс синк. ⚠ Этой строкой НЕ закрывается одноразовая перечеканка всех id при смене смысла `cutTag` — это другой предмет и другая цена | бэкенд+платформа | скоро (структурный пак) | решения переживают перекрой, не переклеиваясь на чужую главу | **D39.202** | +| 299 | ⛔ **ИМЯ В GO-КОММЕНТАРИИ, КОТОРОЕ НИ ВО ЧТО НЕ РАЗРЕШАЕТСЯ, — И НИЧТО ЭТОГО НЕ ЛОВИТ.** Два живых носителя, найдены верификацией 05.09 (`D39.207` п.3): **(а)** `backend/internal/runevents/runevents.go:187` цитирует `docs/BACKEND_MONEYSTOP_SESSION_PROMPT.md:78`, а файл УДАЛЁН — промт уведён в архив тем же коммитом, что писал акт, и цитируемая фраза лежит в архивной копии на другой строке; **(б)** `backend/internal/config/internal_call.go:11` и `backend/internal/pipeline/live_reprobe_test.go:14` называют сторожами тесты `TestSyntheticStageSeamIsSingle` и `TestProviderEgressSeamIsSingle`, которых в дереве НЕТ — инварианты при этом реально сторожатся вет-анализаторами `StageSeam`/`EgressSeam` (`backend/internal/archguard/archguard.go:80,377`), то есть гарантия цела, а назначенный ей сторож ВЫДУМАН. Замер верификатора: из 2026 упомянутых в Go имён `Test…` определены 2012; из восьми неразрешающихся четыре — не дефекты (надгробия и иллюстрация), два — мелочь, два — эти. ⇒ **дешёвая половина открытого вопроса `D39.202` п.9: не «доказал ли каталог, что названный тест умеет падать» (дорого, требует интеграции с `tmmutate`), а «РАЗРЕШАЕТСЯ ли названное имя вообще» — это греп, и сегодня он находит два дефекта.** ⚠ `counts.py --lint` этого класса не видит по построению: он читает доки, а не код | бэкенд | скоро | грепом: имя `Test…` и `<док>.md:<строка>` в Go разрешаются, иначе красно | **D39.207**, D39.202 | *(Указатели на архив-слайсы хроники — бюллетенем «Архивы хроники» в CURRENT-STATE; здесь копий нет.)* @@ -917,10 +918,12 @@ bidi-переопределений (Trojan Source), при этом ZWJ/ZWNJ/LR **278** (событие) — недостача едет в `ceiling`, `StreamVersion` 1.2 → 1.3, денежный леджер в `finished`. (4) строка **278** (проекция) — цена книги ДО покупки в `manifest --json` и `status --json`. -**Числа, каждое получено командой (полный список — §6.7 отчёта):** тестовых функций **1172 → 1208 (+36)**, все тридцать шесть в трёх новых файлах; `git diff -U0 -- backend | grep -E '^[+-]func Test'` ПУСТ — +**Числа, каждое получено командой (полный список — §6.7 отчёта).** ⚠⚠ **ТРИ ИЗ НИХ ПРОТУХЛИ ЧЕРЕЗ ТРИ ЧАСА, И ОДНО ПЕРЕВЁРНУТО — поправка в конце абзаца; она найдена ВЕРИФИКАТОРОМ 05.09, не зоной и не мной:** тестовых функций **1172 → 1208 (+36)**, все тридцать шесть в трёх новых файлах; `git diff -U0 -- backend | grep -E '^[+-]func Test'` ПУСТ — ни одна существующая не удалена и не переименована, два протухших починены внутри тела. Каталог мутаций **158 → 191**. Батарея: `MAKE_EXIT=0`, 19 пакетов, 0 упавших, 0 issues (шестой прогон — первые пять красны или остановлены). Каталог ЦЕЛИКОМ: **191 запись, 187 RED, 0 SURVIVED, 0 NOTHING, 0 ROTTED, 0 неожиданных исходов** — второй полный прогон; ПЕРВЫЙ не сошёлся и нашёл четыре дефекта в моих же артефактах, включая named-артефакт приёмки (§6.5 отчёта) (и `go vet -vettool` собственного анализатора зоны — чисто; он поймал у меня один хенд-билд `config.Stage`, см. отчёт). +⚠⚠ **ПОПРАВКА 05.09 (замер верификатора по дереву на `d766007`; числа выше НЕ переписаны — они были верны в свою минуту).** Абзац заленджен коммитом `ba4fd34` через **девять секунд** после пака `81a89e9` и за **три с лишним часа ДО** дофикса `616a8e4`, который добавил ещё +5 тест-функций и +10 записей каталога. Сообщение коммита подписало их «final counts», и после дофикса их никто не тронул. Верно на сегодня: тестовых функций **1172 → 1213 (+41)** · каталог мутаций **158 → 201** · каталог целиком — **201 запись, 197 RED, ЧЕТЫРЕ аргументированных выживших, 0 неожиданных исходов**. ⛔ **Переворачивается именно последнее: «0 SURVIVED» против четырёх записанных выживших** — а это то самое различение из `D39.202` п.3 (`SURVIVED` как СООБЩЕНИЕ О НЕДОСТИЖИМОСТИ, а не как провал), и следующая движковая смена открывает этот журнал РАНЬШЕ акта. Акт `D39.206` всё это время нёс верные числа — разошлись НОСИТЕЛИ, а не факт: класс «поправил читателя, оставил писателя» (`D39.202` п.1). + ⛔ **ТРИ ВЕЩИ, КОТОРЫЕ ОРКЕСТРАТОРУ НАДО ЗНАТЬ ДЛЯ ЛЕНДИНГА:** 1. **Наружу едет НЕ то число, что назвал промт, и это согласовано.** §4(3) назвал `denied estimate` и следующей фразой запретил его класс («цены вызовов не выходят»). Едет **недостача** diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index caf0c7dd..4328a012 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.206; титул — носитель головы, бампать при каждом аппенде) +# Реестр D-нот — карта актуальности v2 (D1–D39.207; титул — носитель головы, бампать при каждом аппенде) > ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не > место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы, @@ -265,3 +265,4 @@ | D39.204 | 05.09 | **Владелец: отказ резервации на ретрае ДЕГРАДИРУЕТ ВО ФЛАГ** («пусть флагает просто как-то»); вариант «минимальная покупка ≥ step_max» снят. ⚠ Это НЕ смена D2.3 — D2 уже кончается флагом, денежная ветка до него не доходит (возврат ошибки из цикла попыток ДО `UpsertChunkStatus`). Причина флага обязана отличаться от исчерпания регенераций. Строка 291 закрывается; работа — своим паком движка | ратифицировано | живое тело | деньги · диспозиция · движок | | D39.205 | 05.09 | **Лестница D25.1 ЗАКРЫТА владельцем: копия без пометки = книга БЕЗ ПРОПУСКОВ; пропущенный КУСОК главы — критический** (маркер остаётся на уровне юнита). Закрывает последнюю границу D39.178 п.4. ⚠ Оркестратор поднял ложную тревогу «вы отменяете решение 30.08» — принцип «в книгу только дыры, остальное на фронт» ратифицирован D39.175 п.2 / D39.178 п.3. Гейт глоссария НЕ включается до замера точности (строка 12 — предусловие); заказ: `glossary_miss` как актуатор ремонта, но СНАЧАЛА подать подписанный канон в прогон | ратифицировано | живое тело | продукт · выдача · качество | | D39.206 | 05.09 | **АКТ: движковый пак «денежный стоп» ПРИНЯТ С ДОФИКСОМ** (`81a89e9` + `616a8e4`; каталог 201/197 RED/0 неожиданных, тесты 1172→1213). 18 находок, 6 снято, 12 устояло, 4 major — **все четыре оказались УТВЕРЖДЕНИЯМИ, а не поведением**. Строки 271 · 277 · 278 (+171) закрыты, 291 решена владельцем. Порог десяти глав снят лендингом | ратифицировано | живое тело | приёмка · движок · деньги | +| D39.207 | 05.09 | **АКТ ВЕРИФИКАЦИИ обоих актов приёмки холодной сессией без пака** (воркри `/tmp/tm-verify-0509` на `d766007`, $0): 15 из 15 фактических утверждений ПОДТВЕРЖДЕНЫ, три прогоном; 7 находок вне карты (F1 — три протухших «финальных» числа в журнале, включая «0 SURVIVED» против четырёх; F2/F3 — имена в Go-комментариях, не разрешающиеся ни во что; F5 — `/tmp/.git` ломает `go build` под `/tmp`). **Норма: утверждение о замере ИЛИ о причине непроверки обязано цитировать КОМАНДУ.** Дыра скипа платформы замерена: 373 против 6 при неотличимом `exit 0` | ✅ | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index c0bbcef7..1308c377 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.206 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.207 (живой файл: карта · эрраты · живые тела · голова 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 — в слайсе `../archive/architecture/05-decisions-D39-106-123.md` (испр. 05.09: прежнее «живёт ниже в этом файле» протухло подрезкой D39.139) (голова D39.106+). @@ -39,6 +39,8 @@ > далёк в обоих случаях, вывод приёмки не меняется, но в каноне стоит число из гейта, а не из грепа. > ⚠ **Эррата 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.201 §2в) — ПРИЧИНА НЕПРОВЕРКИ ПРИПИСАНА НЕВЕРНО.** Пункт объясняет непроверку тем, что стенд зоны неисполним («Failed to connect to bus») и «проверит только боевой хост». Замерено верификатором на ЭТОЙ машине: пользовательский systemd ДОСТУПЕН — `make conditions` в `platform/` печатает `systemctl --user reachable`, пробник `systemd-run --user --collect --unit=… /bin/true` вернул 0. ⇒ блокер был свойством ОКРУЖЕНИЯ той сессии, а не свойством непроизводственного хоста, и сценарий здесь ИСПОЛНИМ. Сама находка не портится — неверна приписанная ей причина; разбор и норма, из неё выросшая, — `D39.207` п.5. +> ⚠ **Эррата 05.09-з (D39.206 §1) — ПЕРЕЧЕНЬ ЛЕНДИНГОВ ПАКА НЕПОЛОН.** Названы `81a89e9`, `616a8e4` и `ba4fd34`; НЕ назван **`e7d6b3f`**, правящий доки того же пака — и именно он пере-навёл шесть якорей, оставив без внимания соседний указатель в Go-комментарии (`D39.207` п.3, F2). Полный состав пака — четыре коммита. > ⚠ **Эррата 05.09-е (D39.190 п.2) — «ПОТЕРЯННЫЙ ЗАГОЛОВОК У ШЕСТИ ГЛАВ ИЗ СЕМНАДЦАТИ» НЕ ИМЕЕТ НОСИТЕЛЯ.** Пункт 2 обосновывает вес структурной строки «свежей уликой полигона» — вычиткой семнадцати глав боевого перевода, нашедшей потерянный заголовок у шести глав из семнадцати (≈800 на книге). **Число подано без единой ссылки на файл**, и поиск первоисточника не дал его ни мне, ни независимо коллеге-Fable 05.09: в `eval/dovodka/` находится план на семнадцать глав, но не счёт потерянных заголовков. ⇒ Число НЕ отзывается — оно может быть верным, — но **опирать на него скоуп ЗАПРЕЩЕНО**: механизм потери не установлен (роняет модель? теряется на экспорте? не показывает читалка?), а лечение зависит от механизма. Титульная работа структурного пака стоит на СОБСТВЕННОМ основании — заголовок, не едущий по проводу, невозможно отрендерить, — а не на этой улике. Кто найдёт первоисточник, впишет адрес сюда. > ⚠⚠ **Эррата 05.09-г — НОРМА «ДЕРЕВО МОРОЗИТСЯ ЛИБО РЕВЬЮЕРУ НАЗЫВАЕТСЯ КОММИТ» ПРИПИСАНА `D39.172` ОШИБОЧНО; в её теле этого НЕТ.** Проверено: тело `D39.172` (пак `sqlc`) не содержит ни «морозится», ни «КОНКРЕТНОЕ дерево», ни «ревьюер» — оно про то, что чужие застейдженные правки уехали в чужой коммит под чужой подписью, то есть про гигиену коммита, а не про суждение о названном дереве. ⚠⚠ **ИСПР. в тот же час: первая редакция ЭТОЙ ЭРРАТЫ САМА ОВЕР-АТРИБУТИРОВАЛА ДВАЖДЫ** — назвала `D39.201` (её тело `D39.172` не цитирует ВОВСЕ) и пропустила `D39.180` и `D39.202` п.8, которые цитируют; плюс перевернула исток. **Замер:** `grep -n 'D39\.172' 05-decisions-log.md` → тела `D39.174` (×2) · `D39.180` · `D39.199` · `D39.202` · `D39.206`; `git log -S'судит КОНКРЕТНОЕ дерево'` → `0393e7a` (30.08, ПРОМТ) старше `8977001` (`D39.174`). ⇒ **норма родилась в `docs/ORCHESTRATOR_SESSION_PROMPT.md`, а ноты её унаследовали**, и ложную атрибуцию несут: `D39.174` · `D39.180` · `D39.199` · `D39.202` п.8 · `D39.206` + сам промт. ⚠ Поймано внешним ревьюером через час после написания: **эррата про овер-атрибуцию, написанная небрежно, — четвёртый случай того же класса за смену и худший из них, потому что стоит в шапке журнала, куда следующая сессия идёт первой.** ⚠ **Сама норма ВЕРНА и остаётся в силе** — операгивный носитель `ORCHESTRATOR_SESSION_PROMPT.md`, греп `судит КОНКРЕТНОЕ дерево`; ложна только атрибуция. Тела нот не переписываются (D23.3) — читать их через эту эррату. **Класс — ОВЕР-АТРИБУЦИЯ: ссылка на ноту, которая цитируемого не содержит; оркестратор допустил её сегодня ТРЕТИЙ раз** (прежние два: фраза «деньги покидают движок только внутри `spend`», которой в журнале нет, и подномер `D2.3`, оказавшийся про другое). Поймано сплошной вычиткой корпуса. > ⚠⚠ **Эррата 05.09-д (D39.196 п.5) — «ДВИЖКОВАЯ ПОЛОВИНА (СТРОКА 277) ПЕРВОЙ, БЕЗ НЕЁ В СТЕНУ УПИРАЕТСЯ ЛЮБОЙ ПУТЬ» ИСПОЛНЕНО: строки 277 и 278 ПОСТРОЕНЫ и СНЯТЫ** (лендинг `81a89e9`, акт `D39.206`). ⇒ **промт формы заказа, цитирующий эту ноту, НЕ должен заказывать защёлку и проекцию цены заново** — он начинается со строк **279–283**. ⚠ И строка **279** (контрактный минор «`shortfall` у паузы») обязана быть прочитана через `D39.203`/строку **294**: поле ПЕРЕИМЕНОВЫВАЕТСЯ, потому что владелец выбрал форму «сколько добавить» (величина `max(shortfall, step_max − headroom)`, кандидат имени `top_up_micro_usd`, `StreamVersion` 1.3→1.4). Зеркалить в контракт имя `shortfall_micro_usd` значит зеркалить приговорённое. ⚠ **Инвариантный пол при этом ОСТАЛСЯ:** последние ~2 главы не покупаются, пока не построена платформенная половина (строка 280) — стену десяти глав пак снял, пол нет. @@ -2511,3 +2513,26 @@ $2.00» не мерил никто), **а утверждение о ПРОШЛО **7. Диспозиции строк.** **271** (правки банка ехали в system-сообщение дословно) — ЗАКРЫТА · **277** (защёлка) — ЗАКРЫТА · **278** (проекция цены и недостача) — ЗАКРЫТА, поглотив **171** · **291** (клин юнита) — решена владельцем, D39.204, работа своим паком. ⚠ Порог «книга короче десяти глав не переводится» СНЯТ этим лендингом — эррата в `15-money-path.md`; канон сутки стоял непоправленным и стоил владельцу ложного предупреждения. **8. Норма, купленная этим паком и стоящая дороже находок.** Восемь major за два пака смены — **утверждения, а не поведение**. ⇒ **Батарея сторожит поведение, каталог мутаций сторожит поведение, линтер сторожит форму — и НИ ОДИН не сторожит того, что код о себе ГОВОРИТ.** Поймало все восемь одно: чтение вслух чужими глазами. Кандидат в механизм и возражение против его простой формы — D39.202 п.9 (05.09.2026, оркестратор №22). ✅ + + +## D39.207 — АКТ ВЕРИФИКАЦИИ ДВУХ АКТОВ ПРИЁМКИ: пятнадцать фактов устояли, семь находок вне карты, и норма «утверждение о замере цитирует КОМАНДУ» (05.09) ✅ + +**1. Метод и исполнитель.** Верификатор — ХОЛОДНАЯ сессия `textmachine-main-e6`, вошедшая без пака; зоны записи не получала, ничего не чинила и не коммитила. Так впервые исполнена норма «петлю над сданным паком крутит СЛЕДУЮЩАЯ сессия, а не сдавшая» (эррата 04.09-г). Путь дан ГОТОВЫМ, а не запретом: `git worktree add --detach /tmp/tm-verify-0509 d766007` — отдельное дерево, где нет незакоммиченного WIP платформы, искажающего чтение. Всё $0. +Две линзы: **A** — опровергнуть несущие утверждения актов, НЕ читая отчётов зон (умолчание = «опровергнуто»); **B** — искать дефекты ВНЕ карты актов. ⚠ Заражение линзы A объявлено верификатором САМИМ: `e7d6b3f`, названный мною в карте чтения, правит `MONEYSTOP_REPORT.md`, и ~4 строки отчёта попали в глаза до закрытия линзы A. Исключающий пасспек тут не спасал — отчёт зоны приехал ВНУТРИ диффа пака `81a89e9`, чего я, выдавая заказ, не знал и утверждал обратное. + +**2. Вердикт по фактам — акты устояли.** Пятнадцать из пятнадцати проверяемых фактических утверждений `D39.201` и `D39.206` **ПОДТВЕРЖДЕНЫ**, три из них живым прогоном верификатора: батарея движка `BATTERY_EXIT=0`, 19 пакетов, 0 FAIL, линтер `0 issues`; состав каталога 201/197 RED/4 записанных выживших; тесты `1172 → 1213` пере-считаны командой по обоим концам. Ещё два утверждения честно помечены **НЕ ПРОВЕРЕНО** (процессные счёты находок и «тринадцать починок, три проверены») — из дерева они не выводятся, и это назвал сам верификатор, а не я. +⚠ Цена вердикта названа им же и записывается сюда без смягчения: подтверждения — это в основном СТРУКТУРА и ТЕКСТ (файл · строка · дифф · состав каталога) плюс три прогона; **подтверждением ПОВЕДЕНИЯ под нагрузкой или в деньгах ни одно из них не является**, и там, где акт сам говорит «выведено, не замерено», верификация этого не закрыла. + +**3. Находки вне карты и диспозиции (мои).** +· **F1 ⛔ ИСПРАВЛЕНО ТЕМ ЖЕ ЗАХОДОМ.** `docs/PROGRESS.md` нёс три числа под подписью «final counts», протухшие через три часа: `1172 → 1208 (+36)` вместо `+41`, каталог `158 → 191` вместо `201`, и — переворачивающее — «**0 SURVIVED**» вместо ЧЕТЫРЁХ аргументированных выживших. Механика: `ba4fd34` заленджен через девять секунд после пака и за три с лишним часа ДО дофикса `616a8e4`. Числа были верны в свою минуту; их подписали «финальными» и после дофикса не тронули. Акт всё это время нёс верные числа ⇒ разошлись НОСИТЕЛИ, а не факт. Абзац не переписан — на нём датированная поправка, потому что следующая смена открывает журнал РАНЬШЕ акта. +· **F2 + F3 ⛔ СТРОКА 299.** Имя в Go-комментарии, которое ни во что не разрешается, — и таких класса два: указатель `runevents.go:187` на `docs/BACKEND_MONEYSTOP_SESSION_PROMPT.md:78`, файл которого удалён (промт уведён в архив ТЕМ ЖЕ коммитом, что писал акт `D39.206`, а через шесть минут `e7d6b3f` пере-навёл соседний указатель и Go-комментарий не тронул); и ДВА комментария, называющих тесты `TestSyntheticStageSeamIsSingle` и `TestProviderEgressSeamIsSingle`, которых в дереве нет вовсе. ⚠ Инварианты при этом РЕАЛЬНО сторожатся — вет-анализаторами `StageSeam`/`EgressSeam` (`backend/internal/archguard/archguard.go:80,377`): гарантия цела, **выдуман назначенный ей сторож**. +· **F4 ⚠ ЭРРАТА 05.09-ж.** `D39.201` §2(в) объяснял непроверку тем, что стенд зоны неисполним («Failed to connect to bus»). На этой машине пользовательский systemd ДОСТУПЕН (`make conditions` печатает `systemctl --user reachable`; пробник `systemd-run --user` вернул 0) ⇒ блокер был свойством ОКРУЖЕНИЯ той сессии, а не «непроизводственного хоста». Находка не портится; неверна приписанная ей ПРИЧИНА. +· **F5 ⛔ ЛОВУШКА СРЕДЫ, УЖЕ СТОИВШАЯ ДЕНЕГ ВНИМАНИЯ.** `/tmp/.git` — пустой посторонний каталог (31.08), git репозиторием его не считает, но поиск корня VCS в Go на нём ОСТАНАВЛИВАЕТСЯ ⇒ `error obtaining VCS status: exit status 128` у любого модуля, собираемого под `/tmp`. Цена уже уплачена: утилита-стриппер движковой зоны не собралась ровно с этим сообщением, оба выхода вышли ПУСТЫМИ, `diff` напечатал «ИДЕНТИЧНО», и зона едва не оперлась на это как на доказательство (`MONEYSTOP_REPORT.md:55`); корень тогда назван не был. ⇒ **любая работа под `/tmp` — с `GOFLAGS=-buildvcs=false`**. ⚠ И это опровергает МОЁ утверждение в заказе верификатору («воркри — настоящий git-checkout, `-buildvcs` обходить не нужно»): у линкованного воркри `.git` — ФАЙЛ, поиск Go его пропускает и уходит выше, где и находит битый корень. Сам каталог не трогаю: он вне репозитория, это машина владельца, и вопрос о его удалении — к нему. +· **F6 ⚠** С выставленным `TM_PLATFORM_TEST_DSN`, но без права `CREATEDB`, тесты уходят в `t.Skipf` ⇒ **неверный DSN тоже зелёный**. Таблица условий это признаёт (`CREATEDB … unprobed`) и ответить не может по построению. Передано зоне платформы. +· **F7 ⚠ ЭРРАТА 05.09-з.** Перечень лендингов в `D39.206` §1 не называет `e7d6b3f` — коммит, правящий доки того же пака. + +**4. ДЫРА СКИПА НАЗВАНА ЧИСЛОМ, и это заказ, которого я не давал.** Верификатор прогнал `make check` платформы ДВАЖДЫ — без `TM_PLATFORM_TEST_DSN` и с ним: **373 скипа против 6**, и **вердикт обоих прогонов неотличим** — `exit 0`, 20 пакетов, ноль падений. Одна невыставленная переменная прячет **367 тестов**. `make check` при этом не молчит: печатает и число, и таблицу условий, и имена — **но КОД ВОЗВРАТА у зелени и у дыры один**, а читают код возврата. Это девятая форма ложной зелени в чистом виде и одновременно ответ на вопрос, сколько она стоит. + +**5. НОРМА, КУПЛЕННАЯ ЭТОЙ ВЕРИФИКАЦИЕЙ — и она про МЕНЯ, а не про зоны.** Пятнадцать фактов устояли; **три из четырёх находок — про ПРИЧИНЫ, приписанные к верным фактам без прогона** (F4 «проверит только боевой хост» · F5 «`-buildvcs` обходить не нужно» · и мой заказ, требовавший невозможного, вскрытый одним `--stat`). ⇒ **Утверждение, которое ссылается на замер ИЛИ объясняет, почему что-то НЕ проверено, обязано цитировать КОМАНДУ, показывающую это.** Норма адресована в первую очередь актам приёмки: акт точен там, где называет ФАКТ, и слаб там, где называет ПРИЧИНУ. Она проходит собственный критерий `D39.202` п.7 — снижает цену проверки, а не требует бдительности. + +**6. Что верификатор НЕ проверил** (его список, не сокращённый): каталог мутаций целиком не перегонял — проверил СОСТАВ статически, то есть повторил дыру приёмки, а не закрыл её · живую пару `exit 10`/`exit 0` не воспроизводил (вердикт о рантайме — PLAUSIBLE) · сценарий `mv` под открытым дескриптором не воспроизводил, хотя F4 показывает, что здесь это исполнимо · пять рехёрсов восстановления с настоящим `drop database` постфактум невоспроизводимы · процессные счёты обоих актов · гонку `MS-reserve-under-the-gate` · `battery-stand` (каталога `books` в воркри нет по построению). ⚠ И собственная ложная зелень, объявленная им САМИМ: первый прогон батареи шёл через `| tail -80`, харнесс отчитался «exit code 0», пока `make` печатал `Error 1` — обрезанный вывод, `D39.202` п.3; числа выше сняты пере-прогоном без пайпа. diff --git a/docs/research/22-domain-harness-survey.md b/docs/research/22-domain-harness-survey.md index a1cd9063..9ca02cae 100644 --- a/docs/research/22-domain-harness-survey.md +++ b/docs/research/22-domain-harness-survey.md @@ -282,7 +282,7 @@ KeywordGacha/новички — онлайн, confidence=low.) Полные ра | GalTransl | нет (low) | ещё движки/провайдеры/языки (qwen-mt, 302.AI, тай/хинди/вьет), GUI-зрелость | — | | LunaTranslator | нет (low) | rolling-инкремент: игры/OCR/TTS/оверлей (релиз каждые 1–3 дня) | — | | **SakuraLLM** | **TODO #42 (med)** | Qwen3+RL/GRPO, **двунаправленный zh↔ja↔ko**, квантизация, ~6GB VRAM | ⚠ канал B / локаль-ассист / ja→ru — следить | -| LinguaGacha | нет (low) | нативная консистентность имён, ARM, CLI; **явно НЕ в мульти-агент/редактор** | ⭐ наш редактор-слой — НЕ на их пути | +| LinguaGacha | нет (low) | нативная консистентность имён, ARM, CLI; **явно НЕ в мульти-агент/редактор** ⚠ **ЭРРАТА 05.09: ПРОТУХЛО И ОПРОВЕРГНУТО.** С 31.07.2026 проект строит агентный редактор — замер `research/30` §4.1 (03.09): 305 коммитов за 25.07–03.09, 104 из них в агентных каталогах, восемь скилов, обзор по четырём осям. Утверждение оставлено телом как улика, а не как факт. ⇒ **срок годности харнесс-обзора — НЕДЕЛИ, а не месяцы**; ни одна строка этой таблицы не цитируется без пере-проверки даты | ⭐ наш редактор-слой — НЕ на их пути | | KeywordGacha | **заморожен** (v0.20.2, ~13 мес) | поглощён LinguaGacha (Name Field v0.102.0, 2026-06) | ⭐ fused>bolt-on подтверждён живьём | | Glossarion | нет (low) | ширь: форматы/провайдеры/**манга**/QA-глубина (quotation/header-чекеры) | QA растёт | | NovelTrans | **README-таблица (med)** | **100% инфра/скейл/observability** (Nginx HA, Resilience4j, RabbitMQ, Jaeger, Milvus) — НОЛЬ про качество/редактора | зеркал архитектуры, но роадмап = продакшн, не верность | diff --git a/docs/research/30-arhitektura-otvet.md b/docs/research/30-arhitektura-otvet.md index 60961cab..42949782 100644 --- a/docs/research/30-arhitektura-otvet.md +++ b/docs/research/30-arhitektura-otvet.md @@ -1,8 +1,62 @@ # research/30 — Ответ на два вопроса владельца: оптимальна ли связка и что даёт качество на длине -> **⟶ СТАТУС (проставлен 05.09): ФАКТУРА, НЕ РАТИФИЦИРОВАНА.** ⛔ **Полная ревью-шапка «что доказано / -> что СНЯТО / что не проверено» ещё НЕ написана — долг оркестратора** (носитель — CURRENT-STATE в -> `docs/PROGRESS.md`). До неё утверждения отсюда — материал для решения, а не решение. +> **⟶ СТАТУС: ФАКТУРА, НЕ РАТИФИЦИРОВАНА.** ✅ **Ревью-шапка написана оркестратором №22 05.09 — +> долг по ЭТОМУ файлу закрыт** (у `research/29` и `29-codex` шапок по-прежнему НЕТ, долг там живой). +> Отдельные утверждения отсюда становятся ратифицированными только собственной D-нотой; статус файла +> в целом — материал для решения. +> +> ⚠ **ФОРМУЛИРОВКА, БЕЗ КОТОРОЙ ЗАМЕРЫ ТОПОЛОГИИ ЧИТАЮТСЯ НЕВЕРНО (§1.4):** **судья как СТАДИЯ +> ДВИЖКА не построен и не вызывался — 0 вызовов.** Судьи в проекте были и есть, но только в ПОЛИГОНЕ, +> на стенде. Всё, что здесь и в соседних отчётах написано «→ судья», описывает эксперимент, а не +> движок, и цитировать это как устройство конвейера НЕЛЬЗЯ. +> +> **ЧТО ДОКАЗАНО** — нашим замером, с носителем внутри файла: +> редактор правит **4.0–5.8% знаков**, касаясь ~40% предложений (§1.1) · факторный **A/F3 +2.50** и +> **A_law/F3 +2.81** по Холму (§1.2) · нога «канон-фиксер по флагам» **измерена и ПАЛА**, `C2/A_law +> −3.75` (§1.3) · `glm-5` РЕДАКТОРОМ неотличим от `deepseek-v4-pro`, ОДНОПРОХОДКОЙ — различимо хуже +> (§2.2) · медиана **96%** предложений финала встречается в трейсе размышления дословно (§2.2, самый +> сильный внутренний довод за топологию) · экономика **$127 / $20 / $62** и редактор = 90% денег +> связки (§2.4) · эхо-мина: связка **9 из 10** глав против **10/10** у однопроходки (§2.3) · +> **59 блокирующих претензий на 17 глав = 3.5 на главу** при планке ≤2, уложилась 1 глава из 17, при +> этом все 17 вычитчиков независимо сказали «читается как книга» (§3.1) · остаток, недоступный +> детерминизму, **1.1 на главу** — потолок механизации известен (§3.1) · глоссарный чекер +> **precision 0.067** (§3.2) · $0-гейты насыщены нулём: род 0/15, язык 0/15; на 11 цитатах вычитки +> **одно** срабатывание ⇒ «зелено по гейтам ⇒ приемлемо» МЁРТВО (§3.2) · подписанный канон 58/53 +> существует и **НЕ подключён**; при подписи банк даёт 99.3–100% (§3.3) · хвост майнера **325 записей +> невидимы постоянно**, кап инъекции течёт на 40–60% (§3.3). +> +> **ЧТО СНЯТО** — этим же файлом, НАШИМ замером, а не внешним источником (§1): +> «сильная модель переписывает весь текст» · «единственное внешнее число подтверждает связку» +> (наше сильнее, и с другой стороны есть МИНУСОВЫЕ внешние числа) · «K7 не мерен ни разу» · +> «связка = черновик → банк → редактор → гейты → судья» (судьи в движке нет) · **«редактор = 73% +> денег» — ФАНТОМ**, знаменателя два: 49.3% прогона и 81.3% внутри П1 · `research/15:149` +> «контролируемого A/B форматов глоссария не существует» — опровергнут внешним A/B (§3.3) · +> `research/22` «LinguaGacha явно НЕ в мульти-агент/редактор» — **эррата проставлена 05.09** (§4.1). +> +> ⚠ **ПОПРАВКА К САМОМУ ФАЙЛУ, найдена при написании этой шапки:** §3.5 требует снять формулировку +> «валидировано на русской художке» из `29-...-codex.md:368` — **якорь протух, и требование +> пере-нацелено**: по этому адресу сегодня другой текст, а реальный носитель (`:108`, строка F7) +> говорит «ЧАСТИЧНО валидировано на русском» и относится к ОТЛИЧЕНИЮ машинности от translationese, +> а не к качеству. ⇒ снимать там нечего; существенная же оговорка §3.5 верна и остаётся: +> правиловый детектор годится как дескриптор и $0-гейт грубого брака, **но не как гейт качества** +> (при книго-раздельных фолдах 0.92–0.94 падает до 59.44–84.44%, а на «хороший/плохой» проигрывает +> тупому классификатору). +> +> **ЧТО НЕ ПРОВЕРЕНО** — и потому не аргумент ни в одну сторону: +> **кросс-главный эффект банка — центрального узла связки — не замерен НИЧЕМ** (§2.5) · причина +> большой денежной доли редактора **не установлена** (§2.4) · оптимум связки **недоказуем +> материалом**: нужно n≈128–192, в корпусе после дедупа 60 уникальных единиц (§2.1) · внешний +> отрицательный сигнал **AIDA Agents** (NMT-черновик лучше LLM-черновика) — **честная открытая +> угроза**, своей контр-улики на прозе у нас НЕТ (§2.6) · планка владельца «≤2 претензии на главу» +> **не откалибрована ничем** — издательских норм в доках нет (§6) · кривой деградации консистентности +> на сотнях глав **нет ни у кого** (§6). +> +> ⚠⚠ **ГРАНИЦА, КОТОРАЯ БЬЁТ ПО ВСЕМ ЧИСЛАМ ВЫЧИТКИ ВЫШЕ (§4 п.5):** 17 глав — **сплошной блок +> 26–42, один кластер**. По нормам выборочной вычитки книжного доверия он **не даёт НИ ПРИ КАКОМ +> исходе**, и повтор по тем же главам после починки запрещён. ⇒ «3.5 на главу», «1 из 17» и +> «1.1 остатка» — правда об ЭТОМ блоке, а не о книге, и скоуп на них ставить нельзя. +> Это же основание независимо подпирает **эрратy 05.09-е** (число «шесть заголовков из семнадцати» +> не имеет носителя): даже найдись первоисточник, книжного вывода из одного кластера не следует. > **Полигон-сессия фазы Д, 03.09.2026.** Написано по прямому указанию владельца («давай это оформим > в ресёрч, чтоб не потерялось»). ⚠ `docs/research/` — зона ОРКЕСТРАТОРА; файл заведён полигоном по