Record a duration off by twentyfold, a sum that did not add up, and a rename that never happened, all in notes about earlier errors

This commit is contained in:
heaven 2026-09-06 07:53:51 +03:00
parent 41861f9181
commit 8f69794444

View file

@ -39,6 +39,7 @@
> далёк в обоих случаях, вывод приёмки не меняется, но в каноне стоит число из гейта, а не из грепа.
> ⚠ **Эррата 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).
> ⚠⚠ **Эррата 06.09-ж (эррата 06.09-г · `D39.212` п.6 · эррата 28.08-и) — ТРИ НЕПРАВДЫ, ВЪЕХАВШИЕ В КАНОН ТЕМ ЖЕ ДВИЖЕНИЕМ, КОТОРЫМ Я ИСПРАВЛЯЛ ПРЕДЫДУЩИЕ. Все три — в текстах ПРО СОБСТВЕННЫЕ ОШИБКИ; нашёл Fable 5 сверкой с деревом.** **(а) «Расщепление стояло ЧЕТВЕРО СУТОК» (эррата 06.09-г) — неверно: четыре с половиной ЧАСА.** `3e40c36` — 06.09 **03:00**, `1cae0ac` — 06.09 **07:30**. Полная история границы (`git log -L`, замер Fable, пере-проверен мной по датам коммитов): `f0d8fed` 08.08 02:26 ввёл `minimum: 1` ещё БЕЗ прозы о нуле · `278ffd8` 06.09 01:40 поставил `0` · `3e40c36` 03:00 вернул `1` · `1cae0ac` 07:30 вернул `0`. **Ни один отрезок не равен четырём суткам.** ⚠ Суть эрраты 06.09-г от этого не меняется — расщепление было, и написано оно одним заходом, — но ДЛИТЕЛЬНОСТЬ я не мерил, а написал по ощущению, и ощущение соврало в двадцать раз. **(б) `D39.212` п.6: «семь флагов, ШЕСТЬ ложных, настоящих два» — 6+2≠7; ложных ПЯТЬ.** Зонный журнал называет их поимённо (`target` · `RunRequest.chapters` · `.characters` · `character_count_exact` · `kind`), и пять плюс два дают семь. Число «шесть» я взял из ПИСЬМА зоны, не пересчитав, — при том что её собственный журнал держит верное. **Ровно класс эрраты 06.09-д: величина, перенесённая из чужого текста без пере-счёта, — и во второй раз за смену подряд.** ⚠ И арифметика была видна на месте: сумма не сходилась с итогом в той же фразе. **(в) «Код переехал вместе с ПЕРЕИМЕНОВАНИЕМ файла» (аннотация «испр. 06.09» внутри эрраты 28.08-и) — переименования не было.** `backend/internal/pipeline/seeding.go` ЖИВ и сегодня (128 строк); `bankmaterialize.go` **ДОБАВЛЕН** `6ec9f8a` 29.08, и в него код ВЫДЕЛЕН, а не переименован вместе с файлом. Верная причина, по которой линт не мог угадать адрес, — другая и проще: якорь был написан ГОЛЫМ именем, а голое имя отсеивается на `docs/scripts/counts.py:585`=`"/" not in rel` ДО всякой проверки файла. Та же ложь стояла в строке 306 бэклога и там исправлена. ⚠ **Урок общий для всех трёх: текст про собственную ошибку пишется в тот момент, когда автор уверен, что уж ЭТО он знает, — и потому проверяется хуже обычного.** Ни одну из трёх не поймал бы ни один гейт: все три проза, и все три проверяемы одной командой, которую я не набрал.
> ⚠ **Эррата 06.09-е (D39.211 п.1) — ТОТ ЖЕ НЕДОСЧЁТ ПАКЕТОВ УНАСЛЕДОВАН РАТИФИЦИРОВАННЫМ АКТОМ, А ТОЧНЫЙ РАЗБОР УЖЕ НЕВОССТАНОВИМ.** Пункт 1 цитирует числа зоны v13: «`MAKE-EXIT=2`, **21 пакет**, 20 ok». Пакетов у платформы **ДВАДЦАТЬ** — пере-считано 06.09 чистым `go test ./... -race -count=1 -v`: 20 различных, ни одного без тестов; список зона предъявила поимённо. ⇒ «21» здесь — то же, что в эррате 06.09-д: число СТРОК вывода, а не пакетов. ⛔ **А вот раскладку «20 ok» при `FAIL 1` восстановить уже нечем: лог v13 удалён самим прибором** (`make check` пишет в фиксированный `platform/.check.log` и стирает его — строка 310). Наиболее вероятное чтение — 19 прошедших пакетов, один упавший (`gates`, ратифицированный гейт версии) и одна строка-дубль, — но это РЕКОНСТРУКЦИЯ, и я помечаю её как реконструкцию, а не как замер. ⭐ **Это и есть цена дефекта строки 310, предъявленная не рассуждением, а случаем: прибор стёр улику под ратифицированным актом, и число в каноне теперь неисправимо — его можно только пометить.** ⚠ Прочие числа пункта 1 под сомнение НЕ ставятся и подтверждены косвенно: «тестов 850» той же строки согласуется с сегодняшними **851** после ровно одного нового пина (`runs.TestABookWithNothingLeftIsRefusedRatherThanSoldAsAZeroChapterRun`). ⚠ И отдельно: «21 пакет из 21» в `D39.170`НЕ ошибка и не трогается, там речь о батарее ДВИЖКА, у которого свой набор пакетов; проверено прежде, чем править.
> ⚠⚠ **Эррата 06.09-д (D39.212 п.8) — ЧИСЛА ПРИЁМКИ, КОТОРЫЕ Я НАЗВАЛ СВОИМИ, СНЯТЫ ПРИБОРОМ С ДОКАЗАННЫМ ДЕФЕКТОМ, И ДВА ИЗ НИХ НЕВЕРНЫ.** **(а) Пакетов ДВАДЦАТЬ, а не 21.** 21 — это число строк `^ok`, среди которых `internal/money` напечатан ДВАЖДЫ; различных пакетов двадцать. ⭐ **Платформенная зона пришла к тому же числу ДРУГИМ путём** (у неё лишней была голая итоговая строка `FAIL` рядом со строкой упавшего ПАКЕТА) и поймала себя сама. То есть **одна и та же ошибка — величина, снятая с вывода прибора без разбора, что прибор печатает, — поймала обе стороны НЕЗАВИСИМО, в один час, на одном выводе**; это сильнее любого из двух наблюдений по отдельности. **(б) Скипов ДЕВЯТЬ, а не семь, и семь были не ошибкой счёта, а ложной уликой.** Число 7 снято из `make check`, чей лог живёт по фиксированному пути `platform/.check.log` и затирается параллельным прогоном (строка 310, дефект найден зоной в тот же час). ⛔ **Зона меня об этом предупредила, и я возразил «у меня обошлось — в моём логе нет ни одного `No such file`». Возражение было слабым: отсутствие СИМПТОМА не есть доказательство целости улики**, — и чистый пере-прогон это подтвердил. Строка 310 укусила ровно того, кто её завёл, в тот же час, что и завёл. **(в) Верные числа, снятые `go test ./... -race -count=1 -v` в файл ВНЕ каталога зоны, куда чужой прогон не дотянется:** `GO-EXIT=0` · **20 пакетов ok, ни одного без тестов** · верхнеуровневых тестов **851: PASS 842 · FAIL 0 · SKIP 9** · с подтестами PASS 1094 · `ALARM PD-count: 12 (baseline 12)`. ⭐ **Сошлось с зоной с двух сторон:** у неё на тех же **851** — PASS 846 · SKIP 5, и разница ровно ЧЕТЫРЕ теста — это четыре гейта стенда, которых я не поднял (из пяти у меня был только `TM_PLATFORM_TEST_DSN`). Общее число совпало, расхождение объяснено и названо. **(г) Якорь п.6 был наведён на НЕУНИКАЛЬНЫЙ токен** и пере-наведён (`2ed1c0b`): `Structure *string` встречается в `v0.go` ДВАЖДЫ — `:216` (`wireBook`) и `:308` (`wireOrderOptions`), — так что скрипт мог сесть на чужое поле, а линт бы позеленел. Теперь `v0.go:306-308`=`null when no manifest`, токен по файлу единственный. ⇒ **уточнение к п.7 той же ноты: токен надёжнее номера строки только когда он УНИКАЛЕН. Неуникальный токен ХУЖЕ номера — номер врёт громко и ловится линтом, а он врёт молча и линт зеленит.**
> ⚠⚠ **Эррата 06.09-г (эррата 06.09-в, клаузула (а)) — `minimum: 1` НАПИСАН НЕ ПО НЕЗНАНИЮ: ТЕМ ЖЕ ДВИЖЕНИЕМ Я СНЁС УЖЕ СТОЯВШИЙ ВЕРНЫЙ ОТВЕТ.** Эррата 06.09-в числит его ложью «второго захода» — это мягче факта. Дифф `3e40c36` (канон `0.12.0`, мой): в поле стояло `type: integer` + **`minimum: 0`** и абзац «`0` is legal and is not «nothing was ordered»: a re-pass buys no chapters and reports `0` here … A client that treats this as at-least-one will reject valid answers». **Коммит заменил `minimum: 0` на `minimum: 1` и в ТОМ ЖЕ заходе пере-написал абзац в сегодняшний «⚠ `0` is legal and means a re-pass … A client that treats this field as at-least-one will reject valid answers».** ⇒ знание не потеряно, а **РАСЩЕПЛЕНО: половина документа, которую читает человек, сохранила правду; половина, которую читает генератор клиента, получила ложь** — и они стояли в шести строках друг от друга четверо суток. ⛔ Класс не «утверждение без прогона», а **регрессия против собственного канона**: неверное утверждение спорит с кодом и рано или поздно ловится, а снос верной гарантии уничтожает уже оплаченное знание — ровно то, о чём предупреждает шапка `CLAUDE.md`. ⚠ И это ЕЩЁ ОДНО свидетельство строки 309: гейт версии сверял числа, а документ противоречил сам себе внутри одного поля. ⭐ **Следствие для дофикса, снимающее с зоны половину работы:** сочинять нечего, верный ответ лежит в `git show 3e40c36^:docs/architecture/14-api-contract/openapi.yaml`; дело зоны — сверить его со своим пином и вернуть границу. ⚠ Соседний `minimum: 1` у `ordered_units` ВЕРЕН и не трогается: заказа на ноль юнитов не существует, а «заказан не юнитами» уже несёт `null`.