Give the announced version the response it already returns, retire the chapter scale from the money path, and correct an act that claimed a change it never made

This commit is contained in:
heaven 2026-09-06 01:04:27 +03:00
parent 6ace7e1be6
commit bd9a856b3e
3 changed files with 13 additions and 3 deletions

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-а (D39.208 п.7) — НОТА УТВЕРЖДАЛА ТО, ЧЕГО ФАЙЛ НЕ ДЕРЖАЛ.** Пункт 7 писал, что «`getRunOptions` приобрёл 409, **внесён в состав минора**». В каноне у операции стояли только `200/401/404`: я бампнул `info.version` до 0.11.0 и правку ответа НЕ внёс, то есть версия объявляла поведение, которого канон не описывал. **Класс строки 299 ВНУТРИ D-ноты** — нашёл коллега-Fable сверкой ноты с файлом. Исправлено 06.09: `'409'` с описанием причины `not_priced` и прямой оговоркой, что операция ВПЕРВЫЕ научилась отказывать, а клиент по 0.10.0 встретит код, которого нет в его заглушках. Тем же заходом сняты зеркала эры шкалы в `15-money-path.md` (`CeilingBounds` ретирован, шкалы в главах больше нет — абзацы оставлены историей под баннером). ⚠ Урок в свою сторону: **акт приёмки — тоже носитель, и он врёт ровно так же, как код**; «внесено в состав минора» я написал о собственном намерении, а не о состоянии файла.
> ⚠ **Эррата 05.09-к (D39.200, разбор «`git add docs/` унёс чужой отчёт») — ТА ЖЕ ЛОВУШКА СРАБОТАЛА ВТОРОЙ РАЗ ЗА СМЕНУ, И ПЕРВАЯ ЗАПИСЬ ЕЁ НЕ ПРЕДОТВРАТИЛА.** Утром корень был записан верно («`docs/PROGRESS.md` — единственный файл зоны `docs/`, в который пишут чужие зоны») и вывод сделан правильный (коммитить pathspec-формой). Вечером коммит `e8ec901` — строка бэклога 302, pathspec-форма, индекс чист — **всё равно унёс секцию отчёта бэкенд-зоны** (пак структуры глав), потому что **pathspec берёт рабочее состояние ФАЙЛА ЦЕЛИКОМ и от чужого ВНУТРИ файла не защищает вовсе**. Содержимое цело, потеряна атрибуция; историю не переписывал, зона уведомлена, нашла это сама. ⇒ **Первая запись назвала ФАКТ и не назвала ДЕЙСТВИЯ, и потому не сработала.** Исполнимый шаг внесён в ролевой промт оркестратора: перед каждым коммитом `docs/PROGRESS.md` смотреть `git diff -- docs/PROGRESS.md` и опознавать чужие секции. ⚠ Урок шире случая: **знание, записанное как факт, а не как шаг, не мешает повторению** — и это тот же класс, что `D39.202` п.3-бис (гейт умирает не отключением, а вытеснением из привычки).
> ⚠ **Эррата 05.09-и (D39.207 п.6, «каталог мутаций целиком не перегонял») — ДЫРА ЗАКРЫТА ПРОГОНОМ.** Пункт честно записывал, что верификатор проверил СОСТАВ каталога статически и тем повторил дыру приёмки, а не закрыл её. Прогон состоялся: **201/201 записей получили вердикт, каждая РОВНО ОДИН раз** (сверено программно по id) — **197 RED · 4 `survives` · 0 SURVIVED · 0 `RED!` · 0 NOTHING · 0 ROTTED · 0 неожиданных исходов**, baseline зелен во всех десяти пакетах в каждом вызове. ⭐ **Множество фактически выживших ТОЧНО РАВНО множеству записанных `expect: survives`** — сверено как МНОЖЕСТВА: `G-byte-gate`, `WB62-innocent-const-must-not-be-accused`, `MS-reserve-under-the-gate`, `MS-reservation-released-on-marshal-failure`. ⇒ «197 RED» из `D39.206` §2 больше не держится на счёте записей в JSON. ⚠ **ФОРМА: это СКЛЕЙКА ВОСЬМИ вызовов (2 ч 29 мин против калиброванных ~50), шесть убиты нехваткой памяти; ОДНИМ ПРОГОНОМ НЕ ЯВЛЯЕТСЯ.** Законность предъявлена механически: покрытие 201/201 без пересечений, дерево между вызовами — `diff -r --brief`, побайтно идентично, 334 файла, проверено ПЯТЬ раз. ⚠ В двух убитых вызовах тул НЕ напечатал `restored on terminated`, и чистота там держится на побайтном сравнении, а не на самоотчёте инструмента. ⚠ Флагов было ТРИ варианта (`-p` снижался дважды), а не два, как я полагал, — объявил верификатор сам; `-parallel`/`GOMAXPROCS` не трогались, семантика тестов одна. ⚠ И моя оговорка «неожиданный исход перегнать под флагами первого вызова» **исполнена ВХОЛОСТУЮ**: неожиданных исходов не было ни одного, то есть правило осталось НЕИСПОЛЬЗОВАННЫМ, а не соблюдённым — формулировка верификатора, и она точнее моей. ⚠ Форма улики пере-проверена по объединённому корпусу логов: строк `RED`, не называющих ни одного упавшего теста, — **0** из 197; маркеров `INCONCLUSIVE`/`signal: killed`/`out of memory`**0**. Нехватка памяти не превратила ни одной зелени в ложную красноту.
> ⚠ **Эррата 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.

