Issue two packs: the engine stops killing work it already admitted, and the platform becomes a place a real user can be let into
This commit is contained in:
parent
2d1c57332d
commit
40e1606fbb
3 changed files with 237 additions and 2 deletions
120
docs/BACKEND_MONEYSTOP_SESSION_PROMPT.md
Normal file
120
docs/BACKEND_MONEYSTOP_SESSION_PROMPT.md
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
# Промт сессии: БЭКЕНД — «денежный стоп перестаёт быть аварией»
|
||||
|
||||
> **Роль:** бэкенд. **Зона записи:** `backend/` + СВОЯ секция в `docs/PROGRESS.md`. Чужие зоны
|
||||
> (`platform/`, `frontend/`, `eval/`) читаешь, не правишь. **Не коммитишь** и вообще не трогаешь индекс
|
||||
> и историю — почему именно и полный список запретов: `CLAUDE.md`, §«Git-координация мультисессий».
|
||||
> Дерево готовишь и передаёшь оркестратору на лендинг.
|
||||
|
||||
## 1. Какая проблема и что решит твой результат
|
||||
|
||||
Пользователь покупает перевод книги. Сегодня **книгу нельзя дочитать никакими деньгами**, а книга
|
||||
короче десяти глав не переводится вообще никогда. Замерено живьём на платном прогоне и воспроизведено
|
||||
дважды. Половина причины — платформенная (форма потолка), и её чинит другой пак. **Твоя половина —
|
||||
движковая, и она гейт: пока она не сделана, любая новая форма заказа упирается в ту же стену.**
|
||||
|
||||
Механизм: движок резервирует оценку перед каждым вызовом и **отказ ОДНОГО резерва гасит всю книгу** —
|
||||
уже допущенные параллельные вызовы отменяются, ничего не списывается, ничего не производится. Прогон
|
||||
умирает за 10–15 секунд с нулём сделанного.
|
||||
|
||||
**Результат, которого ждут:** отказ в резервации означает «не начинаем новое», а не «убиваем начатое».
|
||||
Прогон доводит допущенное, завершается штатно и НАЗЫВАЕТ, сколько не хватило.
|
||||
|
||||
## 2. Зона записи и git
|
||||
|
||||
См. шапку. Дополнительно: `docs/architecture/**` — зона оркестратора, туда не пишешь; расхождение
|
||||
дока с кодом — пингом в свою секцию `docs/PROGRESS.md`, не своей правкой.
|
||||
|
||||
## 3. Карта чтения — ПЯТЬ позиций, дальше только по ссылкам отсюда
|
||||
|
||||
1. `docs/architecture/15-money-path.md` — §«ОТКРЫТАЯ РАЗВИЛКА 04.09» целиком: разбор трёх независимых
|
||||
чтений, все числа с носителями.
|
||||
2. `docs/PROGRESS.md`, строки бэклога **277 · 261 · 262 · 278** — твой состав, формулировки зоны.
|
||||
3. `backend/internal/pipeline/volume.go`, греп `THE STOP IS A COMPLETION, NOT A HALT` — **прецедент
|
||||
внутри твоего же пакета**: объёмный потолок уже построен с нужной семантикой и САМ противопоставляет
|
||||
себя денежному.
|
||||
4. `docs/architecture/05-decisions-log.md` — грепом: `D39.122` (семантика `--ceiling-usd`), `D39.170`
|
||||
(структурное лечение пробоя потолка), `D39.183` (правка тестов — про МОТИВ).
|
||||
5. `docs/experiments/00-provider-quirks.md` — **перед любым утверждением о биллинге провайдера.**
|
||||
|
||||
**Код первичен.** Отправные точки, а не истина: `stagerun.go` (греп `r.Store.Reserve(r.Book.BookID`,
|
||||
`ReserveDeniedBook`, `No 2xx ever arrived`), `waverun.go` (греп `context.WithCancel`), `ledger.go`
|
||||
(греп `func (s *Store) Reserve`), `httpllm.go` (греп `for att := 0; att < profile.MaxAttempts`).
|
||||
|
||||
## 4. Состав — что делать РОВНО так и что решаешь сам
|
||||
|
||||
**(1) ДЕЛАЙ РОВНО ТАК — отказ резерва перестаёт гасить допущенное.** Отступление = пинг.
|
||||
· Отказ **защёлкивается на уровне ВОЛНЫ**: кормилец перестаёт раздавать индексы по первому
|
||||
`ReserveDeniedBook`. Без защёлки W воркеров дадут W путей ошибки вместо одной остановки.
|
||||
· Уже допущенные вызовы **дорабатываются**. `cancel()` по деньгам не зовётся.
|
||||
· При непустом полёте отказ **не окончателен**: ждать settle (settle ≤ оценки, значит запас растёт) и
|
||||
повторить тот же резерв. Отказ при пустом полёте — стоп.
|
||||
· Завершение **штатное**, с леджером сделанного и отложенного. Exit 4 и `paused` остаются: семантика
|
||||
«деньги кончились, резюмируемо» верна.
|
||||
|
||||
**(2) ДЕЛАЙ РОВНО ТАК — «сколько не хватило» доезжает наружу.** Число у тебя уже есть и печатается
|
||||
(`denied estimate=$…`), но умирает в stderr транзиентного юнита. Оно обязано ехать в событие `ceiling`
|
||||
отдельным полем. ⚠ Наружу — только НЕДОСТАЮЩАЯ сумма; цены моделей, стадий и вызовов не выходят.
|
||||
|
||||
**(3) ДЕЛАЙ РОВНО ТАК — проекция цены в `manifest --json` и `status --json`.** По ЮНИТУ: `source_chars`
|
||||
(руны ингестированного текста, включая пробелы), раздельно плотные/разреженные знаки, `expected_usd`;
|
||||
по КНИГЕ: `book_once_usd` (книжное слагаемое — терминология тратится на книгу, не на юнит) и
|
||||
`step_max_usd` (самый крупный неделимый резерв). Считается из СВОИХ цен и фертильности, **без константы
|
||||
за главу**. Плюс `structure: detected|declared|none` — признак доверия к нарезке. Всё аддитивно, версию
|
||||
манифеста НЕ двигает.
|
||||
|
||||
**(4) РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ:** форма защёлки; где именно ждать settle; как назвать поля;
|
||||
сеттлить ли оценкой поздно отменённый вызов и по какому различителю (латентность — кандидат, порог
|
||||
обязан быть обоснован ЗАМЕРОМ, а не назначен).
|
||||
|
||||
**(5) НЕ ДЕЛАЙ:** не убирай резервацию — она единственная гарантия «не потратим больше, чем дано»;
|
||||
не резервируй «ожидаемое» вместо worst-case; не ужимай `max_tokens` под остаток (двигает `request_hash`
|
||||
⇒ снапшот и детерминизм, и даёт `finish=length` ценой целой генерации); не трогай кумулятивную
|
||||
семантику `--ceiling-usd`; не двигай `manifestVersion`, `StreamVersion`, схему и контракт.
|
||||
|
||||
## 5. Пять рисков реализации — названы зоной, проверить ОБЯЗАН
|
||||
|
||||
(а) защёлка на уровне волны, не у воркера · (б) учёт объёма (`volume.go`, `bound()`/`reconcile`): частичная
|
||||
волна под потолком — НОВАЯ форма для этих счётчиков, и они уже дважды ловили ложные числа · (в) событие
|
||||
`ceiling` и exit 4/`paused` обязаны сработать так же и не задержаться · (г) дневной потолок делит ветку с
|
||||
книжным — проверить явно · (д) эскалационный хоп: убедиться, что его деградация не опирается на саму отмену.
|
||||
|
||||
## 6. Мандат самопроверки ИСПОЛНЕНИЕМ
|
||||
|
||||
Батарея + **собственные адверсариальные посадки ВНЕ списка автора** через `cmd/tmmutate` (каталог 151
|
||||
запись — пополняешь). **Субагенты РАЗРЕШЕНЫ явно**, модель называй имени. Обязательное условие приёмки:
|
||||
посадка **«под потолком волна погасила допущенный вызов» предъявлена КРАСНОЙ**.
|
||||
|
||||
⚠ **SURVIVED не является находкой, пока не показано, что посадка ВООБЩЕ меняет поведение** — норма
|
||||
куплена эквивалентной посадкой оркестратора (обход окна с обратной стороны воспроизводил оригинал).
|
||||
⚠ Мутации — только на ЗАКОММИЧЕННОМ дереве; на копии — `GOFLAGS=-buildvcs=false`.
|
||||
⚠ Каталог гонять ЦЕЛИКОМ: протухшая запись даёт `ROTTED` и не кладёт прогон.
|
||||
|
||||
## 7. Записка-план ДО работы
|
||||
|
||||
Комплектность против заказа — механически, таблицей: пункт → файл → тест → посадка. До первой правки.
|
||||
|
||||
## 8. Заявление = команда
|
||||
|
||||
Каждое число и каждая категорика отчёта — с командой получения. Приёмка пере-ранит. ⚠ Отрицательное
|
||||
утверждение («такого пути нет») выводится ТОЛЬКО из названного грепа, и команда приводится в тексте:
|
||||
за сутки трижды ловили отрицания, выведенные из команд, которые не сработали.
|
||||
|
||||
## 9. Эхо-протокол старта
|
||||
|
||||
≤10 строк «скоуп / инварианты / не-делать» ДО работы — в прямой канал, первым действием.
|
||||
|
||||
## 10. Obstacle reporting
|
||||
|
||||
Обязательная секция отчёта: что НЕ удалось, что не проверено, что осталось гипотезой. ⚠ **Отчитаться о
|
||||
баге не значит его сдать** — норма куплена вчера: найденное и не починенное не превращается в долг
|
||||
решением о темпе.
|
||||
|
||||
## 11. Канал вопросов
|
||||
|
||||
Конфликт промта с кодом или доками — **пинг, не интерпретация**. Право сказать «этого делать не надо» с
|
||||
аргументом — есть, и им пользуются: за сутки зона трижды опровергла оркестратора по существу.
|
||||
|
||||
## 12. Прямой канал
|
||||
|
||||
Механизм — `CLAUDE.md` §«Связь между сессиями». Впиши свой блок первым делом; адрес оркестратора бери
|
||||
оттуда же и сверяй `ListAgents` перед отправкой. Канала нет ⇒ **НЕ искать**, вопрос секцией в отчёт.
|
||||
115
docs/PLATFORM_OPERATIONS_SESSION_PROMPT.md
Normal file
115
docs/PLATFORM_OPERATIONS_SESSION_PROMPT.md
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
# Промт сессии: ПЛАТФОРМА — «пустить внутрь можно»
|
||||
|
||||
> **Роль:** платформа. **Зона записи:** `platform/`. Чужие зоны читаешь, не правишь; пинги и итоги —
|
||||
> ЗОННЫЙ журнал `platform/docs/platform-PROGRESS.md` (в `docs/PROGRESS.md` не пишешь). **Не коммитишь**
|
||||
> и не трогаешь индекс и историю: `CLAUDE.md`, §«Git-координация мультисессий». Дерево передаёшь
|
||||
> оркестратору. **Обязательное пре-чтение:** `platform/docs/ENGINEERING_STANDARDS.md` — отступление = пинг.
|
||||
|
||||
## 1. Какая проблема и что решит твой результат
|
||||
|
||||
04.09 цикл замкнулся живьём: пользователь получил EPUB настоящего платного перевода через API. После
|
||||
этого стратегическая ревизия нашла, что **пускать внутрь живого человека сегодня нельзя**, и причины
|
||||
не в переводе:
|
||||
|
||||
· **Бэкапов нет ни у оплаченной работы, ни у денежного реестра.** Одна потеря диска — весь купленный
|
||||
перевод всех пользователей и весь баланс кредитов, без возможности восстановить или доказать, кто
|
||||
сколько платил. Из всех находок дня это единственная **без частичного исхода**.
|
||||
· **У продукта ноль дверей.** Контракт объявляет токен для не-браузерного клиента и сам признаёт, что
|
||||
выдать его нечем; живой цикл прошёл через `/auth/dev-login`, который **прод отказывается запускать**;
|
||||
фронт заморожен.
|
||||
· **Рантбук деплоя, исполненный дословно, даёт инстанс, отказывающий каждому прогону.**
|
||||
· **Имя книги в выданном файле — исходноязычное**, и починить его пользователь не может.
|
||||
|
||||
**Результат:** после твоего пака внешнего пользователя можно пускать, не рискуя его работой и деньгами.
|
||||
|
||||
## 2. Зона записи и git
|
||||
|
||||
См. шапку. Канон `docs/architecture/14-api-contract/**` **своей рукой НЕ правишь** — состав минора
|
||||
выносишь в отчёт на ратификацию (как было в паке «закрыть цикл», и это сработало).
|
||||
|
||||
## 3. Карта чтения — ПЯТЬ позиций
|
||||
|
||||
1. `platform/docs/platform-PROGRESS.md` — секция «⚠ ПИНГ ОРКЕСТРАТОРА №22 (04.09, вечер)» и твой же
|
||||
«ОТВЕТ НА ПИНГ №22»: одиннадцать пунктов ревизии, из них один опровергнут зоной.
|
||||
2. `docs/PROGRESS.md`, строки бэклога **269 · 270 · 274** — состав; и **282** (ложная подпись «Знаков»).
|
||||
3. `platform/deploy/README.md` целиком — предмет блокера, и он же операторский носитель.
|
||||
4. `platform/docs/DEFECT_REGISTER.md` — открытые ряды по теме: `PD-410`, `PD-218`, `PD-448`.
|
||||
5. `docs/architecture/17-seam-inbound-law.md` — закон входной двери шва, если тронешь интейк.
|
||||
|
||||
**Код первичен.** Отправные точки: `cmd/tmplatformd/runner.go` (греп `markerArgv`), `internal/login/`,
|
||||
`internal/books/books.go` (греп `type counter`), `internal/httpapi/v0.go`.
|
||||
|
||||
## 4. Состав — что РОВНО так и что решаешь сам
|
||||
|
||||
**(1) ДЕЛАЙ РОВНО ТАК — БЭКАПЫ НА БОЕВОМ ПУТИ.** Бэкапится и оплаченная работа (проектные SQLite книг),
|
||||
и денежный реестр (Postgres). Движковые `store.BackupSQLite` / `tmctl backup` СУЩЕСТВУЮТ и платформой не
|
||||
зовутся ни разу — проверь сам и используй, если подходят. Восстановление обязано быть **предъявлено
|
||||
исполнением**, а не описано: подними копию из бэкапа и покажи, что книга и баланс на месте. ⚠ Без
|
||||
предъявленного восстановления бэкап — это вера, а не механизм.
|
||||
|
||||
**(2) ДЕЛАЙ РОВНО ТАК — ПОЧИНИ РАНТБУК ДЕПЛОЯ.** Он ставит CLI в одно место и велит указать переменную
|
||||
на другое, которого не создаёт ⇒ `MarkerArgv` пуст ⇒ **`503` на каждый старт и резюм**. ⚠ Без переменной
|
||||
вовсе всё работало бы (сиблинг-дефолт). Там же объяснение отсутствия переменной описывает симптом,
|
||||
которого в коде нет. **Условие приёмки: рецепт исполнен ДОСЛОВНО на чистой машине или в контейнере, и
|
||||
прогон стартовал.** Заодно — остальные пункты ревизии, подтверждённые твоей же проверкой.
|
||||
|
||||
**(3) РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ — ДВЕРЬ ДЛЯ НЕ-БРАУЗЕРНОГО КЛИЕНТА.** Развилка: выдавать
|
||||
`bearerToken` (контракт его объявляет) ЛИБО признать, что до разморозки фронта единственный путь —
|
||||
браузерный, и записать это решением, сняв обещание из канона. **Оба исхода законны, но «оставить как
|
||||
есть» — нет:** сегодня канон обещает то, чего нет, и цикл доказан механизмом, которого в бою не бывает.
|
||||
Выбор — твой, довод — в отчёт, канон правит оркестратор.
|
||||
|
||||
**(4) ДЕЛАЙ РОВНО ТАК — ИМЯ КНИГИ.** `updateBook` описан в каноне и не смонтирован (`PATCH` в роутере
|
||||
ноль). Смонтировать; титул уезжает в выданный файл. ⚠ Это первое, что видит человек, открыв книгу в
|
||||
читалке.
|
||||
|
||||
**(5) ДЕЛАЙ РОВНО ТАК — СНЯТЬ ЛОЖНУЮ ПОДПИСЬ «ЗНАКОВ».** Счётчик считает руны ПОТОКА ЗАПИСИ файла: для
|
||||
UTF-8 txt это и есть знаки, для EPUB — руны zip-архива, для GB18030/UTF-16 приближение. Либо переименуй
|
||||
в размер файла, либо возьми число из манифеста движка. ⚠ Фронт заморожен — подпись правится при
|
||||
разморозке, ЧИСЛО у тебя раньше.
|
||||
|
||||
**(6) НЕ ДЕЛАЙ:** не трогай форму заказа (главы/знаки/деньги) — она ратифицирована `D39.196` и идёт
|
||||
СВОИМ паком после движкового гейта; не двигай форму манифеста; не правь канон своей рукой; не гаси
|
||||
общий Postgres на стенде (запрет и довод — в твоём же `UP.sh`).
|
||||
|
||||
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ
|
||||
|
||||
Батарея зоны при всех условиях хоста + **живая проба каждой построенной поверхности**. **Субагенты
|
||||
разрешены явно**, модель называй именем. ⚠ **Правка документации — изменение с побочными эффектами и
|
||||
требует ревью исполнением ровно как код**: норма куплена твоим же замером — восемь агентов по СВОЕЙ
|
||||
работе нашли больше, чем одиннадцать по чужой, и «якоря пере-нацелены» протухло от следующей же правки.
|
||||
⚠ **Утверждение о проверке живёт ровно до следующей правки** — гоняй линтер ЦИКЛОМ до чистоты, а не
|
||||
одним проходом.
|
||||
|
||||
## 6. Предметные оси ревью
|
||||
|
||||
Восстановление из бэкапа (исполнением, не чтением) · рантбук на чистой машине · путь входа в
|
||||
прод-конфигурации · побочные эффекты доковых правок.
|
||||
|
||||
## 7. Записка-план ДО работы
|
||||
|
||||
Комплектность против заказа таблицей: пункт → носитель → проба, которой предъявишь.
|
||||
|
||||
## 8. Заявление = команда
|
||||
|
||||
Числа и категорика — с командой получения. ⚠ Отрицание выводится ТОЛЬКО из названного грепа, и команда
|
||||
приводится в тексте: за сутки трижды ловили отрицания из команд, которые не сработали (последний раз —
|
||||
`grep` с `|` без `-E` у оркестратора).
|
||||
|
||||
## 9. Эхо-протокол старта
|
||||
|
||||
≤10 строк «скоуп / инварианты / не-делать» ДО работы, первым действием, в прямой канал.
|
||||
|
||||
## 10. Obstacle reporting
|
||||
|
||||
Обязательная секция: что не удалось, что не проверено. ⚠ **Отчитаться о баге не значит его сдать.**
|
||||
|
||||
## 11. Канал вопросов
|
||||
|
||||
Конфликт промта с кодом — пинг, не интерпретация. Право сказать «этого делать не надо» с аргументом —
|
||||
есть: в прошлом паке ты опровергла пункт оркестратора, исполнение которого внесло бы в регистр ложь.
|
||||
|
||||
## 12. Прямой канал
|
||||
|
||||
`CLAUDE.md` §«Связь между сессиями». Свой блок — первым делом; адрес оркестратора оттуда же, сверять
|
||||
`ListAgents` перед отправкой. Канала нет ⇒ **НЕ искать**, вопрос секцией в отчёт.
|
||||
|
|
@ -22,8 +22,8 @@
|
|||
| Роль | Активный промт | Статус |
|
||||
|---|---|---|
|
||||
| Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE |
|
||||
| Бэкенд | [BACKEND_WIREBATCH_SESSION_PROMPT.md](BACKEND_WIREBATCH_SESSION_PROMPT.md) | **ВЫДАН 04.09** — вайр-батч «род, экран цели, заголовки инъекций»: строки 210 · 113→46 · 134 · 140 · 184(а) + дофикс чужого пака и ФЧ-7. Пере-снапшот батча ратифицирован единым актом (**D39.190** п.4). Предыдущий пак принят с дофиксом 03.09 (**D39.187**), промт в [archive/prompts/](archive/prompts/BACKEND_CONSENT_SESSION_PROMPT_2026-09-02.md) |
|
||||
| Платформа | активного НЕТ | **ПАК ОТРАБОТАН И ЗАЛЕНДЖЕН 04.09** (`adf5e53`, **D39.194**): цикл замкнут живьём — платный EPUB через API, `epubcheck` 0/0/0/0; контрактный минор **0.10.0** ратифицирован тем же актом. Промт — в [archive/prompts/](archive/prompts/PLATFORM_EXPORT_SESSION_PROMPT_2026-09-04.md) с баннером исхода. ⚠ Следующий пак собирается по двум мажорам, найденным самим прогоном (`PD-440` книгу нельзя дочитать до конца · `PD-441` halt не пишет цену отменённых вызовов) |
|
||||
| Бэкенд | [BACKEND_MONEYSTOP_SESSION_PROMPT.md](BACKEND_MONEYSTOP_SESSION_PROMPT.md) | **ВЫДАН 05.09** — «денежный стоп перестаёт быть аварией»: строки 277 · 261 · 262 · 278. **ГЕЙТ для формы заказа (D39.196)** — пока отказ резерва гасит допущенное, в стену упирается любой путь. ⚠ Предыдущий пак (вайр-батч) заленджен КОДОМ, но приёмка НЕ закрыта: зона чинит девять пунктов, эррата 04.09-д |
|
||||
| Платформа | [PLATFORM_OPERATIONS_SESSION_PROMPT.md](PLATFORM_OPERATIONS_SESSION_PROMPT.md) | **ВЫДАН 05.09** — «пустить внутрь можно»: бэкапы (строка 269, единственная находка дня БЕЗ частичного исхода) · дверь для не-браузерного клиента (270) · блокер рантбука деплоя · имя книги (274) · ложная подпись «Знаков» (282). ⚠ Форму заказа НЕ трогает — она идёт своим паком ПОСЛЕ движкового гейта |
|
||||
| Полигон | [POLYGON_EXP2223_REDO_SESSION_PROMPT.md](POLYGON_EXP2223_REDO_SESSION_PROMPT.md) (отложенный — [POLYGON_PACKAGE4_SESSION_PROMPT.md](POLYGON_PACKAGE4_SESSION_PROMPT.md), строка 85) | фаза Д ИДЁТ; ⚠ живой носитель курса — в `eval/dovodka/`, какой именно называет зона (⚠ [POLYGON_PHASE_D_HANDOFF.md](POLYGON_PHASE_D_HANDOFF.md) — перекрытый снимок, читать не как курс) |
|
||||
| Фронт | активного НЕТ | **ЗОНА ЗАМОРОЖЕНА** (D39.136 п.2 + D39.147: разморозка отдельным словом владельца, не привязана к P7); перечень первого касания — в зонном журнале |
|
||||
| Контракт | активного НЕТ | канон — `architecture/14-api-contract/`; ⚠ версию брать ФАЙЛОМ (`grep '^ version:' openapi.yaml`), не отсюда: миноры ратифицируются D-нотами и их содержание грепается по реестру нот. |
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue