Record the owner decision to carry spend freshness properly: versioned money event for observability, hold and ceiling remain the enforcement

This commit is contained in:
heaven 2026-08-05 00:53:41 +03:00
parent 19c326ecec
commit 6469479670

View file

@ -74,14 +74,28 @@ hosted IdP (связка PII + доступность, а свою сессию
`balance == SUM(ledger)`). Правки строк не существует: ошибка чинится новой записью. Только целые `balance == SUM(ledger)`). Правки строк не существует: ошибка чинится новой записью. Только целые
микро-доллары; на шве расчёта округляем ВВЕРХ (леджер движка — нижняя граница). микро-доллары; на шве расчёта округляем ВВЕРХ (леджер движка — нижняя граница).
**Резервация — РЕШЕНО (вариант B, оркестратор 05.08; вопрос владельцу снят как переусложнённый):** **Защита и свежесть — ДВА РАЗНЫХ механизма, строим ОБА (решение владельца 05.08 «сделаем нормально»;
в той же транзакции, что допускает задачу в очередь, ДО спавна `tmctl` ставим холд и передаём движку моё прочтение его слов — записано так, чтобы дешёво поправить, если прочитал не то):**
пер-книжный потолок ≤ остатка баланса. Дальше жёсткий стоп исполняет САМ движок, у которого этот
механизм уже есть, — поэтому перерасход физически невозможен, даже если платформа во время прогона 1. **Защита — холд + потолок движку (было «вариант B»).** В той же транзакции, что допускает задачу
не знает ни цифры. Единственное видимое следствие: индикатор остатка обновляется на границах в очередь, ДО спавна `tmctl` ставим холд и передаём движку пер-книжный потолок ≤ остатка баланса.
попытки, а не непрерывно. Денежное событие в потоке движка (вариант A) не строим — оно трогает Жёсткий стоп исполняет САМ движок, у которого механизм уже есть ⇒ перерасход физически невозможен,
движок ради обновления индикатора; вернуться, только если замер покажет, что грубость холда душит даже если платформа во время прогона слепа. Это рубеж корректности, и он НЕ зависит от доставки
фри-тир. событий (поток at-least-once и на краше теряет хвост).
2. **Свежесть — версионированное денежное событие в словаре потока (было «вариант A»).** Движок
эмитит НАКОПИТЕЛЬНЫЙ счётчик потраченного на границах стадии/волны; платформа материализует его
существующим идемпотентным апсертом `(engine_run_id, seq)`. Накопительная семантика делает
повтор и дубль безвредными (берём максимум по прогону). Индикатор остатка перестаёт отставать
на целую попытку.
**Что это меняет в каноне и чего НЕ меняет.** Отменяется частная доктрина «поток событий цифр не
несёт» (записана в комменте `00003_usage.sql` и в дизайн-ответе П-5). **D39.84 НЕ затронут**: он
запрещает суммы на ПОЛЬЗОВАТЕЛЬСКОМ проводе, экране и в INFO-логах — здесь же внутренний канал
движок→платформа в приватную таблицу; наружу по-прежнему уходит только процент остатка.
**Запрет, который обязан ехать вместе с механизмом:** ЭНФОРСМЕНТ на событии строить нельзя —
иначе корректность квоты повиснет на доставке потока. Событие только показывает; останавливает
потолок. **Носитель работы движка — строка 103 единого бэклога** (словарь событий); заводится
оркестратором отдельной строкой, платформа её не пишет.
## 3. Стандарты и стек: что взять, что не брать ## 3. Стандарты и стек: что взять, что не брать