diff --git a/CLAUDE.md b/CLAUDE.md index b360a6bb..30d0c149 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,28 +70,18 @@ Go-бэкенд издательского художественного пер - **Общность движка:** Go-логика НЕ ветвится по паре/книге; пара-данные → `internal/lang`+`configs/langpacks/`, книго-каноны → сид/brief (данные); книжный термин в общем пар-слое = утечка. Тест-данные пары легитимны. Норматив (только больные места): `docs/architecture/12-go-style-notes.md`. Ревью-вопрос по умолчанию — §Цели п.2. - **При компакции/сжатии контекста ВСЕГДА сохранять:** список изменённых файлов · незакрытые находки ревью и их диспозиции · обязательства и открытые вопросы сессии · команды тестов (D39.121). - **Тесты и гейты не подгонять под зелень:** править или удалять тест/голден/гейт, чтобы он прошёл, — НЕДОПУСТИМО; несогласие с тестом — вопрос оркестратору пингом, не правка (D39.121). ⚠ **Запрет — про МОТИВ (D39.183):** правка *чтобы прошло* запрещена; правка, вызванная сменой поведения, которая ЗАКАЗАНА паком или ратифицирована, — обслуживание, и **держать протухший тест не нужно**. ⚠ Заказанность решает ЗАКАЗ, а не сессия: нет в промте и нет ратификации — пинг. Такая правка ОБЪЯВЛЯЕТСЯ в отчёте: что изменилось в поведении, какой тест это описывал, куда уехала гарантия. -- ⛔ **ОТРИЦАТЕЛЬНЫЙ ЗАМЕР ОБЯЗАН ДОКАЗАТЬ, ЧТО СПРОСИЛ СУЩЕСТВУЮЩЕЕ.** «Ноль строк» и «нет такой таблицы/файла/поля» - в выводе НЕРАЗЛИЧИМЫ и одинаково выглядят успехом — а в деньгах это разница между «не потратили» и «не смотрели». - ⇒ рядом с нулём ПЕЧАТАЕТСЯ КОНТРОЛЬНАЯ величина, доказывающая, что вопрос задан существующему предмету - («БД без этой таблицы: 0», «файлов прибор прочёл: 67»). ⛔ **Именно печатается, а не упоминается:** фраза - «проверено с контрольной строкой» — это утверждение О проверке, и читатель отчёта видит слово, а не число. - Иначе норма ловит замер и НЕ ловит отчёт о нём, то есть переносит дефект на шаг дальше — туда, где смена - 06.09 ловила его пять раз. Поправку принёс автор исходного замера, нарушив её в том же письме, где предложил. Замер 06.09: сессия - весь день писала `$0` ПО РАССУЖДЕНИЮ, пошла мерить — и первый же запрос дал `COUNT(*) = 0` по таблице, которой в - схеме НЕТ. Пере-замер по настоящим таблицам с контрольной строкой дал честный ноль. **Прибор ответил на свой - вопрос, а прочитан был как ответ на твой** — тот же класс, что `D39.202`, только в проверке ДЕНЕГ. +- ⛔ **ОТРИЦАТЕЛЬНЫЙ ЗАМЕР ОБЯЗАН ДОКАЗАТЬ, ЧТО СПРОСИЛ СУЩЕСТВУЮЩЕЕ.** «Ноль строк» и «нет такой + таблицы/файла/поля» в выводе неразличимы и одинаково выглядят успехом; в деньгах это разница между «не + потратили» и «не смотрели». ⇒ рядом с нулём **ПЕЧАТАЕТСЯ** контрольная величина, доказывающая, что вопрос + задан существующему предмету: «БД без этой таблицы: 0», «файлов прибор прочёл: 67». ⛔ Именно печатается, а + не упоминается: «проверено с контрольной строкой» — утверждение О проверке, читатель видит слово вместо + числа, и норма ловит замер, но не отчёт о нём (`D39.202`, `D39.217` п.2б). - **Мандат самопроверки в промтах сессий (обязателен, решение владельца):** промты полигон-сессий — и вообще любых пишущих код / запросы к моделям — ДОЛЖНЫ явно требовать ревью ИСПОЛНЕНИЕМ: своего кода + сформированных запросов к моделям + полученных результатов. Сессии регулярно ошибаются и багуют, и это искажает результат; **самоотчёт «проверено» без исполнения регулярно оказывается ложным и стоит денег**. Бэкенд-промты — явный бэкенд-ревью после кода (обычно отрабатывает по опыту, но требовать явно). Пост-хок адверсариальная верификация оркестратора при лендинге — второй рубеж, НЕ замена самопроверки. ⚠ **Исполнения мало: промт заказывает адверсариальный проход сессии по СВОЕЙ готовой работе; глубину и веер сессия выбирает под предмет, промт даёт направление — что в этом паке уязвимо.** - ⛔ **МУТАЦИЯ ЗАСЧИТЫВАЕТСЯ ПО ТЕКСТУ СООБЩЕНИЯ, А НЕ ПО ФАКТУ КРАСНОТЫ.** Замер 06.09: мутация - «подметать все логи без разбора» покраснила гейт — сообщением «рецепт НИКОГДА не удаляет старый лог», то есть - о рецепте, который первым же действием удалял их все. Причина: `make` клеит префикс тишины к первой команде, - первый токен стал `@rm`, и детектор удаления его не увидел. **Правый вердикт по неправой причине — дыра, а не - поимка**, и от настоящей поимки он отличается ровно тем, прочёл ли кто-нибудь ТЕКСТ, а не цвет. Нашла зона, - потому что формулировка не сошлась с тем, что она мутировала. - ⭐ **ПРИЁМ, СТОЯЩИЙ ОДНОЙ СТРОКИ И НИ ОДНОГО АГЕНТА (замер 06.09):** когда приходит письмо «всё закрыто», - перестань проверять ЧУЖИЕ правки и иди перечитывать СВОИ утверждения о том, что закрыто. Из шести случаев - класса «прибор ответил на свой вопрос» за смену два нашлись именно так, и оба — автором утверждения, а не - ревьюером. Письмо «всё закрыто» — сигнал не расслабиться, а сменить предмет проверки на собственный. + ⛔ **МУТАЦИЯ ЗАСЧИТЫВАЕТСЯ ПО ТЕКСТУ СООБЩЕНИЯ, А НЕ ПО ФАКТУ КРАСНОТЫ.** Читай ТЕКСТ падения: говорит ли + он про сломанное тобой. Правый вердикт по неправой причине — дыра, а не поимка, и от настоящей поимки + отличается только тем, прочёл ли кто-нибудь текст, а не цвет (`D39.217` п.2в). + ⭐ **Пришло письмо «всё закрыто» — иди перечитывать СВОИ утверждения о закрытом, а не чужие правки.** ⚠ **Fable 5** — обычно хватает одного-двух агентов, но это РЕКОМЕНДАЦИЯ, не потолок. Модель задавай агенту ЯВНО и знай, сколько их у тебя работает. - **Git-координация мультисессий:** - **Коммитит только оркестратор.** Сессии зон — бэкенд, полигон, фронт, платформа — не коммитят: своё дерево готовят и передают на лендинг (исключение: пре-рег фризы полигона). Чужую зону не трогает НИКТО. diff --git a/docs/ORCHESTRATOR_SESSION_PROMPT.md b/docs/ORCHESTRATOR_SESSION_PROMPT.md index 9df30010..91540174 100644 --- a/docs/ORCHESTRATOR_SESSION_PROMPT.md +++ b/docs/ORCHESTRATOR_SESSION_PROMPT.md @@ -20,35 +20,23 @@ канал между сессиями (прямой — блок 12). **Зона записи:** `docs/` + корневые онбординг-доки + записи/пинги в зонных журналах `frontend-PROGRESS.md`/`platform-PROGRESS.md`. Чужой код читаешь — не правишь; коммитишь ВСЁ ты (исключение — пре-рег фризы полигона). -⛔ **ЛОВУШКА, СРАБОТАВШАЯ ДВАЖДЫ ЗА ОДНУ СМЕНУ (05.09) — прочти прежде, чем коммитить `docs/PROGRESS.md`.** -Pathspec-форма `git commit -- <пути>` защищает от чужого в ИНДЕКСЕ, но НЕ защищает от чужого ВНУТРИ -файла твоей зоны: она берёт рабочее состояние файла целиком. А `docs/PROGRESS.md` — единственный файл -зоны `docs/`, в который ПИШУТ чужие зоны (секции «Бэкенд»/«Полигон», решение владельца). Итог: твой -коммит про свою строку бэклога уносит чужой отчёт под твоим сообщением. Содержимое цело, теряется -атрибуция; **историю НЕ переписывать** — сообщить владельцу и зоне. -⇒ **Исполнимый шаг, а не «быть внимательным»: ПЕРЕД каждым коммитом ЛЮБОГО ЗОННОГО ЖУРНАЛА смотри -`git diff -- <файл>` и опознай, есть ли там ЧУЖИЕ секции.** ⛔ **Список полный, и он НЕ сводится к -`docs/PROGRESS.md`:** `docs/PROGRESS.md` (секции «Бэкенд»/«Полигон») · `platform/docs/platform-PROGRESS.md` · -`frontend/docs/frontend-PROGRESS.md` · `platform/docs/DEFECT_REGISTER.md`. ⚠ **Первая редакция этого шага -называла ОДИН файл, и ловушка сработала третий раз — на `platform-PROGRESS.md`**: правило было писано -про ЭКЗЕМПЛЯР, а не про КЛАСС, и потому не сработало там, где класс тот же. Класс: любой файл, куда -пишет зона, а коммитишь ты. Есть — либо коммить их отдельным коммитом с сообщением о ЧУЖОЙ работе (тогда атрибуция в сообщении, а не в авторстве), либо дождись, пока зона допишет, и назови её в сообщении. Знание «этот файл общий» было записано ещё утром и не помогло — потому что не называло ДЕЙСТВИЯ. -⛔ **СТАТУС-БОРД УКАЗЫВАЕТ, А НЕ КОПИРУЕТ — иначе одна правка становится четырьмя.** Замерено 06.09: -один денежный факт («платформенная половина построена, ставки за главу нет») жил В ЧЕТЫРЁХ файлах — -`15-money-path.md`, шапка `09-target-architecture.md`, `17-seam-inbound-law.md`, ряд бэклога. Сплошной -аудит увидел его как ОДИННАДЦАТЬ находок, и на каждую я писал правку заново; когда факт сменился, -менять пришлось все четыре, и три из них — пересказ. ⇒ **Механика живёт у своего ПРЕДМЕТА (денежный -путь — в `15-money-path.md`); борды и реестры несут СТАТУС плюс указатель на носитель.** Правило -проверяется вопросом «если этот факт завтра изменится, сколько файлов придётся тронуть?» — больше -одного значит копия. ⚠ Не относится к ЖУРНАЛУ решений: тела нот — улика по `D23.3`, они описывают -дерево на ДАТУ и не пере-писываются даже когда протухли; им нужна эррата, а не указатель. +⛔ **ЧУЖОЕ ВНУТРИ ФАЙЛА ТВОЕЙ ЗОНЫ.** Pathspec-форма `git commit -- <пути>` защищает от чужого в ИНДЕКСЕ, +но не от чужого ВНУТРИ файла: она берёт его рабочее состояние целиком. Файлы, куда пишет ЗОНА, а коммитишь +ТЫ: `docs/PROGRESS.md` (секции «Бэкенд»/«Полигон») · `platform/docs/platform-PROGRESS.md` · +`frontend/docs/frontend-PROGRESS.md` · `platform/docs/DEFECT_REGISTER.md` — и любой новый файл этого класса. +⇒ **ПЕРЕД коммитом каждого из них: `git diff -- <файл>` и опознать чужие секции.** Есть чужое — либо +отдельный коммит с сообщением о ЧУЖОЙ работе (атрибуция в сообщении), либо дождаться зону и назвать её в +сообщении. Уже унёс — историю НЕ переписывать, сообщить владельцу и зоне. -⛔ **ВТОРАЯ ЛОВУШКА ТОГО ЖЕ РОДА — ПЕРЕ-НАВЕДЕНИЕ ЯКОРЕЙ СПЛОШНОЙ ЗАМЕНОЙ.** Правя протухшие `file:line`, -легко заменить строку пути ВЕЗДЕ. Но тот же путь стоит в доках дважды в разных ролях: как ЖИВАЯ ССЫЛКА -(её чинить надо) и как УЛИКА в описании дефекта — «код цитирует вот этот путь, а его удалили» (её -чинить НЕЛЬЗЯ: замена превращает описание поломки в описание её отсутствия). Замерено 06.09: так была -заландена ПЕРЕВЁРНУТОЙ клауза строки бэклога 299. ⇒ **перед сплошной заменой пути грепни его и раздели -хиты на ссылки и улики; в описаниях дефектов путь не трогай.** +⛔ **ОДИН НОСИТЕЛЬ НА ФАКТ** (`D39.112`; при ратификации — §«Ратифицируешь?»). Механика живёт у своего +ПРЕДМЕТА (денежный путь — `15-money-path.md`); статус-борды и реестры (шапка `09-target-architecture.md`, +таблицы `docs/README.md`) несут СТАТУС и указатель на носитель. Проверка: «если факт завтра изменится, сколько файлов придётся тронуть?» — +больше одного значит копия. ⚠ Не относится к телам D-нот: они описывают дерево на ДАТУ, им нужна эррата, а +не указатель (`D23.3`). + +⛔ **ЯКОРЯ НЕ ЧИНЯТСЯ СПЛОШНОЙ ЗАМЕНОЙ.** Один и тот же путь стоит в доках в двух ролях: ЖИВАЯ ССЫЛКА (чинить) +и УЛИКА в описании дефекта — «код цитирует вот этот путь, а его удалили» (не чинить: замена переворачивает +описание поломки в описание её отсутствия). ⇒ **перед заменой грепни путь и раздели хиты на ссылки и улики.** ## Онбординг и состояние @@ -67,7 +55,9 @@ Pathspec-форма `git commit -- <пути>` защищает от чужог ### Пишешь промт сессии? -**Функции роли:** промты сессий → приёмки → ратификации D-нотами → синхронизация доков → ответы владельцу. +**Функции роли** (владелец 07.09 — «тим-лид»): **направление проекта** → промты сессий → контроль их завершённости → +приёмки → ратификации D-нотами → синхронизация доков → ответы владельцу. ⚠ Признак подмены роли: смена ушла в +правки якорей и ответы на письма, а очередь не сдвинулась — значит работал за сессии. **Обязательные блоки — все 13 (счёт держать равным нумерации ниже); перед выдачей два рубежа: механическая сверка промта против этого списка (таблицей/грепом) + опровергатель-субагент к самому промту (получает промт, список, листы @@ -96,17 +86,12 @@ Pathspec-форма `git commit -- <пути>` защищает от чужог УКАЗАТЕЛЬ на файл, а не имя, велит сессии вписать туда себя и повторяет дословно «канала нет ⇒ НЕ искать»; эхо (блок 9) идёт первым действием по адресу из файла и служит проверкой канала. -13. **КРИТЕРИЙ ЗАВЕРШЁННОСТИ — слово владельца 07.09: сессия доводит работу до логического конца САМА.** - Тегать оркестратора «просто так» нельзя: его приёмка — В САМОМ КОНЦЕ, и она не заменяет второго круга - сессии. ⛔ Промт обязан нести ПРОВЕРЯЕМЫЙ список, иначе «завершено» остаётся самоотчётом, а он в этом - проекте регулярно ложен: (а) у каждого пункта заказа ИСХОД — сделано · сознательно не делаю с доводом · - пинг; (б) круги самопроверки **СОШЛИСЬ** — последний не дал НОВЫХ находок, находки предыдущих закрыты - таблицей «находка → что сделано → чем предъявлено» (дал новое ⇒ он не последний); (в) числа сняты ПОСЛЕ - последней правки, каждое с командой; (г) таблица мутаций полная, выжившие названы; (д) внутри отчёта нет - обещаний — последний абзац не план; (е) всё живое в ДЕРЕВЕ, а не в письме; (ж) дерево в безопасной точке - со своим `git status`; (з) ЯВНОЕ заявление «работа завершена, править больше не планирую» — без него пак - считается идущим. ⚠ Оркестратору: до этого заявления входящее от сессии — это ДИСПОЗИЦИЯ или стена, а не - приёмка; отвечать на вопрос, который сессия может закрыть замером, — значит становиться её вторым кругом. +13. **Критерий завершённости** (владелец 07.09): сессия доводит работу до конца САМА, приёмка идёт последней и + вторым кругом сессии не служит. Промт несёт ПРОВЕРЯЕМЫЙ список, иначе «завершено» остаётся самоотчётом: + у каждого пункта заказа исход (сделано · не делаю с доводом · пинг) · круги СОШЛИСЬ — последний не дал НОВЫХ + находок, прежние закрыты таблицей «находка → что сделано → ЧЕМ ПРЕДЪЯВЛЕНО» · таблица мутаций полная, + выжившие названы · числа сняты после последней правки · всё живое в ДЕРЕВЕ, а не в письме · явное + «работа завершена, править не планирую». Без последнего пак считается идущим. Плюс к любому промту: построчная сверка инструкций с путями/каналами ВНЕ зоны сессии против зонной таблицы CLAUDE.md (D39.99 п.4) · состав против ВСЕХ листов владельца (реестр требований · зонные @@ -145,10 +130,9 @@ D-ссылка грепается по D-логу · mid-flight аддендум ### Принимаешь работу? -⛔ **СНАЧАЛА КОНТРОЛЬ ЗАВЕРШЁННОСТИ, ПОТОМ ПРИЁМКА (слово владельца 07.09).** Пришло «финал» — первым делом -механически сверь восемь пунктов блока 13 промта; хоть один не закрыт ⇒ возвращаешь сессии с названием -пункта, а не принимаешь. Приёмка недоделанного превращает оркестратора во второй круг сессии и съедает -единственный рубеж, который у пака остался. +⛔ **Сначала контроль завершённости, потом приёмка** (владелец 07.09): пункты блока 13 сверяются МЕХАНИЧЕСКИ +(таблицей/грепом; перечтение отчёта не считается), не закрыт хоть один — возвращаешь с названием пункта. Приёмка недоделанного делает тебя вторым кругом сессии и съедает последний +рубеж пака. Приёмка ВСЕГДА адверсариальная и проверяет НАПРАВЛЕНИЕ и решения пака, не только клеймы отчёта. @@ -219,7 +203,7 @@ pathspec своей зоны опасен (чужие сессии пишут В D-нота = РЕШЕНИЕ + указатель на механику (она в журнале зоны), без саги, пересказа диалога и оценочных эпитетов; дословные цитаты владельца — только как носитель ратификации. Тем же коммитом: строка реестра -`05-decisions-index.md` + бамп шапки-диапазона обоих носителей. **Один носитель на факт** (D39.112): +`05-decisions-index.md` + бамп шапки-диапазона обоих носителей. **Один носитель на факт** (правило — §«Кто ты»): числа — скриптом; список живёт в ОДНОМ месте, остальные указывают; сводка, повторённая в пяти носителях, гниёт. Эрраты к фактам старых нот — в КАРТУ шапки D-лога (append-only, тел не переписывать, D23.3). Владельцу на решение: деньги сверх мелочи · скоуп-сдвиги · продукт · 18+. @@ -254,16 +238,14 @@ Y»), а не «посмотри». По умолчанию **Fable 5**, при ИМЕНЕМ. Такой агент держит СВОЙ контекст: с ним ведут долгий разговор параллельно работе, дослав вопрос тому же агенту, а не подняв нового. Ему прямо разрешать не экономить контекст — читать доки целиком, грепать репозиторий, ходить в интернет. Не звать там, где хватает своего суждения или -механической сверки. +механической сверки. ⚠ Жёсткая редакция `D39.217` п.6а («окей напарника на КАЖДОЕ изменение») смягчена +владельцем 07.09 до этой формулировки — `D39.220`. ## Оплаченные факты — держать в промтах и приёмках (справочник) -- Провайдерские факты — цены, мины слагов и thinking — живут в `00-provider-quirks.md`; копий здесь НЕТ. - ⚠ **Цены и окна DeepSeek — ТОЛЬКО `docs/experiments/00-provider-quirks.md` (греп `ПИК DEEPSEEK`), копии - здесь нет намеренно.** Испр. 05.09: прежняя редакция держала копию и вдобавок утверждала, что в квирках - факта НЕТ, — ложное отрицание из грепа, который не мог сработать. Копия при этом отстала от носителя на - одну поправку и стоила бы вдвое дороже на каждой платной пробе выходного дня. **Урок, ради которого это - здесь: копия факта стареет молча, а отрицание проверяется командой, которую можно воспроизвести.** +- Провайдерские факты — цены, мины слагов, thinking — ТОЛЬКО `docs/experiments/00-provider-quirks.md` + (цены и окна DeepSeek — греп `ПИК DEEPSEEK`). Копий здесь нет намеренно: копия факта стареет молча. + Отрицательное утверждение о носителе — только командой, которую можно воспроизвести. - Генерации: принимать только `finish=stop`; ВСЕ пробы персистить; леджеры не сбрасывать. - Судейские риги: per-vote персист · полно-evidence окна (окна с усечённой уликой запрещены) · оба порядка · шум-полы измерены (числа — в отчётах полигона) — маргинальное не интерпретировать без floor-гейта · @@ -272,38 +254,23 @@ Y»), а не «посмотри». По умолчанию **Fable 5**, при дифф, если менялись только версии/хеши. - Прод-инъекцию воспроизводить `tmctl translate` + `LOG_LLM_BODIES` байт-диффом (не по `injected_ids`); порт-зеркала — «при расхождении верить Go». -- ⛔ **«ИСПРАВЛЕНО» ГОВОРИТСЯ ТОЛЬКО ПОСЛЕ ГРЕПА ПО ОТОЗВАННОЙ ФОРМУЛИРОВКЕ, а не после того, как ты её - исправил в голове.** Шаг: `grep -c "<снятая фраза>" <файл>` — ноль либо только внутри пометки-эрраты, - цитирующей отозванное. Замер 06.09: класс сработал ТРИЖДЫ за смену — «внесён в состав минора» о правке, - которой в каноне не было (эррата 06.09-а) · «исправлено вместе с остальными» напарнику о носителе, до - которого правка не дошла · и он же остался немаркированным. **Пишущий отчёт описывает своё НАМЕРЕНИЕ и - читает его как состояние файла** — греп стоит секунду и различает их. -- ⛔ **ТО ЖЕ ПРО «ЗАПИСАНО»: ПИСЬМО, ОБЪЯВЛЯЮЩЕЕ НАХОДКУ ЗАВЕДЁННОЙ, САМО НОСИТЕЛЕМ НЕ ЯВЛЯЕТСЯ.** - Формулировка строителя; замер 06.09: за смену **ПЯТЬ** находок жили только в переписке — две находки - платформенной зоны без рядов · нечитаемое оглавление · непрогоняемый каталог мутаций · корректность - разреза · манифестная половина EPUB на живых книгах. **Две из них я лично объявил учтёнными** («твой - инвариант вошёл в тот же ряд»), не заведя строки, — и обе нашёл не я, а автор находки, пойдя проверять - не чужие правки, а СВОИ УТВЕРЖДЕНИЯ о том, что всё учтено. ⇒ перед словом «завёл» — `grep` по ЖИВОМУ - бэклогу НА ПРЕДМЕТ находки, а не на её название: название совпадёт с соседней строкой, предмет — нет. -- ⛔ **ЧИСЛО НАЗЫВАЕТ ДВЕ ВЕЩИ: ДЕРЕВО И ПОПУЛЯЦИЮ.** Дерево — sha коммита либо «рабочее дерево + что в нём - было незакоммичено». Популяция — ЧТО именно посчитано, потому что два честных прибора считают разное и - расходятся молча. Замер 06.09, стоивший верной записи: я написал «851 верхнеуровневых теста», верификатор - предъявил «на всех коммитах 850 или меньше» и потребовал снять, я снял — а число было ВЕРНО. Он считал - `func Test`, мой прибор считает верхнеуровневые ПРОГОНЫ вывода `go test -v`, то есть `Test` **плюс `Fuzz`**; - у платформы два `Fuzz`-таргета, и вся разница была в них (`93f098c`: 849+2=**851**). -- ⛔⛔ **ПРОВЕРКА ЧУЖОЙ НАХОДКИ ЕГО ЖЕ МЕТОДОМ — НЕ ПРОВЕРКА.** Тем же замером 06.09 я «пере-мерил сам, а не - поверил» — и воспроизвёл его команду, а значит и его ошибку; совпадение доказало лишь, что мы оба считаем - одно и то же не то, и на этом «подтверждении» я заландил снятие ВЕРНОГО числа. **Бери ДРУГОЙ прибор:** - другую популяцию, другую команду, другую сторону улики. Совпавший результат стоит ровно столько, сколько - стоит независимость инструмента. -- ⚠ **Правя носитель, ставь на исправленные места пометку тем же движением** (норма `535f60a`): эррата без - маркера на хвосте оставляет прежнюю формулировку стоять немаркированной, и следующий читатель возьмёт её. -- Промт-архивация: только отработанные, с баннером-исходом; residual-трекеры держать активными. - ⚠ **ПРИЁМКА ПАКА И РЕТИРОВАНИЕ ЕГО ПРОМТА — ОДИН АКТ, не два дела подряд.** Пока промт стоит в - таблице активных, отработанный пак остаётся ЖИВЫМ ЗАДАНИЕМ: холодная сессия по `CLAUDE.md` идёт в эту - таблицу ПЕРВЫМ делом и берёт оттуда свою работу. Замер 06.09: форма заказа принята в 00:47, промт снят - в 01:43 — 56 минут окна; движковый пак принят в 01:43, промт снят в 01:51, то есть ПОВТОР за один час - (эррата 06.09-в). Снимай промт тем же заходом, что пишешь акт приёмки. +- ⛔ **«ИСПРАВЛЕНО» — ТОЛЬКО ПОСЛЕ ГРЕПА ПО ОТОЗВАННОЙ ФОРМУЛИРОВКЕ.** `grep -c "<снятая фраза>" <файл>` — + ноль либо только внутри пометки-эрраты. Отчёт описывает НАМЕРЕНИЕ и читается как состояние файла; греп + различает их за секунду (`D39.217` п.4). +- ⛔ **«ЗАВЕДЕНО» — ТОЛЬКО ПОСЛЕ ГРЕПА ПО ЖИВОМУ БЭКЛОГУ, и грепать НА ПРЕДМЕТ находки, а не на её + название**: название совпадёт с соседней строкой, предмет — нет. Письмо, объявляющее находку заведённой, + носителем не является. +- ⛔ **ЧИСЛО НАЗЫВАЕТ ДЕРЕВО И ПОПУЛЯЦИЮ.** Дерево — sha либо «рабочее дерево + что незакоммичено». + Популяция — ЧТО посчитано: два честных прибора считают разное и расходятся молча (`func Test` против + верхнеуровневых прогонов `go test -v`, то есть `Test` плюс `Fuzz`). +- ⛔⛔ **ЧУЖУЮ НАХОДКУ ПРОВЕРЯЙ ДРУГИМ ПРИБОРОМ.** Повторив его команду, воспроизводишь и его ошибку; + совпадение доказывает лишь, что оба считаете одно и то же не то. Бери другую популяцию, другую команду, + другую сторону улики (`D39.217` п.2а). +- ⚠ **Правя носитель, ставь пометку тем же движением** (норма `535f60a`): эррата без маркера на хвосте + оставляет прежнюю формулировку немаркированной, и следующий читатель возьмёт её. +- **Промт-архивация: снимай промт из таблицы активных ТЕМ ЖЕ заходом, что пишешь акт приёмки.** Пока он + там стоит, отработанный пак остаётся живым заданием — холодная сессия берёт работу именно оттуда. + Residual-трекеры держать активными, в архив — с баннером-исходом. ## Чего НЕ делать diff --git a/docs/README.md b/docs/README.md index be5ea1a4..07ac6a56 100644 --- a/docs/README.md +++ b/docs/README.md @@ -23,7 +23,7 @@ | Роль | Активный промт | Статус | |---|---|---| | Оркестратор | [ORCHESTRATOR_SESSION_PROMPT.md](ORCHESTRATOR_SESSION_PROMPT.md) | роль и нормы; счётчик роли — CURRENT-STATE | - | **Бэкенд · КОНСИСТЕНТНОСТЬ** | [BACKEND_CONSISTENCY_SESSION_PROMPT.md](BACKEND_CONSISTENCY_SESSION_PROMPT.md) | приоритет владельца №1 «закон банка честно»: гард перекрытия окон (267 — ⚠ предмет СУЖЕН 06.09: два гарда в коде уже есть, непокрыт один случай) · совет, который движок не исполняет (320а) · честный комментарий постчека (318) · два ложных комментария (321 · попутный из 322). плюс попутный проход §5а «логические расхождения задумано против сделано» — списком в отчёт, без тихих правок. ⛔ **Строка 295 и ПРЕДМЕТ строки 322 из пака СНЯТЫ** (§4.5 промта) — прежняя редакция этой ячейки называла их составом, и это было ложью о заказе | + | **Бэкенд · КОНСИСТЕНТНОСТЬ** | [BACKEND_CONSISTENCY_SESSION_PROMPT.md](BACKEND_CONSISTENCY_SESSION_PROMPT.md) | приоритет владельца №1 «закон банка честно»: гард перекрытия окон (267 — ⚠ предмет СУЖЕН 06.09: два гарда в коде уже есть, непокрыт один случай) · совет, который движок не исполняет (320а) · честный комментарий постчека (318) · два ложных комментария (321 · попутный из 322). плюс попутный проход §5а «логические расхождения задумано против сделано» — списком в отчёт, без тихих правок. ⛔ **Строка 295 и ПРЕДМЕТ строки 322 в пак НЕ входят** (§4.5 промта) | | Бэкенд · СТРУКТУРА ГЛАВ | активного НЕТ | пак 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) |