Retire the interface money ban the owner withdrew, and correct a claim of mine that rested on a grep that never ran: the rule's text was there all along

This commit is contained in:
heaven 2026-09-05 00:24:51 +03:00
parent 1f719bb4bc
commit 7bb08d8528
5 changed files with 71 additions and 8 deletions

File diff suppressed because one or more lines are too long

View file

@ -1,4 +1,4 @@
# Реестр D-нот — карта актуальности v2 (D1D39.195; титул — носитель головы, бампать при каждом аппенде)
# Реестр D-нот — карта актуальности v2 (D1D39.196; титул — носитель головы, бампать при каждом аппенде)
> ⚠ **Колонку «тело» `counts.py --check` НЕ сторожит по устройству:** он сверяет полноту НОМЕРОВ, а не
> место тела, поэтому колонка держится дисциплиной лендинга. Не нашёл тело по колонке — иди в слайсы,
@ -254,3 +254,4 @@
| D39.193 | 04.09 | **Три ратификации по оси рода, выданные каналом и НЕ внесённые в журнал** (долг оркестратора, предъявлен приёмкой: греп `KeyTrusted` по D-логу → 0). Производитель рода — КЛАССИФИКАТОР (ноль новых вызовов, закрытый словарь парсера; следствие: банковый контур в c1 — предпосылка) · замок расщеплён: род гейтится МАТЧЕМ (`KeyTrusted`), а не статусом, в ОБОИХ блоках · ⚠ дедуп закон-блока по голому `src` РОНЯЛ ПОДПИСЬ — ратификация оркестратора была неверна, принята редакция зоны: уступает только неподписанная | жив | ЖИВОЕ: ратификация без проверки ключа уникальности предмета вносит дефект; каждая посадка предъявляется КРАСНОЙ | род ратификация дедуп |
| D39.194 | 04.09 | **Платформенный пак «закрыть цикл» ПРИНЯТ и ЗАЛЕНДЖЕН `adf5e53`** (39 файлов; цикл замкнут живьём — платный EPUB через API, `epubcheck` 0/0/0/0). Строка бэклога 246 закрыта, её якорь мёртв ОТ ЛЕЧЕНИЯ. **Контрактный минор 0.10.0** описывает построенную дверь: `failure_code` — enum из четырёх кодов, `Export.url``uri-reference` с честным механизмом вместо несуществующей капабилити, третий адрес получает `downloadExport`, шестнадцатая причина — `wrong_language`. Ошибка ратификации «вхождений два» исправлена ДО правки: второе — `about:blank` по RFC 9457. Отзыв причины смертей стенда (не хост, а группа процессов сессии) и вышедшая из него `PD-447`: рецепт глушил коллизию портов ложной зеленью. **Три класса ложной зелени** — упавшая сборка · обрезанный вывод · ЭКВИВАЛЕНТНАЯ ПОСАДКА (класс оркестратора). Гейт чисел получил два носителя: титул реестра нот и живой счёт регистра. `classifierVersion` НЕ двигать | жив | ЖИВОЕ: SURVIVED не находка, пока посадка не показала, что меняет поведение; бамп версии должен смене, способной пере-вердиктить СУЩЕСТВУЮЩИЙ снапшот | лендинг контракт минор ложная-зелень мутации гейт |
| D39.195 | 04.09 | **Движковый вайр-батч ПРИНЯТ и закрыт** (`b8154cd`·`c77c3ba`·`ecf063e`·`2e13cd1`; каталог мутаций 120→141, 136 красных, 0 переживших, 4 протухшие записи найдены новым пер-записным вердиктом). Строки заказа **210·113·46·134·140·184 ЗАКРЫТЫ**, 232 остаётся (чужой пак). ⚠ **Петля СВЁРНУТА решением владельца, а не замкнута доказательством** — цена названа: дважды подряд дефект вносил ФИКС предыдущего круга, круг 3 добавил ~2000 строк и не ревьюил из них ни одной (строка 266). Заведено 13 строк (256268) формулировками зоны. `classifierVersion` не двигаем. **Три класса ложной зелени** (упавшая сборка · обрезанный вывод · ЭКВИВАЛЕНТНАЯ ПОСАДКА) и **граница инструмента с замером**: каталог доказывает поведение и молчит о том, что код утверждает о себе — 4 сверх-утверждения круга 3, ни одного не нашла посадка | жив | ЖИВОЕ: SURVIVED не находка, пока посадка не показала, что меняет поведение; ложный ПИН дороже пропущенной посадки; вопрос к комментарию — «что сломалось бы, если это правда» | приёмка движок петля мутации каталог |
| D39.196 | 05.09 | **Форма заказа перевода — как у обычного харнесса (решение владельца).** Баланс аккаунта — ДЕНЬГАМИ на экране; ползунок потолка — деньгами; рядом ответ «хватает на полную книгу или нет»; второй ползунок объёмом — ГЛАВЫ когда книга распозналась, ЗНАКИ когда нет (о нераспознавании говорим ЯВНО); старт = холд с баланса. ⛔ **Правило «денежных полей в UI нет вовсе» ВЛАДЕЛЬЦУ НЕ ПРИНАДЛЕЖАЛО** («я такого правила не ставил») — текста в журнале НЕТ, живёт только в производных; удаляется как ложная атрибуция, не как снятие запрета. Область: баланс, потолок, холд — да; цены моделей и структура расходов — нет | жив | ЖИВОЕ: процент остатка честен как СИГНАЛ ТРЕВОГИ и бесполезен как ответ на вопрос «хватит ли на заказ» | заказ форма деньги-в-UI баланс холд |

