Write two packs the day's decisions created: connect the signed canon and measure the checker, and make an order say in money whether it covers the book

This commit is contained in:
heaven 2026-09-05 18:53:04 +03:00
parent 6641f875bd
commit e89facd573
3 changed files with 163 additions and 2 deletions

View file

@ -0,0 +1,75 @@
# Промт сессии: КАЧЕСТВО — подать подписанный канон в прогон и ЗАМЕРИТЬ чекер
> **Роль:** бэкенд (+ полигонная половина замера). **Зона записи:** `backend/` и своя секция «Бэкенд» в
> `docs/PROGRESS.md` — единственное разрешённое каноном исключение из «`docs/` — зона оркестратора».
> **Ты НЕ коммитишь:** дерево готовишь и передаёшь оркестратору `textmachine-main-27`. Чужие зоны
> (`platform/`, `frontend/`, `eval/` вне своей половины) и соседний worktree `/home/ubuntu/projects/textmachine`
> не трогаешь. **`.env` не читаешь никогда.**
## КАРТА ЧТЕНИЯ — ЗАКОН, пять позиций, дальше только по её ссылкам
1. `CLAUDE.md` — цели, зоны, гардрейлы.
2. **`^## D39.198`** (журнал решений) — приоритет качества словом владельца и почему весов рубрики НЕ НУЖНО.
3. **`^## D39.205`** — что владелец решил 05.09 про гейт глоссария и чего он НЕ решал.
4. Строки бэклога **295 · 12 · 296** в `docs/PROGRESS.md` (греп `^| 295 |` и так далее).
5. `docs/architecture/12-go-style-notes.md` §1 — язык кода и три корзины целевого языка.
⚠ Голову журнала целиком НЕ читать. Номер грепается: тело — `^## D<номер>`; **подномер (`D39.196`, `D2.3`)
собственного тела НЕ имеет** — это ПУНКТ внутри родителя, отбрось хвост.
## ЗАЧЕМ ЭТОТ ПАК — одной фразой
**Приоритет №1 владельца — «100% консистентность, никаких разнопереведённых терминов» — сегодня не
исполняется, и живая дыра НЕ там, где её искали.** Не порог 98% и не ранг флага: **подписанный канон из
53 терминов просто НЕ ПОДКЛЮЧЁН к прогону.** Весь измеренный дрейф — дрейф С ОТКЛЮЧЁННЫМ каноном; там,
где его подключали, консистентность 99.3100%. ⇒ мерить точность чекера на таком прогоне — мерить не то.
## ЧТО ДЕЛАТЬ — ТРИ ШАГА, ПОРЯДОК ЖЁСТКИЙ
**ШАГ 1. ПОДАТЬ КАНОН В ПРОГОН (строка 295).** Ключ `glossary_seed` в книжном конфиге существует
(`backend/internal/config/book.go`, греп `GlossarySeed`); канон лежит файлом. Задача: предъявить
ИСПОЛНЕНИЕМ, что прогон идёт С каноном — что подписанные формы доезжают до провода обеих ролей и что
`status --json` это показывает. ⚠ Если подключение двигает `RequestHash`/снапшот — **скажи ЦИФРУ цены
пере-снапшота ДО того, как что-то менять**, и жди слова оркестратора: пере-снапшот есть пере-оплата.
**ШАГ 2. ЗАМЕРИТЬ ЧЕКЕР — ЭТО ГЛАВНОЕ (строка 12).** Прежний замер полноты ПОРОЧЕН и почему — сказано в
самой строке: класс одного иероглифа не имел НИ ОДНОГО положительного примера, то есть «ошибок нет»
означало «мерить было нечем». Нужны **точность и полнота на выборке, где положительные примеры есть**,
и отдельно — **доля ЛОЖНЫХ срабатываний**. ⛔ Слово владельца 05.09 дословно: «если он ложно
положительно будет стрелять это плохо, очень плохо». Ложное срабатывание удерживает ХОРОШИЙ текст, то
есть чинит консистентность ценой отказа отдать книгу.
**ШАГ 3. ПОДГОТОВИТЬ РЕШЕНИЕ, НЕ ПРИНИМАЯ ЕГО.** Ручка `gates.glossary.postcheck_gate` построена
(`backend/internal/config/pipeline.go`, греп `PostcheckGate`) и ВЫКЛЮЧЕНА в боевом конфиге. **Включать её
ты НЕ вправе** — это решение владельца, и он его отложил именно до твоего замера. Твой выход: цифры и
рекомендация одной фразой.
## ЧТО В ПАК НЕ ВХОДИТ
· **Строка 296** (точечная перегенерация по промаху глоссария) — она ГЕЙЧЕНА строкой 295 и делается
ПОСЛЕ замера: перегенерация по ложному срабатыванию перепишет верный текст. Не начинай.
· Включение гейта · правка порога 98% в доках (зона оркестратора) · платные прогоны сверх санкции.
## ОБЯЗАТЕЛЬНЫЕ НОРМЫ СДАЧИ (без них пак не принимается)
1. **Ревью ИСПОЛНЕНИЕМ своего кода, своих запросов к моделям и полученных результатов.** Самоотчёт
«проверено» без предъявленной команды и её вывода утверждением НЕ является.
2. **Адверсариальный проход по СВОЕЙ готовой работе.** Уязвимое место этого пака названо прямо: **замер,
который меряет не то.** Атакуй свою выборку вопросом «а есть ли в ней положительные примеры того
класса, про который я делаю вывод» — прежний замер пал ровно здесь.
3. **NAMED-АРТЕФАКТ: посадка `QC-canon-not-loaded` — предъявить КРАСНОЙ.** Смысл: сломать подачу канона
⇒ замер обязан это заметить. ⚠ Этот механизм окупился 05.09: он поймал не «забыли прогнать», а
ВЫРОЖДЕННЫЙ ТЕСТ — утверждение, зелёное потому, что его предмета в фикстуре не было.
4. **Своё воркфлоу-ревью** готовой работы — обязательная часть сдачи, не «если останется время».
5. **Fable 5 помощник — ОДИН, максимум ДВА**, модель задавать ЯВНО, вести долгим разговором, а не
поднимать нового на каждый вопрос.
6. **Сверить ЭТОТ промт с тем, что заказано, и НАЗВАТЬ расхождения** — не исполнять молча. Прецедент:
05.09 оба пака нашли в своих промтах по два дефекта, и один из них был внутренне противоречив.
7. **Каталог мутаций гонится ЦЕЛИКОМ и обязан СОЙТИСЬ.** «Прогнан целиком» и «прогнан целиком И
СОШЁЛСЯ» — разные утверждения; 05.09 первый полный прогон нашёл четыре дыры именно потому, что был
честным. ⚠ Проверка «якорь посадки резолвится РОВНО ОДИН раз» гоняется ПОСЛЕ КАЖДОГО касания кода.
8. **Нормы смены 05.09 — `^## D39.202`, прочти целиком.** Там девять форм ложной зелени, включая ту, что
стоила дороже всех: **гейт, ЗАЩИЩАЮЩИЙ дефект** (тест ПИНИТ неверное поведение).
## ЧЕГО ЖДЁТ ОТ ТЕБЯ ПРИЁМКА
Два верификатора по обязательным нормам: №1 судит ЗАКАЗ и ДИФФ **не читая твой отчёт**, №2 строит карту
твоего отчёта и ищет ВНЕ неё. ⚠ Им выдаётся ГОТОВЫЙ ПУТЬ отдельного рабочего дерева
(`git worktree add`) — общее дерево они не трогают.
**Отчёт — в свою секцию `docs/PROGRESS.md`, полный — файлом в `backend/docs/`.** Числа получены
командами, команды воспроизведения самодостаточны и не ссылаются на скретчпад сессии.
**Канал сессий — `/tmp/textmachine-channel`**: впиши свой блок первым делом, адрес сверяй `ListAgents`.

