textmachine/docs/BACKEND_CONSISTENCY_SESSION_PROMPT.md

150 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Промт: бэкенд-сессия «ЗАКОН БАНКА — ЧЕСТНО» (пак одного предмета)
## 1. Какая проблема и что решит твой результат
Приоритет владельца №1 — **консистентность терминов и голосов на всю книгу**. Она держится на банке
памяти: строка «термин → перевод» едет в промпт как ЗАКОН для каждой роли. Сегодня закон исполняется,
но **три места описывают его неверно, а одно не исполняет собственный совет**. Цена — не поломка, а
хуже: мы не можем узнать правду о собственной работе. Метрика «промахов нет» означает «банк исполнен»,
а читается как «исполнен ВЕРНО» — и ровно в случае, которого владелец боится (вложили неверный перевод,
модель послушалась), прибор молчит надёжнее всего.
Твой результат: закон банка описан тем, что код делает, и один настоящий пробел в нём закрыт.
## 2. Зона и git
**Зона записи: `backend/`.** Чужие зоны (`platform/`, `frontend/`, `eval/`, `docs/`) — только чтение;
расхождения — пингом в секцию «Бэкенд» файла `docs/PROGRESS.md`.
**Сессия НЕ коммитит** — готовое дерево передаёшь оркестратору. Канон git-дисциплины — `CLAUDE.md`.
`.env` не читать. Не работать под `/tmp`.
## 3. Карта чтения — ЗАКОН, дальше только по её ссылкам
1. `CLAUDE.md` — цели владельца и гардрейлы.
2. Строки бэклога **267**, **318**, **320** (`docs/PROGRESS.md`, греп `^| N |`).
3. `backend/README.md` — механика движка.
4. `docs/architecture/03-implementation-notes.md` — через баннер.
5. `docs/architecture/12-go-style-notes.md` — только больные места.
**Ратифицированное, что нужно для работы, — в теле промта, чтобы не искать (`D39.216` требует так):**
- **Закон банка (`D39.104`)**: строка на проводе — закон для КАЖДОЙ роли и КАЖДОЙ строки, независимо от
статуса. ⛔ Ослаблять его этот пак НЕ предлагает: он ратифицирован, доказательств против нет ни у
одного голоса. Предмет — исполнение и честность описания.
- **`D39.216` (мандат владельца, 06.09), делай РОВНО так**: проектировать и чинить **без хаков и
воркэраундов**; где нынешняя форма не тянет — **развязать или переписать**, а не обложить заплатой.
«Дешевле подпереть» доводом НЕ является. Отступление законно, но **объявляется с ценой**.
- **Комментарий не доказывает поведение** (`D39.214` п.3): источник утверждения о СМЫСЛЕ — тест или
прогон. ⚠ Эту норму НЕ ищи грепом в `CLAUDE.md` — её там нет, она живёт нотой.
- **Число называет ДЕРЕВО и ПОПУЛЯЦИЮ**: приводишь счёт — назови коммит и что именно посчитано.
- **Рядом с нулём — контрольная величина**: «0 совпадений» неотличимо от «искал не там» (`CLAUDE.md`).
- **Мутация засчитывается по ТЕКСТУ сообщения, а не по факту красноты** (`CLAUDE.md`): правый вердикт
по неправой причине — дыра, а не поимка.
- **Тесты и гейты не подгонять под зелень** (`D39.121`, мотив решает).
## 4. Состав и разметка свободы
### 4.1 Гард перекрытия окон при слиянии (строка 267) — **делай РОВНО так**
Один термин в одном смысле может нести две конкурирующие формы, и обе доезжают на оба провода — дыра в
проверке схлопывания. Решение владельца 05.09 состоялось, строка несёт разбор. Закрыть.
### 4.2 Совет, который движок не исполняет (строка 320а) — **реши сам, аргументируй**
Диагностика советует оператору пометить одну строку статусом, а гвард полисемии **статус не смотрит
вовсе**. Два честных выхода: привести совет к тому, что код делает, **или** научить гвард смотреть
статус. **Выбор объяви и обоснуй; молча не решай.** ⚠ Второй вариант меняет поведение — тогда это смена
заказа, и нужен пинг, а не правка.
### 4.3 Комментарий постчека — привести к поведению (строка 318) — **делай РОВНО так**
Комментарий обещает ловить и случай «вложили неверный перевод, модель исполнила»; код при найденной
форме делает `continue` ⇒ промаха нет. Приведи текст к поведению **и поставь пин**, чтобы описание
больше не могло разойтись молча.
**Детектор правильности ЗНАЧЕНИЯ здесь НЕ строить.** Он живёт строкой **286**, упирается в замер
точности, а не в код, и его постройка тут будет расширением заказа.
### 4.4 Два ложных комментария — снять (строки 321 и 322) — **делай РОВНО так**
- Оправдание `nil`-переноса в редакторской волне («единица есть глава или её часть») — **ложно**: глава
регулярно делится на несколько правочных единиц. ⛔ **Сам перенос НЕ строить** — по строке 321 сначала
замер дрейфа, инцидентов пока ноль. Здесь только честный комментарий.
- Утверждение, что обычный резюм перезаписывает строку статуса, — **ложно**: он выходит раньше, пишет
только ре-пин.
### 4.5 Чего в паке НЕТ и почему — **не делай**
- **Строка 322 (история принятой редактуры)** — другой предмет: жизненный цикл чекпойнтов и схема, а не
закон банка. Отдельным паком.
- **Строка 295 (подать подписанный канон в прогон)** — снята из этого пака: у бэкенд-сессии нет ни
книги, ни стенда, ни санкции на деньги. Если найдёшь чисто бэкендовую половину — **назови её пингом**,
но не бери.
- **Перекрой структуры глав (161/283)** — отдельный дизайн-пак.
## 5. Мандат самопроверки ИСПОЛНЕНИЕМ — механизм назван, и пустое исполнение его не удовлетворяет
⛔ «Перечитал сам» **не считается**. Обязательны все три:
1. **Мутационная проверка каждого пина, который ты заводишь или трогаешь.** Механизм: сломай проверяемое
свойство, прогони пин, **прочитай ТЕКСТ падения** и убедись, что он говорит про сломанное тобой, а не
про что-то соседнее; восстанови файл и **сверь sha256** с исходным. Артефакт: таблица «мутация →
текст падения → хеш восстановлен».
2. **Опровергатель твоей готовой работы отдельным субагентом.** ⚠ Харнесс по умолчанию субагентов не
спавнит — **тебе это РАЗРЕШЕНО и требуется**. Модель задай ЯВНО (`fable` — контролёр проекта), знай,
сколько их у тебя работает; одного-двух достаточно. Мандат ему: «найди в этой работе отсутствующее и
противоречащее», а не «проверь, всё ли хорошо».
3. **Греп по отозванной формулировке перед словом «исправлено»**: `grep -c "<снятая фраза>" <файл>`
ноль либо только внутри пометки. Смена 06.09 попалась на этом трижды.
## 6. Оси ревью — характер работы «Код» и «Доки»
Из таблицы приёмки, две оси, обе твои:
- **Код:** ⚠ «тест утверждает не то, что думает» — проверь, что каждый твой пин падает ИМЕННО от того,
что он охраняет (см. §5.1).
- **Доки:** сверка утверждений против кода и живых носителей — весь этот пак ровно об этом.
## 7. Записка-план ДО работы
До первой правки пришли оркестратору ≤15 строк: что берёшь по каждому из четырёх пунктов · где ждёшь
сопротивления · что считаешь спорным в самом заказе. Это дешевле, чем разойтись на готовом.
## 8. Заявление = команда
Любое число и любая категорика в отчёте — **с командой, которой получены**, и её выводом, а не
пересказом. «Батарея зелёная» без команды и её кода возврата — не факт.
## 9. Эхо-протокол старта
ДО работы пришли ≤10 строк: **скоуп** (что берёшь) · **инварианты** (что обязано уцелеть) · **не-делать**
(что в паке запрещено). Если эхо разойдётся с моим заказом — лучше здесь, чем в приёмке.
## 10. Что НЕ удалось — обязательная секция отчёта
Что не проверено · что не воспроизвелось · где данных не хватило. **«Не измерено» вместо догадки.**
## 11. Канал вопросов и право отказаться
Конфликт промта с кодом или доками — **пинг, не правка**. И у тебя есть **право сказать «этого делать не
надо»** с аргументом: если по коду окажется, что предмет описан мимо, это самый ценный ответ.
## 12. Прямой канал
Механизм — `CLAUDE.md` §«Связь между сессиями»: файл `/tmp/textmachine-channel`, свой блок впиши первым
делом, адреса других ролей — оттуда, живость сверяй `ListAgents`. ⚠ **Нужной роли нет или файла нет —
это НОРМАЛЬНЫЙ случай**: вопрос секцией в отчёт, сессии подряд не опрашивать.
## Деньги
**Этот пак — $0.** Платных вызовов к моделям в нём нет ни одного: все четыре предмета — код,
комментарии и пины на фикстурах. ⛔ Если по ходу окажется, что предъявить что-то можно только платным
прогоном — **это пинг оркестратору за санкцией, а не твоё решение**. Санкции на деньги промт не несёт.
## Отчёт
Секция «Бэкенд» в `docs/PROGRESS.md` + сообщение оркестратору: что построено · чем предъявлено (команда
и вывод) · таблица мутаций из §5.1 · что сказал опровергатель и что ты с этим сделал · двигает ли
что-нибудь из сделанного снапшот, хеш запроса, ключ манифеста или версию встроенных данных · секция §10 ·
**что ты сам считаешь слабым местом своей работы**.
⚠ Числа батареи снимай **после последней правки**, не до.