From a5ef47cd1147eed74ec4a77105ec7d7927ee9c6c Mon Sep 17 00:00:00 2001 From: heaven Date: Sun, 6 Sep 2026 02:10:41 +0300 Subject: [PATCH] Re-point the zone journal anchor onto the re-cut comment that moved again --- platform/docs/platform-PROGRESS.md | 39 +++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index 1ceb5fbe..b5eed161 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -36,9 +36,19 @@ волна по всей книге больше не фанится: `volumeScope.allows` гейтит и draft-волну (`leader`-карта «flattened for the draft wave», `backend/internal/pipeline/volume.go`). ⇒ **посылка стала истинной, а формула — нужной:** непочерновленный остаток заказа это реальная работа прогона, и удаление члена -сделало бы знаменатель полосы неверным по-новому. Снята ПРИЧИНА дефекта, носитель оставлен. Полоса -при этом осталась в ГЛАВАХ — канон §Progress говорит «in chapters», перевод её в юниты это отдельная -контрактная семантика, которой в составе минора (строка 279) нет. +сделало бы знаменатель полосы неверным по-новому. Снята ПРИЧИНА дефекта, носитель оставлен. + +⛔ **ИСПРАВЛЕНО ПЯТЫМ ЗАХОДОМ 06.09, И ЭТО БЫЛА МОЯ ЛОЖЬ О СВОЁМ ЖЕ КОДЕ.** Здесь стояло «полоса при +этом осталась в ГЛАВАХ ⇒ перевод её в юниты это отдельная семантика, которой в составе минора нет». +**Неверно.** `runDone`/`runTotal` (`internal/pgstore/readmodel.go:632,636`) первой же ветвью — `when +r.ordered_units is not null then` — считают полосу в ЮНИТАХ, и это намеренно и пиньнуто +(`runs.TestACharacterOrdersBarIsCountedInWhatItActuallyBought`, страж обратной стороны — +`TestAChapterOrderKeepsTheBarItAlwaysHad`). Абзац остался от редакции ДО того, как юнитовая ветка была +добавлена, и не был пере-читан. **Цена лжи не нулевая:** на этой фразе состав минора был сдан без +третьего случая `Progress`, канон 0.11.0 залендился (`docs/architecture/14-api-contract/openapi.yaml` +§`Progress`, строки 1449, 1479, 1483) со словами «in chapters» / «Chapters of this run's own work», — +и сборка сегодня шлёт по этому полю ЮНИТЫ. Это **ложь на проводе**, заведённая не кодом, а отчётом. +Позиция внесена в состав минора ниже; оркестратору написано отдельно. ### РЕШЕНИЯ, КОТОРЫЕ ПРОМТ ОСТАВИЛ ЗОНЕ, — с доводами @@ -391,8 +401,25 @@ blocked: Blocked | null клиент обязан деградировать на незнакомом слове, а не отказывать. `covers_none` при `chapters_left: 0` это ЗАКОНЧЕННАЯ книга, при положительном — счёт, не покрывающий следующую главу. -**`Run`** — `ceiling_chapters` → `ordered_chapters`; добавлены `delivered_chapters: integer` и -`term_consistency_funded: boolean`. +**`Run`** — `ceiling_chapters` → `ordered_chapters`; добавлены `delivered_chapters: integer|null` и +`term_consistency_funded: boolean`. ⚠ `null` у первого — не «ноль»: заказ, выраженный ЗНАКАМИ, +останавливается ВНУТРИ главы и не закрывает ни одной. **Залендено оркестратором в 0.11.0, сверено +06.09** (`openapi.yaml:1827-1835`). + +⛔ **`Progress` — ТРЕТИЙ СЛУЧАЙ, КОТОРОГО В СОСТАВЕ НЕ БЫЛО И В КАНОНЕ 0.11.0 НЕТ. Внесено пятым +заходом 06.09; до него состав нёс мою ложную фразу «полоса осталась в главах».** Канон говорит «in +chapters» в шапке схемы и в обоих счётчиках (`openapi.yaml:1449,1479,1483). Сборка для заказа, +выраженного ЗНАКАМИ, шлёт по `done`/`total` **ЮНИТЫ** (`readmodel.go:632,636`, ветвь +`when r.ordered_units is not null`; пин `runs.TestACharacterOrdersBarIsCountedInWhatItActuallyBought`). +⇒ клиент, читающий канон, нарисует «3 из 10 глав» там, где это 3 из 10 юнитов. Требуется абзац той же +формы, что уже стоит у РЕ-ПРОХОДА («declared shape, not chapters — do not render it as “0 of 1 +chapters”»), плюс **имя различителя**: `delivered_chapters: null` ⇒ полоса юнитовая; +`delivered_chapters: 0` при `ordered_chapters: 0` ⇒ ре-проход; `ordered_chapters > 0` ⇒ главы. Сегодня +этот различитель существует на проводе, но нигде не назван, и клиент обязан его УГАДАТЬ. +⚠ И само слово «юнит» на этой поверхности не определено: наружу оно не выходило никогда, а `source_chars` +меряет тот же заказ ЗНАКАМИ. Либо канон вводит единицу, либо счётчики этого случая переводятся в знаки — +это решение оркестратора, не зоны; зона называет цену обоих: во втором случае двигается `unitDone`/ +`unitTotal` и их пины. **`Book`** — добавлены `character_count_exact: boolean` и `structure: "declared"|"detected"|"none"|null`. ⚠ Семантика `character_count: null` НЕ ТРОНУТА («книга ещё грузится») — форма признака ратифицирована @@ -4203,7 +4230,7 @@ mutation-catch (спутать пары «числитель×база»); ко **⛔ ПИНГ ОРКЕСТРАТОРА №19 — 23.08, ЗОНЕ ПЛАТФОРМЫ.** ⚠ Его собственная шапка звала находки «тремя», а нумеровала ЧЕТЫРЕ — считать по нумерации. Живых из четырёх ДВЕ: находка 1 ниже дословно, находка 4 — строкой регистра. Две закрыты паком P9 и проверяются грепом, а не памятью: блокер провайдерских ключей (строка **211** единого бэклога) — ключи едут аргументом `--keys-file`, греп `TM_PLATFORM_ENGINE_KEYS_PATH`; дубль движковой конвенции пути (строка **213**) — `runner.projectDB` снесён, путь берётся из `artifacts.bank_export` манифеста. Находка 4 (мёртвое поле `ingest.StatusReport.UnsignedBankTerms`) жива и несёт свой якорь строкой `PD-396` (греп `UnsignedBankTerms` в регистре и в `platform/internal/ingest/resync.go`). 1. **Пере-нарезка книги сносит ВСЕ решения юнитов и пересчитывает прогресс из пустоты.** - `internal/pgstore/readmodel.go:153`=`a re-cut drops the resolutions of the previous cut` — + `internal/pgstore/readmodel.go:177`=`a re-cut drops the resolutions of the previous cut` — это не догадка, там собственный комментарий кода. Строку в ваш регистр я не заводил: решать вам, намеренная это семантика пере-разреза или дефект, и что делать со счётчиками, которые после этого показывают ноль сделанного на книге, где работа была.