View file

@ -0,0 +1,84 @@
# Промт пака: ФОРМА ЗАКАЗА ПЕРЕВОДА — деньги, объём и вердикт ДО клика
> **Пак на ДВЕ зоны.** Половины независимы по коду и делаются РАЗНЫМИ сессиями: **платформа** (`platform/`)
> и **контракт** (канон `docs/architecture/14-api-contract/` правит ТОЛЬКО оркестратор — зона предъявляет
> состав минора отчётом). **Никто не коммитит:** деревья готовятся и передаются оркестратору
> `textmachine-main-27`. Соседний worktree `/home/ubuntu/projects/textmachine` не трогать.
> **`.env` не читать никогда.**
## КАРТА ЧТЕНИЯ — ЗАКОН, пять позиций
1. `CLAUDE.md` — цели, зоны, гардрейлы.
2. **`^## D39.196`** — решение владельца о форме заказа. ⛔ **Читать ВМЕСТЕ с эрратой 05.09-д** в шапке
журнала (греп `Эррата 05.09-д`): её пункт 5 велит «движковую половину первой» — **она УЖЕ ПОСТРОЕНА**.
3. **`^## D39.203`** — владелец разрешил движку говорить «сколько добавить»; поле ПЕРЕИМЕНОВЫВАЕТСЯ.
4. Строки бэклога **276 · 279 · 280 · 281 · 282 · 283** (греп `^| 276 |` и так далее).
5. `docs/architecture/15-money-path.md` — путь денег от гранта до расчёта, целиком.
⚠ Голову журнала целиком НЕ читать; подномер собственного тела не имеет — грепай родителя.
## ЗАЧЕМ ЭТОТ ПАК
Сегодня человек не может внятно КУПИТЬ перевод. Владелец 05.09 назвал форму: **на аккаунте баланс в
ДЕНЬГАХ и он виден**; потолок тянется ползунком **в деньгах**; рядом — ответ на настоящий вопрос
покупателя: **хватает ли на всю книгу**; второй ползунок — ОБЪЁМ (главы, если структура распозналась;
знаки, если нет, и о нераспознавании говорим ЯВНО); отдельная кнопка «книга целиком»; **вердикт ДО
клика**, старт = холд.
## ⛔ ЧТО УЖЕ ПОСТРОЕНО — НЕ ЗАКАЗЫВАТЬ ЗАНОВО
Строки **277** и **278** ЗАКРЫТЫ лендингом `81a89e9` (акт `D39.206`) и сняты из таблицы:
· отказ резервации **защёлкивает** волну, а не роняет книгу; обязательный вызов ЖДЁТ, когда ожидание
может помочь;
· движок публикует **проекцию цены**`expected_usd` по главам, `book_once_usd`, `step_max_usd`, а также
`source_chars` по юниту и `structure: detected|declared|none` — всё в `manifest --json`/`status --json`,
аддитивно, версию манифеста не двигая.
**Платформа этих чисел СЕГОДНЯ НЕ ЧИТАЕТ** (`git grep -lE "StepMax|step_max" -- platform/` → пусто).
**Взять их — половина работы этого пака.**
## ⛔ ЖИВАЯ ПРОБЛЕМА, КОТОРУЮ ПАК ОБЯЗАН СНЯТЬ, И ОНА НЕ ТА, ЧТО В СТАРЫХ ДОКАХ
Стена «книга короче десяти глав не переводится» СНЯТА движком. **Остался ПОЛ:** прирост потолка считается
`chaptersLeft × $0.03`, и даже при одном воркере `2 × $0.03 = $0.06` меньше одной редакторской резервации
(~$0.07) ⇒ **последние ~2 главы ЛЮБОЙ книги не покупаются.** Это и есть живая половина `PD-440`. Снимается
строкой **280** — потолок ДЕНЬГАМИ вместо «глав × ставка». ⚠ Пол **ВЫВЕДЕН, не замерен** (платного прогона
не было): подтвердить замером — часть работы.
## СОСТАВ — ЧЕТЫРЕ ПОЗИЦИИ
**(1) Контракт, минор (строка 279).** Заказ ОБЪЁМОМ: `ceiling_chapters``chapters` со смыслом объёма
(`null` = вся книга); `CeilingBounds` → `OrderOptions{chapters_left, affordable_chapters, verdict:
covers_all|covers_part|covers_none, blocked}`; баланс и холд выходят ДЕНЬГАМИ.
**Поле недостачи в событии `ceiling` НЕ зеркалить под нынешним именем:** владелец выбрал форму
«сколько добавить», значит `shortfall_micro_usd` станет ЛОЖНЫМ именем — величина `max(shortfall,
step_max headroom)`, кандидат `top_up_micro_usd`, `StreamVersion` 1.3→1.4 (строка **294**, `D39.203`).
Зеркалить приговорённое имя — значит покупать второй минор.
**(2) Платформа (строка 280).** Заказ живёт на КНИГЕ (`ordered_through_chapter`, `null` = вся книга), холд
считается ОТ ПРОЕКЦИИ движка, `--max-units` наконец едет в argv.
**(3) Честность числа знаков (строка 282).** Подпись «Знаков» сегодня лжёт для EPUB — считаются руны
ZIP-архива. Источник построен: `source_chars` в манифесте. ⚠ Форму признака точности владелец
ратифицировал: **признак РЯДОМ с числом, а НЕ смена семантики `null`**`null` уже значит «ещё грузится».
**(4) Замер (строка 281).** Сколько наших денег стоит тысяча ПЛОТНЫХ и тысяча РАЗРЕЖЁННЫХ знаков по
стадиям. ⚠ Цель — **НЕ константа** (это прямо запрещено), а **дисперсия проекции**: коэффициент для холда
и честность вердикта «хватает / не хватает».
## ЧТО В ПАК НЕ ВХОДИТ
· **Строка 283** (структура глав для не-CJK и EPUB) — свой пак, окно пере-снапшота.
· Правка канона своей рукой · включение гейта глоссария · переименование поля недостачи (это движковая
работа строки 294) · решение, ЧТО печатать на титуле (закрыто `D39.205`: копия без пометки = книга без
единого пропуска, пропущенный КУСОК главы критичен).
## ОБЯЗАТЕЛЬНЫЕ НОРМЫ СДАЧИ
1. **Ревью ИСПОЛНЕНИЕМ** своего кода и результатов; «проверено» без команды и её вывода — не утверждение.
2. **Адверсариальный проход по своей работе.** Уязвимое место названо: **вердикт «хватает», выданный по
проекции, которая врёт.** Атакуй его короткой книгой, книгой без структуры и книгой с дырами.
3. **NAMED-АРТЕФАКТ: посадка `OF-verdict-lies` — предъявить КРАСНОЙ** (вердикт «хватает» при недостаточном
балансе).
4. **Своё воркфлоу-ревью** — часть сдачи. **Fable 5 — ОДИН-ДВА агента**, модель задавать явно.
5. **Сверить промт с заказанным и НАЗВАТЬ расхождения**, а не исполнять молча.
6. **Состав контрактного минора — ОТЧЁТОМ**, канон своей рукой не трогать. ⚠ Ратификация, порождающая
обязанность в зоне, выдаётся зоне ЯВНО и тем же актом — иначе минор сутки живёт ложным на проводе
(это уже стоило дня, эррата 04.09-в).
7. **Нормы смены — `^## D39.202`, прочесть целиком.** Особенно: прибор отвечает на СВОЙ вопрос, а читают
его как ответ на твой; и четыре вида одинаково зелёного отчёта.
8. **Деньги.** Платный прогон — только по санкции оркестратора, с названной суммой ДО запуска.
## ПРИЁМКА
Два верификатора: №1 судит заказ и дифф **не читая отчёт**, №2 ищет ВНЕ карты отчёта; каждой находке —
скептик с заданием СНЯТЬ её. Верификаторам выдаётся ГОТОВЫЙ ПУТЬ отдельного рабочего дерева.
**Отчёт — в зонный журнал `platform/docs/platform-PROGRESS.md`** (платформа в `docs/PROGRESS.md` не пишет).
**Канал сессий — `/tmp/textmachine-channel`**, адрес сверять `ListAgents`.

