textmachine/docs/PLATFORM_MONEY_TRUTH_SESSION_PROMPT.md

16 KiB
Raw Blame History

Промт: платформенная сессия «ДЕНЬГИ И ПРАВДА НА ЭКРАНЕ» — первая половина критерия впуска

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 сплошно нумерованных живых решений. Ошибка была в том, что судили по ЗАГОЛОВКУ, не прочитав содержимое. ⇒ в журнале сделай тот же тест ПРЕЖДЕ выноса.

Прибор — docs/scripts/carriers.py (написан 06.09 ровно под этот заказ; в дереве, не в чьём-то скрэтчпаде): python3 docs/scripts/carriers.py platform/docs/platform-PROGRESS.md --from N --to M. Он находит /⚠⚠-утверждения, не ссылающиеся ни на ряд регистра, ни на строку бэклога, ни на D-ноту, ни на эрратту, и печатает рядом с числом сколько строк осмотрено — иначе ноль неотличим от «искал не там».

Число называй ПРИБОРОМ, а не памятью. На двух новейших секциях (32007) он даёт 55; ручной проход контролёра давал 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 · что ты сам считаешь слабым местом своей работы.

⚠ Числа снимай после последней правки, не до. Правки якорей объявляй наравне с содержательными.