Make the pack two-phase: ten of thirteen items are one missing law, so the session designs it before touching any instance

This commit is contained in:
heaven 2026-08-31 15:59:48 +03:00
parent e1ae8fe0cd
commit 9d27c0b8e9

View file

@ -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 · порядок и глубина A9A11 по остатку ресурса · что из A9A11 не
влезло (скажи прямо, не растягивай).
## 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`: файл переживает