# Промт сессии: БЭКЕНД — «число согласия на пути второй покупки» > **Роль:** бэкенд. **Зона записи:** `backend/`. **Не коммитишь** — дерево готовишь и передаёшь на > лендинг оркестратору. Чужие зоны читаешь, не правишь. Норматив стиля — `docs/architecture/12-go-style-notes.md`. ## Какая проблема и что изменит твой результат Продукт продаёт главы **частями**. Покупатель берёт кусок, потом ещё кусок — и на этом пути число, которым движок спрашивает согласия на оплату, **врёт в трёх местах**, а один юнит может быть оплачен дважды. После пака покупатель, берущий книгу частями, видит число, которое не занижает при смене модели стадии, признаётся, какая его часть — старые деньги, и не платит второй раз за юнит, который уже двигал. ## Карта чтения — пять позиций, дальше только по их ссылкам 1. Шапка-таблица `docs/architecture/09-target-architecture.md` — что построено. 2. `backend/README.md` · `docs/architecture/03-implementation-notes.md` (через баннер). 3. `docs/architecture/15-money-path.md` — денежный путь целиком, включая §2 «согласие на пере-оплату». 4. Строка **197** единого бэклога (`docs/PROGRESS.md`) — фикс-лист ФЧ-1…ФЧ-8, и строка **232**. 5. Нота **D39.150** — тело ратификации ФЧ-5 (греп `^## D39.150`). ## Состав — четыре пункта, в этом порядке **1. ФЧ-5 — ось МОДЕЛИ в числе согласия. Ратифицирован 17.08 (D39.150 п.1) и НЕ построен.** Ратифицировано дословно: прайсить по модели, которую стадия резолвит **сейчас**; при незнании округлять **вверх**; оговорка в тексте согласия. Нота помечает это обязательным **до первого пере-прогона со сменой модели стадии**. Сегодня первый же такой пере-прогон занижает число согласия молча — ровно тот вред, ради которого чинилась строка 181. ⚠ **Проверь исходное состояние САМ** и не бери с моих слов: оркестратор утверждал, что «шапка `rebill.go` заявляет обратное ратифицированному», и **это не подтвердилось** — в шапке речь про `$0 model`. Формулируй по коду, который увидишь. **2. Строка 232, ВТОРАЯ половина.** Первая (читающий метод `store.AnnouncedOnceKeys()`) исполнена 31.08. Живой остаток: **юнит, прерванный МЕЖДУ волнами, тратит слот объёмного гранта повторно** — покупатель платит за N глав и получает меньше. Разбор — `backend/docs/MONEY_HONESTY_REPORT.md` §4.5. ⚠ **Оговорка веса, проверь её:** платформа сегодня продаёт денежным потолком (`--ceiling-usd`), а `--max-units` не передаёт вовсе — то есть вред пока не доезжает до пользователя через платформу. Это меняет приоритет, но не отменяет дефект. **3. ФЧ-4 — раскрытие «часть суммы — старые деньги» не доезжает до `status --json`:** `HistoricalRows` теряется на границе. Покупатель не может отличить новую трату от уже оплаченной. **4. ФЧ-1 — посадки на гарантии, чьи мутации ПЕРЕЖИВАЮТ зелёную батарею.** ⚠ **Ограничь тремя**, поимённо: D39.149 п.5 называет три HIGH. Не превращай в бесконечный список — это последний пункт, и он берётся, если осталось время. ## Границы — что НАМЕРЕННО не берём - **Строка 160 «структура глав, Этап 0»** — хотя слово владельца 15.08 ставит её ближайшим паком и её блокер закрыт 30.08. Причина техническая: строка требует бампа **формы манифеста**, а параллельно идёт платформенный пак, и незнакомая форма манифеста отправляет КАЖДУЮ новую книгу в `rejected`. Берётся отдельно, со стоп-миром. - **Читающая сторона банка** (строки 221 · 224 · 226 · 228 · 230) — крупнейшая продуктовая дыра зоны, но её гейт не техника, а **слово владельца**. Вопрос вынесен ему отдельно. - **Следующий платный замер** — не в этом паке: у его оси «эффорт off против low» не разрешено предусловие (см. ниже), и до решения владельца он не заказывается. ## ⚠ ПОРЯДОК ДЕПЛОЯ — почему пак безопасен параллельно платформе Зоны независимы по коду, но **не по деплою**: форма манифеста требует «платформа первой», схема хранилища v16 — «движок первым». **Пак НЕ меняет форму манифеста, схему хранилища и версию контракта.** Понадобилось — **стоп и пинг**, не «сделаю аккуратно». ## Свобода и её разметка «Делай РОВНО так» — порядок пунктов · границы выше · запрет на три вещи из порядка деплоя · ограничение ФЧ-1 тремя посадками. **Решаешь сам и аргументируешь**: форма хранения и проводки модели в числе согласия, форма раскрытия исторических строк, состав посадок. ## Мандат самопроверки — исполнением `make battery` — не отчёт, а предусловие. Обязательны: **дифф `^func Test` исполнением, не памятью** · **собственные адверсариальные посадки ВНЕ списка выше** · **отдельный проход по СВОЕЙ ГОТОВОЙ работе** свежим контекстом. Субагенты разрешены явно; модель задавай ИМЕНЕМ. ⚠ **Править или удалять тест ради зелени — недопустимо.** Правка, вызванная сменой поведения, которая заказана этим промтом, — обслуживание, и она **объявляется в отчёте**: что изменилось в поведении, какой тест это описывал, куда уехала гарантия. ⚠ Перед отчётом **сверь каждый клейм с результатом инструмента ЭТОЙ сессии**. Последний абзац — план или обещание? Сделай сейчас. ## Отчёт Записка-план ДО работы (эхо: скоуп · инварианты · не-делать) в секцию «Бэкенд» `docs/PROGRESS.md`. Итог — туда же, каждое число **с командой получения**. Обязательная секция **«Что НЕ удалось и что НЕ проверено»**. Конфликт промта с кодом — **пинг через владельца, не интерпретация**. ## Прямой канал Механизм — `CLAUDE.md`, секция «Связь между сессиями». Свой блок в `/tmp/textmachine-channel` — первым делом. ⚠ Адрес из файла **не доказательство, что сессия жива**: сверяйся с `ListAgents`. Нужной роли нет ⇒ **канала нет, это НОРМАЛЬНЫЙ случай**, вопрос секцией в отчёт.