View file

@ -580,6 +580,15 @@ paths:
schema: { $ref: '#/components/schemas/RunOptions' }
'401': { $ref: '#/components/responses/Unauthorized' }
'404': { $ref: '#/components/responses/NotFound' }
'409':
$ref: '#/components/responses/Conflict'
description: |
The book carries no price projection yet, so no options can be quoted — `cause: not_priced`.
⚠ **Added in 0.11.0, and it makes this operation able to REFUSE for the first time.**
A GET that could not fail before now can: a client generated against 0.10.0 meets a code
its stubs do not carry. The refusal is not an error of the request — it says the engine
has not published this book's projection, and the reading surface owes it.
/books/{bookId}/runs:
parameters:

View file

@ -42,7 +42,7 @@
## 4. Фронт (зона `frontend/`)
Максимум шкалы — `Balance` КАК ЕСТЬ (D39.115 п.2а); `Reserved` — справочная величина, `ReadAccount` отдаёт обе раздельно (`platform/internal/pgstore/credits.go`, греп `func (s *Store) ReadAccount(`). Шкала — в ГЛАВАХ: `CeilingBounds` — «in CHAPTERS. The conversion to money lives on the platform and is not exposed here in any form» (`docs/architecture/14-api-contract/openapi.yaml`, греп `The conversion to money lives on the platform`); клиенту запрещено клампить повторно; `max_chapters: 0` = состояние «исчерпано» вместо шкалы. ⚠ **Испр. 05.09: запрет отозван (D39.196), но СЕГОДНЯШНИЙ `Usage` действительно без сумм — поле приезжает паком формы заказа, схема впереди кода не едет.** Ниже — что сервится сейчас: `Usage` несёт ТРИ обязательных члена — `state` (ok/low/exhausted), `remaining_percent` и `halt_reason` — и ни окон, ни сумм (`docs/architecture/14-api-contract/openapi.yaml`, греп `required: [state, remaining_percent, halt_reason]`); продуктовый носитель — ПТ-35 (`docs/product-requirements.md:63`=`ПТ-35 | Лимиты «как в Claude Code»`): стоп по потолку = `paused` + оповещение «перевод остановлен: лимиты исчерпаны»; остаток — страница лимитов (S4+), слово владельца В-3. ⚠ **К-13 ЗАКРЫТ** (D39.132 п.2а: `null` на проводе; пере-суждён ревью 28 §4 №9 и НЕ опрокинут — с уходом дневной оси различие «свой потолок / нет кредита» перестало быть продуктовым).
Максимум шкалы — `Balance` КАК ЕСТЬ (D39.115 п.2а); `Reserved` — справочная величина, `ReadAccount` отдаёт обе раздельно (`platform/internal/pgstore/credits.go`, греп `func (s *Store) ReadAccount(`). ⚠⚠ **ЭРРАТА 06.09 — ШКАЛЫ В ГЛАВАХ БОЛЬШЕ НЕТ.** Лендинг формы заказа похоронил `DefaultPerChapter`, `Scale` и потолок-в-главах целиком: объём заказывается тремя формами (вся книга · до главы N · знаками), холд считается от ПРОЕКЦИИ ЦЕНЫ ДВИЖКА (`k × ожидаемое + шаг [+ книжный бонд]`), а заказ хранится ИДЕНТИФИКАТОРОМ главы, не порядковым номером. Абзац ниже оставлен как история эры шкалы и НЕ описывает сегодняшний провод. Тело — `D39.208`. Прежняя редакция: Шкала — в ГЛАВАХ: `CeilingBounds` — «in CHAPTERS. The conversion to money lives on the platform and is not exposed here in any form» (`docs/architecture/14-api-contract/openapi.yaml`, греп `The conversion to money lives on the platform`); клиенту запрещено клампить повторно; `max_chapters: 0` = состояние «исчерпано» вместо шкалы. ⚠ **Испр. 05.09: запрет отозван (D39.196), но СЕГОДНЯШНИЙ `Usage` действительно без сумм — поле приезжает паком формы заказа, схема впереди кода не едет.** Ниже — что сервится сейчас: `Usage` несёт ТРИ обязательных члена — `state` (ok/low/exhausted), `remaining_percent` и `halt_reason` — и ни окон, ни сумм (`docs/architecture/14-api-contract/openapi.yaml`, греп `required: [state, remaining_percent, halt_reason]`); продуктовый носитель — ПТ-35 (`docs/product-requirements.md:63`=`ПТ-35 | Лимиты «как в Claude Code»`): стоп по потолку = `paused` + оповещение «перевод остановлен: лимиты исчерпаны»; остаток — страница лимитов (S4+), слово владельца В-3. ⚠ **К-13 ЗАКРЫТ** (D39.132 п.2а: `null` на проводе; пере-суждён ревью 28 §4 №9 и НЕ опрокинут — с уходом дневной оси различие «свой потолок / нет кредита» перестало быть продуктовым).
## 5. Открытые дыры и их носители
@ -67,7 +67,7 @@
| Код денег движка | `backend/internal/store/ledger.go` · `store/store.go` · `pipeline/stagerun.go` · `pipeline/status.go` · `config/book.go` · `pipeline/rebill.go` (согласие на пере-оплату) · `pipeline/terminologist.go` (книго-широкие бюджеты банк-ролей) · `pipeline/volume.go` (объёмный потолок) |
| Дефекты денег | `platform/docs/DEFECT_REGISTER.md` (PD-104·113·144·157·158·159) |
| Бэклог-строки | `docs/PROGRESS.md` строки 78 · 136 · 137 (⚠ испр. 05.09: **166 отсюда СНЯТА** — движковая половина оценки построена и опубликована лендингом `81a89e9`; открыта только платформенная) (135 и 165 закрыты D39.131) |
| Контракт наружу | `14-api-contract/openapi.yaml` (`CeilingBounds`, `Usage`); ПТ-35 |
| Контракт наружу | `14-api-contract/openapi.yaml` (**`CeilingBounds` РЕТИРОВАН лендингом формы заказа 06.09** — его место занял `RunOptions` с `chapters_left`/`affordable_chapters`/`verdict` и денежными границами; `Usage`); ПТ-35 |
| ⚠ Запрет денег на экране — **ОТОЗВАН 05.09 (D39.196)**. Живым остаётся ПТ-35 в его четырёх пунктах: цены моделей · стоимость стадий · стоимость ВЫЗОВОВ · структура наших расходов. ⚠ И различение `D39.203`, без которого пункт про вызовы читается неверно: наружу идёт ДО-ВЫЗОВНАЯ ОЦЕНКА (резервация перед звонком), а запрет написан про СТОИМОСТЬ — что списано по факту; сеттлмент не выходит | D39.84; D39.100/К-8; ПТ-35; **D39.196**, эррата 05.09-а |
---
@ -172,7 +172,7 @@ Diameter Credit-Control (RFC 4006/8506) с `Final-Unit-Indication`: «это п
выделил. **Механика, поданная как вопрос к владельцу, — дефект оркестратора, а не открытый пункт.**
**ЧТО ПОД НЕЙ ЛЕЖАЛО НА САМОМ ДЕЛЕ И ОКАЗАЛОСЬ ХУЖЕ: выделить деньги СЕГОДНЯ НЕЛЬЗЯ.** Шкала прогона —
в ГЛАВАХ, и канон говорит это прямо: `14-api-contract/openapi.yaml`, схема `CeilingBounds`, греп
в ГЛАВАХ (⚠ **ретировано 06.09, см. эрратy выше** — историческая запись эры шкалы), и канон говорил это прямо: `14-api-contract/openapi.yaml`, схема `CeilingBounds`, греп
`Bounds of the run-limit scale, in CHAPTERS` — «перевод в деньги живёт на платформе и наружу не
отдаётся ни в каком виде». Человек двигает главы; сумму он не видит и выбрать не может. Ограничение при
этом ДЕНЕЖНОЕ, перевод между единицами делает сломанная ставка — отсюда и наблюдаемая нелепость: