From e1ae8fe0cd14941dc0c77f9f56caff7fd9c9d29c Mon Sep 17 00:00:00 2001 From: heaven Date: Mon, 31 Aug 2026 15:44:47 +0300 Subject: [PATCH] Write the backend money-and-honesty pack whose own gates caught five blockers, including a carrier fact spliced from two different traces --- docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md | 311 +++++++++++++++++++ docs/README.md | 2 +- 2 files changed, 312 insertions(+), 1 deletion(-) create mode 100644 docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md diff --git a/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md b/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md new file mode 100644 index 00000000..64acd67e --- /dev/null +++ b/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md @@ -0,0 +1,311 @@ +# Промт: бэкенд-пак «ДЕНЬГИ И ЧЕСТНОСТЬ ВЫДАЧИ» — по следам первого платного прогона + +> Выдан оркестратором №21. Заказ владельца после холодного прогона v16. +> **Пак $0: платных вызовов НЕ содержит.** Всё, что здесь есть, чинится и проверяется без покупки. +> ⚠ Состав собран не из бэклога подряд, а из того, что ПЕРВЫЙ ПЛАТНЫЙ ПРОГОН предъявил живьём. + +## 0. Какая проблема и что решит твой результат + +31.08 движок впервые за месяц перевёл книгу за настоящие деньги. Прогон ответил «да» на главный +вопрос — переводит и отдаёт файл, предохранители работают. **И он же показал, что денежные и +отчётные поверхности местами ЛГУТ или СЛЕПЫ**, причём каждый раз молча. + +Пять вещей, увиденных на живых данных, а не в тестах: + +- **самая крупная денежная статья — оплаченный ХВОСТ НЕУДАЧ: $0.123161 = 28.2% захода** (11 строк + `ok=0 AND cost_usd>0`), больше эскалации; +- четверть денег захода ($0.103305 = 23.7%) ушла в эскалацию, у которой есть **документированная + альтернатива в 7.6× дешевле, выключенная по умолчанию**; +- фаза классификатора **напечатала свою смету рядом со своим бюджетом, увидела, что не влезает, и + всё равно стартовала** — оборвалась, 3 батча из 4 не куплены, работа оплачена; +- `build` при сбое уборки вернул бы **exit 1, когда файлы УЖЕ на диске**, и не напечатал бы отчёт + (⚠ **выведено из кода; живьём эта ветка НЕ сработала и не проверена**); +- снапшот-гард назвал причиной **правку конфига, которой не было**; +- остановка по объёму **не отличима от «что-то тихо сломалось» по коду выхода**. + +**Твой результат** — конвейер, который про деньги и про сделанную работу говорит правду: не молчит, +не называет ложных причин и не платит за то, что по построению не может закончиться. + +⚠ **Пак НЕ про качество перевода и НЕ про калибровку ставки.** Числа прогона — проекция на n=3, ими +ничего не калибруют (`D39.165 ⛔г`). + +## 1. Состав — два яруса, и смешивать их НЕЛЬЗЯ + +**Механическая причина деления.** Снапшот стадии фолдит `Model` · `PromptVersion` · `PromptSHA256` · +`Temperature` · **`Reasoning`** (`backend/internal/pipeline/snapshot.go:290`=`Reasoning string`). +Правка любого из них ⇒ `--resnapshot` ⇒ **пере-оплата уже купленной работы**. Денежные бюджеты гейтов +туда НЕ входят (они проходят как wiring). Строка бэклога **182** велит копить снапшот-движущие правки +и вносить ОДНИМ касанием. + +⇒ **Этот пак — ТОЛЬКО ярус A. Ничего снапшот-движущего он не трогает.** + +### Ярус A — твой. Порядок ранжирован по цене рычага, а не по дешевизне. + +**A0. Оплаченный ХВОСТ НЕУДАЧ не виден ни на одной $0-поверхности — а он крупнейшая статья.** +Замер прогона: **11 строк `ok=0 AND cost_usd>0` = $0.123161 = 28.2% захода**, больше эскалации. +Крупнейшая единичная потеря — один edit-юнит, оплаченный ДВАЖДЫ: первая попытка упёрлась в +`finish=length`, 16000 выходных токенов оплачено и выброшено. Ни `status`, ни `report` этой оси не +показывают: деньги видны итогом, а НЕ разложением «за что заплачено впустую». +**Делай:** дать хвост на $0-поверхности тремя срезами (ретраи `attempt>0` · эскалационные хопы +`escalation=1` — оба в `checkpoints`, у которой НЕТ `book_id`, связь через +`JOIN jobs j ON c.job_id = j.id`; и `ok=0 AND cost_usd>0` · `estimated=1` — оба в `request_log`). +⚠ Форма — твоё решение с аргументом: поле `status --json`, секция `report`, или оба. +⚠ **Лечение самой причины (потолок вывода, `finish=length`) — СНАПШОТ-ДВИЖУЩЕЕ ⇒ ярус B.** Здесь — +только ВИДИМОСТЬ. + +**A1. Эхо идёт СРАЗУ в эскалацию, потому что дешёвая ручка выключена по умолчанию.** +`RegenerateEchoBeforeEscalate` (`backend/internal/config/pipeline.go:170`=`regenerate_echo_before_escalate`, +читается `backend/internal/pipeline/stagerun.go:139`) — opt-in, **дефолт 0 = «escalate straight away»**, +и не задан НИ в одном шиппинг-конфиге. Замер прогона: 5 эхо → 5 хопов на `deepseek-v4-pro` = +**$0.103305 = 23.7% захода**. Комментарий рядом с самой ручкой говорит, почему это дорого зря: эхо у +flash 0731 **стохастично на вызов** (побайтно одинаковые запросы дают эхо/не-эхо, D39.61), и ре-ген +восстанавливает **≈7.6× дешевле** хопа. +**Делай:** реши, какой дефолт правильный, и обоснуй замером/квирками, а не вкусом. +⚠ **Снапшот правка НЕ двигает — проверено оркестратором, гейта здесь нет:** `Retries` в +`backend/internal/pipeline/snapshot.go` не встречается ни разу (`grep -c Retries` = 0). ⚠ Настоящий +вопрос обратный и он твой: **ре-ген не фолдится осознанно**, значит два прогона с разным числом +ре-генов дают ОДИН снапшот и внешне неразличимы. Скажи, честно ли это; предложишь носитель числа +ре-генов в отчёте — хорошо, но **саму свёртку не трогай: она снапшот-движущая ⇒ ярус B**. + +**A2. Фаза стартует, зная, что не влезает в собственный бюджет.** +`backend/internal/pipeline/terminologist.go:702`=`estimate before any call` печатает `estimate_usd` и +`budget_usd` РЯДОМ; следующий оператор — проверка ошибки ЧТЕНИЯ бюджета, а **сравнения нет**. +Улика — ОДИН трейс, `ce5990b3…`: `estimate_usd=0.048924 budget_usd=0.02` → фаза стартовала → оборвалась +строкой `budget would be exceeded by the next batch … spent_usd=0.009188 … batches_left=3`. +⚠ Числа снимай САМА из `books/gu-zhenren/coldrun-v16/logs/` (только чтение). `spent_usd=0.009188` +процитировано дословно; накопленное это или трата ЭТОГО прохода — пере-выведи, я не проверял. + +⛔ **И ГЛАВНОЕ, из-за чего наивный предикат недопустим: в том же прогоне есть КОНТРПРИМЕР.** Трейс +`f6bb59d4…` дал `estimate_usd=0.024239 budget_usd=0.02` — тоже «смета больше бюджета» — и **завершился**. +Смета сознательно консервативна (верхняя граница). ⇒ Предикат «смета > бюджета ⇒ отказать» отказал бы +работе, которая влезает. **Это опровержение моей первой формулировки, и я её снимаю.** + +**Делай:** фаза не смеет обрываться на середине, оставив оплаченную частичную работу. Форма — твоё +решение с аргументом, и вот границы: +- **усечение плана до влезающего** — приор оркестратора, ложных отказов не даёт; +- **пропуск фазы с явной строкой** — допустимо; +- ⛔ **отказ классом `Refusal` ЗАПРЕЩЁН.** Фаза идёт ВНУТРИ bank-mining-стопа, то есть ПОСЛЕ оплаченной + черновой волны, а платформа читает полосу 10–19 дословно как «nothing reached a provider, **nothing + was spent**» (`platform/internal/ingest/exit.go`, греп `nothing was spent`). Отказ этим классом + сделает движок лжецом о деньгах. + +⚠ **Стопгапа по числам НЕТ, и это проверено:** `classify_budget_usd` и `gates.terminology.*` не +существуют НИ В ОДНОМ файле `backend/`, а `escalation.budget_usd` в шиппинг-конфигах стоит **0 +НАМЕРЕННО** — это выключатель, а не протухшее число. Реальные носители лежат в КНИЖНЫХ конфигах вне +твоей зоны. ⇒ **в этом паке — только механизм; числа — пинг.** + +**A3. `build` лжёт кодом выхода, и `book_files` обещает файлы, которых нет.** +(а) После коммита файлов `build` удаляет копии незапрошенных форматов +(`backend/internal/pipeline/bookbuild.go:372`=`os.Remove(r.bookFilePath(f))`); сбой возвращается голой +ошибкой ⇒ **exit 1 при новых файлах УЖЕ на диске и БЕЗ `BuildReport`**. По контракту полосы читатель +решит «инфра-сбой, файлов нет» и спишет прогон. +(б) `build --format epub` **молча удаляет** соседний `.book.txt` (набор рядом с БД всегда от ОДНОЙ +сборки) — предъявлено живьём, exit 0, — а `status --json` ПОСЛЕ этого продолжал печатать путь удалённого +файла в `book_files`. ⚠ Формулировка «в ту же секунду» СНЯТА: одномоментного снимка не делалось, +наблюдение — листингом (отчёт прогона §6 п.3). +**Делай:** (а) — чинить: сбой уборки не смеет выглядеть как «ничего не записано». (б) — ⚠ **это НЕ +обязательно дефект движка:** `book_files` документирован как карта МЕСТ. Реши сам и аргументируй: +либо движок публикует только существующее, либо это строка КОНТРАКТА («потребитель не вправе выводить +существование из наличия пути») и тогда — пинг оркестратору, а не правка. Платформа это читает. + +**A4. Снапшот-гард называет причину, которой не было.** +`backend/internal/pipeline/stagerun.go:55`=`the config/prompts changed`. Прогон: конфиг и промпты не +тронуты ни байтом, снапшот двинул **выросший авто-банк** (движок сам предупреждал об этом WARN'ом +раньше). Сообщение отправляет следующую сессию искать правку, которой не существует. +**Делай:** назвать НАСТОЯЩУЮ причину сдвига или перестать называть её вовсе. Причина выводима: снапшот +знает, какое поле разошлось. + +**A5. Остановка по объёму неотличима по коду выхода — и это факт ШВА.** +Прогон: `--max-units 3` + один флагнутый чанк ⇒ **exit 2**, а не 0: ветка `errors.As(err, &flagged)` +стоит раньше (`backend/cmd/tmctl/main.go`, греп `refusalExit`, тело `exitCode`). Объёмный стоп своего +кода не имеет вовсе — он едет РЕЗУЛЬТАТОМ, не ошибкой. То есть «я купил столько и всё» и «что-то тихо +сломалось» для потребителя кодов **машинно неразличимы**; различает только строка `VOLUME CEILING:`. +⚠ Платформа читает КОДЫ ВЫХОДА и поток `events.jsonl`; отчёт `translate` ей не виден вовсе. +⛔ Новый код выхода — слово в ратифицированный словарь, **пинг, а не решение сессии**. +⇒ **Этот пункт — ПИНГ С ДОМАШНЕЙ ЗАГОТОВКОЙ.** Твоя работа: перечислить машинные носители признака, +которые СУЩЕСТВУЮТ (кандидаты: словарь `Finished.Outcome` — `backend/internal/runevents/`, греп +`Outcome`; полоса кодов; кадры потока), сказать про каждый, ратифицирован ли он и достаёт ли до +платформы, и предложить ОДИН с доводом. Правку вносит следующий пак после ратификации. + +**A6. Строка 238 — деньги слепы к правке исходника НА МЕСТЕ.** +`backend/internal/pipeline/rebill.go:123`=`func (r *Runner) projectRebill(` сверяет content-hash строки +только в bank-only ветке со сдвинутым снапшотом; при ТОМ ЖЕ снапшоте строка идёт как «$0 resume» без +сверки ⇒ `translate` перекупает юниты **без предупреждения в смете**. Подтверждено обеими половинами. +Единственный видимый след — INFO `manifest: the stored manifest is stale`. +**Делай:** диспозиция строки — «адресный фикс + посадка-тест»; форма свободна с аргументом. +⚠ **Репро строишь СВОЕЙ фикстурой:** прогон эту пробу сознательно НЕ запускал (правка исходника +закрывала его платную часть навсегда); ближайший носитель — «2 units re-bought» финального ревью +пака D39.175 п.5. + +**A7. Строка 239 — `checkWave` статуса не видит исчезнувшую из конфига стадию.** +У экспорта правило есть (`backend/internal/pipeline/export.go:367`=`func (r *Runner) exportConfigDrift(`), +у статуса — нет (`backend/internal/pipeline/status.go:693`=`checkWave := func(snaps map[string]bool`). +Прогон воспроизвёл дословно: `status` говорит `config_drift=false`, `export` на ТОМ ЖЕ конфиге — `true`. +**Делай:** перенести правило + посадка. + +**A8. `prompt_version` не отслеживает байты промпта.** +Деньги защищены — `PromptSHA256` фолдится в снапшот; СРАВНИМОСТЬ прогонов по метке — нет. Прогон +чуть не построил каузальный вывод на сравнении со стендом, у которого при неизменной метке +`v3-discourse-reflow` промпт правился 01.08. **Делай:** реши форму и аргументируй. ⚠ Из трёх форм **две +снапшот-нейтральны** — гейт при расхождении метки и хеша · явный носитель рядом с меткой; третья, +**метка производная от хеша, СНАПШОТ-ДВИЖУЩАЯ** (`PromptVersion` — снапшотное поле) ⇒ она ярус B и в +этом паке НЕ делается. Это про честность СРАВНЕНИЙ. + +⚠ **Про перелёт суб-бюджета эскалации, чтобы ты не завела его дефектом:** прогон предъявил на живых +деньгах бюджет $0.08 против факта $0.103305, **перелёт +29.1%**. Это **НЕ дефект и НЕ твой пункт**: +пре-хоп-гейт делает read-then-act, и перелёт ≤1 хопа ратифицирован и задокументирован. Трогать +механизм — пинг. Названо здесь только чтобы ты не потратила на него проход. + +**A9–A11 — по остатку ресурса, в этом порядке:** строка **233** (трата терминолога масштабируется +КНИГОЙ, а не грантом: покупка одного юнита ≈1.5× стоимости юнита) · строка **194** (деньги банковых +ролей вне контура согласия) · строка **232** (ось «свежий/пере-делка» из ПОЛНОТЫ СТРОК, а не из факта +отгрузки: добавление стадии превращает дочитанную книгу в «N units NEVER delivered» и приглашает +купить её снова — `backend/internal/pipeline/volume.go:121`=`LeftFresh is undelivered units`). +⚠ Строка 232 ТРЕБУЕТ от промта назвать развилку, и я называю: ключ анонса несёт ВОЛНУ, значит «юнит +отгружен» — факт per-wave, и отгружающей считается волна, владеющая ПОСЛЕДНЕЙ стадией; при другом +выборе черновой-только конвейер получил бы остаток не там. Решение твоё, с аргументом. + +⚠ **Строка бэклога 197** (фикс-лист ФЧ-1…ФЧ-8, вес «скоро — следующее касание денежного пути») в пак +НЕ взята сознательно: она про НЕПРИБИТЫЕ гарантии уже построенного, а этот пак — про поверхности, +которые лгут. Возьмёшь хвостом ресурса — не возражаю, но после A9–A11. + +### Ярус B — НЕ ТВОЙ, назван, чтобы ты не взяла его попутно + +Рычаг эффорта редактора (`stages[edit].reasoning: "off"` → `"low"`) двигает снапшот и ждёт +контролируемой пробы. **Не трогай.** Вендор-факт для контекста: DeepSeek **13.08.2026** дал pro три +уровня `low/high/max` (Change Log + таблица `guides/thinking_mode`, сверено оркестратором 31.08); наш +носитель протух на 18 суток. Прогон ехал вендор-дефолтом `high`, потому что конфиг слал `"off"`, а +`ReasoningNone` шлёт `low|medium|high` и молчит только на `off` +(`backend/internal/llm/capability.go:52`=`ReasoningNone is the OpenAI-compat baseline`). + +## 2. Зона записи и git + +**Пишешь:** `backend/` + **свою секцию «Бэкенд» в `docs/PROGRESS.md`** — краткий итог сессии туда +ОБЯЗАТЕЛЕН, это единственное исключение канона (CLAUDE.md §«Роли сессий и зоны»), и туда же идут +пинги A3(б) и A5. **Не пишешь:** `platform/`, `frontend/`, `eval/`, `books/`, остальное в `docs/`. + +- **Ты НЕ коммитишь.** Лендит оркестратор. +- ⛔ **НИКОГДА:** `git add -A` · `git add .` · `git commit -a` · `reset --hard` · `checkout` поверх + грязного дерева · перезапись истории · `git stash` (стек общий с другими сессиями). +- В дереве могут лежать чужие незакоммиченные правки — **не трогать**. +- ⛔ **Каталог `books/` — СИМЛИНК** в соседний чекаут с ОТДЕЛЬНЫМ git-репозиторием. `find` без `-L` + даёт ложный ноль; `sqlite3` без `?mode=ro` открывает базу НА ЗАПИСЬ и удаляет отслеживаемые + `-wal`/`-shm`. **Любое чтение чужой базы — только `sqlite3 'file:<путь>?mode=ro'`.** +- ⚠ Улика прогона: `books/gu-zhenren/coldrun-v16/` — читать можно и нужно, **менять нельзя**. + +## 3. Карта чтения — ЗАКОН, пять позиций + +1. **`docs/experiments/00-provider-quirks.md`** — эхо-мина, стохастичность эха, цены и ручки. Несущее + для A1. ⚠ Факт о провайдере правится ТОЛЬКО пробой или вендор-докой, с датой и способом в самой + формулировке. +2. **`docs/architecture/15-money-path.md` §2 «Деньги ДВИЖКА»** — леджер, оба потолка, суб-бюджеты. + Якоря пере-проверены 31.08, им можно верить. +3. **`docs/architecture/17-seam-inbound-law.md`** — п.7 (мутирующий глагол сначала даёт проекцию, + потом мутирует) несёт A2; коды выхода читает платформа — это A5. +4. **`backend/README.md`** — волны, стадии, чанкование, артефакты. +5. **Отчёт прогона** — `books/gu-zhenren/coldrun-v16/REPORT.md`. Твоя фактура: живые логи, числа с + отметками момента, дословные строки движка. ⚠ Читай его ВМЕСТЕ с шапкой `pipeline.yaml` того же + каталога: шапка несёт вендор-факт, ставший ложным 13.08, и НЕ правится намеренно — это конфиг, + которым куплен прогон, правка задним числом фальсифицировала бы улику. + +Остальное — код первичен, достаёшь сама грепом. + +## 4. Разметка свободы + +**Делай РОВНО так (отступление = пинг, не интерпретация):** + +- **A1 гейтится твоим же вердиктом о снапшоте.** Двигает — пункт уезжает в ярус B, в паке НЕ делается; +- **новый код выхода не заводится** — полоса ратифицирована, это пинг оркестратору (A5); +- ⛔ **правка/удаление теста, голдена или гейта ради зелени — НЕДОПУСТИМА.** Несогласие с тестом — + пинг, не правка; +- `make battery` в `backend/` — гейт зоны; скипы называть ВСЛУХ, не молча; +- каждая правка получает **посадку** (мутация, которую она ловит), а не только зелёный тест; +- ⚠ **ничего снапшот-движущего.** Пятёрка `Model` · `PromptVersion` · `PromptSHA256` · `Temperature` · + `Reasoning` — самые частые оси, **а НЕ определение**: снапшот фолдит порядка тридцати, включая + версии правил (`ClassifierVersion`, `StyleCheckVersion`…), и комментарии там прямо велят бампать + версию при правке правила. Определение одно: **снапшот-движущее = всё, что попадает в payload + `buildSnapshotID`** (`backend/internal/pipeline/snapshot.go`, греп `func.*buildSnapshotID`). + ⇒ **Гейт машинный, а не память: сними snapshot ID на фикстуре ДО и ПОСЛЕ своего диффа и предъяви + равенство.** Это дешевле любого списка и не протухает. + +**Решаешь сама и аргументируешь:** форма отказа в A2 · форма признака в A5 · движок против контракта +в A3(б) · форма гейта метки в A8 · порядок и глубина A9–A11 по остатку ресурса · что из A9–A11 не +влезло (скажи прямо, не растягивай). + +## 5. Оси предъявления + +Каждый пункт получает вердикт **предъявлено / не предъявлено / опровергнуто**. Три исхода, не два. + +Для A1–A5 предъявление означает: **посадка, которая КРАСНЕЕТ адресно** (падает целевой тест, а не +батарея вообще) — и она сажается на состояние ДО твоей правки, иначе она проверяет саму себя. +Для A6/A7 — воспроизведение дефекта из отчёта прогона до правки и его молчание после. +⚠ У A2 отдельная ось: **никакая частичная работа не должна быть оплачена** при отказе — покажи это +на фикстуре, а не рассуждением. +⚠ **D39.171, и пак попадает в неё лбом:** A2, A4 и A5 все трогают ТЕКСТ сообщений, а ассерт по +подстроке в общем лог-буфере даёт **ТИХО-ЗЕЛЁНОЕ**. Посадка на сообщение обязана предъявить, что она +краснеет при подмене ИМЕННО этой строки. +⚠ Оси выше — приор оркестратора, **не потолок**: считаешь, что уязвимо другое, — замени с доводом и +скажи об этом в отчёте. + +## 6. Мандат самопроверки ИСПОЛНЕНИЕМ + +Самоотчёт «проверено» без исполнения регулярно оказывается ложным. + +**Тебе ЯВНО разрешены субагенты.** Модель задавай ИМЕНЕМ и знай, сколько их работает. По умолчанию +для трудного суждения — **Fable 5**; веер под предмет выбираешь ты. + +1. **Записка-план ДО первой правки** — что берёшь, в каком порядке, чем докажешь каждое. Вердикт по + снапшоту для A1 — первым пунктом. +2. **Дифф `^func Test` — ИСПОЛНЕНИЕМ**, не памятью. +3. **`make battery` целиком** перед сдачей; скипы вслух. +4. **Собственные адверсариальные посадки ВНЕ списка этого промта** — не меньше трёх. Промт написан + оркестратором, который сегодня трижды ошибся в фактуре; считай его приором, а не истиной. +5. **Адверсариальный проход по СВОЕЙ ГОТОВОЙ работе ПЕРЕД сдачей.** Субагент получает твой отчёт, + твои команды и мандат «найди, где она выдаёт непроверенное за проверенное». + **Артефакт — секция отчёта:** какой моделью, сколько агентов, что дано на вход, КАЖДАЯ находка + дословно + твоя диспозиция. Ноль находок — тоже запись, но тогда назови, что проверялось и чем. + ⚠ Уязвимо здесь прежде всего: клеймы «посадка красная адресно» · утверждения о снапшоте · + утверждение, что частичная работа не оплачена · любое число, взятое из отчёта прогона, а не + пере-снятое тобой. +6. **Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии.** +7. **Последний абзац отчёта — план или обещание? Сделай сейчас.** +8. **Интервальная сверка с заказом** на каждой естественной границе: «что предъявлено / что ещё нет», + и хотя бы одну отдай субагенту с явными критериями §5. + +## 7. Записка-план и комплектность + +Записка-план до первой правки (§6.1). Перед сдачей — механическая сверка отчёта против §1 по пунктам: +каждый A получает вердикт §5. Пункт, который ты решила не брать, — **решение с доводом**, а не молчание. +⚠ **Где всё живёт:** записка-план и отчёт — ФАЙЛОМ в репозитории (при лендинге оркестратор уносит их в +`docs/archive/reports/`); краткий итог сессии — секцией «Бэкенд» в `docs/PROGRESS.md`. `/tmp` умирает +с окружением: что должно пережить рестарт, туда не кладётся. + +## 8. «Заявление = команда» + +Каждое число и каждая категорика — С КОМАНДОЙ, которой получены. Приёмка пере-ранит выборочно. +Клейм о рантайме без живого прогона = **PLAUSIBLE**, и так помечается. +⚠ Числа прогона (23.7% · $0.103305 · 16 термов) — **чужие**: либо пере-сними их сама из +`coldrun-v16` read-only, либо помечай «со слов прогона». + +## 9. Эхо-протокол старта + +**ДО первой правки** — ≤10 строк: скоуп / инварианты / чего не делаешь. Первым действием по каналу §12. + +## 10. Obstacle reporting + +Обязательная секция: **что НЕ удалось и что НЕ проверено**. Пустая секция при непустой работе — +дефект отчёта. Ты вправе сказать «этого делать не надо» с аргументом — это поощряется. + +## 11. Канал вопросов + +Конфликт промта с кодом ⇒ **пинг, НЕ интерпретация**. Код первичен: промт мог устареть, и его автор +сегодня уже трижды ошибался в фактуре. Mid-flight правки доезжают ТОЛЬКО релеем — владелец +пере-передаёт, ты эхо-подтверждаешь, и это отдельный пункт отчёта. + +## 12. Прямой канал + +Механизм — `CLAUDE.md` §«Связь между сессиями»; файл **`/tmp/textmachine-channel`**. Впиши СВОЙ блок +первым делом, дописывая в КОНЕЦ. Перед тем как писать кому-то — сверься с `ListAgents`: файл переживает +смерть сессии, `ListAgents` нет. +⚠ Дословно: **нужной роли нет, файла нет или имя не отвечает ⇒ КАНАЛА НЕТ, и это НОРМАЛЬНЫЙ случай: +НЕ опрашивай сессии подряд.** Вопрос — секцией в отчёт. diff --git a/docs/README.md b/docs/README.md index 6a628ad2..f8b744d8 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,7 +22,7 @@ | Роль | Активный промт | Статус | |---|---|---| | Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE | - | Бэкенд | [BACKEND_COLDRUN_V16_SESSION_PROMPT.md](BACKEND_COLDRUN_V16_SESSION_PROMPT.md) | **ВЫДАН 31.08** (**D39.179**): холодный прогон движка на схеме v16 — ПЕРВЫЙ ПЛАТНЫЙ сквозной прогон на текущем HEAD. Санкция владельца: ≈$0.60, потолок $0.80, десять глав ПОЛНОЙ цепью включая редакторскую волну; прежняя «≈$0.05» снята как протухшая. Гейт строк **16·154·157·160·198·202·216**. Оба рубежа пройдены: механическая сверка 12 блоков + опровергатель в четыре линзы — **53 находки, 8 блокеров**, все применены. Прежний пак «писатель книги» ПРИНЯТ И ЗАЛЕНДЖЕН 30.08 (**D39.175**, `8adcb86`): `tmctl build` — EPUB 3 + чистый txt, шесть состояний честности, отказ exit 16 / `--partial`. Открыто строками **238/239**; вопросы владельцу (лестница D25.1 · лейбл К-3 · RTL) — CURRENT-STATE | + | Бэкенд | [BACKEND_MONEY_HONESTY_SESSION_PROMPT.md](BACKEND_MONEY_HONESTY_SESSION_PROMPT.md) | **ВЫДАН 31.08**: пак «деньги и честность выдачи» — $0, собран из того, что первый платный прогон предъявил живьём. Ярус A (снапшот-нейтральный): оплаченный хвост неудач 28.2% · ручка `regenerate_echo_before_escalate` (23.7%) · пред-полётный отказ фазы · ложь `build` кодом выхода · ложная причина снапшот-гарда · неопознаваемость объёмного стопа · строки 238/239/233/194/232 · `prompt_version`. Ярус B (снапшот-движущий, рычаг эффорта) назван и ВЫВЕДЕН из пака. Оба рубежа пройдены: **5 блокеров, 22 major, 16 minor**, все применены — в т.ч. склейка двух трейсов в несущей улике и предикат, который отказал бы влезающей работе. ⚠ Прежний пак — холодный прогон v16 (**D39.179**): отработал, развилка «довести за ≈$1.00 / остановиться» НА ВЛАДЕЛЬЦЕ, отчёт ждёт лендинга в `archive/reports/` | | Платформа | активного НЕТ | пак **P12 «долги под ногами» ПРИНЯТ И ЗАЛЕНДЖЕН 31.08** (**D39.180**) вместе с контрактным минором **0.9.0**. Приёмка: 5 линз, 6 major / 16 minor / 0 блокеров, 8 дофиксов исполнены; числа пере-ранены оркестратором при полном условии хоста. Обязательство D39.158 (снятие обхода `--verify-bank`) закрыто целиком, живой пробой на двух ярусах. Регистр: открытых 97 против 107, major 2 против 7. Промт отработан — `archive/prompts/`. Открыто: `PD-424` сужена до терминальной ручки · новые `PD-433`/`PD-434`/`PD-435` | | Полигон | [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); перечень первого касания — в зонном журнале |