200 lines
23 KiB
Markdown
200 lines
23 KiB
Markdown
# Промт сессии: ПЛАТФОРМА — «пустить внутрь можно»
|
||
|
||
> **Роль:** платформа. **Зона записи:** `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`, который **прод отказывается запускать**;
|
||
фронт заморожен.
|
||
· **Рантбук деплоя, исполненный дословно, даёт инстанс, отказывающий каждому прогону.**
|
||
· **Имя книги в выданном файле — исходноязычное**, и починить его пользователь не может.
|
||
|
||
**Результат:** после твоего пака — **вместе с райдером Р1 движкового пака** (правки банка едут в
|
||
system-промпт дословно) — внешнего пользователя можно пускать, не рискуя его работой и деньгами.
|
||
⚠ Твой пак ОДИН этого не даёт, и итог писать так нельзя: дыра в промпт живёт в зоне движка и заказана
|
||
параллельно.
|
||
|
||
## 2. Зона записи и git
|
||
|
||
См. шапку. Канон `docs/architecture/14-api-contract/**` **своей рукой НЕ правишь** — состав минора
|
||
выносишь в отчёт на ратификацию (как было в паке «закрыть цикл», и это сработало).
|
||
|
||
## 3. Карта чтения — ПЯТЬ позиций
|
||
|
||
1. `platform/docs/platform-PROGRESS.md` — секция «⚠ ПИНГ ОРКЕСТРАТОРА №22 (04.09, вечер)» и твой же
|
||
«ОТВЕТ НА ПИНГ №22»: ⚠ читай ЗАГОЛОВОК ответа буквально: «ЧЕТЫРЕ ЕЁ ПУНКТА ОКАЗАЛИСЬ ЧАСТИЧНО НЕВЕРНЫ», один опровергнут целиком (`PD-439`); «одиннадцать» там — число НАХОДОК, а не пунктов.
|
||
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` на каждый старт и резюм**. ⚠ Без переменной
|
||
вовсе всё работало бы (сиблинг-дефолт). Там же объяснение отсутствия переменной описывает симптом,
|
||
которого в коде нет. **Условие приёмки: рецепт исполнен ДОСЛОВНО на чистой машине или в контейнере, и
|
||
прогон стартовал.** ⚠ **РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ, что из остатка ревизии брать в этот пак:** зона уже отработала её и закрыла бо́льшую часть своим лендингом `9e978d6`; здесь остаётся то, что она пометила как незакрытое. Возьми, назови поимённо взятое и подпиши пропущенное пропуском — «остальное» без списка промтом не заказывается.
|
||
|
||
**(3) РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ — ДВЕРЬ ДЛЯ НЕ-БРАУЗЕРНОГО КЛИЕНТА.** Развилка: выдавать
|
||
`bearerToken` (контракт его объявляет) ЛИБО признать, что до разморозки фронта единственный путь —
|
||
браузерный, и записать это решением, сняв обещание из канона. **Оба исхода законны, но «оставить как
|
||
есть» — нет:** сегодня канон обещает то, чего нет, и цикл доказан механизмом, которого в бою не бывает.
|
||
Выбор — твой, довод — в отчёт, канон правит оркестратор.
|
||
|
||
**(4) ДЕЛАЙ РОВНО ТАК — ИМЯ КНИГИ.** `updateBook` описан в каноне и не смонтирован (`PATCH` в роутере
|
||
ноль). Смонтировать. ⚠ **РЕШАЕШЬ САМ И АРГУМЕНТИРУЕШЬ:** как новое имя доезжает до `dc:title` (движок берёт
|
||
его из `book.yaml`, который платформа пишет с `O_EXCL` и никогда не перезаписывает) и что происходит с
|
||
уже собранными выдачами — пере-собирать, помечать или оставить.
|
||
⛔ **ГРАНИЦА, КОТОРУЮ НЕ ПЕРЕХОДИТЬ — и я едва не выдал пак без неё.** На листе владельца ОТКРЫТ вопрос
|
||
«лестница D25.1 — какая ступень даёт читателю копию БЕЗ пометки и **что печатать на титуле и в имени
|
||
файла**» (CURRENT-STATE, секция «Открыто на владельце»). ⇒ Ты строишь МЕХАНИЗМ переименования — ручку,
|
||
хранение, доставку в файл. **Ты НЕ решаешь, ЧТО там должно быть напечатано** (оригинальное имя,
|
||
перевод, пометка о неполноте, шаблон имени файла) — это продуктовый ответ владельца, и он не дан.
|
||
Механизм обязан пережить любой его ответ: значение приходит извне и не зашивается.
|
||
⚠ Рядом на том же листе — «лейбл главы без заголовка (сейчас цифры; словесный шаблон — одна строка
|
||
`reader.txt` после ратификации К-3)». Тот же класс: механизм можно, слово нельзя. ⚠ Это первое, что видит человек, открыв книгу в
|
||
читалке.
|
||
|
||
**(5) ДЕЛАЙ РОВНО ТАК — СНЯТЬ ЛОЖНУЮ ПОДПИСЬ «ЗНАКОВ».** Счётчик считает руны ПОТОКА ЗАПИСИ файла: для
|
||
UTF-8 txt это и есть знаки, для EPUB — руны zip-архива, для GB18030/UTF-16 приближение. ⛔ **ПРЕЖНЯЯ РЕДАКЦИЯ ЭТОГО ПУНКТА БЫЛА НЕВЕРНА И ОТОЗВАНА 05.09.** Она велела «просто не заполнять
|
||
поле там, где счёт лжёт». Так нельзя: в каноне `character_count` стоит в `required`, тип
|
||
`[integer, 'null']`, и `null` уже НЕСЁТ СМЫСЛ — «книга ещё загружается». Платформа `null` не шлёт
|
||
никогда, а фронт проверяет `=== undefined` и на `null` нарисует «0». ⇒ «не заполнять» ломает и смысл
|
||
контракта, и потребителя.
|
||
**ДЕЛАЙ РОВНО ТАК: вынеси состав минора в ОТЧЁТ** — либо признак точности рядом с числом, либо смена
|
||
семантики `null`. Канон правит оркестратор; своей рукой поле не трогай (§2). ⚠ Внутри зоны законно и
|
||
нужно другое: назвать в своём журнале, ЧТО именно считает счётчик, чтобы следующий не принял руны zip
|
||
за знаки.
|
||
⛔ **Ветку «взять число из манифеста движка» в ЭТОМ паке НЕ бери:** сегодня манифест несёт только
|
||
`source_bytes`, а знаки по юниту появятся ТОЛЬКО после движкового пака (его строка 278). Зависимость
|
||
названа, чтобы ты не начала с невозможного.
|
||
⚠ **Переименование ПОЛЯ КОНТРАКТА своей рукой не делай** — §2 это запрещает: состав минора выносишь в
|
||
отчёт. Своей рукой правится то, что живёт в зоне: источник числа и то, что уходит на провод. ⚠ Фронт заморожен — подпись правится при
|
||
разморозке, ЧИСЛО у тебя раньше.
|
||
|
||
**(6) ДЕЛАЙ РОВНО ТАК — РАЗВЁРТЫВАНИЕ БАНКОВОГО КОНТУРА В РАНТБУКЕ.** `mining.contrast_path` —
|
||
единственный вход контура; артефакт крупный, генерируется из jieba, в git его нет и быть не должно, а
|
||
**рантбук о нём молчит** (`grep -c contrast platform/deploy/README.md` → 0). ⇒ Первая выкатка после
|
||
лендинга даст инстанс, который **ОТКАЖЕТ КАЖДОМУ ПРОГОНУ**: движок проверяет файл при загрузке конфига
|
||
и отказывает по имени пути (`backend/internal/config/pipeline.go`, греп `CheckMiningContrast`) — это не
|
||
«контур не работает», это конфиг не загружается. ⚠ Прежняя редакция промта описывала симптом мягче и
|
||
была неверна; исправлено 05.09 — два промта одной ночи описывали одну выкатку по-разному. Рантбук обязан сказать:
|
||
положить артефакт рядом с конфигом ПЕРЕД выкаткой, откуда его взять, и чем проверить. ⚠ Движковая
|
||
половина (отказ загрузки называет путь) уже стоит в `backend/configs/pipeline-c1.yaml` — не дублируй,
|
||
сошлись.
|
||
|
||
**(7) ЗНАЙ ПРО ШОВ, но НЕ строй его здесь:** параллельный движковый пак добавляет в событие `ceiling`
|
||
поле «сколько не хватило» и двигает минор потока. Твоя сторона читает поток и обязана пережить новое
|
||
поле, не сломавшись; строить его ЧТЕНИЕ — работа пака формы заказа, а не этого. Если твой парсер
|
||
падает на незнакомом поле — это дефект и его чинить здесь.
|
||
|
||
**(8) НЕ ДЕЛАЙ:** не трогай форму заказа (главы/знаки/деньги) — она ратифицирована `D39.196` и идёт
|
||
СВОИМ паком после движкового гейта; не двигай форму манифеста; не правь канон своей рукой; не гаси
|
||
общий Postgres на стенде (запрет и довод — в твоём же `UP.sh`).
|
||
|
||
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ
|
||
|
||
Батарея зоны при всех условиях хоста + **живая проба каждой построенной поверхности, с командой и её
|
||
выводом В ОТЧЁТЕ**. Названо поимённо, чтобы букву не удовлетворяло «дёрнул и посмотрел»:
|
||
· бэкап — восстановление из копии, и книга с балансом предъявлены на восстановленном;
|
||
· рантбук — исполнен ДОСЛОВНО на чистой машине или в контейнере, прогон стартовал;
|
||
· дверь — вход в ПРОД-конфигурации (не `dev-login`) и один защищённый запрос под этим входом;
|
||
· имя книги — EPUB, скачанный через дверь, с новым `dc:title` внутри. **Субагенты
|
||
разрешены явно**, модель называй именем. ⚠ **Правка документации — изменение с побочными эффектами и
|
||
требует ревью исполнением ровно как код**: норма куплена твоим же замером — восемь агентов по СВОЕЙ
|
||
работе нашли больше, чем одиннадцать по чужой, и «якоря пере-нацелены» протухло от следующей же правки.
|
||
⚠ **Утверждение о проверке живёт ровно до следующей правки** — гоняй линтер ЦИКЛОМ до чистоты, а не
|
||
одним проходом.
|
||
|
||
## 5-бис. ЧТО В ПАК НЕ ВОШЛО — подписано пропуском
|
||
|
||
⚠ **Сверка состава против ЛИСТОВ ВЛАДЕЛЬЦА (реестр требований · его открытый лист · зонные журналы) —
|
||
сделана 05.09, и вот её результат.** Требования, которых пак КАСАЕТСЯ, но не закрывает: **ПТ-44**
|
||
(готовый перевод отдаётся файлом — читаемая книга) закрыт по букве, но **имя книги и структура глав
|
||
внутри файла** — строки 274 и 283, и вторая в пак не входит: без неё читатель не-CJK txt получает
|
||
книгу одним полотном. **ПТ-3** (книга ЦЕЛИКОМ) гейчена денежным паком, не этим. **ПТ-17** (лимит
|
||
размера входа) — строка 94, не взята.
|
||
|
||
|
||
⚠ Канон велит подписывать пропуск пропуском, а не умалчивать. Того же класса «можно ли пускать
|
||
человека», но НЕ здесь:
|
||
· **строка 271** (правки банка едут в system-промпт дословно) — ЗОНА ДВИЖКА, идёт райдером в
|
||
параллельном движковом паке. ⚠ **Пока она открыта, обещание «внешнего пользователя можно пускать»
|
||
неполно** — знай это, когда будешь писать итог.
|
||
· **строка 198** (апгрейд движка стирает замечания читателя) и **строка 254** (пустой файл → интейк
|
||
уничтожает загрузку) — та же природа, отложены сознательно: обе требуют согласования с движком.
|
||
· **`PD-424`** (живой прогон с намертво заблокированной расплатой невидим — деньги висят) и **`PD-438`**
|
||
(владение потоком не переживает свип) — открытые major твоей зоны. Не утверждаю, что они не первые;
|
||
утверждаю, что пропуск сознателен, и если ты считаешь иначе — скажи пингом ДО работы.
|
||
|
||
## 6. Предметные оси ревью
|
||
|
||
Восстановление из бэкапа (исполнением, не чтением) · рантбук на чистой машине · путь входа в
|
||
прод-конфигурации · побочные эффекты доковых правок.
|
||
|
||
## 6-бис. ОБЯЗАТЕЛЬНОЕ ДЛЯ КОДОВОГО ПРОМТА — пять строк канона
|
||
|
||
Этот пак пишет код (бэкап, монтирование ручки, вход), значит они действуют.
|
||
· **Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии** — не с памятью и не с
|
||
тем, что было верно вчера. ⚠ У тебя есть свежий замер, зачем это: твои же восемь агентов по СВОЕЙ
|
||
работе нашли больше, чем одиннадцать по чужой.
|
||
· **Последний абзац отчёта — план или обещание? Сделай это СЕЙЧАС.**
|
||
· **Править или удалять тест/гейт ради зелени — НЕДОПУСТИМО.** Несогласие — пинг. ⚠ Запрет про МОТИВ
|
||
(`D39.183`): правка, вызванная ЗАКАЗАННОЙ этим промтом сменой поведения, — обслуживание, и она
|
||
ОБЪЯВЛЯЕТСЯ в отчёте.
|
||
· **Дифф `^func Test` — ИСПОЛНЕНИЕМ, не по памяти:** приложи вывод.
|
||
· **Интервальная самоверификация субагентом** против ЯВНЫХ критериев. ⚠ И твоя же норма, купленная
|
||
вчера: **утверждение о проверке живёт ровно до следующей правки** — линтер и гейты гонять ЦИКЛОМ до
|
||
чистоты, а не одним проходом.
|
||
|
||
## 7. Записка-план ДО работы
|
||
|
||
Комплектность против заказа таблицей: пункт → носитель → проба, которой предъявишь.
|
||
|
||
## 8. Заявление = команда
|
||
|
||
Числа и категорика — с командой получения. ⚠ Отрицание выводится ТОЛЬКО из названного грепа, и команда
|
||
приводится в тексте: за сутки трижды ловили отрицания из команд, которые не сработали (последний раз —
|
||
`grep` с `|` без `-E` у оркестратора).
|
||
|
||
## 9. Эхо-протокол старта
|
||
|
||
≤10 строк «скоуп / инварианты / не-делать» ДО работы, первым действием, в прямой канал.
|
||
|
||
## 10. Obstacle reporting
|
||
|
||
Обязательная секция: что не удалось, что не проверено. ⚠ **Отчитаться о баге не значит его сдать.**
|
||
|
||
## 11. Канал вопросов
|
||
|
||
Конфликт промта с кодом — пинг, не интерпретация. Право сказать «этого делать не надо» с аргументом —
|
||
есть: в прошлом паке ты опровергла пункт оркестратора, исполнение которого внесло бы в регистр ложь.
|
||
|
||
## 12. Прямой канал
|
||
|
||
`CLAUDE.md` §«Связь между сессиями». Свой блок — первым делом; адрес оркестратора оттуда же, сверять
|
||
`ListAgents` перед отправкой. Канала нет ⇒ **НЕ искать**, вопрос секцией в отчёт.
|