View file

@ -22,8 +22,10 @@
| Роль | Активный промт | Статус |
|---|---|---|
| Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE |
| Бэкенд | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) |
| Платформа | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) |
| Бэкенд · КАЧЕСТВО | [BACKEND_QUALITY_CANON_SESSION_PROMPT.md](BACKEND_QUALITY_CANON_SESSION_PROMPT.md) | **НАПИСАН 05.09, выдача по слову владельца** — «подать подписанный канон в прогон и ЗАМЕРИТЬ чекер»: строки **295** (канон в прогон) · **12** (пере-замер точности/полноты — прежний замер порочен) · рекомендация по гейту БЕЗ права его включать. ⚠ Строка **296** (точечная перегенерация) в пак НЕ входит — гейчена 295 |
| Бэкенд · прежний | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) |
| Платформа+контракт · ФОРМА ЗАКАЗА | [ORDER_FORM_SESSION_PROMPT.md](ORDER_FORM_SESSION_PROMPT.md) | **НАПИСАН 05.09, выдача по слову владельца** — деньги, объём и вердикт ДО клика (`D39.196`): строки **276 · 279 · 280 · 281 · 282**. ⛔ Читать с эрратой **05.09-д**: строки 277/278 УЖЕ ПОСТРОЕНЫ, заказывать заново нельзя; поле недостачи НЕ зеркалить — оно переименовывается (строка 294). Живая цель — **пол последних ~2 глав**, а не снятая стена десяти |
| Платформа · прежний | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) |
| Полигон | [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); перечень первого касания — в зонном журнале |
| Контракт | активного НЕТ | канон — `architecture/14-api-contract/`; ⚠ версию брать ФАЙЛОМ (`grep '^ version:' openapi.yaml`), не отсюда: миноры ратифицируются D-нотами и их содержание грепается по реестру нот. |