textmachine/docs/archive/prompts/PLATFORM_OPERATIONS_SESSION_PROMPT_2026-09-05.md

27 KiB
Raw Blame History

⚠⚠ ОТРАБОТАН 05.09. ИСХОД: ПАК ПРИНЯТ С ДОФИКСОМ — акт D39.201. Приёмочный коммит 7e2226a, дофикс 3e84716. 20 находок приёмки, 5 снято, 15 устояло, 5 major — ТРИ в самом механизме бэкапа. Строки заказа 269 · 270 · 274 · 282 ЗАКРЫТЫ, заведена 293. ⚠ Пункт (6) описывал симптом отсутствия артефакта контраста НЕВЕРНО, пункт (4) заказывал доставку титула в dc:title вопреки ратифицированному — оба дефекта промта, названы зоной. Инструкции этого файла НЕ ИСПОЛНЯЮТСЯ — он архив. Живое состояние: docs/PROGRESS.md и журнал решений.

Промт сессии: ПЛАТФОРМА — «пустить внутрь можно»

Роль: платформа. Зона записи: platform/. Чужие зоны читаешь, не правишь; пинги и итоги — ЗОННЫЙ журнал platform/docs/platform-PROGRESS.mddocs/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 твоей зоны. Не утверждаю, что они не первые; утверждаю, что пропуск сознателен, и если ты считаешь иначе — скажи пингом ДО работы.

5-тер. ТРИ ТРЕБОВАНИЯ ВЛАДЕЛЬЦА К ЭТОМУ ПАКУ (05.09) — обязательны, не опция

(а) ПЕРЕД СДАЧЕЙ убедись, что ПРОМТ НАПИСАН ВЕРНО по заказанным доработкам — и НАЗОВИ расхождения. Не «исполнил, что написано», а: сверь свой результат с составом промта пункт за пунктом и скажи, где промт заказал не то, не полностью или противоречиво. ⚠ Это не вежливость и не формальность: за последние сутки промты этого оркестратора трижды уходили на внешнее ревью и трижды возвращались с находками — в последнем проходе среди них были райдер, заказывавший УЖЕ СДЕЛАННОЕ, и пункт, который одновременно требовал добавить поле и запрещал двигать версию, без которой поле не добавляется. Ты читаешь промт последней и видишь то, чего не увидел его автор. Расхождение — в отчёт отдельной секцией, а не в тихую девиацию.

(б) ВОРКФЛОУ-РЕВЬЮ своей работы — обязательная часть сдачи, не «если останется время». ⚠ Замер, ради которого это требование и стоит: платформенная зона 04.09 пустила восемь агентов по СВОЕЙ готовой работе и нашла больше, чем одиннадцать агентов по чужой. Плотность находок на собственной работе не ниже, чем на чужой (D39.197). И там же: утверждение о проверке живёт ровно до следующей правки — гейты гонять ЦИКЛОМ до чистоты, а не одним проходом.

(в) FABLE 5 АГЕНТ-ПОМОЩНИК РАЗРЕШЁН ЯВНО и назван моделью. Поднимай его на трудные развилки, спорные места и на разбор СВОЕЙ готовой работы; веди с ним долгий разговор ОДНИМ агентом, досылая вопросы, а не поднимая нового на каждый — он держит контекст. ⚠ И спрашивай у него не только «что не так», но и «в чём ты сам не уверен и чего не проверял»: этот вопрос за сутки дал больше, чем любой список находок.

6. Предметные оси ревью

Восстановление из бэкапа (исполнением, не чтением) · рантбук на чистой машине · путь входа в прод-конфигурации · побочные эффекты доковых правок.

6-бис. ОБЯЗАТЕЛЬНОЕ ДЛЯ КОДОВОГО ПРОМТА — пять строк канона

Этот пак пишет код (бэкап, монтирование ручки, вход), значит они действуют. · Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии — не с памятью и не с тем, что было верно вчера. ⚠ У тебя есть свежий замер, зачем это: твои же восемь агентов по СВОЕЙ работе нашли больше, чем одиннадцать по чужой. · Последний абзац отчёта — план или обещание? Сделай это СЕЙЧАС. · Править или удалять тест/гейт ради зелени — НЕДОПУСТИМО. Несогласие — пинг. ⚠ Запрет про МОТИВ (D39.183): правка, вызванная ЗАКАЗАННОЙ этим промтом сменой поведения, — обслуживание, и она ОБЪЯВЛЯЕТСЯ в отчёте. · Дифф ^func Test — ИСПОЛНЕНИЕМ, не по памяти: приложи вывод. · Интервальная самоверификация субагентом против ЯВНЫХ критериев. ⚠ И твоя же норма, купленная вчера: утверждение о проверке живёт ровно до следующей правки — линтер и гейты гонять ЦИКЛОМ до чистоты, а не одним проходом.

7. Записка-план ДО работы

Комплектность против заказа таблицей: пункт → носитель → проба, которой предъявишь.

8. Заявление = команда

Числа и категорика — с командой получения. ⚠ Отрицание выводится ТОЛЬКО из названного грепа, и команда приводится в тексте: за сутки трижды ловили отрицания из команд, которые не сработали (последний раз — grep с | без -E у оркестратора).

9. Эхо-протокол старта

≤10 строк «скоуп / инварианты / не-делать» ДО работы, первым действием, в прямой канал.

10. Obstacle reporting

Обязательная секция: что не удалось, что не проверено. ⚠ Отчитаться о баге не значит его сдать.

11. Канал вопросов

Конфликт промта с кодом — пинг, не интерпретация. Право сказать «этого делать не надо» с аргументом — есть: в прошлом паке ты опровергла пункт оркестратора, исполнение которого внесло бы в регистр ложь.

12. Прямой канал

CLAUDE.md §«Связь между сессиями». Свой блок — первым делом; адрес оркестратора оттуда же, сверять ListAgents перед отправкой. Канала нет ⇒ НЕ искать, вопрос секцией в отчёт.