View file

@ -1,4 +1,4 @@
# Журнал решений оркестратора — контракт D1D39.195 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
# Журнал решений оркестратора — контракт D1D39.196 (живой файл: карта · эрраты · живые тела · голова D39.124+ (подрезка D39.139); тела закрытых эр — в слайсах `docs/archive/architecture/`, указатель ниже; реестр всех нот — `05-decisions-index.md`)
> **КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Работая с контрактом (греп номера: живой файл → слайсы, целиком НЕ читать — D39.125), держи под рукой, что чем перекрыто:
> ⚠ **Эррата 09.08 (D39.125):** D39.111 п.1 предписывал промту S3 «максимум = баланс МИНУС открытые холды» — формула ОШИБОЧНА (вычитание дважды), исправлена D39.115 п.2(а): максимум = Balance КАК ЕСТЬ; тело D39.111 живёт ниже в этом файле (голова D39.106+).
@ -2178,3 +2178,20 @@ CJK-цели · закон-блок редактора единый, марке
зоной: не «правда ли то, что здесь написано», а **«что должно было бы сломаться, если это правда, и
ломается ли оно»**. ⚠ И ложный ПИН дороже пропущенной посадки: `WB36` гарантировала одно, рапортовала
другое, и следующий пошёл бы чинить не-дефект.
## D39.196 — ФОРМА ЗАКАЗА ПЕРЕВОДА: баланс и потолок — ДЕНЬГАМИ на экране; запрет «сумм в UI нет» СНЯТ (решение владельца 05.09). ✅
**1. Экран старта перевода — как у обычного харнесса, дословно по владельцу.** На аккаунте — **баланс в деньгах**. Человек стартует перевод и, если хочет задать потолок, тянет **ползунок в ДЕНЬГАХ**; рядом мы отвечаем на его настоящий вопрос — **хватает на полную книгу или нет**. Если он предпочитает задавать не деньгами, а объёмом, есть второй ползунок: **в ГЛАВАХ, когда книга распозналась**, и **в ЗНАКАХ, когда не распозналась** (о факте нераспознавания говорим ЯВНО). Старт — **холд с баланса**.
**2. ⛔ ЗАПРЕТ «ДЕНЕЖНЫХ ПОЛЕЙ В UI НЕТ ВОВСЕ» ОТОЗВАН ВЛАДЕЛЬЦЕМ 05.09.** Дословно: **«я такого правила не ставил, надо от него избавляться»**.
**ЭРРАТА К ЭТОМУ ЖЕ ПУНКТУ, вписана оркестратором сразу: первая редакция утверждала «текста правила в журнале НЕТ» — это ЛОЖНОЕ ОТРИЦАНИЕ, выведенное из СЛОМАННОЙ КОМАНДЫ.** Греп шёл с `|` без `-E`, то есть в basic-regex вертикальная черта — литерал, и находил только собственную цитату паттерна. Правильный `grep -E` даёт два хита. **Текст ЕСТЬ и записан как СЛОВО ВЛАДЕЛЬЦА** — тело D39.84, перечень «(1) Восемь решений владельца»: «оплат в MVP нет, денежных полей в UI нет вовсе (расход остаётся телеметрией владельца; потолки/rebill-согласие движка канон §5 не трогает)». ⇒ Верная форма — **владелец ОТОЗВАЛ собственное решение** (суперсид п.(1) D39.84 в части денег), а не «оркестратор приписал ему чужое». ⚠ Оговорка, которую из текста снять нельзя: нота пришла РЕЛЕЕМ отчёта фронт-сессии, и что там было прямой речью владельца, а что пересказом релея — по тексту не различимо; ровно та же неразличимость, что D39.112 п.3 пометил у СОСЕДНЕЙ ноты.
**Класс ошибки — мой, и он тот самый, который я весь день правил у других: отрицательное утверждение, выведенное не из проверки, а из команды, которая не сработала.** Канон это прямо запрещает («отрицательное утверждение из отсутствия упоминания НЕ выводится»), и я нарушил его в НОТЕ. Поймал внешний рецензент, пере-запустив мою же команду. **Норма, купленная этим: команда, на которой стоит отрицание, приводится В ТЕКСТЕ и обязана быть воспроизведена другим исполнителем.**
**Носителей запрета БОЛЬШЕ ДВУХ — все обязаны быть закрыты паком формы заказа:** `05-decisions-log.md:222` (тело D39.84) · `05-decisions-log.md:246` (D39.100 К-8: «запрет денег на экране D39.84 в силе и НЕ superseded») · `docs/product-requirements.md` ПТ-35 · `docs/architecture/15-money-path.md` §«Запрет денег на экране» · `14-api-contract/openapi.yaml` §Transport и §Credit · зеркало фронта `frontend/docs/api-contract/openapi.yaml` · `frontend/docs/API_CONTRACT_INPUT.md` §4.8 · `platform/docs/ENGINEERING_STANDARDS.md` (зонный, чинит зона).
**2а. Что теперь верно.** На аккаунте — **баланс в ДЕНЬГАХ**, и он виден. Потолок заказа — деньгами. Наружу выходят баланс, потолок и холд. НЕ выходят: цены моделей, стоимость стадий, структура наших расходов (ПТ-33 цел — это отдельная норма и она владельцем не отменялась).
**3. Почему прежняя форма была абсурдной, и это надо записать, чтобы не вернулись.** Баланс хранится в деньгах (микродоллары), а наружу отдавался ПРОЦЕНТОМ неистраченного от начисленного (`RemainingPercent`, «a percentage, never an amount»). Человек, задавший объём заказа, из «осталось 70 %» не может понять ничего: семьдесят процентов от суммы, которую он вносил когда-то и не помнит, соотнести с ценой, которой он не видит. **Процент честен ровно как СИГНАЛ ТРЕВОГИ** («мало», «пусто») — там он и остаётся.
**4. Что это меняет в согласованной схеме (строки 276283).** Схема «заказ = объём, вердикт ДО клика, движку два потолка» устояла и не переоткрывается; ползунок денег — ТРЕТИЙ способ выразить тот же заказ, и вердикт «хватает на полную книгу» обязателен при любом из трёх. Развилка по разбору остаётся: главы — когда структура распознана, знаки — когда нет, и о нераспознавании говорим прямо. ⚠ «Страница» как отображение знаков — вопрос подписи, не механизма; размер страницы у разных рынков разный (D39.176 п.4), поэтому в контракт едут ЗНАКИ.
**5. Не отменяется:** структура глав для ВЫДАЧИ (строка 283) — читатель не-CJK txt получает книгу одним полотном при любой единице заказа, гейт беты; ложная подпись «Знаков» у счётчика байтов файла (строка 282) — она же вход пути «не распозналось»; движковая половина (строка 277) первой — без неё в стену упирается любой путь.

