diff --git a/docs/BACKEND_CONSISTENCY_SESSION_PROMPT.md b/docs/BACKEND_CONSISTENCY_SESSION_PROMPT.md new file mode 100644 index 00000000..88cdbd81 --- /dev/null +++ b/docs/BACKEND_CONSISTENCY_SESSION_PROMPT.md @@ -0,0 +1,108 @@ +# Промт: бэкенд-сессия «КОНСИСТЕНТНОСТЬ КАК ЗАКОН» — приоритет владельца №1 + +Ты — бэкенд-сессия TextMachine. **Зона записи: `backend/`**. **Сессия НЕ коммитит** — готовое дерево +передаёшь оркестратору на лендинг. Чужие зоны (`platform/`, `frontend/`, `eval/`, `docs/`) не трогать; +расхождения — пингом в секцию «Бэкенд» файла `docs/PROGRESS.md`. `.env` не читать. + +## Карта чтения — ЗАКОН, дальше только по её ссылкам + +1. `CLAUDE.md` — цели и нормы. Особо: **комментарий не доказывает поведение, источник утверждения о + смысле — тест** · **тесты и гейты не подгонять под зелень** · **мутация засчитывается по ТЕКСТУ + сообщения, а не по факту красноты** · **отрицательный замер печатает контрольную величину**. +2. Строки бэклога **295**, **267**, **318**, **320**, **322** (`docs/PROGRESS.md`, греп `^| N |`) — + предмет пака целиком. +3. `docs/architecture/03-implementation-notes.md` — через баннер. +4. `backend/README.md` — механика движка. +5. `docs/architecture/12-go-style-notes.md` — норматив стиля, только больные места. + +## Зачем этот пак + +Приоритет владельца №1 — **консистентность терминов и голосов на всю книгу**. Сегодня она держится на +банке, а банк на проводе — закон для всех ролей. Пак закрывает четыре места, где этот закон либо не +доезжает, либо описан неверно, и одно место, где принятая работа может быть потеряна. + +⚠ **Ни одна из этих строк не предлагает ослабить закон банка (`D39.104`).** Он ратифицирован, и +доказательств против него нет ни у одного голоса. Предмет — исполнение и честность описания. + +## Состав — пять предметов, порядок мой, отступления объявляй + +### 1. Подать подписанный канон в прогон (половина строки 295) — ПЕРВЫМ + +Без этого полигон не может мерить приоритет №1 вообще: точность чекера меряется на прогоне, в котором +подписанный канон участвовал. Это разблокирует чужую зону, поэтому идёт первым. + +**Приёмка:** прогон, где подписанный канон реально участвовал, предъявлен исполнением; что именно +поехало на провод — видно из артефакта, а не из отчёта. + +### 2. Гард перекрытия окон при слиянии (строка 267) + +Один термин в одном смысле может нести две конкурирующие формы, и обе доезжают на оба провода — дыра в +проверке схлопывания. Решение владельца 05.09 состоялось; строка несёт разбор. + +⚠ **Смежное, проверь заодно:** совет оператору «пометь одну строку статусом» (строка **320а**) гвард +полисемии не исполняет — он статус НЕ СМОТРИТ вовсе. Либо совет приводится к тому, что код делает, либо +гвард учится смотреть статус. **Выбор объяви и обоснуй**, молча не решай. + +### 3. Комментарий постчека — привести к поведению (строка 318) + +Комментарий обещает, что промах ловит и случай «мы вложили неверный dst, и модель его исполнила (страх +владельца)». Код при найденной форме делает `continue`: **исполненная неверная строка промаха не даёт**. +⇒ метрика «нет промахов» означает «банк ИСПОЛНЕН», а читается как «исполнен ВЕРНО». + +⛔ **Заказ здесь узкий: честный комментарий плюс пин.** Детектор правильности ЗНАЧЕНИЯ — не этот пак, +он живёт строкой **286** и упирается в замер точности, а не в код. Не строй его тут. + +### 4. Не уничтожать и адресовать принятую редактуру (строка 322, части «а» и «б») + +Ре-проход пере-делывает затронутую единицу целиком тем же редакторским промптом; прежний текст остаётся +в чекпойнтах, **но без адреса** — ни одна строка статуса на него не указывает, экспорт не видит, отката +нет. И один путь уничтожает его физически: ре-проход флагнулся → `redrive` → сброс сносит чекпойнты +**флагнутой стадии по всем снапшотам**, прежняя хорошая редактура в их числе. + +Заказ: **(а)** история финальных хешей при перезаписи финальной строки + ограда, чтобы сброс не удалял +чекпойнт, на который ссылается история; **(б)** адресация выгрузки «по состоянию на». + +⭐ **Всё это ВНЕ снапшота и хеша запроса ⇒ перепокупки нет**, ключ манифеста и версия встроенных данных +не двигаются. Проверь это исполнением, не поверь на слово. + +### 5. Два ложных комментария — снять (строки 320 и 322) + +`chunkstatus.go` утверждает, что обычный резюм перезаписывает строку статуса — **не перезаписывает**, +он выходит раньше; пишет только ре-пин. И оправдание `nil`-переноса в редакторской волне (строка **321**) +**ложно** — но саму передачу переноса в этом паке НЕ СТРОИТЬ: там сначала замер (см. ниже). + +## Чего в этом паке НЕТ и почему + +- **Строка 321 (перенос sticky) — не строить.** Экспозиция замерена (49 строк, 4 из них уже в черновике), + **а дрейф — нет, инцидентов ноль**. Сначала замер на следующем платном прогоне, потом решение. В этом + паке — только правка ложного оправдания в комментарии. +- **Строка 324 (вход рендера)** — не долг, а контракт входа; расцеплена от 321, строить не надо. +- **Детектор верности значения** — строка 286, упирается в замер. +- **Перекрой структуры глав (161/283)** — отдельный дизайн-пак с мандатом качества. + +## Самопроверка — обязательна, и вот чем ЭТОТ пак уязвим + +Не отчёт «проверено», а **исполнение**. Направление задаю, глубину и веер выбираешь сам: + +1. **Ты правишь ОПИСАНИЯ поведения.** Соблазн подогнать текст под то, что «должно быть», максимален. + После каждой правки комментария спроси: **это описание того, что код ДЕЛАЕТ, или того, что я хотел + бы?** Сегодня проект нашёл пять таких мест за смену, все — прозой. +2. **Мутации засчитывай по ТЕКСТУ.** Правый вердикт по неправой причине — дыра, а не поимка: сегодня + мутация покраснила гейт сообщением о рецепте, который делал ровно обратное сказанному. +3. **Не двигает ли твоя правка деньги.** Для каждой правки скажи прямо: двигает ли она снапшот, хеш + запроса, ключ манифеста, версию встроенных данных. Если да — это перепокупка, и её надо объявить. +4. **Числа с деревом и популяцией.** Приводишь счёт — назови коммит и что посчитано. +5. ⭐ **И отдельный проход, заказанный владельцем: ЛОГИЧЕСКИЕ баги, а не исполнительские.** Пока ты в + этих файлах — ищи места, где код работает **как написано**, но написанное **не то, что задумывалось**: + гейт, отвечающий на свой вопрос вместо заказанного; метрика, чьё имя шире её смысла; ветка, которая + по построению не исполняется. Найденное — **не чинить молча**, а вынести списком в отчёт: это заказ + владельца, и он идёт в отдельный разбор. + +## Отчёт + +Секция «Бэкенд» в `docs/PROGRESS.md` + сообщение оркестратору: что построено · чем предъявлено (команда +и её вывод) · какие правки двигают деньги · **список логических расхождений «задумано против сделано»** · +что осталось открытым · **что ты сам считаешь слабым местом своей работы**. + +⚠ Числа батареи снимай **после последней правки**, не до. Пере-съём голдена, если понадобится, объявляй +явно с причиной (`D39.183`). diff --git a/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md b/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md new file mode 100644 index 00000000..eb409411 --- /dev/null +++ b/docs/POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md @@ -0,0 +1,108 @@ +# Промт: полигон-сессия «РЕМОНТ ПРИБОРА» — линза слепого чтения и гигиена стенда + +> **⚠ ЭТОТ ПАК ИДЁТ ПЕРЕД ЛЮБЫМ СЛЕДУЮЩИМ ПЛАТНЫМ ЗАМЕРОМ, включая продолжение фазы Д.** +> Причина не в очереди, а в смысле: прибор, которым мы судим редактора, сегодня меряет НЕ ТО, +> что мы редактору заказали. Пока это так, каждый следующий замер редакторского тира стоит +> меньше, чем кажется, — и фаза Д в том числе. + +Ты — полигон-сессия TextMachine. **Зона записи: `eval/` + `docs/experiments/`**, пинг оркестратору — +секция «Полигон» в `docs/PROGRESS.md`. **Сессия НЕ коммитит**, кроме пре-рег-фризов (право полигона); +готовое дерево передаёшь оркестратору на лендинг. Чужие зоны не трогать. `.env` не читать. + +## Карта чтения — ЗАКОН, дальше только по её ссылкам + +1. `CLAUDE.md` — нормы проекта. Особо: **комментарий не доказывает поведение** · **число называет + ДЕРЕВО и ПОПУЛЯЦИЮ** · **отрицательный замер печатает контрольную величину** · **мутация + засчитывается по ТЕКСТУ сообщения, а не по факту красноты**. +2. Строка **319** бэклога (`docs/PROGRESS.md`, греп `^| 319 |`) — предмет этого пака целиком. +3. `eval/dovodka/blind-read/PREREG-2-BLIND-READ.md` — пре-регистрация замера; §5 (линзы) и §8. +4. `eval/dovodka/prereg-4axes/stand/editor-p9.md` — инструкция судимой руке. +5. Строки **300** и **265** бэклога — гигиена стенда, обе помечены «до следующего платного замера». + +## Что не так — и это ратифицировано (`D39.215` п.3) + +Судимой руке предписано: **сверяй смысл черновика с исходным текстом, исправляй искажения смысла**. +А первичная **блокирующая** линза замера — **«точность относительно черновика»**. То есть редактор, +правильно отошедший от черновика ради оригинала, по главной линзе выглядит хуже. + +⚠ **Осторожно с масштабом.** Оркестратор сначала записал, что прибор «систематически» наказывает за +отход, и это было **преувеличением**: в сыром судейском массиве такая пометка встречается ОДИН раз. +**Доказано противоречие конструкции; величина искажения НЕ ЗАМЕРЕНА.** Твой пак — не «доказать вред», +а починить конструкцию и **дать величине носитель**. + +## Состав пака — три части, в этом порядке + +### Часть 1 — ТРИ ЭРРАТЫ В НОСИТЕЛЯХ ЗАМЕРА ($0, первым касанием, до всего остального) + +⛔ **Форма — БАННЕР В ШАПКЕ, тела документов НЕ ПРАВИТЬ.** Оба документа заморожены, и +пре-регистрация ценна именно неизменяемостью: правка тела уничтожает то, ради чего фриз делался. + +1. `RESULT-2-BLIND-READ.md` — утверждение «правильный ответ по построению — ничья» противоречит + собственному тексту того же отчёта (судья видит разницу двух случайных реализаций) и измеренному + расхождению рук. Снять баннером. +2. `PREREG-2-BLIND-READ.md` §8 — при замене предыдущего пре-рега выпало унаследованное ограничение + **«опора судьи — ЧЕРНОВИК, не оригинал»**. Это дыра в протоколе, а не в критике: верни баннером, + назвав, откуда выпало. +3. `PREREG-2-BLIND-READ.md`, правило решения в §5 — оно готово выдать вывод «одна рука не хуже по + точности» из НЕПРОХОЖДЕНИЯ теста, тогда как отчёт результата этот вывод запрещает дословно. + Исполнитель отказался сам, а норма в носителе осталась и повторится в следующем пре-реге. + +**Приёмка части 1:** три баннера стоят; ни одно тело не изменено (`git diff` показывает только шапки). + +### Часть 2 — ГИГИЕНА СТЕНДА (строки 300 и 265, до любого платного вызова) + +Обе строки помечены «до следующего платного замера», и обе про то, что прибор мерит не тем, чем думает: +репо-широкий сторож не дотягивается до соседнего воркри, и питоново зеркало полигона держит ВТОРУЮ +копию таблицы плейсхолдеров движка, которая уже разошлась. + +⚠ **Зеркало — не переписывать копию, а убрать второй носитель**, если это возможно без хаков; если +невозможно — предъявить, почему, и поставить сверку, которая краснеет при расхождении. + +**Приёмка части 2:** расхождение зеркала либо устранено, либо краснеет автоматически; стенд предъявлен +прогоном, а не отчётом. + +### Часть 3 — ЛИНЗА (главное) + +Обвязка сверки с **исходником** уже написана в этом же дереве — `eval/dovodka/judge-prompts/`. **Нужен +не новый прибор, а пере-подключение готового.** Не строй второй. + +Заказ: судейская линза, которая судит правку **против исходника**, а не против черновика, и норматив +судейства из строки **143** — **разброс инструмента ДО замера** и **объявленный порог различимости**. +Без второго первое бессмысленно: односудейный вердикт при разбросе 33 % не различает ничего. + +⛔ **Границу держать:** это ремонт ЗАМЕРНОГО прибора. Судейская роль в самом движке — другой предмет, +её здесь не касаться. + +**Приёмка части 3:** пре-регистрация новой линзы заморожена ДО первого платного вызова (право полигона +коммитить фриз) · в ней объявлены разброс и порог · сказано прямым текстом, какой вопрос прибор задаёт +и какой НЕ задаёт. + +## Деньги + +Части 1 и 2 — **$0**, платных вызовов нет вовсе. Часть 3 до фриза — тоже $0. Первый платный вызов +только после фриза и только по санкции владельца через оркестратора. **Санкции на замер этот промт НЕ +несёт.** + +## Самопроверка — обязательна, и вот чем этот пак уязвим + +Не отчёт «проверено», а **исполнение**: + +1. **Ты чинишь прибор прибором.** Проверь свою же починку тем же вопросом, каким ловим её предмет: + **то ли она мерит**. Зелёный тест на фикстуре доказывает отображение, а не жизнь. +2. **Три эрраты — про ФОРМУ.** Убедись исполнением, что тела не тронуты: соблазн «заодно поправить» + здесь максимальный, а цена — уничтоженный фриз. +3. **Число называет дерево и популяцию.** Если приводишь долю или счёт — скажи, на каком коммите снято + и что именно посчитано. Сегодня на этом погорели все три роли. +4. **Рядом с нулём — контрольная величина.** «Ноль расхождений» неотличимо от «искал не там». +5. **Адверсариальный проход по своей готовой работе** — направление задаю, глубину выбираешь сам. + +## Что НЕ делать + +Не продолжать фазу Д в этом паке · не строить второй судейский прибор · не править тела замороженных +документов · не трогать движок и платформу · не покупать ни одного платного вызова без санкции. + +## Отчёт + +Секция в `docs/PROGRESS.md` «Полигон» + сообщение оркестратору: что построено · чем предъявлено +(команда и её вывод, а не пересказ) · что осталось открытым · **что ты сам считаешь слабым местом +своей работы**. diff --git a/docs/README.md b/docs/README.md index 2ac080c2..b295bf93 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,11 +22,13 @@ | Роль | Активный промт | Статус | |---|---|---| | Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE | + | **Бэкенд · КОНСИСТЕНТНОСТЬ** | [BACKEND_CONSISTENCY_SESSION_PROMPT.md](BACKEND_CONSISTENCY_SESSION_PROMPT.md) | приоритет владельца №1: канон в прогон (295) · гард перекрытия окон (267) · честный комментарий постчека (318) · не уничтожать принятую редактуру (322 а/б) · два ложных комментария. ⚠ Несёт заказ владельца на список ЛОГИЧЕСКИХ расхождений «задумано против сделано» | | Бэкенд · СТРУКТУРА ГЛАВ | активного НЕТ | пак 1 «форматы и честный словарь» ОТРАБОТАН, ПРИНЯТ С ДОФИКСОМ и ЗАЛЕНДЕН 06.09 — акт **D39.210**, `2f65d1d`; промт в `archive/prompts/CHAPTER_STRUCTURE_SESSION_PROMPT_2026-09-05.md` с баннером исхода. ⚠ **ПАК 2 (лексиконы не-CJK, корпус, замер оракулом, валидаторы) — НЕ НАПИСАН и ждёт файлов владельца** (страта скрейпов); промта под него нет, брать нечего. Открытые следствия пака 1 — строки бэклога **302** (резка по якорям) и **303** (безъюнитная грамматика) | | Бэкенд · отозванный | активного НЕТ | пак КАЧЕСТВО написан и ОТОЗВАН до выдачи 05.09 (`archive/prompts/…_WITHDRAWN.md`): предмет дешевле пака — точность чекера уже измерена, пере-снять её стоит одной команды. Следующий пак — СТРУКТУРА ГЛАВ (решение владельца 05.09 «любая книга любого формата»), пишется | | Бэкенд · прежний | активного НЕТ | пак «денежный стоп» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.206** (`81a89e9` + `616a8e4`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **291** (флаг вместо клина, `D39.204`) · **294** (форма «сколько добавить», `D39.203`) · **296** (точечная перегенерация по промаху глоссария, после 295) | | Платформа · ФОРМА ЗАКАЗА | активного НЕТ | пак ОТРАБОТАН, ПРИНЯТ С ДОФИКСОМ и ЗАЛЕНДЕН 06.09 — акт **D39.208**, код + канон **0.11.0**; промт уведён в `archive/prompts/ORDER_FORM_SESSION_PROMPT_2026-09-05.md` с баннером исхода. ⚠ **НЕ построено, хотя заказывалось:** денежный ползунок на проводе объявлен, а отправить его нечем, и оценки под ВЫБРАННЫЙ заказ нет; «упрощение резюма» не сделано — обе позиции живут строками бэклога, брать их как новый пак СЛЕДУЮЩЕЙ сессии, не читать промт как задание | | Платформа · прежний | активного НЕТ | пак «пустить внутрь можно» ОТРАБОТАН и ПРИНЯТ С ДОФИКСОМ 05.09 — акт **D39.201** (`7e2226a` + `3e84716`), промт в `archive/prompts/` с баннером исхода. Следующая работа зоны — строки **294** (зеркало словаря под минор потока) ⚠ (строка 293 — зона ОРКЕСТРАТОРА, не платформы: правило игнора общее для всех рабочих деревьев клона) | + | **Полигон · РЕМОНТ ПРИБОРА** | [POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md](POLYGON_INSTRUMENT_REPAIR_SESSION_PROMPT.md) | ⚠ **ИДЁТ ПЕРЕД любым следующим платным замером, включая продолжение фазы Д**: три эрраты носителей БАННЕРАМИ · гигиена стенда (300, 265) · линза против ИСХОДНИКА + порог различимости (319, 143). Санкции на платный замер НЕ несёт | | Полигон | [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-нотами и их содержание грепается по реестру нот. |