From e89facd573b55cd8945cad675df797f9992bc6f0 Mon Sep 17 00:00:00 2001 From: heaven Date: Sat, 5 Sep 2026 18:53:04 +0300 Subject: [PATCH] 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 --- docs/BACKEND_QUALITY_CANON_SESSION_PROMPT.md | 75 +++++++++++++++++ docs/ORDER_FORM_SESSION_PROMPT.md | 84 ++++++++++++++++++++ docs/README.md | 6 +- 3 files changed, 163 insertions(+), 2 deletions(-) create mode 100644 docs/BACKEND_QUALITY_CANON_SESSION_PROMPT.md create mode 100644 docs/ORDER_FORM_SESSION_PROMPT.md diff --git a/docs/BACKEND_QUALITY_CANON_SESSION_PROMPT.md b/docs/BACKEND_QUALITY_CANON_SESSION_PROMPT.md new file mode 100644 index 00000000..ba12fc9c --- /dev/null +++ b/docs/BACKEND_QUALITY_CANON_SESSION_PROMPT.md @@ -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.3–100%. ⇒ мерить точность чекера на таком прогоне — мерить не то. + +## ЧТО ДЕЛАТЬ — ТРИ ШАГА, ПОРЯДОК ЖЁСТКИЙ + +**ШАГ 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`. diff --git a/docs/ORDER_FORM_SESSION_PROMPT.md b/docs/ORDER_FORM_SESSION_PROMPT.md new file mode 100644 index 00000000..dd536cbb --- /dev/null +++ b/docs/ORDER_FORM_SESSION_PROMPT.md @@ -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`. diff --git a/docs/README.md b/docs/README.md index 98a0f8a6..602e701d 100644 --- a/docs/README.md +++ b/docs/README.md @@ -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-нотами и их содержание грепается по реестру нот. |