View file

@ -946,6 +946,41 @@ first built format»), и условие наступило. Набор — то
**Шестнадцатая причина замечания.** `off_target_lang``wrong_language`; разбор и ⚠ о ранге — в
Приложении А.
### 2.24. ⛔ ЗАПРЕТ «ДЕНЕГ В ИНТЕРФЕЙСЕ НЕТ» ОТОЗВАН ВЛАДЕЛЬЦЕМ (05.09, прозой — не минор)
**Что случилось.** Норма «оплат в MVP нет, денежных полей в UI нет вовсе» месяц определяла форму
продукта. Владелец 05.09: **«я такого правила не ставил, надо от него избавляться»**. Форма —
**отзыв собственного решения**: текст записан в теле D39.84 (`05-decisions-log.md:222`) в перечне
«(1) Восемь решений владельца». ⚠ Нота пришла РЕЛЕЕМ отчёта фронт-сессии, и что в ней прямая речь, а
что пересказ релея, по тексту не различимо — та же неразличимость, которую D39.112 п.3 пометил у
соседней ноты.
⚠ **Первая редакция этого раздела утверждала «текста правила в журнале НЕТ» — ложное отрицание,
выведенное из СЛОМАННОЙ команды** (`grep` с `|` без `-E`: в basic-regex черта — литерал, находилась
только собственная цитата паттерна). Поймал внешний рецензент, пере-запустив ту же команду. Норма,
купленная этим: **команда, на которой стоит отрицание, приводится в тексте и обязана быть
воспроизведена другим исполнителем.**
**Что теперь верно.** Баланс аккаунта — деньги и показывается деньгами; потолок заказа и холд — тоже.
Остаётся запрещённым и НЕ отменялось: цена модели, стоимость стадии, стоимость вызова, структура
НАШИХ расходов (ПТ-33). Линия: **деньги, которыми владеет аккаунт, — его; деньги, которые тратим мы,
— наши.**
**Форма показа — пара, а не точка.** Проекция имеет дисперсию (редакторские вызовы 2590 % от
worst-case, хвост ретраев 1.523 % между прогонами, D39.165 §1), поэтому точечное «$1.14» через прогон
превращается в «вы сказали 1.14, списали 1.31». Верная форма: «ожидаемо ≈ $1.1, зарезервируем до
$1.6, спишем по факту», и закрытие после прогона фактом. Главный ответ — фраза «хватит на всю книгу»;
цифра рядом и мельче.
**Почему прозой, а не минором.** Схема `Credit` НЕ тронута: поле суммы приезжает с паком, который
строит форму заказа. Двигать канон впереди кода — дефект, за который в тот же день написана эррата
04.09-в. Проза перестаёт лгать сегодня, поле появляется со своим кодом.
**Носители запрета, которые обязан закрыть тот же пак:** `05-decisions-log.md:222` · `:246` (D39.100
К-8 «запрет в силе и НЕ superseded») · `product-requirements.md` ПТ-35 · `15-money-path.md` §запрета ·
`openapi.yaml` §Transport и §Credit · зеркало фронта · `API_CONTRACT_INPUT.md` §4.8 ·
`platform/docs/ENGINEERING_STANDARDS.md` (зонный — чинит зона).
## 3. Зависимости: чтение → источник → строка бэклога
**Правило, введённое 0.3.0 (Б-21): предупреждение о недостроенном ОБЯЗАНО нести номер строки

