20 KiB
Промт: сквозной пак «ХОЛОДНЫЙ ПРОГОН B — платформа → бэкенд → ФАЙЛ, ВТОРОЙ раз»
Выдан оркестратором №23 (сессия
textmachine-11) 11.09. Пак ПЛАТНЫЙ, санкция владельца получена дословно («разрешаю») на прямой вопрос с числами: ждём ≈$0.42, машинный кап ≈$2.5 холда. Носитель санкции —docs/NEAR_TERM_PLAN.md§«Решения владельца, уже полученные».
1. Какая проблема и что решит твой результат
Месяц назад движок умел переводить, но никто не видел, как платформа ведёт настоящую книгу от двери до
файла. 11.09 это увидели один раз — прогон A: три главы 蛊真人, 27 платных вызовов, $0.419423, книга
дошла до EPUB. Один прогон дал знак, но не величину.
Твой прогон B покупает четыре вещи, которых нет ни у кого, и каждая — не «ещё раз то же самое»:
- ДВЕ миграции схемы ни разу не шли на живом прогоне — только в тестах.
v17(wave_selection: что каждая волна ВИДЕЛА в банке — ось, которой уretrieval_stateнет) иv18(reasoning_tokensполучили смысл: «размышление, оплаченное СВЕРХ completion», на DeepSeek это 0 по определению, и колонка всю жизнь проекта несла ноль, выглядящий замером). Первое живое исполнение обеих — твоё. - Прибор консистентности впервые даст числа С ЖИВОГО ПРОГОНА. Сегодня все
I1/I2получены ПОВТОРНЫМ чтением одной и той же сохранённой базы прогона A. Пере-скан не то же, что прогон: он не проходит через запись. - Платформенный пак (идемпотентный резюм, терминальное состояние) проверяется СКВОЗЬ, а не юнитами.
- ⛔ Вторая точка по денежной дыре — и она нужна по НОРМЕ, а не для красоты. Весь довод «четверть денег купила пустоту» стоит на ОДНОМ прогоне, а квирки §3д прямо говорят: смета DeepSeek с одиночного вызова ошибается на порядок, сметы строятся на ПОВТОРАХ. ⇒ у числа есть знак и нет величины.
⛔ И вот чего твой прогон НЕ покупает, чтобы ты не потратил на это ни цента: он НЕ отвечает на вопрос «безопасно ли редактору думать меньше» (ряд 433). Это парный дизайн на повторах с армом без фактора, он стоит отдельных денег и отдельного заказа. Твой прогон идёт на БОЕВЫХ настройках как есть.
2. Зона записи и git
⛔ ЭТОТ ПАК НЕ ПРАВИТ КОД НИ ОДНОЙ ЗОНЫ. Ни backend/, ни platform/, ни frontend/. Найдёшь дефект —
пингом мне, а не правкой: прогон, чинящий найденное, перестаёт быть холодным и теряет право сравниваться
с A.
- Ты не коммитишь вообще ничего. Пре-рег и улики передаёшь мне, я лендлю. Порядок жёсткий: пре-рег готов → пинг мне → я коммичу фриз → и только после этого первый платный вызов.
- Рабочее дерево прогона живёт вне репозитория и вне общего скретчпада (его чистит не только твой
процесс). Предлагаю
~/tm-coldrun-b. - ⚠
books/версионируются ОТДЕЛЬНЫМ репозиторием; в клоне их нет. Исходник читается из главного дерева как ФАЙЛ, read-only.
3. Карта чтения — ЗАКОН, дальше только по её ссылкам
CLAUDE.md— целиком (ты его уже прочёл, если попал сюда правильно).docs/experiments/00-provider-quirks.md— перед первым платным вызовом, §3д особенно.docs/architecture/05-decisions-log.md— только телаD39.247(акт прогона A: чем он предъявлен и где остался слеп) иD39.251(что именно построено в наблюдаемости денег и почему лекарство выключено).platform/README.md— как поднимается стенд.- Архивный промт прогона A —
docs/archive/prompts/POLYGON_COLD_RUN_A_SESSION_PROMPT.md. ⛔ Инструкции оттуда НЕ ИСПОЛНЯЮТСЯ (архив), но §4.1 и §4.2 несут ПЕРЕ-СНЯТЫЕ предусловия стенда и механику фриза, и переписывать их сюда значило бы завести копию, которая стареет молча. Читай как СПРАВКУ и проверяй каждое утверждение своим прибором: часть из них снята исправлениями ПОСЛЕ выдачи.
Код-факты добывай сам. file:line ниже — отправные точки, а не истина: код первичен.
4. Состав. Порядок фаз ЖЁСТКИЙ
4.0 Фаза 0 — $0-ДЫМ. Делай РОВНО так, и это первая работа пака
⛔ Ни одного платного вызова, пока дым не прошёл целиком. Довод не гигиенический: первая же
инфраструктурная осечка на платной руке сожжёт «холодность» книги — прогон уйдёт в failed, и следующий
старт той же книги пойдёт как ПРОДОЛЖЕНИЕ, а не как холодный.
Дым обязан доказать: стенд поднят и порт отвечает ТВОЕМУ pid · гость заведён · деньги начислены · книга
принята · прогон стартовал · кадры доехали · узел подписи ответил · резюм прошёл · выгрузка собралась и
файл скачался. Инструмент заглушки — ШТАТНЫЙ провайдер kind: local; образцы рендера $0-конфига лежат в
репо (platform/internal/runner/bankapply_live_test.go, греп zeroCostPipeline).
⛔ Пин фазы 0, без которого дым вырожден: после рендера напечатай счёт платных слагов в получившемся
конфиге — ноль, при контрольном счёте тех же слагов в backend/configs/pipeline-c1.yaml — не ноль.
Молчащий греп и чистый конфиг иначе неотличимы.
4.1 Предусловия — проверь КАЖДОЕ своим прибором, список от прогона A мог устареть
Известное на 11.09 (справка, не истина): локальной модели на машине НЕТ (ни ollama, ни слушателя на
11434) ⇒ настоящие узлы проходятся только платно · кластер Postgres поднят на -h /tmp -p 55433 -U postgres,
ОС-роль ubuntu-26 в нём НЕ заведена · артефакт контраста майнинга нужен CheckMiningContrast и сверяется
по sha256, а не по имени (рядом на диске лежит фальшивый кандидат) · четыре переменные окружения решают,
существует ли путь вообще (TM_PLATFORM_EXPORT_FORMATS пуст по умолчанию ⇒ ручки выгрузки не монтируются,
и последней трети пути для тебя нет) · epubcheck/java на хосте нет и поставить их нельзя.
⛔ Ключи провайдера. Значение TM_PLATFORM_ENGINE_KEYS_PATH даю я по твоему пингу. Нет значения ⇒
СТОП ДО фриза. .env читать запрещено гардрейлом.
4.2 Фриз — делай РОВНО так
Фриз = sha коммита ПЛЮС бинари, собранные из ЛОКАЛЬНОГО КЛОНА (git clone <репо> <путь>). Довод —
главное дерево движут параллельные сессии.
⛔ Не git worktree. Бинарь из ЛИНКОВАННОГО воркри не несёт VCS-штампа ВООБЩЕ (замер: 24 строки
go version -m, из них vcs.* — 0), потому что .git воркри — ФАЙЛ и поиск корня VCS в Go его пропускает.
⇒ правило «отказывать при vcs.modified=true» на таком бинаре выполняется ВСЕГДА и не проверяет ничего.
У клона .git — настоящий каталог, и штамп живой. Третье условие отказа обязательно: отсутствие строк
vcs.*. Перед сборкой — test ! -e /tmp/.git; GOFLAGS=-buildvcs=false в фриз-сборке ЗАПРЕЩЁН.
⚠ Штамп снимается на КАЖДУЮ попытку, а не один раз: резюм может сменить бинарь под тем же прогоном —
сверяй по run_attempts, а не по тому, что лежит на PATH в конце.
4.3 Пре-регистрация — главный рубеж пака, и он дороже самого прогона
⛔ ЗНАМЕНАТЕЛЬ ПРЕ-РЕГИСТРИРУЕТСЯ ДО ДЕНЕГ, иначе B ответит числом на другой вопрос. B — ЕЩЁ ОДИН
одиночный прогон, и две точки распределением не станут. Настоящая ценность B не «вторая точка к 25.4 %», а
request_log ВСЕХ единиц прогона ⇒ доля выброшенных первых попыток ПО ЕДИНИЦАМ, а не по вызовам.
Мера задана мной, делай РОВНО так (я снял её на прогоне A своим прибором, числа ниже — твой базис сравнения):
- единица =
(chapter, chunk_idx, stage, role); - знаменатель = единицы, за которые заплачено хоть раз (
sum(cost_usd) > 0); - числитель = единицы, где есть хоть одна оплаченная и НЕ принятая попытка (
ok = 0 AND cost_usd > 0); - прогон A: 4 из 17 = 23.5 %, тогда как по ВЫЗОВАМ то же событие даёт 4 из 27 = 14.8 %. Две меры расходятся в полтора раза — вот почему мера объявляется заранее.
⚠ Второй путь к тому же числу обязателен и считается НЕЗАВИСИМО (без колонки degraded): у меня оба
пути на A дали ровно $0.106472 = 25.4 % цены книги. Сойдутся у тебя — число крепкое; разойдутся — это
находка, а не помеха.
В пре-рег идут также: ожидаемый исход КАЖДОГО шага, написанный ДО прогона · sha256 исходника · sha256
ФАКТИЧЕСКОГО pipeline-YAML (платформа берёт файл ЦЕЛИКОМ, пер-полевого оверрайда нет ⇒ «прогон на c1» без
sha — утверждение без носителя) · список глав с units_total · грант, TTL выгрузки.
⛔ Претрейн: 蛊真人 узнаётся моделями 4 из 5 ⇒ пре-рег объявляет, что клеймов О КАЧЕСТВЕ пак не делает
вовсе. Узлы судятся механизмом (кадры, флаги, леджер), а не чтением текста.
4.4 Платная фаза
Реши сам и аргументируй: какую книгу и сколько глав брать. Мой приор, опровергается замером: те же
главы 1–3 той же книги, что и в A (books/gu-zhenren/coldrun-v16/guzhenren-ch1-10.gb18030.txt) — тогда
числа сравнимы поединично. Возьмёшь другое — сравнение A↔B становится слабее, и это надо назвать.
⛔ Приёмка каждого узла — по ТРЁМ независимым следам (Postgres · диск и systemd · HTTP), не по самоотчёту движка.
⛔ Живость длинного прогона проверяется АКТИВНО: не жди финального уведомления — раз в пару часов сверяй рост числа вызовов и трат по леджеру ДВУМЯ чтениями. Зависшая задача от идущей по сигналу завершения неотличима, и у зависания нет цвета.
⛔ Деньги: ждём ≈$0.42, кап ≈$2.5 холда. Упёрся в потолок — СТОП и пинг мне, не режь молча и не проси подъёма «по проекции»: прогнозный запрос оставляет ложный след «владелец согласился на пере-оплату», которой не было.
4.5 Фаза 3 — $0 после прогона
Прибор консистентности по ОТГРУЖЕННОМУ тексту (I1/I2 с печатаемыми знаменателями), выгрузка, структурное
чтение EPUB (zip + container.xml + nav), и обе новые миграции предъявлены данными: wave_selection
несёт строки обеих волн, reasoning_tokens — то, что провайдер прислал, а не ноль.
5. Где этот пак мягкий — четыре места, назвал я, веер выбираешь ты
Мандат самопроверки — исполнением, субагенты разрешены явно. Направление:
- Сборщик, который молчит, и сборщик, который прочитал ноль, — неотличимы. Засей в стендовую БД заведомо ненулевой банк и заведомо удержанный юнит и потребуй, чтобы сборщики стали КРАСНЫМИ. Не покрасневший на подсадке сборщик в платную фазу НЕ ДОПУСКАЕТСЯ.
- Дым меняет ТРИ фактора разом (провайдер + книга + база) ⇒ при провале платной руки он не разделяет причину. Где дёшево — меняй по одному.
- Отрицательный замер обязан доказать, что спросил существующее. Рядом с каждым нулём ПЕЧАТАЙ
контрольную величину. И помни две ловушки среды:
grepздесь — обёртка над ugrep, чтит.gitignoreи не видитbooks/;sqlite3как CLI на машине НЕТ — толькоpython3+mode=ro. - Число, выведенное из соседнего поля, не краснеет нигде. Если в строке есть поле, прямо отвечающее на
вопрос (номер попытки живёт в
trace_id), любой ВЫВОД ответа — по времени, по порядку, по соседству — уже дефект метода, даже когда сходится.
6. Предметные оси ревью
Выбери 1–3 и назови какие: деньги под гонкой · граница «холодности» (что в прогоне перестало быть первым разом) · провенанс каждого числа (чем снято, каким прибором, на какой клетке).
7. Записка-план ДО работы
Перед первой командой — записка: фазы, что чем предъявляется, где ждёшь осечки. Комплектность против заказа сверяй механически, а не памятью.
8. Заявление = команда
Каждое число и каждая категорика отчёта идут с командой, которой получены. Приёмка пере-снимает.
9. Эхо-протокол старта
Первым действием — ≤10 строк СВОИМИ словами: что понял · что считаешь опасным · что считаешь неверным.
Дословный пересказ подтверждает канал, но не понимание, и ошибку промта повторяет вместе с ним. Отправь
мне (textmachine-11) через /tmp/textmachine-channel.
10. Что НЕ удалось — обязательная секция отчёта
И вторая её половина, без которой она вырождена: «где прибор слеп и я это знаю» — что невидимо · почему не чинил · чем закрывается. ⭐ Формулировка прошлой смены, идущая нормой: «в коде названо, в отчёте нет — значит для следующей смены НЕ названо».
11. Канал вопросов и право отказаться
Конфликт промта с кодом или доками — пинг мне, не интерпретация. И у тебя есть право сказать «этого делать не надо» с аргументом: прошлые три сессии возражали, и в двух случаях правы были они.
12. Прямой канал
Механизм — CLAUDE.md §«Связь между сессиями». Впиши свой блок в /tmp/textmachine-channel ПЕРВЫМ
действием. Нужной роли нет ⇒ канала нет, и это нормально: НЕ опрашивай сессии подряд.
13. Критерий завершённости
У каждого пункта заказа — исход (сделано · не делаю с доводом · пинг) · круги СОШЛИСЬ (последний не дал НОВЫХ находок) · числа сняты ПОСЛЕ последней правки · всё живое в ДЕРЕВЕ или у меня, а не в письме · явное «работа завершена, править не планирую». Без последнего пак считается идущим.