diff --git a/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md b/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md index 64acd67e..9fc9a3b4 100644 --- a/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md +++ b/docs/BACKEND_MONEY_HONESTY_SESSION_PROMPT.md @@ -29,7 +29,67 @@ ⚠ **Пак НЕ про качество перевода и НЕ про калибровку ставки.** Числа прогона — проекция на n=3, ими ничего не калибруют (`D39.165 ⛔г`). -## 1. Состав — два яруса, и смешивать их НЕЛЬЗЯ +## 1. ГЛАВНОЕ: пак ДВУХФАЗНЫЙ, и первая фаза — ДИЗАЙН, а не правка + +⚠ **Это заказ владельца 31.08, и он меняет предмет пака.** Когда одиннадцать правок были собраны, стало +видно, что **десять из тринадцати пунктов — ОДНОЙ ФОРМЫ**: движок ЗНАЕТ факт и не сообщает его, либо +сообщает ложь, либо сообщает не в тот канал. + +| | что движок знает | что делает | +|---|---|---| +| A0 | хвост неудач посчитан | не показывает | +| A2 | смета фазы посчитана и НАПЕЧАТАНА рядом с бюджетом | не судит | +| A3а | файлы записаны на диск | `exit 1` говорит «ничего не записано» | +| A3б | формат удалён | `book_files` печатает его путь | +| A4 | какое поле снапшота разошлось | называет выдуманную причину | +| A5 | остановка по объёму | говорит прозой, не машинным каналом | +| A6 | исходник правлен, юниты будут перекуплены | смета молчит | +| A7 | стадия исчезла из конфига | `status` говорит `drift=false`, `export` — `true` | +| A8 | байты промпта (`PromptSHA256`) | метка `prompt_version` с ними не связана | +| A10 | деньги банк-ролей потрачены | проекция их не покрывает | + +Десять экземпляров одной болезни — это **не десять багов, а один отсутствующий закон**: у движка нет +единой дисциплины «что оператор и платформа обязаны узнать, и по какому каналу». Чинить поштучно +значит гарантировать одиннадцатый экземпляр через месяц. + +### ФАЗА 1 — спроектировать закон. Твой главный результат. + +**Что спроектировать.** Правило вида «факт КЛАССА X, вычисленный движком, обязан достичь потребителя Y +по каналу Z» — и гейт, который ловит нарушение механически. + +**Жёсткие рамки, они не обсуждаются:** +- **Потребителей ТРИ, и они читают РАЗНОЕ.** Оператор — stdout/stderr и отчёт `translate`. Платформа — + коды выхода · поток `events.jsonl` · **`status --json`, чей allowlisted-подмножество она декодирует** + (`platform/internal/runner/engine.go`, греп `Status runs the reconciliation channel`; ⚠ у неё же + `exit 2` от `status` — ОТВЕТ, а не отказ). ⛔ **Отчёт `translate` платформе НЕ виден** — это и есть + ловушка A5. $0-читатели — обе стороны. Закон назначает канал ПО ПОТРЕБИТЕЛЮ, а не по удобству. + ⚠ Перечень проверь САМА грепом по `platform/internal/runner/`: я его уже один раз назвал неверно. +- **Каналы РАТИФИЦИРОВАНЫ и узки.** Полоса кодов выхода — замороженный словарь; кадры потока — контракт + шва; `status --json` читает платформа. ⛔ **Новое слово в любой из них — НЕ решение сессии.** Закон + может ПОТРЕБОВАТЬ расширения — тогда это пункт на ратификацию, а не правка. +- **Закон без гейта гниёт.** Сегодня в проекте это измерено на соседнем механизме: из ~818 указателей + доков по содержимому проверялись 89, и потому 34 уехали молча. Спроектируй, чем ловится + ОДИННАДЦАТЫЙ экземпляр — иначе мы вернёмся сюда. + +**Проверка качества дизайна — на корпусе, а не на вкусе:** закон обязан объяснить **все десять** строк +таблицы выше, и для каждой сказать, какой канал правильный. ⚠ **Найдёшь одиннадцатый экземпляр, +которого в таблице нет, — это лучший результат фазы 1**, лучше самого закона: он покажет, что мерка +работает. Ищи специально. + +⛔ **ФАЗУ 1 ТЫ НЕ РАТИФИЦИРУЕШЬ.** Дизайн уезжает пингом оркестратору → владельцу. **Стоп-точка: к +правкам классов A0/A2/A3/A4/A5/A6/A7/A8/A10 не приступаешь до ответа.** Это дизайн-решение размера +владельца, а не хвост пака. + +### ФАЗА 2 — пока ждёшь ратификации и после неё + +**Пока ждёшь** — бери то, что от закона НЕ зависит и его не предрешает: **A1** (дефолт эхо-регена), +**A9** (строка 233), **A11** (строка 232). Это экономика и абстракция, не раскрытие. + +**После ратификации** — применяешь закон к десяти экземплярам. ⚠ Если ответ придёт поздно или не +придёт, отчёт сдаётся с фазой 1 и тремя пунктами фазы 2; **это ПОЛНОЦЕННЫЙ результат, а не недоделка**. +Не изобретай закон сама, чтобы успеть. + +## 2. Состав правок — два яруса, и смешивать их НЕЛЬЗЯ **Механическая причина деления.** Снапшот стадии фолдит `Model` · `PromptVersion` · `PromptSHA256` · `Temperature` · **`Reasoning`** (`backend/internal/pipeline/snapshot.go:290`=`Reasoning string`). @@ -120,11 +180,13 @@ flash 0731 **стохастично на вызов** (побайтно один стоит раньше (`backend/cmd/tmctl/main.go`, греп `refusalExit`, тело `exitCode`). Объёмный стоп своего кода не имеет вовсе — он едет РЕЗУЛЬТАТОМ, не ошибкой. То есть «я купил столько и всё» и «что-то тихо сломалось» для потребителя кодов **машинно неразличимы**; различает только строка `VOLUME CEILING:`. -⚠ Платформа читает КОДЫ ВЫХОДА и поток `events.jsonl`; отчёт `translate` ей не виден вовсе. +⚠ Платформа читает коды выхода, поток `events.jsonl` и `status --json`; **отчёт `translate` ей не +виден** — поэтому «признак есть в отчёте прогона» задачу НЕ решает. ⛔ Новый код выхода — слово в ратифицированный словарь, **пинг, а не решение сессии**. ⇒ **Этот пункт — ПИНГ С ДОМАШНЕЙ ЗАГОТОВКОЙ.** Твоя работа: перечислить машинные носители признака, которые СУЩЕСТВУЮТ (кандидаты: словарь `Finished.Outcome` — `backend/internal/runevents/`, греп -`Outcome`; полоса кодов; кадры потока), сказать про каждый, ратифицирован ли он и достаёт ли до +`Outcome`; полоса кодов; кадры потока; **поля `status --json`** — единственный из четырёх, который +платформа уже декодирует), сказать про каждый, ратифицирован ли он и достаёт ли до платформы, и предложить ОДИН с доводом. Правку вносит следующий пак после ратификации. **A6. Строка 238 — деньги слепы к правке исходника НА МЕСТЕ.** @@ -178,7 +240,7 @@ flash 0731 **стохастично на вызов** (побайтно один `ReasoningNone` шлёт `low|medium|high` и молчит только на `off` (`backend/internal/llm/capability.go:52`=`ReasoningNone is the OpenAI-compat baseline`). -## 2. Зона записи и git +## 3. Зона записи и git **Пишешь:** `backend/` + **свою секцию «Бэкенд» в `docs/PROGRESS.md`** — краткий итог сессии туда ОБЯЗАТЕЛЕН, это единственное исключение канона (CLAUDE.md §«Роли сессий и зоны»), и туда же идут @@ -193,7 +255,7 @@ flash 0731 **стохастично на вызов** (побайтно один `-wal`/`-shm`. **Любое чтение чужой базы — только `sqlite3 'file:<путь>?mode=ro'`.** - ⚠ Улика прогона: `books/gu-zhenren/coldrun-v16/` — читать можно и нужно, **менять нельзя**. -## 3. Карта чтения — ЗАКОН, пять позиций +## 4. Карта чтения — ЗАКОН, пять позиций 1. **`docs/experiments/00-provider-quirks.md`** — эхо-мина, стохастичность эха, цены и ручки. Несущее для A1. ⚠ Факт о провайдере правится ТОЛЬКО пробой или вендор-докой, с датой и способом в самой @@ -210,7 +272,7 @@ flash 0731 **стохастично на вызов** (побайтно один Остальное — код первичен, достаёшь сама грепом. -## 4. Разметка свободы +## 5. Разметка свободы **Делай РОВНО так (отступление = пинг, не интерпретация):** @@ -232,7 +294,7 @@ flash 0731 **стохастично на вызов** (побайтно один в A3(б) · форма гейта метки в A8 · порядок и глубина A9–A11 по остатку ресурса · что из A9–A11 не влезло (скажи прямо, не растягивай). -## 5. Оси предъявления +## 6. Оси предъявления Каждый пункт получает вердикт **предъявлено / не предъявлено / опровергнуто**. Три исхода, не два. @@ -247,7 +309,7 @@ flash 0731 **стохастично на вызов** (побайтно один ⚠ Оси выше — приор оркестратора, **не потолок**: считаешь, что уязвимо другое, — замени с доводом и скажи об этом в отчёте. -## 6. Мандат самопроверки ИСПОЛНЕНИЕМ +## 7. Мандат самопроверки ИСПОЛНЕНИЕМ Самоотчёт «проверено» без исполнения регулярно оказывается ложным. @@ -270,39 +332,40 @@ flash 0731 **стохастично на вызов** (побайтно один 6. **Перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии.** 7. **Последний абзац отчёта — план или обещание? Сделай сейчас.** 8. **Интервальная сверка с заказом** на каждой естественной границе: «что предъявлено / что ещё нет», - и хотя бы одну отдай субагенту с явными критериями §5. + и хотя бы одну отдай субагенту с явными критериями §6. -## 7. Записка-план и комплектность +## 8. Записка-план и комплектность -Записка-план до первой правки (§6.1). Перед сдачей — механическая сверка отчёта против §1 по пунктам: -каждый A получает вердикт §5. Пункт, который ты решила не брать, — **решение с доводом**, а не молчание. +Записка-план до первой правки (§7.1). Перед сдачей — механическая сверка отчёта против §1 (фазы) и §2 +(состав правок) по пунктам: +каждый A получает вердикт §6. Пункт, который ты решила не брать, — **решение с доводом**, а не молчание. ⚠ **Где всё живёт:** записка-план и отчёт — ФАЙЛОМ в репозитории (при лендинге оркестратор уносит их в `docs/archive/reports/`); краткий итог сессии — секцией «Бэкенд» в `docs/PROGRESS.md`. `/tmp` умирает с окружением: что должно пережить рестарт, туда не кладётся. -## 8. «Заявление = команда» +## 9. «Заявление = команда» Каждое число и каждая категорика — С КОМАНДОЙ, которой получены. Приёмка пере-ранит выборочно. Клейм о рантайме без живого прогона = **PLAUSIBLE**, и так помечается. ⚠ Числа прогона (23.7% · $0.103305 · 16 термов) — **чужие**: либо пере-сними их сама из `coldrun-v16` read-only, либо помечай «со слов прогона». -## 9. Эхо-протокол старта +## 10. Эхо-протокол старта -**ДО первой правки** — ≤10 строк: скоуп / инварианты / чего не делаешь. Первым действием по каналу §12. +**ДО первой правки** — ≤10 строк: скоуп / инварианты / чего не делаешь. Первым действием по каналу §13. -## 10. Obstacle reporting +## 11. Obstacle reporting Обязательная секция: **что НЕ удалось и что НЕ проверено**. Пустая секция при непустой работе — дефект отчёта. Ты вправе сказать «этого делать не надо» с аргументом — это поощряется. -## 11. Канал вопросов +## 12. Канал вопросов Конфликт промта с кодом ⇒ **пинг, НЕ интерпретация**. Код первичен: промт мог устареть, и его автор сегодня уже трижды ошибался в фактуре. Mid-flight правки доезжают ТОЛЬКО релеем — владелец пере-передаёт, ты эхо-подтверждаешь, и это отдельный пункт отчёта. -## 12. Прямой канал +## 13. Прямой канал Механизм — `CLAUDE.md` §«Связь между сессиями»; файл **`/tmp/textmachine-channel`**. Впиши СВОЙ блок первым делом, дописывая в КОНЕЦ. Перед тем как писать кому-то — сверься с `ListAgents`: файл переживает