From 180c41e837a46dda301d8343c2c094bddd354804 Mon Sep 17 00:00:00 2001 From: heaven Date: Thu, 17 Sep 2026 00:58:47 +0300 Subject: [PATCH] Issue two packs: the platform reads the bank proposals it already receives, and the engine stops discarding its own verdict on a failed bank-role answer --- ...ACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md | 116 +++++++++++++++++ docs/PLATFORM_BANK_READOUT_SESSION_PROMPT.md | 122 ++++++++++++++++++ docs/README.md | 2 + 3 files changed, 240 insertions(+) create mode 100644 docs/BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md create mode 100644 docs/PLATFORM_BANK_READOUT_SESSION_PROMPT.md diff --git a/docs/BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md b/docs/BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md new file mode 100644 index 00000000..fb675892 --- /dev/null +++ b/docs/BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md @@ -0,0 +1,116 @@ +# Бэкенд-пак: ДВИЖОК УЖЕ ЗНАЕТ, ЧТО ОТВЕТ БАНК-РОЛИ НЕГОДЕН — И ВЫБРАСЫВАЕТ ЭТОТ ВЕРДИКТ + +## 1. Какая проблема и что решит твой результат + +Книга переводится дёшево, но **термины** — имена героев, гор, сект, техник — решает отдельная дорогая роль: терминолог предлагает передачу, классификатор ставит тип. Тип не косметика: он **форсирует способ передачи**, и ошибка в нём означает, что название места транслитерировано вместо перевода — и так **в каждом вхождении по всей книге**. Это прямой удар по цели №1: издательское художественное качество и связные термины на всю книгу. + +**Замер прогона B:** на попытке 1 классификатор ответил по 4 строкам из 22 и по 0 из 24 — **42 терма из 66 остались без машинного типа**, оба батча оплачены (≈$0.0126 и ≈$0.0121), регенерации не было. У черновой стадии та же беда лечится и вылечена. + +⛔⛔ **И вот предупреждение, без которого ты объявишь «дефекта нет».** Число 42 из 66 снято на ПОПЫТКЕ 1 и **в артефактах невидимо**: у неотвеченного кандидата остаётся ЭВРИСТИЧЕСКИЙ тип, поэтому в проекции банка все 66 строк выглядят типизированными, а сводка консолидации показывает «полно, выброшено 0, без ответа 0». Носитель числа — `docs/experiments/25-door-to-file-b.md` (попытка 1), а не проекция. ⇒ **мерить эффект пака по проекции нельзя**; мерило — журнал запросов прогона (`asked`/`answered` по батчам). Побочно это вскрывает дефект наблюдаемости, которого пак НЕ заказывает: человек на подписи не отличает машинный тип от эвристического. + +⛔ **Главное, ради чего пак заказан.** Движок **уже вычисляет вердикт** о негодности такого ответа: попытка классифицирует выход банк-роли — именно так в журнале запросов появились пометки «упёрся в потолок» и «пустой». Но код, зовущий банк-роль, читает из попытки **только текст** и вердикт роняет на пол. ⇒ **это не новый механизм, а подключение существующего вердикта к существующей лестнице.** + +**Ряды трекера, которые пак закрывает:** **451** (умный участок в точке банка — слово владельца, `D39.254` п.2), **438** (банк-роли мимо обеих ветвей лечения; там же готовая формулировка денежной мины с адресами), **435** (эскалация выключена данными), **478** (ординал батча в ключе покупки). ⚠ Ряд 451 записан как «дизайн-пак, затем стройка» — **оркестратор сознательно берёт строительную часть сразу**, потому что разбор уже сделан консилиумом и этим промтом; если по ходу увидишь, что без отдельного дизайна не выходит, это законный пинг. + +## 2. Зона записи и git + +**Твоя зона — `backend/`** плюс секция «Бэкенд» в `docs/PROGRESS.md`. Больше в `docs/` ничего не трогай. **Ты не коммитишь** — готовишь дерево и передаёшь оркестратору. Git-дисциплина целиком — `CLAUDE.md` §«Git-координация мультисессий», он в карте чтения ниже. + +## 3. Карта чтения — ЗАКОН, пять позиций + +1. `CLAUDE.md` в корне — канон проекта целиком. +2. `backend/internal/pipeline/stagerun.go` — **цикл попытки: счётчики, ветви «меньше думать» и «больше потолок», эхо-регенерация.** Читать целиком, включая комментарии: там объявлено различение, на котором стоит §4.1. +3. `backend/internal/pipeline/terminologist.go` — банк-роли: сборка батча, вызов попытки, что делается с ответом. +4. `backend/internal/config/internal_call.go` — почему у внутренних вызовов хоп эскалации нулевой. Комментарий несущий. +5. `docs/architecture/18-bank-ontology.md` — что такое банк и чьё слово в нём живёт. + +⚠ **Числа и адреса этого промта сняты оркестратором и советчиками; те, на которых ты строишь решение, пере-снимай сама** — заимствованное число улики не заменяет. + +## 4. Что построить + +### 4.1. Вынести лестницу попытки в общий контур — НАПРАВЛЕНИЕ задано, форма твоя + +⛔ **Чего делать НЕЛЬЗЯ: звать `runStage` из терминолога.** Это единица «одна стадия одного ЧАНКА до терминальной диспозиции»: работа по главе, пин снапшота, рендер из шаблона, резюм через статус чанка, запись статуса в конце. У банк-батча нет ни чанка, ни статуса чанка, ни шаблона. Проложить это флагами — заплатка, запрещённая словом владельца. + +**Чистый разрез:** цикл попытки — отдельная функция с двумя вызывающими. `runStage` = резюм + лестница + эскалация + диспозиция; банк-роль = лестница + разбор ответа. Второй копии цикла не появляется. + +⛔⛔ **ЕДИНСТВЕННОЕ, ЧТО ЗДЕСЬ ЗАДАНО ЖЁСТКО, И ЭТО ДЕНЬГИ: ступень ключуется ЧИСЛОМ УДВОЕНИЙ, а НЕ номером попытки.** В дереве потолок — функция числа удвоений бюджета, а номер попытки считает КЛЮЧИ, и файл из позиции 2 карты чтения объявляет это различение несущим: «escalations counts BUDGET DOUBLINGS; attempt counts KEYS. They come apart on TWO paths». Номер попытки вдобавок не растёт линейно — попытка перешагивает сожжённые ключи. ⇒ **отображение «номер попытки → потолок» есть смена ключа покупки и пере-оплата уже купленных чекпойнтов.** Перечислитель ступеней делай один на всех, но параметром берёт число удвоений. + +**Что ещё обязано стать параметром:** +- **допуск ступени** — «можно ли купить следующую»: у стадии книжный потолок, у банк-роли её собственный ролевой суб-бюджет; +- **судья ступени** — у стадии вердикт даёт классификатор выхода, у банк-роли он приходит **после разбора таблицы** (ответ на чужом языке, доля отвеченных ниже порога). Без этого хоп на другую модель по «упёрся в потолок» бессмыслен: другая модель потолка не лечит. + +⛔ **И честно про регресс-сеть, потому что первая редакция этого промта врала.** Пинов, фиксирующих ЗНАЧЕНИЕ хеша запроса, у нас **нет**: существующие проверяют только, что хеш МЕНЯЕТСЯ при смене поля, а сквозной пин детерминизма банк-проход не гоняет вовсе. ⇒ **зелёный гейт НЕ докажет, что ты не сдвинула ключ покупки.** Первым делом построй то, что покраснеет от сдвига: голден значения хеша банк-батча. Полезный существующий якорь — тест шва, который пишет чекпойнт под хешем, выведенным продакшн-путём: он ловит расхождение пробы с попыткой, но не сдвиг обеих разом. + +### 4.2. Ступень мимо бюджета — ДЕЛАЙ РОВНО ТАК + +Проба «этот вызов уже оплачен» спрашивает только про **нулевую** попытку. Как только лестница начнёт покупать ступень номер один, эта ступень уйдёт мимо пробы и мимо ролевого суб-бюджета. Допуск и проба обязаны говорить об одних и тех же ступенях — это условие, а не совет. + +### 4.3. Эскалация банк-ролей — РЕШИ САМА, прочитав, что защищает нулевой хоп + +Банк-роли не доходят до эскалации **намеренно**. Прежде чем менять, прочти комментарий в `internal_call.go` и назови в отчёте, **что именно** он защищает: причин там несколько, и как минимум одна про чужие деньги — общий пул эскалации принадлежит черновой стадии. + +⇒ Фоллбек банк-роли на другую модель обязан: не тратить чужой пул, считаться против ролевого суб-бюджета, оцениваться по цене **той модели, на которую идёт**. Ключ конфигурации — аддитивный, по образцу стадий. ⚠ Возьми у образца не форму, а **гарантию**: посмотри, чем соседний механизм себя стережёт, и перенеси это тоже. + +### 4.4. Тождество банк-батча — этим же паком, но развилку выбираешь ты + +Ключ покупки включает порядковый номер куска, а банк-батчи нумеруются по порядку ⇒ стоит фильтру снять одну решённую строку, номера всех последующих сдвигаются, и они покупаются заново при неизменном тексте (ряд **478**). + +**Почему в одном паке с лестницей:** любая правка ключа один раз пере-покупает уже оплаченные банк-чекпойнты; два пака — две пере-чеканки и дважды переписанные пины. + +⚠ **Развилка, и цена у неё разная.** Номер куска сегодня — целое число, оно же колонка в хранилище, ось лога и носитель инварианта «два батча не столкнутся на одном чекпойнте». Свернуть отпечаток состава в это целое — коллизии и потеря смысла колонки; завести отдельную ось в запросе — смена ФОРМАТА ключа, а она пере-чеканит **не только банк, но все стадии**. Обещание «пере-покупает один раз» верно только для первой ветви. Выбери ветвь, назови цену обеих числом и предъяви, что пере-чеканка произойдёт однажды, а не на каждом прогоне. + +### 4.5. Счёт ответов — вторая половина той же дыры + +Доля ответов **считается** и пишется построчным предупреждением по каждому батчу; чего нет — так это её в итоговой строке и в проекции, а итоговая строка печатает число батчей, выброшенных **бюджетом**, что читается как «сколько термов без ответа». ⚠ Не заводи третий счётчик рядом: подними существующий до итога и разведи два смысла честно. + +### 4.6. Стандарт работы — слово владельца 17.09, ратифицировано `D39.258` п.3 + +Писать **«согласно нашим проектным высоким стандартам по решению проблемы художественного перевода»**: чистый код, рефакторинг там, где он нужен, никаких заплаток поверх неработающих решений, техдолг не копить. ⚠ Это **проверяемый** пункт, а не лозунг: отчёт называет, **что было отрефакторено и почему** (см. §13). + +**Чего НЕ делать:** ансамбль моделей, кросс-модельные веса и селекцию из вариантов — закрыто ратификацией и замером, в этом паке не пере-открывается · платформу и контракт не трогать · эхо-эскалацию черновика не чинить (она выключена данными по причине ряда **435**, и это отдельный предмет). + +## 5. Самопроверка ИСПОЛНЕНИЕМ + +Гейт зоны (`make battery`) обязателен и самопроверкой **не является**. Сверх него — адверсариальный проход по своей готовой работе; **субагентов поднимать разрешаю явно**. Глубину выбираешь сама, направление даю я — четыре места, где этот пак мягок: + +1. **Сдвиг ключа покупки** (§4.1) — у тебя нет пина, который это ловит, пока ты его не построишь. Проверь посадкой, а не цветом гейта. +2. **Ложная регенерация на банке.** Прозовые правила вердикта гасит **предикат роли** (не флаг конфигурации), и он гасит именно эхо-проверку и экран целевого языка, а классификатор потолка и пустоты работает всегда. ⚠ Не снимай предикат мутацией — это правка ПРАВИЛА, и она пометит здоровые таблицы дефектными, то есть покраснеет про другой предмет. Утверди ПОСЫЛКУ: здоровая таблица терминов не должна вызывать регенерацию, иначе это ложная регенерация за деньги. +3. **Ступень мимо суб-бюджета** (§4.2) — фикстура, где ступень номер один обязана быть отвергнута бюджетом роли. +4. **Пере-чеканка ключа** (§4.4) — доказать исполнением, что она происходит один раз. + +⚠ **Мутации:** записей каталога, трогающих два твоих главных файла, — 39 из 478, и 35 из них уже в гейте (в гейте всего 267 из 478). ⇒ полный прогон каталога после рефактора обязателен и по времени оценим. Новые посадки вводи в гейт, иначе «поймана» — разовый прогон смены, а не рубеж проекта. + +## 6. Оси ревью + +Две-три, можешь заменить с аргументом: **денежная** (ни один путь не покупает дважды и мимо бюджета) · **качество перевода** (стало ли термов с машинным типом больше — мерило журнал запросов, не проекция) · **рефакторинг без регресса** (что переехало и чем доказано, что поведение прежнего вызывающего не изменилось). + +## 7. Записка-план + +До первой правки кода — короткая записка в свою секцию журнала: какой разрез выбрала, какие параметры вынесла, что решила по эскалации и по развилке §4.4. + +## 8. Эхо-протокол старта + +**Первым действием** — десять строк **своими словами**: скоуп, инварианты, чего не делаешь. Дословный пересказ промта подтверждает канал, но не понимание. + +## 9. Что не удалось — и где прибор слеп + +Секция «не удалось / не проверено» обязательна. ⚠ И вторая половина: **«где мой прибор слеп и я это знаю»** — что невидимо, почему не чинила, чем закрывается. Норма зоны: **в коде названо, в отчёте нет — значит для следующей смены не названо.** + +## 10. Канал вопросов, право отказа, советчик + +Конфликт промта с кодом — **пинг**, не интерпретация; право сказать «этого делать не надо» с аргументом у тебя есть. Прямой канал — механизм в `CLAUDE.md` §«Связь между сессиями»: впиши свой блок первым делом, эхо отправь по адресу оркестратора оттуда же. Тебе разрешён **один** старший советчик (`model: "fable"` явно) для развилки, которую не закрывает своё суждение; досылай вопросы ему, а не поднимай новых — его контекст и есть ценность. Он советчик, не источник истины. + +## 11. Критерий завершённости — проверяемый + +- у **каждого** пункта заказа исход: сделано · не делаю с доводом · пинг; +- круги **сошлись**: последний не дал новых находок, прежние закрыты таблицей «находка → что сделано → **чем предъявлено**»; +- таблица мутаций полная, выжившие названы поимённо, полный прогон каталога пройден; +- **список «что отрефакторено и почему»** — либо явное «рефакторинга не потребовалось» с доводом (§4.6); +- числа сняты **после последней правки**, у каждого команда повторения; всё живое — **в дереве**; +- гейт зоны зелёный **целиком** (сверка списком целей, а не отсутствием слова FAIL); +- сказано явно: **«работа завершена, править не планирую»**. + +--- + +⭐ Мы не «чиним ретраи». Мы делаем так, чтобы книга не получила героев с неверно переданными именами из-за того, что движок знал о негодном ответе и промолчал. diff --git a/docs/PLATFORM_BANK_READOUT_SESSION_PROMPT.md b/docs/PLATFORM_BANK_READOUT_SESSION_PROMPT.md new file mode 100644 index 00000000..9e8c370b --- /dev/null +++ b/docs/PLATFORM_BANK_READOUT_SESSION_PROMPT.md @@ -0,0 +1,122 @@ +# Платформенный пак: ЧЕЛОВЕКУ ПОКАЗЫВАЮТ ПУСТОЙ ЭКРАН, КОГДА ЕМУ ЕСТЬ ЧТО ПОДПИСАТЬ + +## 1. Какая проблема и что решит твой результат + +Движок переводит книгу и один раз за прогон **останавливается**, чтобы человек подписал термины: как зовут героя, гору, секту. Это единственный момент во всём продукте, когда у человека спрашивают решение, и от него зависит связность всей книги — подписанный термин дальше едет законом. + +В этот момент движок кладёт рядом с базой книги файл-проекцию банка. Замерено на двух купленных боевых прогонах: + +| прогон | `terms` | `proposed` | `consolidation` | +|---|---|---|---| +| A (платная стоп-граница) | **0** | **69** | объект из 7 полей | +| B (платная стоп-граница) | **0** | **66** | объект из 7 полей | + +Платформа читает из этого файла **только секцию `terms`** — и отдаёт человеку ноль. Десятки предложений лежат в том же файле непрочитанными, и первый слой ратифицированного `D39.256` («в продолжение едет подписанное») у любого пользователя пуст фактически: подписывать нечего, потому что предложения до него не доехали. + +**Ряды трекера, которые пак закрывает:** **224** (движковая половина закрыта 07.09, остаётся платформенная — у секции предложений ноль читателей) и **253** (поля на странице банка нет, у секции консолидации ноль читателей). Оба — заказ этого пака слово в слово. + +## 2. Зона записи и git + +**Твоя зона — `platform/`** плюс зонный журнал `platform/docs/platform-PROGRESS.md` и, если понадобится, `platform/BACKLOG.md`. **Контракт `docs/architecture/14-api-contract/` — исключение: туда писать можно и нужно** (прецеденты: миноры 0.13.0, 0.14.0, 0.15.0 сданы платформенными паками), но только туда; остальной `docs/` не трогай. **Ты не коммитишь** — готовишь дерево и передаёшь оркестратору. Git-дисциплина целиком — `CLAUDE.md` §«Git-координация мультисессий». + +⛔ **`frontend/docs/api-contract/` НЕ ТРОГАТЬ.** Зеркало фронта отстало на тринадцать миноров (`0.2.3` против `0.15.0`), и это **ратифицированное** отставание на время заморозки зоны (`D39.142` п.5). Типы фронта генерятся из зеркала — правка разбудит замороженную зону. + +## 3. Карта чтения — ЗАКОН + +1. `CLAUDE.md` в корне — канон проекта целиком. +2. **`platform/docs/ENGINEERING_STANDARDS.md`** — ратифицированный стандарт зоны; карта доков требует, чтобы каждый платформенный промт на него ссылался, отступление — пинг. Рядом `platform/docs/PLATFORM_DIRECTION.md` — ратифицированное направление зоны. +3. `platform/internal/ingest/bank.go` (153 строки) — существующий ридер проекции. **Читать целиком, включая комментарии: в них дисциплина, которую ты наследуешь** (§4.2). +4. **Путь артефакта целиком:** `platform/internal/runner/artifacts.go` → `platform/internal/pgstore/readmodel.go` (функция сохранения банка) → миграции `platform/internal/pgstore/migrations/`. Там решается, ломает ли новая секция дельта-чтение. +5. Контракт: `docs/architecture/14-api-contract/openapi.yaml` (адресно: страница банка, схемы термина и статуса) **и его компаньон `README.md` рядом** — компаньон ратифицирован и ведёт провенанс каждой строки; минор без него разойдётся с конструкцией. + +Код первичен: адреса — отправные точки. ⚠ **Числа этого промта сняты оркестратором; те, на которых строишь решение, пере-снимай сама.** + +## 4. Что построить + +### 4.1. Прочитать секции — поля снимаешь ЗАМЕРОМ, не по этому списку + +Научить ридер разбирать две секции, которые он сегодня игнорирует: **`proposed`** (предложения движка) и **`consolidation`** (итог прохода терминолога). + +⛔ **Список полей НЕ переписывай из промта — сними с обоих купленных файлов сама.** Контроль, с которым сверишься: у предложения **восемь обязательных** полей (`src`, `dst`, `kind`, `channel`, `freq`, `spread`, `conf`, `variants`) и **четыре опциональных**, которые есть не везде: `conventions` (в B у всех 66, в A нет ни у одной), `invented` (11 из 69 в A, 17 из 66 в B), `contradicts`, `bank_holds`. + +⛔⛔ **`invented` — то самое поле, ради которого экран и существует:** движок объявляет его классом, который читают ПЕРВЫМ («консолидированная передача — НЕ та, что дали черновики»). Ридер без него покажет человеку список, в котором не видно, что движок выдумал имя. Не потеряй его так, как потерял первый черновик этого промта. + +⛔ **САМОЕ ОПАСНОЕ МЕСТО ПАКА — слово `proposed` значит здесь ДВЕ разные вещи.** В контракте это значение статуса строки (движковый `auto` переводится в него); в проекции — имя секции с предложениями, и это другой объект с другими полями. Не заводи третий смысл и не переименовывай существующий. Как назвать новое во внешнем контракте — решай сама и аргументируй; мой приор, опровергаемый: во внешнем имени слова `proposed` избегать вовсе. + +### 4.2. Взять у образца не форму, а ГАРАНТИЮ — ДЕЛАЙ РОВНО ТАК + +Существующий ридер несёт три решения, каждое с ценой ошибки в комментарии: документ **без версии банка отвергается** («пустой банк и документ, который эта сборка не умеет читать, декодируются одинаково, и один из них заменил бы весь банк книги ничем»); **неизвестный статус** читается как «просит решения»; **неизвестное происхождение** — как то, что заявляет о себе меньше всего. + +Твои секции наследуют **этот класс гарантий**. Конкретно спроси себя: +- чем у тебя отличается «секции в файле нет» от «секция есть и пуста»? Если ничем — ты воспроизвёл ложный ноль, ради устранения которого пак заказан; +- **то же про ПОЛЯ**: четыре из двенадцати опциональны, и «поля нет» не равно «значение ложно»; +- **граница.** Проекция пишется на ПЯТИ границах прогона и сама это объявляет, несёт отметку границы и идентификатор прогона, а её экспорт трижды предупреждает, что файл может быть несвежим. Ридер сегодня эти поля не читает вовсе. ⇒ секция предложений читается только вместе с отметкой границы, и **«граница не та» обязано отличаться от «предложений нет»**. + +### 4.3. Отдать наружу — контрактный минор, РЕШАЕШЬ САМА + +Канон `0.15.0`, полоса мажора `0`, добавление — минор. Форму решаешь ты: расширить ответ существующей ручки, добавить секцию рядом или отдельный ресурс. Аргумент обязан отвечать на вопрос «что увидит человек, которому надо подписать». + +⚠ **Развилка, которую надо знать заранее: у предложения НЕТ идентичности.** У термина есть `id` и он несёт объяснение зачем; у предложения `id` нет ни в одном из 135 замеренных объектов. Вся платформенная сторона построена поверх этого `id`: сохранение банка ключует по нему, бампает ревизию книги, а исчезновение строки переводит книгу в сброс ревизии, «потому что исчезнувшую строку нельзя выразить дельтой». Контракт при этом отдаёт страницы с курсором и версией, а порядок предложений — **ранжирование**, которое между прогонами меняется. ⇒ «чем адресуется предложение в дельта-чтении» — настоящий вопрос, движок тебе править нельзя, и **пинг с обоснованием здесь полноценный исход пункта**, а не срыв. Выдумывать `id` на стороне платформы — пере-реализация закона движка, это запрещено. + +⚠ **Проза контракта едет в исходник генерируемого клиента** — ратифицированная конструкция. Описания пишутся как код. + +### 4.4. Хранилище — назови решение явно + +Секции сегодня хранить негде: таблица банка одна, миграций 35, и ни одна не знает ни предложений, ни консолидации. Решаешь сама, с аргументом: **хранить в базе** (тогда миграция — часть пака, и надо показать, что она не ломает дельта-чтение и ревизию) или **читать на лету** из артефакта (тогда назови, что происходит, когда артефакта нет или он с другой границы). + +### 4.5. Чего НЕ делать + +- Не строить UI и не размораживать фронт; читатель сегодня — API. +- Не трогать движок: проекцию пишет он, её формат — его зона. Расхождение формата — **пинг**, а не правка у себя. +- ⛔ **Не подпирать заплаткой то, что просит перестройки.** Слово владельца 17.09 (`D39.258` п.3): чистый код, рефакторинг где нужен, техдолг не копить. Отрефакторила — **назови в отчёте, что и почему**. + +## 5. Самопроверка ИСПОЛНЕНИЕМ + +Гейт зоны (`make check`) обязателен и самопроверкой не является. Сверх него — адверсариальный проход по своей готовой работе; **субагентов поднимать разрешаю явно**. Тебе разрешён **один** старший советчик (`model: "fable"` явно) для развилки, которую не закрывает своё суждение: досылай вопросы ему, а не поднимай новых. Он советчик, не источник истины — его посылки проверяются деревом. + +Четыре места, где этот пак мягок: +1. **Коллизия имени `proposed`** — проверь исполнением, что в одном ответе два смысла не смешались. +2. **Различение «нет» и «пусто»** — для секций И для опциональных полей; пин обязан краснеть, если их склеить. +3. **Полнота минора** — сверь, что каждое объявленное поле уходит на провод, а не только имеет тег. +4. **Ложный ноль на живом файле** — предъяви числа ДО и ПОСЛЕ на купленных проекциях: «было 0, стало 66» и есть доказательство. + +## 6. Оси ревью + +Две-три, можешь заменить: **контрактная** (минор законен, полон, описания говорят правду о поведении) · **дисциплина ридера** (гарантии §4.2 перенесены, а не процитированы) · **человеческий узел** (достаточно ли отданного, чтобы человек принял решение; чего не хватает — назови, даже если не строишь). + +## 7. Чем мерить — купленное сырьё, ТОЛЬКО на чтение + +- `/home/ubuntu/tm-coldrun-a/evidence/bankstop-paid/project.db.bank.json` +- `/home/ubuntu/tm-coldrun-b/evidence/paid-bankstop/project.db.bank.json` + +⛔ Это купленные улики: открывать только на чтение, ничего в этих каталогах не создавать. ⚠ Рядом с проекцией B лежит база прогона — **её не открывать вовсе**: движковый стор молча мигрирует старую схему и уничтожает улику (ряд **475**), а рядом с ней уже появился временный файл от чьего-то чтения без флага неизменности (ряд **472**). + +## 8. Записка-план + +До первой правки кода — короткая записка в зонный журнал: что строишь, какой формой отдаёшь, что решила по коллизии имени, по идентичности предложения и по хранилищу. + +## 9. Эхо-протокол старта + +**Первым действием** — десять строк **своими словами**: скоуп, инварианты, чего не делаешь. + +## 10. Что не удалось — и где прибор слеп + +Секция обязательна, и вторая её половина тоже: **«где мой прибор слеп и я это знаю»** — что невидимо, почему не чинила, чем закрывается. В коде названо, в отчёте нет — значит для следующей смены не названо. + +## 11. Канал вопросов и право отказа + +Конфликт промта с кодом — **пинг**, не интерпретация. Право сказать «этого делать не надо» с аргументом у тебя есть. Прямой канал — механизм в `CLAUDE.md` §«Связь между сессиями»: впиши свой блок первым делом, эхо отправь по адресу оркестратора оттуда же. + +## 12. Критерий завершённости — проверяемый + +- у **каждого** пункта заказа исход: сделано · не делаю с доводом · пинг; +- круги **сошлись**, прежние находки закрыты таблицей «находка → что сделано → **чем предъявлено**»; +- **числа ДО и ПОСЛЕ на обоих купленных файлах** предъявлены командой; +- ряды **224** и **253** закрыты либо названо, что именно от них осталось; +- список «что отрефакторено и почему» либо явное «не потребовалось» с доводом; +- гейт зоны зелёный **целиком**; всё живое — **в дереве**; +- сказано явно: **«работа завершена, править не планирую»**. + +--- + +⭐ Приоритет №1 проекта — издательское качество перевода длинной книги: связные термины и голоса на всю книгу. Экран подписи — место, где человек этим управляет напрямую. Всё здесь меряется одним: **стало ли человеку видно, о чём его спрашивают.** diff --git a/docs/README.md b/docs/README.md index abd49ebd..9df879dd 100644 --- a/docs/README.md +++ b/docs/README.md @@ -24,6 +24,8 @@ - **Активные хендофф-промты — какой файл ТВОЙ** (состав обновляется при каждом лендинге, D39.80; хроника, причины и статусы РАБОТ — CURRENT-STATE и D-лог): | Роль | Активный промт | Статус | |---|---|---| + | **Платформа · ЧИТАТЕЛЬ ПРЕДЛОЖЕНИЙ БАНКА** | [PLATFORM_BANK_READOUT_SESSION_PROMPT.md](PLATFORM_BANK_READOUT_SESSION_PROMPT.md) | ВЫДАН 17.09 сессии `textmachine-main-94`. Ряды **224** и **253**: на стоп-границе проекция несёт 0 терминов при 69 и 66 предложениях, а ридер платформы парсит только секцию терминов. Два рубежа пройдены: сверка 13 блоков и субагент-опровергатель (9 находок, все внесены — в т.ч. пропущенное поле «выдумано движком»). $0 | + | **Бэкенд · ЛЕСТНИЦА ПОПЫТКИ ДЛЯ БАНК-РОЛЕЙ** | [BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md](BACKEND_BANK_RETRY_LADDER_SESSION_PROMPT.md) | ВЫДАН 17.09 сессии `textmachine-main-12`. Ряды **451** · **438** · **435** · **478**: движок вычисляет вердикт о негодном ответе банк-роли и выбрасывает его; заказан вынос лестницы в общий контур, а не заплатка. Два рубежа пройдены: сверка 13 блоков и опровергатель (9 находок, включая денежную — ключ ступени по числу удвоений, а не попыток). $0 | | **Бэкенд · БАНК ЗА $0** | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 16.09 С НАЗВАННЫМ ОСТАТКОМ** — акт **`D39.257`**; промт в [archive/prompts/](archive/prompts/BACKEND_BANK_ZERO_LAYER_SESSION_PROMPT.md) с баннером-исходом. 29 путей, $0. ⭐ Посылка `D39.256` перестала быть посылкой: 25 из 26 смен при идентичном входе. ⛔ Мажоры — сдвинутые якоря (ряд 467) и арм по чужому знаменателю (ряд 462). ⚠ Остаток: полный прогон каталога мутаций (267) на момент акта не закончен. **Слот бэкенда СВОБОДЕН** | | **Бэкенд · КУПЛЕНО — ЗНАЧИТ ДОСТАВЛЕНО** | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 16.09 С НАЗВАННЫМ ОСТАТКОМ** — акт **`D39.255`**; промт в [archive/prompts/](archive/prompts/BACKEND_BOUGHT_MEANS_DELIVERED_SESSION_PROMPT.md) с баннером-исходом. Лендинг `af88680`, 29 путей, $0. Закрыты строки **291** и **379** (вторая — ЗАМЕРОМ: мутант 8/8 против 7/8 в ряду). ⛔ Пак пережил ПОТЕРЮ сессии: `textmachine-b1` построила почти всё и исчезла при переезде окружения, доводила `textmachine-main-b1` разделом ПЕРЕДАЧИ ред. 5. ⚠ Остаток — строки **375** · **232** · **453**–**456**; три опубликованных ключа качества сменили смысл (п.5 акта). **Слот бэкенда СВОБОДЕН** | | Сквозной · ХОЛОДНЫЙ ПРОГОН B | активного НЕТ | пак ОТРАБОТАН и **ПРИНЯТ 11.09** — акт **D39.252**; промт в [archive/prompts/](archive/prompts/COLD_RUN_B_SESSION_PROMPT.md) с баннером-исходом. Книга второй раз от двери до ФАЙЛА, факт **$0.396657**. ⭐ Две меры денежной дыры разошлись в РАЗНЫЕ стороны на одних данных; **85.7 % оплаченного выхода — размышление, а не текст**. ⛔ Прибор приоритета №1 солгал вердиктом по подписанному имени героя. Качество впервые судилось по ОРИГИНАЛУ рядом с переводом: 26 находок, 1 крит |