textmachine/docs/BACKEND_CONSENT_SESSION_PROMPT.md

91 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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