91 lines
9.1 KiB
Markdown
91 lines
9.1 KiB
Markdown
# Промт сессии: БЭКЕНД — «число согласия на пути второй покупки»
|
||
|
||
> **Роль:** бэкенд. **Зона записи:** `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`.
|
||
Нужной роли нет ⇒ **канала нет, это НОРМАЛЬНЫЙ случай**, вопрос секцией в отчёт.
|