diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 27311c04..48df9101 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,6 +1,6 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-09-04, голова D39.196 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и 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; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 102 (major 5), всего рядов 448 (пере-счёт `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-04, голова D39.197 — КУРС: движок и платформа до «работает и отдаёт результат», фронт ЗАМОРОЖЕН и 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; счёт бэклога — бюллетенем ниже, открытых рядов регистра платформы — 102 (major 5), всего рядов 448 (пере-счёт `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` и лечение новым прогоном). > ⛔⛔ **НО КНИГУ ЧЕРЕЗ 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 его рукой; утверждением о расхождении дерева он не является — арбитр этой пары именно здесь. diff --git a/docs/architecture/05-decisions-index.md b/docs/architecture/05-decisions-index.md index c005c6b0..80167791 100644 --- a/docs/architecture/05-decisions-index.md +++ b/docs/architecture/05-decisions-index.md @@ -1,4 +1,4 @@ -# Реестр D-нот — карта актуальности v2 (D1–D39.196; титул — носитель головы, бампать при каждом аппенде) +# Реестр D-нот — карта актуальности v2 (D1–D39.197; титул — носитель головы, бампать при каждом аппенде) > ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не > место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы, @@ -255,3 +255,4 @@ | D39.194 | 04.09 | **Платформенный пак «закрыть цикл» ПРИНЯТ и ЗАЛЕНДЖЕН `adf5e53`** (39 файлов; цикл замкнут живьём — платный EPUB через API, `epubcheck` 0/0/0/0). Строка бэклога 246 закрыта, её якорь мёртв ОТ ЛЕЧЕНИЯ. **Контрактный минор 0.10.0** описывает построенную дверь: `failure_code` — enum из четырёх кодов, `Export.url` — `uri-reference` с честным механизмом вместо несуществующей капабилити, третий адрес получает `downloadExport`, шестнадцатая причина — `wrong_language`. Ошибка ратификации «вхождений два» исправлена ДО правки: второе — `about:blank` по RFC 9457. Отзыв причины смертей стенда (не хост, а группа процессов сессии) и вышедшая из него `PD-447`: рецепт глушил коллизию портов ложной зеленью. **Три класса ложной зелени** — упавшая сборка · обрезанный вывод · ЭКВИВАЛЕНТНАЯ ПОСАДКА (класс оркестратора). Гейт чисел получил два носителя: титул реестра нот и живой счёт регистра. `classifierVersion` НЕ двигать | жив | ЖИВОЕ: SURVIVED не находка, пока посадка не показала, что меняет поведение; бамп версии должен смене, способной пере-вердиктить СУЩЕСТВУЮЩИЙ снапшот | лендинг контракт минор ложная-зелень мутации гейт | | D39.195 | 04.09 | **Движковый вайр-батч ПРИНЯТ и закрыт** (`b8154cd`·`c77c3ba`·`ecf063e`·`2e13cd1`; каталог мутаций 120→141, 136 красных, 0 переживших, 4 протухшие записи найдены новым пер-записным вердиктом). Строки заказа **210·113·46·134·140·184 ЗАКРЫТЫ**, 232 остаётся (чужой пак). ⚠ **Петля СВЁРНУТА решением владельца, а не замкнута доказательством** — цена названа: дважды подряд дефект вносил ФИКС предыдущего круга, круг 3 добавил ~2000 строк и не ревьюил из них ни одной (строка 266). Заведено 13 строк (256–268) формулировками зоны. `classifierVersion` не двигаем. **Три класса ложной зелени** (упавшая сборка · обрезанный вывод · ЭКВИВАЛЕНТНАЯ ПОСАДКА) и **граница инструмента с замером**: каталог доказывает поведение и молчит о том, что код утверждает о себе — 4 сверх-утверждения круга 3, ни одного не нашла посадка | жив | ЖИВОЕ: SURVIVED не находка, пока посадка не показала, что меняет поведение; ложный ПИН дороже пропущенной посадки; вопрос к комментарию — «что сломалось бы, если это правда» | приёмка движок петля мутации каталог | | D39.196 | 05.09 | **Форма заказа перевода — как у обычного харнесса (решение владельца).** Баланс аккаунта — ДЕНЬГАМИ на экране; ползунок потолка — деньгами; рядом ответ «хватает на полную книгу или нет»; второй ползунок объёмом — ГЛАВЫ когда книга распозналась, ЗНАКИ когда нет (о нераспознавании говорим ЯВНО); старт = холд с баланса. ⛔ **Запрет «денежных полей в UI нет вовсе» ОТОЗВАН ВЛАДЕЛЬЦЕМ** («я такого правила не ставил, надо от него избавляться») — форма: отзыв СОБСТВЕННОГО решения, текст записан в теле D39.84 как слово владельца. ⚠ Первая редакция этой строки утверждала «текста в журнале НЕТ» — ложное отрицание из сломанного грепа (`|` без `-E`), эррата в п.2 ноты. Область: баланс, потолок, холд — да; цены моделей и структура расходов — нет | жив | ЖИВОЕ: процент остатка честен как СИГНАЛ ТРЕВОГИ и бесполезен как ответ на вопрос «хватит ли на заказ» | заказ форма деньги-в-UI баланс холд | +| D39.197 | 05.09 | **Правка документации — изменение с ПОБОЧНЫМИ ЭФФЕКТАМИ и требует ревью исполнением как код** (замер зоны платформы). 11 агентов по ЧУЖОЙ работе → 11 пунктов; 8 по СВОЕЙ правке → ~20; ещё 2 файла → 6. Классы, ловимые только самопроверкой: замена лжи ПРОТИВОПОЛОЖНОЙ · пере-нацелена половина пары якорей · ссылки, сдвинутые собственным диффом · дата из текста коммита вместо `git log`. ⚠ **Утверждение о проверке живёт ровно до следующей правки** — гейты гонять ЦИКЛОМ. ⚠ Различитель красной батареи В ОБЕ СТОРОНЫ: списывать красноту на нагрузку без ИЗОЛИРОВАННОГО прогона — способ проспать настоящий баг (в тот же день один красный был средой, второй — `PD-448`) | жив | ЖИВОЕ: плотность находок на своей работе не ниже, чем на чужой | доки метод самопроверка гейты якоря | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 46b5ee0a..17c6d230 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.196 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`) +# Журнал решений оркестратора — контракт D1–D39.197 (живой файл: карта · эрраты · живые тела · голова 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+). @@ -2195,3 +2195,17 @@ CJK-цели · закон-блок редактора единый, марке **4. Что это меняет в согласованной схеме (строки 276–283).** Схема «заказ = объём, вердикт ДО клика, движку два потолка» устояла и не переоткрывается; ползунок денег — ТРЕТИЙ способ выразить тот же заказ, и вердикт «хватает на полную книгу» обязателен при любом из трёх. Развилка по разбору остаётся: главы — когда структура распознана, знаки — когда нет, и о нераспознавании говорим прямо. ⚠ «Страница» как отображение знаков — вопрос подписи, не механизма; размер страницы у разных рынков разный (D39.176 п.4), поэтому в контракт едут ЗНАКИ. **5. Не отменяется:** структура глав для ВЫДАЧИ (строка 283) — читатель не-CJK txt получает книгу одним полотном при любой единице заказа, гейт беты; ложная подпись «Знаков» у счётчика байтов файла (строка 282) — она же вход пути «не распозналось»; движковая половина (строка 277) первой — без неё в стену упирается любой путь. + +## D39.197 — ПРАВКА ДОКУМЕНТАЦИИ — ЭТО ИЗМЕНЕНИЕ С ПОБОЧНЫМИ ЭФФЕКТАМИ, и ей нужно ревью исполнением ровно как коду (замер зоны платформы, 04–05.09). ✅ + +**1. Замер, а не мнение.** Зона платформы отработала ревизию своей документации тремя кругами и посчитала находки по источнику: **одиннадцать агентов по ЧУЖОЙ работе (пинг оркестратора) дали 11 пунктов; восемь агентов по СВОЕЙ готовой правке — около двадцати; два по файлам, которые второй круг не покрыл, — ещё шесть.** ⇒ **Плотность находок на собственной работе не ниже, чем на чужой**, и «я это только что написал» — не основание пропустить проход. + +**2. Классы, которые нашлись только самопроверкой** (каждый — на её же правке): **замена одной лжи ПРОТИВОПОЛОЖНОЙ** (утверждение о cgroup юнита перевернули, и новая редакция тоже неверна) · **пере-нацелена ПОЛОВИНА пары якорей** · **три ссылки на номера строк, сдвинутые собственным диффом** · **указатель «отчёт последнего пака первый сверху» стал ложным от своих же вставок в верх файла** · **переименование раздела осиротило ряд, который звал его старым именем** · **дата взята из текста коммита, а не из `git log`** (ошибка работала ПРОТИВ собственного вывода — занижала возраст расхождения на две недели). + +**3. Норма, ради которой нота и написана: УТВЕРЖДЕНИЕ О ПРОВЕРКЕ ЖИВЁТ РОВНО ДО СЛЕДУЮЩЕЙ ПРАВКИ.** Зона сняла якоря по токену, убедилась, что цели верны, — и продолжила править ТЕ ЖЕ файлы; три якоря уехали снова. ⇒ Гейты гонять **циклом до чистоты**, а не одним проходом; «линтер был зелёный» без указания, ДО какой правки, — не факт о дереве. + +**4. Оркестратор воспроизвёл все три класса в тот же день, и это делает норму общей, а не зонной.** Поправка про ложную атрибуцию доехала до тела ноты и НЕ доехала до строки реестра — один носитель из двух. Заголовок строки бэклога перевернул её собственное тело («считает байты» против «считает руны потока», что для UTF-8 txt И ЕСТЬ знаки). Записанный вывод команды не воспроизводился («ноль хитов» против трёх). Пять якорей уехали от собственного диффа, два из них — в замороженной чужой зоне. + +**5. Различитель для красной батареи, купленный тем же днём и обязательный к применению В ОБЕ СТОРОНЫ.** Красный тест, мерящий ВРЕМЯ, на загруженной машине — не результат: `load average 42–48` на восьми ядрах дал падение теста, который ошибку ОБНАРУЖИЛ, но не уложился в срок; изолированно 3/3. **Но в тот же день второй красный оказался НАСТОЯЩИМ дефектом** (`PD-448`). Отличило их не рассуждение, а **изолированный прогон**: первый изолированно зелен, второй краснел 2 из 2 в пакете. ⇒ **Списывать красноту на нагрузку без изолированного прогона — способ проспать настоящий баг.** + +**6. Практическое следствие для промтов.** Строка «правка документации требует ревью исполнением» входит в промты зон наравне с мандатом самопроверки кода; «утверждение о проверке живёт до следующей правки» — туда же, с требованием гонять гейты циклом.