20 KiB
Промт сессии: ПЛАТФОРМА — «пустить внутрь можно»
Роль: платформа. Зона записи:
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. Карта чтения — ПЯТЬ позиций
platform/docs/platform-PROGRESS.md— секция «⚠ ПИНГ ОРКЕСТРАТОРА №22 (04.09, вечер)» и твой же «ОТВЕТ НА ПИНГ №22»: ⚠ читай ЗАГОЛОВОК ответа буквально: «ЧЕТЫРЕ ЕЁ ПУНКТА ОКАЗАЛИСЬ ЧАСТИЧНО НЕВЕРНЫ», один опровергнут целиком (PD-439); «одиннадцать» там — число НАХОДОК, а не пунктов.docs/PROGRESS.md, строки бэклога 269 · 270 · 274 — состав; и 282 (ложная подпись «Знаков»).platform/deploy/README.mdцеликом — предмет блокера, и он же операторский носитель.platform/docs/DEFECT_REGISTER.md— открытые ряды по теме:PD-410,PD-218,PD-448.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 и никогда не перезаписывает) и что происходит с
уже собранными выдачами — пере-собирать, помечать или оставить. ⚠ Это первое, что видит человек, открыв книгу в
читалке.
(5) ДЕЛАЙ РОВНО ТАК — СНЯТЬ ЛОЖНУЮ ПОДПИСЬ «ЗНАКОВ». Счётчик считает руны ПОТОКА ЗАПИСИ файла: для
UTF-8 txt это и есть знаки, для EPUB — руны zip-архива, для GB18030/UTF-16 приближение. ДЕЛАЙ РОВНО ТАК — законная внутризонная форма ОДНА: не отдавай число там, где оно неточно.
character_count уже опционально (*int64 у тебя, character_count? у фронта), значит зона вправе
ПРОСТО НЕ ЗАПОЛНЯТЬ его для входов, где счёт лжёт (EPUB — руны zip; GB18030 и UTF-16 — приближение), и
оставить для UTF-8 txt, где он и есть число знаков. Это не трогает контракт: поле остаётся, меняется
только то, когда оно есть.
⛔ Переименовывать или снимать поле НЕ надо — это правка контракта, которую §2 запрещает твоей рукой.
⛔ Ветку «взять число из манифеста движка» в ЭТОМ паке НЕ бери: сегодня манифест несёт только
source_bytes, а знаки по юниту появятся ТОЛЬКО после движкового пака (его строка 278). Зависимость
названа, чтобы ты не начала с невозможного.
⚠ Переименование ПОЛЯ КОНТРАКТА своей рукой не делай — §2 это запрещает: состав минора выносишь в
отчёт. Своей рукой правится то, что живёт в зоне: источник числа и то, что уходит на провод. ⚠ Фронт заморожен — подпись правится при
разморозке, ЧИСЛО у тебя раньше.
(6) ДЕЛАЙ РОВНО ТАК — РАЗВЁРТЫВАНИЕ БАНКОВОГО КОНТУРА В РАНТБУКЕ. mining.contrast_path —
единственный вход контура; артефакт крупный, генерируется из jieba, в git его нет и быть не должно, а
рантбук о нём молчит (grep -c contrast platform/deploy/README.md → 0). ⇒ Первая выкатка после
лендинга поднимет инстанс, у которого банковый контур не исполняется вовсе. Рантбук обязан сказать:
положить артефакт рядом с конфигом ПЕРЕД выкаткой, откуда его взять, и чем проверить. ⚠ Движковая
половина (отказ загрузки называет путь) уже стоит в backend/configs/pipeline-c1.yaml — не дублируй,
сошлись.
(7) ЗНАЙ ПРО ШОВ, но НЕ строй его здесь: параллельный движковый пак добавляет в событие ceiling
поле «сколько не хватило» и двигает минор потока. Твоя сторона читает поток и обязана пережить новое
поле, не сломавшись; строить его ЧТЕНИЕ — работа пака формы заказа, а не этого. Если твой парсер
падает на незнакомом поле — это дефект и его чинить здесь.
(8) НЕ ДЕЛАЙ: не трогай форму заказа (главы/знаки/деньги) — она ратифицирована D39.196 и идёт
СВОИМ паком после движкового гейта; не двигай форму манифеста; не правь канон своей рукой; не гаси
общий Postgres на стенде (запрет и довод — в твоём же UP.sh).
5. Мандат самопроверки ИСПОЛНЕНИЕМ
Батарея зоны при всех условиях хоста + живая проба каждой построенной поверхности, с командой и её
выводом В ОТЧЁТЕ. Названо поимённо, чтобы букву не удовлетворяло «дёрнул и посмотрел»:
· бэкап — восстановление из копии, и книга с балансом предъявлены на восстановленном;
· рантбук — исполнен ДОСЛОВНО на чистой машине или в контейнере, прогон стартовал;
· дверь — вход в ПРОД-конфигурации (не dev-login) и один защищённый запрос под этим входом;
· имя книги — EPUB, скачанный через дверь, с новым dc:title внутри. Субагенты
разрешены явно, модель называй именем. ⚠ Правка документации — изменение с побочными эффектами и
требует ревью исполнением ровно как код: норма куплена твоим же замером — восемь агентов по СВОЕЙ
работе нашли больше, чем одиннадцать по чужой, и «якоря пере-нацелены» протухло от следующей же правки.
⚠ Утверждение о проверке живёт ровно до следующей правки — гоняй линтер ЦИКЛОМ до чистоты, а не
одним проходом.
5-бис. ЧТО В ПАК НЕ ВОШЛО — подписано пропуском
⚠ Канон велит подписывать пропуск пропуском, а не умалчивать. Того же класса «можно ли пускать
человека», но НЕ здесь:
· строка 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 перед отправкой. Канала нет ⇒ НЕ искать, вопрос секцией в отчёт.