diff --git a/platform/docs/platform-PROGRESS.md b/platform/docs/platform-PROGRESS.md index 1286ddd1..1ceb5fbe 100644 --- a/platform/docs/platform-PROGRESS.md +++ b/platform/docs/platform-PROGRESS.md @@ -143,6 +143,32 @@ «ожидаемо $0.00, зарезервируем $2.07»; арифметика холда не была ограничена сверху и на абсурдной проекции переполняла int64 в правдоподобное МАЛОЕ число. +### ⛔ ЧЕТВЁРТЫЙ ЗАХОД — ПРОВЕРКА СОБСТВЕННЫХ УТВЕРЖДЕНИЙ ОТЧЁТА, а не кода + +Заход сделан по прямому вопросу владельца «нет ли чего, что ты умолчала или поленилась допроверить». +Проверялись не находки ревьюеров, а МОИ СОБСТВЕННЫЕ фразы в этом отчёте — те, где стоит утверждение, +но не стоит команда. + +1. ⛔ **Объяснение чистого `sqlc diff` было ДОГАДКОЙ и оказалось неверным** — см. секцию «Батарея». + Вывод («пере-генерация не нужна») верен, причина — нет, и ложная причина скрывала живой риск. +2. ⛔ **`Down`-путь миграции НЕ был пере-проверен** после двух последних правок схемы (колонки + юнитовой полосы добавлены, колонки цены главы сняты). Пере-снято на отдельной базе: `up` даёт 4/4 + новых колонки `runs` и 0 колонок цены у `chapters`, `down` и повторный `up` чисты. +3. ⛔ **`source_chars` писался ТОЛЬКО когда книга оценена** — то есть манифест, честно назвавший + текст и споткнувшийся на ДЕНЕЖНОМ ключе, лишал экран честного числа знаков, и «Знаков» падало + обратно на приближение интейка (для EPUB — руны ZIP-архива). Два независимых факта были связаны + одним условием. Развязано; пин `TestTheCharacterCountSurvivesAPriceThisBuildCouldNotRead`. + ⚠ Комментарий миграции при этом обещал «null пока манифест не прочитан» — то есть код и + комментарий расходились, и заметил это не гейт. +4. ⛔ **Починка «доставка ЗА границей заказа не гасит работу внутри неё» была без пина** — я объявила + её сделанной, имея только код. Заведён `TestDeliveryBeyondTheOrderDoesNotCancelWorkOwedInsideIt`. +5. ⛔ **Таблица named-артефакта несла ВОСЕМЬ строк, а посадок девять** — девятая была описана прозой + в соседней секции. Читающий артефакт по его собственной таблице видел восемь. Строка добавлена. + +⚠ **Что этот заход говорит о предыдущих:** четыре из пяти — не дефекты кода, а дефекты МОИХ +УТВЕРЖДЕНИЙ О КОДЕ, и ни один гейт их поймать не мог по построению. Это тот же класс, который +`D39.202` п.9 называет главным: сторожат поведение и форму, а не то, что код и отчёт о себе ГОВОРЯТ. + ### ⛔ ТРЕТИЙ КРУГ — ДВЕ ЛИНЗЫ ПРИЁМКИ ОРКЕСТРАТОРА, и они нашли ЦЕНТРАЛЬНОЕ **Пак научился читать у движка цену, но не научился считать в его ЕДИНИЦАХ.** Заказ, холд и @@ -265,6 +291,12 @@ NULLABLE денежных колонок (сегодня не задета: ру | 6 | `internal/pgstore/runs.go:1505` · перезапущенный прогон респавнится без заказа | `TestTheVolumeAllowanceIsWhatIsLeftOfTheOrderAtEverySpawn` | | 7 | `internal/runs/spawn.go:329` · неразрешимый заказ спавнится как «вся книга» | `TestAnOrderThatNoLongerNamesABoundaryRefusesToSpawn` | | 8 | `internal/runs/runs.go:373` · неоценённая книга продаётся вместо отказа | `TestAnUnpricedBookIsRefusedRatherThanSoldAtAGuess` | +| 9 | `internal/runs/spawn.go` · ЕДИНИЦА ИЗМЕРЕНИЯ: `o.Units - o.Delivered` → `l.OrderedChapters - o.Delivered` | `TestTheVolumeAllowanceCountsUnitsAndNotChapters` | + +⚠ **Посадка №9 добавлена ПОСЛЕ приёмки и только вместе с фикстурой `multiUnitBook`:** до неё во всей +зоне не было главы больше чем из одного юнита, поэтому подмена единицы измерения проходила батарею +зелёной, и восемь посадок эту ось не щупали вовсе. Порядок был именно такой — сначала фикстура, потом +посадка, потом лечение. ⚠ Посадка №1 красит 34 теста — широко, потому что тестовый хелпер `fixtureHold` считает холд НЕЗАВИСИМО от продакшн-кода, и расхождение видно всюду, где утверждается сумма. Это обнаружение, а не @@ -430,8 +462,14 @@ blocked: Blocked | null make check → MAKE-EXIT=2 golangci-lint 2.12.2: 0 issues · gofmt чист · go vet чист - sqlc diff чист (миграция 00033 пере-генерации не потребовала: новые колонки в - таблицах, для которых sqlc не держит запросов) + sqlc diff чист. ⚠ ИСПР.: первая редакция объясняла это тем, что новые колонки лежат + «в таблицах, для которых sqlc не держит запросов» — ЭТО НЕВЕРНО и было догадкой, а + не проверкой: `queries/credits.sql` и `queries/exports.sql` читают `books`, + `chapters` и `runs`. Верная причина: НИ ОДИН из этих запросов не выбирает `*` и не + называет новых колонок, поэтому сгенерированный код не двигается (проверено грепом + по `*.sql.go` — вхождений нуль). ⚠ И следствие, которое ложная причина скрывала: + `books` ЛЕЖИТ в мире sqlc, значит риск с NULLABLE денежными колонками (находка + ревью) — не теоретический, а отложенный до первого запроса, который их выберет. 19 пакетов ok go test ./... -RACE -count=1 -v: RUN 845 · PASS 839 · SKIP 5 · FAIL 1 (пере-снято ПОСЛЕ дофикса по двум линзам приёмки — числа выше него недействительны) @@ -4165,7 +4203,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:144`=`a re-cut drops the resolutions of the previous cut` — + `internal/pgstore/readmodel.go:153`=`a re-cut drops the resolutions of the previous cut` — это не догадка, там собственный комментарий кода. Строку в ваш регистр я не заводил: решать вам, намеренная это семантика пере-разреза или дефект, и что делать со счётчиками, которые после этого показывают ноль сделанного на книге, где работа была.