View file

@ -15,7 +15,10 @@ info:
The client reads the platform read-model only; no path below addresses the translation service.
**Nothing about HOW a book is translated crosses this boundary** — no model names, no phase or
stage names, no internal vocabularies, no money sums. The projection is an allowlist: a field not
stage names, no internal vocabularies, and no cost of any model, stage or call. ⚠ **Money the
ACCOUNT owns is not in that set** (owner, 05.09): the balance, an order's ceiling and its hold are
the user's own figures and are shown as amounts. The earlier blanket «no money sums» was the owner's own
rule of 02.08 and he RETIRED it on 05.09; what stays banned is the structure of OUR spend. The projection is an allowlist: a field not
named here never reaches the client. The rule binds the PROSE too — every description here is
compiled into the generated client's source.
@ -816,9 +819,13 @@ paths:
summary: State of the credit balance.
description: |
Credits are a BALANCE, not a subscription with windows: no period, no `resets_at`, no
"resets in" — the screen shows what is LEFT, as a share of the account's grants.
"resets in" — the screen shows what is LEFT.
Money SUMS never cross this boundary in any form: a percentage, never an amount.
⚠ **«A percentage, never an amount» is RETIRED (owner, 05.09).** The account's balance is money
and is shown as money; a percentage answers «is it running out», never «will it cover this
order», and the order screen asks the second question. The AMOUNT field lands with the pack
that builds the order form — this schema is not changed ahead of it, so today the percentage is
still all this endpoint returns. What remains banned is the cost of models, stages and calls.
responses:
'200':
description: Balance state.
@ -2540,7 +2547,10 @@ components:
type: integer
minimum: 0
maximum: 100
description: Share of the account's grants still available. A percentage, never an amount.
description: |
Share of the account's grants still available. ⚠ Honest as an ALARM («low», «exhausted») and
useless as an answer to «will my balance cover this order» — the amount field that answers it
lands with the order-form pack (owner, 05.09).
halt_reason:
oneOf:
- $ref: '#/components/schemas/AccountHaltReason'