textmachine/docs/PLATFORM_MONEY_TRUTH_SESSION_PROMPT.md

169 lines
15 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.

# Промт: платформенная сессия «ДЕНЬГИ И ПРАВДА НА ЭКРАНЕ» — первая половина критерия впуска
## 1. Какая проблема и что решит твой результат
Проект готовится впустить **первого платящего чужого человека**. Критерия впуска в репозитории нет
вовсе (строка бэклога **326**) — и этот пак пишет его первую половину **делом**, а не формулировкой.
Сегодня платформа врёт человеку тремя способами и один раз молчит:
- **деньги считаются по нижней границе**: отменённые вызовы, УЖЕ ушедшие к провайдеру, не записываются
никуда (`PD-441`, замер: три отменённых вызова прожили по две минуты с ценой `0`, соседние
завершённые стоили $0.017 и $0.063);
- **заклинивший прогон невидим**: живой прогон с намертво заблокированной расплатой не показывается ни
на одной поверхности и не лечится штатной ручкой; вывести его может только пользователь, нажав Stop,
и **никто ему об этом не говорит** (`PD-424`);
- **чужие события ложились на оплаченную попытку** — чужой потолок ставил `paused` живому оплаченному
прогону, чужой `unit_done` писал главы, которых никто не покупал (`PD-438`);
- **экран врёт о единице**: число под подписью «Знаков» считает руны потока записи файла, а для EPUB —
руны ZIP-архива (строка **282**).
И отдельно: **вход шире выдачи** — интейк принимает форматы, для которых выдача отдаёт книгу одним
полотном (строка **325**). Компенсация «на бете просто не впустим» сегодня — намерение, а не факт: она
требует кода.
Твой результат: человек, заплативший деньги, видит правду о них — и не может застрять молча.
## 2. Зона и git
**Зона записи: `platform/`.** Чужие зоны (`backend/`, `frontend/`, `eval/`, `docs/`) — только чтение;
пинги и итоги — **зонный журнал** `platform/docs/platform-PROGRESS.md` (решение владельца), в
`docs/PROGRESS.md` платформа не пишет.
**Сессия НЕ коммитит** — дерево передаёшь оркестратору. Канон git-дисциплины — `CLAUDE.md`.
`.env` не читать.
## 3. Карта чтения — ЗАКОН
1. `CLAUDE.md` — цели владельца и гардрейлы.
2. `platform/docs/ENGINEERING_STANDARDS.md`**нормы зоны и критерии приёмки (Definition of Done)**.
⚠ Ссылка на этот файл обязана быть в каждом платформенном промте; из семи прежних сослались пять,
и норма дважды проскользнула. Здесь она стоит.
3. `platform/docs/DEFECT_REGISTER.md` — ряды `PD-441`, `PD-424`, `PD-438`.
4. Строки **282**, **325**, **326** бэклога (`docs/PROGRESS.md`, греп `^| N |`).
5. `platform/README.md` + зонный журнал (шапка, не целиком — он 5029 строк, см. §4.0).
**Ратифицированное — в теле промта:**
- **`D39.216` (мандат владельца, 06.09), делай РОВНО так**: чинить **без хаков и воркэраундов**; где
форма не тянет — развязать или переписать. «Дешевле подпереть» доводом НЕ является; отступление
законно, но **объявляется с ценой**.
- **Продуктовых КВОТ и фри-тир-лимитов нет и не проектируется**; оплаты в бете нет, пополнение — из
админки. Первую внешнюю книгу впускает владелец.
- **Число называет ДЕРЕВО и ПОПУЛЯЦИЮ** · **рядом с нулём — контрольная величина** · **мутация
засчитывается по ТЕКСТУ сообщения, а не по факту красноты** · **комментарий не доказывает поведение**
(`D39.214`; грепом в `CLAUDE.md` не ищи, там её нет).
- **Тесты и гейты не подгонять под зелень** (`D39.121`, решает мотив).
## 4. Состав и разметка свободы
### 4.0 Триаж зонного журнала — **делай РОВНО так**, первым, до кода
Журнал вырос до **5029 строк / 42 секций**, и две новейшие занимают 40 %. ⭐ Конвенция слайсов у зоны **своя и уже
работает**: в `platform/docs/archive/` лежат `platform-PROGRESS-P0-P3`, `-P4-P6`, `-P7`, `-P8`. Она остановилась.
**НО РЕЗАТЬ СРАЗУ НЕЛЬЗЯ, и вот замер, купленный 06.09.** Оркестратор проделал ту же операцию над
`STACK_DECISIONS.md` и едва не уничтожил свод: секции «Что решено сессией P…» выглядят хроникой по заголовку, а
внутри — **реестр из 36 сплошно нумерованных живых решений**. Ошибка была в том, что судили по ЗАГОЛОВКУ, не
прочитав содержимое. ⇒ **в журнале сделай тот же тест ПРЕЖДЕ выноса.**
Машинный проход по выносимому (он уже написан контролёром, воспроизводится за секунду): какие `PD-*` и «строки N»
упомянуты и все ли разрешаются; и главное — **какие ⛔/⚠⚠-утверждения не ссылаются ни на ряд регистра, ни на строку
бэклога, ни на D-ноту**. Замер 06.09 по двум новейшим секциям: **69 таких**, в основном «найдено и починено до
сдачи». По норме регистра починенное тоже получает ряд ⇒ **это список на чтение, а не на вынос**.
**Приёмка §4.0:** проход печатает **ноль** утверждений без носителя · вынесено только то, что при чтении оказалось
настоящей хроникой · всё, что оказалось правилом или незакрытой находкой, получило ряд регистра или строку бэклога
ПЕРЕД выносом.
### 4.1 Три мажора — **делай РОВНО так** в предмете, **реши сам** в форме
`PD-441` · `PD-424` · `PD-438`. Все три про одно: **деньги и видимость чужого прогона**, и человек
жалуется одинаково — «списали не то / висит / молчит». Форму лечения выбираешь ты; предмет не двигаешь.
⚠ По `PD-441` отдельно: если полная запись цены отменённого вызова недостижима, **честный выход —
объявить маржу и показать её пользователю**, а не оставить леджер нижней границей молча. Выбор объяви.
### 4.2 Экран не врёт о единице (строка 282) — **делай РОВНО так**
Либо число приезжает из манифеста движка, либо подпись переименована в то, что оно на самом деле
считает. ⛔ Третьего — «оставить как есть, все привыкли» — нет: это живая ложь на продуктовом экране.
### 4.3 Вход не шире выдачи (строка 325) — **реши сам, аргументируй**
Пока структура глав для выдачи не построена (строка 283, чужая зона), интейк обязан **отказывать**
форматам, чью выдачу мы не умеем, — с честной причиной человеку, а не молча. Границу и формулировку
отказа выбираешь ты; **согласуй с тем, что выдача действительно умеет сегодня**, а не с планом.
### 4.4 Два малых дока — **не трогай, это работа оркестратора**
`ENGINEERING_STANDARDS.md` и `PLATFORM_DIRECTION.md` прочитаны оркестратором 06.09 целиком: **оба живые, резать
нечего**. `STACK_DECISIONS.md` тоже остаётся — ему добавлен указатель решений ПО ПРЕДМЕТУ (`8a9a9f4`), потому что
ось «по сессии» заставляла искать правило перебором семи секций. ⚠ Если по ходу работы найдёшь в них утверждение,
разошедшееся с кодом, — **пинг, не правка**: это зона оркестратора.
### 4.5 Чего в паке НЕТ — **не делай**
Не строить структуру глав для выдачи (чужая зона) · не трогать движок · не менять контракт без пинга
оркестратору · не заводить квоты и фри-тир · не открывать бету.
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ — «перечитал сам» не считается
1. **Мутационная проверка каждого пина, который заводишь или трогаешь**: сломай охраняемое свойство,
прогони, **прочитай ТЕКСТ падения** — говорит ли он про сломанное тобой; восстанови и **сверь
sha256**. Артефакт: таблица «мутация → текст падения → хеш восстановлен».
2. **Деньги — из СЫРОГО леджера ДВУМЯ независимыми путями** (норма приёмки проекта). Для `PD-441` это
не формальность, а предмет: покажи расхождение до и после починки на реальных строках.
3. **Опровергатель твоей готовой работы отдельным субагентом.** ⚠ Харнесс по умолчанию субагентов не
спавнит — **тебе разрешено и требуется**. Модель задай ЯВНО (`fable`), одного-двух хватит. Мандат:
«найди отсутствующее и противоречащее».
4. **Греп по отозванной формулировке перед словом «исправлено»** — ноль либо только внутри пометки.
## 6. Оси ревью — характер «Код» и «Доки»
- **Код:** ⚠ «тест утверждает не то, что думает» — каждый пин обязан падать ИМЕННО от того, что он
охраняет (§5.1).
- **Доки:** сверка утверждений против кода и живых носителей — §4.0 и §4.4 ровно об этом.
- **Деньги в любой приёмке — из сырого леджера двумя путями** (§5.2).
## 7. Записка-план ДО работы
≤15 строк оркестратору: что берёшь по каждому пункту · что считаешь спорным в самом заказе · как
именно собираешься лечить `PD-441` (полная запись против объявленной маржи).
## 8. Заявление = команда
Числа и категорика — с командой и её выводом. `MAKE-EXIT` цитируй из лога, а не из кода возврата
составной команды: смена 06.09 попалась на этом.
## 9. Эхо-протокол старта
≤10 строк ДО работы: скоуп · инварианты · не-делать.
## 10. Что НЕ удалось — обязательная секция
Не проверено · не воспроизвелось · где данных не хватило. **«Не измерено» вместо догадки.**
## 11. Канал вопросов и право отказаться
Конфликт промта с кодом — **пинг, не правка**. **Право сказать «этого делать не надо»** с аргументом:
если по коду окажется, что предмет описан мимо, это самый ценный ответ.
## 12. Прямой канал
`CLAUDE.md` §«Связь между сессиями»: `/tmp/textmachine-channel`, свой блок первым делом, живость —
`ListAgents`. ⚠ Роли нет или файла нет — **нормальный случай**: вопрос секцией в отчёт, сессии подряд
не опрашивать.
## Деньги
Пак — **$0 по платным вызовам к моделям**: всё лечится на стенде и фикстурах. ⛔ Если упрёшься в «это
предъявляется только платным прогоном» — **пинг оркестратору за санкцией, не твоё решение**. Стенд
поднимается по рецепту в `STACK_DECISIONS.md`.
## Отчёт
Зонный журнал + сообщение оркестратору: что построено · чем предъявлено (команда и вывод) · таблица
мутаций §5.1 · два независимых пути по деньгам §5.2 · **проход §4.0 с нулём находок без носителя** ·
что сказал опровергатель и что ты с этим сделал · секция §10 · **что ты сам считаешь слабым местом
своей работы**.
⚠ Числа снимай **после последней правки**, не до. Правки якорей объявляй наравне с содержательными.