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:
parent
19c326ecec
commit
6469479670
1 changed files with 22 additions and 8 deletions
|
|
@ -74,14 +74,28 @@ hosted IdP (связка PII + доступность, а свою сессию
|
|||
`balance == SUM(ledger)`). Правки строк не существует: ошибка чинится новой записью. Только целые
|
||||
микро-доллары; на шве расчёта округляем ВВЕРХ (леджер движка — нижняя граница).
|
||||
|
||||
**Резервация — РЕШЕНО (вариант B, оркестратор 05.08; вопрос владельцу снят как переусложнённый):**
|
||||
в той же транзакции, что допускает задачу в очередь, ДО спавна `tmctl` ставим холд и передаём движку
|
||||
пер-книжный потолок ≤ остатка баланса. Дальше жёсткий стоп исполняет САМ движок, у которого этот
|
||||
механизм уже есть, — поэтому перерасход физически невозможен, даже если платформа во время прогона
|
||||
не знает ни цифры. Единственное видимое следствие: индикатор остатка обновляется на границах
|
||||
попытки, а не непрерывно. Денежное событие в потоке движка (вариант A) не строим — оно трогает
|
||||
движок ради обновления индикатора; вернуться, только если замер покажет, что грубость холда душит
|
||||
фри-тир.
|
||||
**Защита и свежесть — ДВА РАЗНЫХ механизма, строим ОБА (решение владельца 05.08 «сделаем нормально»;
|
||||
моё прочтение его слов — записано так, чтобы дешёво поправить, если прочитал не то):**
|
||||
|
||||
1. **Защита — холд + потолок движку (было «вариант B»).** В той же транзакции, что допускает задачу
|
||||
в очередь, ДО спавна `tmctl` ставим холд и передаём движку пер-книжный потолок ≤ остатка баланса.
|
||||
Жёсткий стоп исполняет САМ движок, у которого механизм уже есть ⇒ перерасход физически невозможен,
|
||||
даже если платформа во время прогона слепа. Это рубеж корректности, и он НЕ зависит от доставки
|
||||
событий (поток at-least-once и на краше теряет хвост).
|
||||
2. **Свежесть — версионированное денежное событие в словаре потока (было «вариант A»).** Движок
|
||||
эмитит НАКОПИТЕЛЬНЫЙ счётчик потраченного на границах стадии/волны; платформа материализует его
|
||||
существующим идемпотентным апсертом `(engine_run_id, seq)`. Накопительная семантика делает
|
||||
повтор и дубль безвредными (берём максимум по прогону). Индикатор остатка перестаёт отставать
|
||||
на целую попытку.
|
||||
|
||||
⚠ **Что это меняет в каноне и чего НЕ меняет.** Отменяется частная доктрина «поток событий цифр не
|
||||
несёт» (записана в комменте `00003_usage.sql` и в дизайн-ответе П-5). **D39.84 НЕ затронут**: он
|
||||
запрещает суммы на ПОЛЬЗОВАТЕЛЬСКОМ проводе, экране и в INFO-логах — здесь же внутренний канал
|
||||
движок→платформа в приватную таблицу; наружу по-прежнему уходит только процент остатка.
|
||||
⚠ **Запрет, который обязан ехать вместе с механизмом:** ЭНФОРСМЕНТ на событии строить нельзя —
|
||||
иначе корректность квоты повиснет на доставке потока. Событие только показывает; останавливает
|
||||
потолок. **Носитель работы движка — строка 103 единого бэклога** (словарь событий); заводится
|
||||
оркестратором отдельной строкой, платформа её не пишет.
|
||||
|
||||
## 3. Стандарты и стек: что взять, что не брать
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue