Name the ceiling event's field by what was built: the shortfall is the book's missing sum, not the price of the next call

This commit is contained in:
heaven 2026-09-05 05:09:20 +03:00
parent 3404d42447
commit e55ba6ca58

View file

@ -345,7 +345,7 @@
| 275 | ⚠ **ПЕРЕ-СНЯТА 05.09 СЛОВОМ ВЛАДЕЛЬЦА — прежняя формулировка «КАЧЕСТВО НЕ МОЖЕТ СТАРТОВАТЬ ВООБЩЕ» БЫЛА НЕВЕРНА (ошибка оркестратора).** Она называла четыре гейта; из них **три сняты словом владельца, четвёртый гейтом не был** (разбор — `D39.198`): **13а** веса рубрики НЕ НУЖНЫ — веса меряют РАЗНЫЕ узлы (консистентность — банк памяти, выдумки — редактор, художественность — редактор И черновик), единого веса быть не может, а одно взвешенное число измеряет, но не ДИАГНОСТИРУЕТ · **24** профили голоса — приоритет №3, подписи владельца не требуют («зачем мне это подписывать») · **149** разморозка панели не нужна: пока идут доработки, менять жильцов ролей незачем · **55** прогоняем на ТЕХ ЖЕ текстах (мастер Гу, Жан-Кристоф), оговорка про претрейн остаётся ОГРАНИЧЕНИЕМ ВЫВОДА, а не требованием новой книги. **ЧТО ОСТАЁТСЯ ЖИВЫМ В ЭТОЙ СТРОКЕ:** привязать каждый класс дефекта к УЗЛУ и мерить по узлам; поставить порог остановки для приоритетов №1 и №2 (разъехавшийся термин — стоп, выдумка — стоп, сухая фраза — не стоп). ⚠ Консистентность проверяема ДЕТЕРМИНИРОВАННО за $0 — это ГЕЙТ, а не строка рубрики; ближайший её носитель — строка **267** | полигон+бэкенд | скоро | привязка классов к узлам + пороги остановки для №1 и №2 | решение владельца 05.09, `D39.198` |
| 276 | ⭐ **ФОРМА ЗАКАЗА ПЕРЕВОДА — решение владельца 05.09, ратифицировано D39.196.** На аккаунте **баланс в ДЕНЬГАХ** и он виден. Человек стартует перевод; хочет задать потолок — тянет ползунок **в деньгах**; рядом ответ на его настоящий вопрос: **хватает на полную книгу или нет**. Хочет задать объёмом — второй ползунок: **ГЛАВЫ когда книга распозналась**, **ЗНАКИ когда нет** (о нераспознавании говорим ЯВНО). Старт = **холд с баланса**. Отдельная кнопка **«перевести книгу целиком»** — за целую книгу оценка точнее, чем за произвольный кусок. ⚠ **Две ручки связаны проекцией:** объём — ЗАКАЗ (главная), деньги — ЛИМИТ (вторая); тронутая последней ограничивает, другая пересчитывается и показывается производной («5 глав ≈ $0.55, зарезервируем до $0.8»); минимум денежного ползунка = неделимый шаг движка, чтобы ползунком нельзя было выразить невозможный заказ. Не тронута ни одна ⇒ заказ = вся книга. ⚠ **Цифра на экране — ПАРА, а не точка:** «ожидаемо ≈ $1.1, зарезервируем до $1.6, спишем по факту», и закрытие фактом после прогона — проекция имеет дисперсию (редакторские вызовы 2590 % worst-case), точечное число превратится в «сказали 1.14, списали 1.31». Главный ответ — фраза, цифра рядом и мельче. ⚠ **Запрет «денег в UI» ОТОЗВАН владельцем** (D39.196 п.2): виден баланс, потолок, холд; цены моделей и стадий — нет. «Страница» из контракта убирается совсем — владелец назвал ЗНАКИ, форматирование «≈67 стр.» это локаль фронта. Исполнение — 277283 | движок+платформа+фронт | скоро | решение принято и ратифицировано D39.196; исполняется 277283 | решение владельца 05.09 + сведение с внешним рецензентом |
| 277 | **ШАГ 1, ГЕЙТ ДЛЯ ВСЕГО ОСТАЛЬНОГО: отказ резервации = «не начинать новое», а не авария книги.** Сегодня отказ ОДНОГО из N параллельных резервов зовёт `cancel()` производного контекста и гасит уже допущенные вызовы (`waverun.go`, общий путь ошибки; `stagerun.go`, ветка `ReserveDeniedBook`). Чинится: защёлка на уровне кормильца (перестать раздавать индексы по первому отказу), доработка допущенного, штатное завершение с леджером; при непустом полёте — ждать settle, потому что settle ≤ оценки и запас растёт; поздняя отмена сеттлится ОЦЕНКОЙ по уже ратифицированному пути. ⚠ Без этого ЛЮБОЙ заказ упирается в ту же стену, поэтому строка идёт ПЕРВОЙ. Прецедент внутри пакета: объёмный потолок уже построен так («THE STOP IS A COMPLETION, NOT A HALT», `backend/internal/pipeline/volume.go`), и три места уже деградируют по `errReserveCeiling` вместо аборта. ⚠ **НЕ закрывает `PD-441` целиком — испр. 05.09 по ревью:** эта строка снимает ОТМЕНУ допущенного, но структурный корень невидимого расхода живёт в строке **261**, а сверх-утверждение комментария — в **262**. `PD-441` закрывается составом 277+261+262, брать ОДНИМ паком. Пять рисков реализации названы зоной — в промт дословно | бэкенд | скоро | защёлка + отказ гасить допущенное + посадка «под потолком волна погасила допущенный вызов» красной | разбор зоны движка + старшей модели 04.09 |
| 278 | **ШАГ 2: движок публикует ПРОЕКЦИЮ ЦЕНЫ и говорит, сколько не хватило.** В `manifest --json` и `status --json``book_once_usd` (книжное слагаемое, терминология: расход КНИГИ, а не юнита — иначе короткая книга получит заниженную оценку там, где ей больнее), по главам `expected_usd`, и `step_max_usd` (самый крупный неделимый резерв). Считается из СВОИХ цен и фертильности, БЕЗ константы. Плюс `next_step_micro_usd` в событие `ceiling` — сегодня «сколько не хватило» умирает в stderr транзиентного юнита, хотя движок это число печатает. Плюс денежный леджер в `finished` по образцу объёмного. ⚠ Всё аддитивно, версию манифеста не двигает. Даёт форму строке **166**. ⚠ **ВТОРАЯ РЕДАКЦИЯ (04.09): манифест получает по ЮНИТУ `source_chars` (руны ингестированного текста, ВКЛЮЧАЯ пробелы — так, чтобы человек мог пересчитать в редакторе) плюс раздельно ПЛОТНЫЕ/РАЗРЕЖЕННЫЕ знаки** (движок уже умеет: `backend/internal/text/runes.go`, Han/кана/хангыль ≈ 1 токен, прочее ≈ ⅓), **и `structure: detected|declared|none`** — признак доверия к нарезке, без которого вид заказа `through_chapter` предлагать нельзя. Всё аддитивно, версию манифеста не двигает | бэкенд | скоро | три аддитивных поля + событие | согласование 04.09; требование «отказ обязан называть недостающую сумму» — зона платформы |
| 278 | **ШАГ 2: движок публикует ПРОЕКЦИЮ ЦЕНЫ и говорит, сколько не хватило.** В `manifest --json` и `status --json``book_once_usd` (книжное слагаемое, терминология: расход КНИГИ, а не юнита — иначе короткая книга получит заниженную оценку там, где ей больнее), по главам `expected_usd`, и `step_max_usd` (самый крупный неделимый резерв). Считается из СВОИХ цен и фертильности, БЕЗ константы. Плюс `shortfall_micro_usd` в событие `ceiling` — сегодня «сколько не хватило» умирает в stderr транзиентного юнита, хотя движок это число печатает.**Имя поля пере-снято 05.09 под построенное:** строка заказывала `next_step_micro_usd`, но это имя называет ЦЕНУ ОДНОГО ВЫЗОВА — ровно тот класс числа, который следующая же фраза строки запрещает как ответ на «сколько не хватило»; носитель обязан называть построенное. Плюс денежный леджер в `finished` по образцу объёмного. ⚠ Всё аддитивно, версию манифеста не двигает. Даёт форму строке **166**. ⚠ **ВТОРАЯ РЕДАКЦИЯ (04.09): манифест получает по ЮНИТУ `source_chars` (руны ингестированного текста, ВКЛЮЧАЯ пробелы — так, чтобы человек мог пересчитать в редакторе) плюс раздельно ПЛОТНЫЕ/РАЗРЕЖЕННЫЕ знаки** (движок уже умеет: `backend/internal/text/runes.go`, Han/кана/хангыль ≈ 1 токен, прочее ≈ ⅓), **и `structure: detected|declared|none`** — признак доверия к нарезке, без которого вид заказа `through_chapter` предлагать нельзя. Всё аддитивно, версию манифеста не двигает | бэкенд | скоро | три аддитивных поля + событие | согласование 04.09; требование «отказ обязан называть недостающую сумму» — зона платформы |
| 279 | **ШАГ 3, КОНТРАКТ (минор, полоса ломающих правок мажора 0 законна): заказ объёмом.** `ceiling_chapters``chapters` со смыслом ОБЪЁМА (`null` = вся книга) · `CeilingBounds{min,max,default}``OrderOptions{chapters_left, affordable_chapters, verdict: covers_all|covers_part|covers_none, blocked}` · `PausedReason` += `run_limit_reached``credit_exhausted` СТАНОВИТСЯ правдой — сегодня лжёт при 34% баланса, наблюдение H14) · `Run` += `ordered_chapters`/`delivered_chapters`. ⚠ Фразы — ДАННЫМИ по коду причины и локали, не литералом. ⚠ **ПЕРЕ-СНЯТО 05.09 под D39.196:** наружу ВЫХОДЯТ баланс, потолок заказа и холд — деньгами; контракт получает `balance`, `estimate{expected, hold}` под выбранный заказ, границы денежного ползунка `{min: неделимый шаг, max: баланс}` и `shortfall` у паузы; процент остатка остаётся СИГНАЛОМ «мало/пусто». НЕ выходят: цены моделей, стоимость стадий и вызовов, структура НАШИХ расходов. Плюс `OrderOptions` обязан нести ТРИ вида заказа (вся книга · знаки · до главы N), а не только главы. Ремедиа-таблица `resumeRun` упрощается: «Продолжить» — новый прогон ТОГО ЖЕ заказа | контракт | скоро | минор контракта одним актом с платформенной половиной | согласование 04.09 |
| 280 | **ШАГ 4, ПЛАТФОРМА: заказ живёт на КНИГЕ, холд считается от проекции, `--max-units` наконец едет в argv.** `books.ordered_through_chapter` (null = вся книга) — сегодня интент живёт на ПРОГОНЕ, оттого и неловкость «поднять лимит = НОВЫЙ прогон с бо́льшим `ceiling_chapters`»; с заказом на книге «Продолжить» после пополнения тривиален, и дверь пере-прохода встаёт рядом вторым типом заказа. Холд = `min(баланс, проекция × k)`; `bookCap = committed + холд` (`PD-158` цел). В argv добавляется `--max-units` = сумма юнитов заказанных глав минус доставленные. Удаляются `DefaultPerChapter`, `Scale` и `draftWork`: план движка становится РАВЕН заказу, и «черновики на весь потолок при нуле готовых глав» исчезает структурно. Закрывает `PD-410`, `PD-440`, `PD-446`. ⚠ **ПРЕДУСЛОВИЕ, названное отдельно: `PD-422`**`--resnapshot` передаётся УСЛОВНО, а условие ставит только правка банка; рост авто-банка от майнинга флага не ставит. Частичный заказ на майнящей книге растит банк ⇒ следующий заказ без `--resnapshot` умрёт на снапшот-гарде, холд взят, попытка сожжена. Взять В ТОТ ЖЕ пак | платформа | скоро | заказ на книге + холд от проекции + проводка `--max-units` + PD-422 | согласование 04.09 |
| 281 | **ЗАМЕР: сколько наших денег стоит тысяча ПЛОТНЫХ и тысяча РАЗРЕЖЕННЫХ знаков по стадиям и парам.** Цель — НЕ константа (D39.165 п.1г прямо запрещает ставку константой), а **дисперсия проекции**: коэффициент k для холда и честность вердикта «хватит ли». Снимать есть из чего и это $0: `find -L books` даёт 162 базы прогонов, в `request_log` лежат `chapter · chunk_idx · stage · prompt/completion_tokens · cost_usd · tm_hit`, исходник по юниту отдаёт `tmctl export --pairs` бесплатно. Метод: по юниту плотные/разреженные знаки против суммы `cost_usd` при `tm_hit=0`, по стадиям; хвост ретраев и эскалаций считать ОТДЕЛЬНО; базы до 16.08 пере-прайсить по токенам. ⚠ Гейт для коэффициента холда в строке 280 | полигон | скоро (гейт строки 280) | замер по 162 базам, $0 | согласование 04.09, вторая редакция |