44 KiB
Промт бэкенд-сессии: ДОСТИЖИМОСТЬ ПАР-ДАННЫХ — ЗАКРЫТЬ ДО ХОЛОДНОГО ПРОГОНА
Выдан оркестратором очереди №23. Пак $0 по умолчанию. Зона записи —
backend/. Ты не коммитишь: дерево передаётся оркестратору на лендинг.⚠ Редакция 2. Первая переписана после опровергателя (восемь мажоров), пяти верификаторов и ревью сдавшей сессии. Из них: три моих якоря целили не туда, один пункт вынут из пака целиком, а один был сформулирован так, что его можно было закрыть честно и НЕ сделать. Числа помечены тем, чем сняты.
1. Какая проблема и что решит твой результат
Движок переводит книги мультиагентным пайплайном. Объявленная цель — один общий движок, а пары языков живут ДАННЫМИ; «бэкенд только под китайский» есть объявленная АНТИЦЕЛЬ.
⭐ Замер, ради которого стоит прочесть абзац целиком: языковых ВЕТВЛЕНИЙ в Go почти не осталось. Греп по не-тестовым файлам движка даёт шесть упоминаний кодов языка при контроле 154 файла, живых ветвлений из них два, и оба законны и обоснованы на месте. ⇒ остаточная зависимость движка от одной пары есть не ветвление кода, а НЕДОСТИЖИМОСТЬ ДАННЫХ. Твой предмет — не «убрать китайское из Go», а сделать так, чтобы данные второй пары вообще доезжали.
Через несколько часов пойдёт платный холодный прогон двух книг параллельно — около 20 глав китайской и английская книга сопоставимого объёма, обе через API платформы. Владелец ратифицировал траты и поставил гейт: готовность бэкенда ратифицируется актом ДО прогона.
Критерий каждого твоего решения один: заработает ли пара, которой в репозитории ещё НЕТ, без правки Go?
⛔ Слово владельца 18.09, дословно, сильнее любого моего пункта: «Бэкенд не должен иметь конкретных механизмов под язык\книгу, максимум в данных и то они так же должны хорошо отрабатывать где этих французских слов нет». И: «пусть сессии не пишут воркэраунды и хаки».
2. Зона записи и git
Пишешь только в backend/. Чужие зоны — читать можно, править нельзя; расхождение там — пинг. Исключение
одно: своя секция в docs/PROGRESS.md. Ты не коммитишь. В дереве работают другие сессии — их
незакоммиченные файлы не трогай.
⛔ НИКОГДА не читай .env и .env.* — там боевые ключи.
3. Карта чтения — пять позиций, и она ЗАКОН
Код-факты добываешь САМА: адреса ниже суть отправные точки, а не истина. Три адреса первой редакции указывали не туда, и нашла это проверка по содержимому, а не чтение.
CLAUDE.md— канон, цели, гардрейлы.backend/README.md— устройство движка.backend/docs/EN_RU_PAIR_BASIS.md— разбор английской пары предыдущей сессией. ⚠ Часть механизмов там опровергнута замером; её §4.7 несёт находку, вошедшую в твой §4.7.docs/architecture/12-go-style-notes.md— нормы стиля, больные места.docs/BACKLOG.md, ряды 347 · 272 · 303 · 500 · 502.
4. Работа
4.0 Порядок фиксирован, и это не пожелание
⛔⛔ §4.1 ИДЁТ ПЕРВЫМ. Причина механическая: английская книга сегодня ОТКАЗЫВАЕТ на боевом конфиге до первого цента. Пока отказ стоит, остальные пункты нечем предъявить на предмете, ради которого пак существует; любая «живая проба» на английской книге упрётся в тот же отказ, и соблазн будет прогнать её на китайской и назвать результат общим. Это класс «утверждение удовлетворяется ЧУЖОЙ клеткой».
⛔ ЛОВУШКА АДРЕСА, НА КОТОРОЙ ОШИБЛИСЬ ТРОЕ ПОДРЯД, включая меня. Боевой гейт терминолога —
backend/configs/pipeline-c1.yaml:157=enabled: true под ключом terminology: (:152). На :151 стои́т
ТАКОЕ ЖЕ enabled: true, но принадлежит ключу banknote: (:144). Якорь на :151 зеленеет на соседнем
гейте и неотличим от правды. ⇒ свои якоря в этом файле проверяй печатью окрестности, а не поиском токена.
⚠ И этот файл сейчас незакоммичен: при лендинге строки могут уехать. Пере-нацель их первым делом.
⛔ ДЕТЕКТОРЫ СМЫСЛА ИЗМЕРЕНЫ И НЕГОДНЫ — но это НЕ про перенос разметки. Три кандидата на вердикт «это
стих» проверены: вложенность блока в блок ловит 37 из 88 и слепа к 51; семантика epub:type/role мертва на
ВСЕХ четырёх книгах проекта (у книги прогона 0 при контроле class= 17 955); статистика длин ловит 5 из 88.
⚠ Клаузула, без которой §4.0 противоречит §4.3: негодны детекторы СМЫСЛА. Перенос РАЗМЕТКИ —
другой предмет, и там класс CSS есть единственный живой носитель. Не спутай: в §4.0 «класс» мёртв как
признак смысла, в §4.3 он жив как носитель разметки.
4.1 Английская книга не стартует на боевом конфиге — ОДНА причина, и она первая
Стена, пере-снятая исполнением верификатором и подтверждённая сдавшей сессией:
backend/internal/pipeline/runner.go:364=if forWrite && r.Pipeline.Gates.Terminology.Enabled && r.pack == nil
— на пути ЗАПИСИ прогон ГРОМКО ОТКАЗЫВАЕТ (RefusalBadConfig, текст «gates.terminology is enabled but
this book cannot mine a bank: it needs a langpack…»), когда гейт включён, а пар-пак пуст. Каталогов лангпаков
в дереве три — ru, zh, zh-ru; каталога en-ru нет.
⚠ Формулировка важна: контур НЕ «тихо пропускается», он отказывает. В первой редакции я написал «пропускается», и исполнитель пошёл бы искать молчаливое место, которого нет.
Почему нельзя просто положить каталог. Пак без манифеста объявляет ВСЕ каналы, а объявленный канал
требует своих файлов ⇒ пустой английский пак потребует таблиц, которых у латиницы не бывает. Носитель —
backend/internal/lang/langpack.go:644=manifest declares no channel. Ряд 347 называет это прямо.
⚠ ЧТО НЕ НАДО ПРОВЕРЯТЬ, потому что уже проверено: валидатор лангпака НЕ зашит под китайскую форму —
чтение файлов канало-гейтед, и ратифицированное D39.64 п.4 в коде ИСПОЛНЕНО, а не только объявлено. Первая
редакция заказывала эту проверку зря.
РОВНО ТАК: предмет — дать манифесту объявить НОЛЬ каналов и завести английский пар-пак так, чтобы он грузился. ⛔ Китайский пакет обязан остаться БАЙТ-ИДЕНТИЧНЫМ — предъяви неподвижным хешем до и после. Верификатор показал, что это достижимо; выйдет иначе — это находка, и её надо назвать, а не обойти.
РЕШИ САМА: состав данных английского пар-пака. ⛔ Значение НЕ подгоняется под книгу прогона: объясни, из какого измеримого свойства ПАРЫ оно выведено, чтобы третья и четвёртая пара получили своё тем же способом.
⚠ Что открывается даром вместе с этим пунктом — назови в отчёте: английская книга сегодня не получает детерминированного заголовка главы вовсе, потому что шаблон рендерится только при непустом паке.
4.2 Сайзинг терминолога: пар-путь есть у ДВУХ ручек из ТРЁХ
⛔ Здесь первая редакция позволяла закрыть пункт честно и НЕ сделать работу. Она говорила «параметризация построена, строить нечего», а предметом называла две величины — ширину окна и размер батча. Проверка показала бы, что ширина с диска доезжает (доезжает), пункт закрылся бы — и китайский по форме батч уехал бы в прогон. Нашла это сдавшая сессия, ревьюируя промт; классом это «заказ, который можно исполнить отчётом».
РОВНО ТАК: проверь ПОФАЙЛЬНО, у какой из трёх ручек пар-путь есть. Парсер пар-файла принимает ровно три
ключа (backend/internal/lang/langpack.go:783 — текст ошибки перечисляет их дословно). Пак влияет только на
две из них; третья берётся из явного ран-конфига, иначе из константы
backend/internal/pipeline/terminologist.go:74=terminologyDefaultBatchRunes. Скажи, нужен ли пар-дом
третьей, и аргументируй. Это деньги, а не эстетика: руны ханьцзы и руны латиницы несут содержания примерно
вчетверо по-разному ⇒ у английской книги батчей больше, вызовов больше, и берутся они из ПОЖИЗНЕННОГО
бюджета роли.
⛔ НАЗОВИ ВСЕ ТРИ КЛЮЧА ЯВНО, когда будешь писать первый английский файл пары. Третий ключ —
basis_width — единственный, чей тюнинг ПЕРЕ-ПОКУПАЕТ БАНК: его докблок (langpack.go:143) объясняет,
что склеенный с шириной окна он «invalidate every fingerprint of every book and re-buy each bank out of a
LIFETIME role budget». Заведёшь файл с одним ключом — второй останется на дефолте, и первый же его тюнинг
станет пере-покупкой.
⚠ «Построено и запинено» ≠ «используется»: файла сайзинга нет и у БОЕВОЙ пары (configs/langpacks/zh-ru/
несёт четыре файла, и terminology.txt среди них нет). ⇒ все ручки едут на дефолтах движка у обеих пар, а
пин доказывает путь, которым не пользуется никто. Не ищи у китайского референсный файл — его нет, и это не
твоя ошибка.
⛔ МИНА, СВЯЗЫВАЮЩАЯ ЭТОТ ПУНКТ С 4.1. Сегодня английская книга до сайзинга не доходит — она отказывает раньше. Китайский дефолт станет достижим ровно в тот момент, когда ты закроешь 4.1. ⇒ сайзинг обязан приехать ТОЙ ЖЕ правкой, иначе починка одной дыры молча откроет другую, и виноват будет твой пак.
⚠ Число, ходившее по нашим письмам, неверно: окно берётся в обе стороны, поэтому сорок рун на английской прозе дают около шестнадцати слов, а не семи. Считай сама, моим числам здесь не верь.
4.3 Курсив не доезжает до модели — крупнейшая потеря качества на боевой книге
Замер по коду, мой: обходчик ингеста не различает инлайновую разметку ВООБЩЕ — ноль упоминаний span,
i, em, italic, font-style, class= на 1239 строк файла; безусловная запись текстового токена —
backend/internal/chunk/ingest.go:1234=body.WriteString(text).
⚠ Соседняя :1230 пишет то же, но она ВНУТРИ ветки ruby и условна; в первой редакции я указал именно её.
⛔ ЧИСЛА ПЕРЕ-СНЯТЫ, И МОИ ПРЕЖНИЕ ПРОМАХИВАЛИСЬ В 2–4.5 РАЗА. Бери эти (прибор: python3 + zipfile
по epub книги прогона; контроль: 126 документов, 11 397 абзацев):
| предмет | число |
|---|---|
| носителей курсива всего | 4842 |
тегов <i> / <em> |
0 / 0 |
правил font-style: italic в CSS книги |
ровно одно, класс .italic |
абзацев <p class="italic"> |
0 — ВСЕ носители суть <span> |
| полностью курсивных абзацев | 937 (изолированных 619, в прогонах 318) |
| прогонов подряд ≥2 / строк в них | 92 блока / 318 строк |
| частично курсивных абзацев | 2538 |
| коротких выделений (спан ≤3 слов) | 3481 |
⛔ Самое важное здесь — строка про абзацы. Моё прежнее описание «гимны набраны курсивными абзацами по строке» ЛОЖНО: таких абзацев ноль. Сессия, посланная искать курсивные абзацы, найдёт ноль и может заключить, что явления нет вовсе. Носитель один — спан.
Цена маркера посчитана: два знака на носитель даёт +0.6 % к объёму прозы. Литеральных звёздочек во входе нет: в прозе epub — 0 при 1 588 694 прочитанных знаках, в четырёх китайских текстах — 0 при 38.9 МБ. ⇒ утверждение «китайский исходник маркеров не несёт» подтверждено с контролем.
РОВНО ТАК — форма: движок НЕ выносит вердикт «это стих», «это мысль», «это акцент». Он доносит структуру на провод, а решает модель. Образец взят у зрелого конвертера, а не изобретён.
РЕШИ САМА: маркер, способ добычи курсивности (приор: единственное CSS-правило файла), нужен ли разбор CSS или хватает сканера простых классовых правил. ⛔ Полноценный CSS-движок — велосипед, не строй.
Три звена, все обязательны:
- (а) РЕШИ САМА: ингест оборачивает курсивный текст маркером.
- (б) РОВНО ТАК по форме, РЕШИ САМА по объёму: в промте КАЖДОЙ пары появляется один языко-слепой абзац о
том, что маркер значит, инертный там, где маркеров нет. ⛔ Цена этого звена названа, и она неочевидна:
абзац в промте банк-роли пере-минтит её личность (
backend/internal/pipeline/bankbasis.go:183) ⇒ решённые термины перестают отдаваться из базиса и пере-спрашиваются из ПОЖИЗНЕННОГО бюджета роли; абзац в стадийном промте двигает подпись промта в снапшоте ⇒ громкий ре-снапшот. Взвесь, в промты каких стадий он нужен, и назови цену каждого. ⚠ И правкаtranslator.mdобязана уехать вtranslator-banknote.mdТЕМ ЖЕ движением: иначе покраснеет пин зеркальности, а байтовый гейт при этом промолчит. - (в) РОВНО ТАК: экспорт отображает маркер обратно, и поверхностей ДВЕ: тело главы пишется
backend/internal/bookfile/epub.go:133=sb.WriteString(" <p>" + xmlText(p) + "</p>(⚠ не:128— там преамбула нулевой главы, я ошибся), и рядом второй писательbackend/internal/bookfile/txt.go:19=func WriteTXT(w io.Writer, b *Book) error, вызываемый тем же циклом сборки. Маркер, отображённый только в epub, уедет читателю звёздочками в txt.
РЕШИ САМА, но предъяви: знаменатели, которые сдвинет маркер — оценка токенов, коридор длины, доля письма исходника, плотность. «Маркер не буква, границы ключей целы» есть утверждение, а не факт, пока не показано.
4.4 Пар-связанные ключи брифа сидят в пар-агностичном шаблоне книги (ряд 272)
Цепь пере-снята ИСПОЛНЕНИЕМ через настоящий раннер: шаблон книги несёт
platform/deploy/README.md:222=transcription: palladius и :221=honorifics: keep в КАЖДУЮ книгу →
движок принимает свободной строкой без валидации (backend/internal/config/book.go:61=Transcription) →
значение кладётся в плейсхолдер (backend/internal/pipeline/render.go:207="transcription") → и рендерится
в инструкцию. Английская книга получает на провод «Транскрипция имён и реалий: palladius» — систему для
КИТАЙСКОГО, молча, на всю книгу.
⚠ Адрес денежного промта именно такой: боевой конфиг ставит
backend/configs/pipeline-c1.yaml:79=prompt_variant: banknote, то есть на деньги уходит
backend/prompts/en-ru/translator-banknote.md:5=Транскрипция имён и реалий, а не translator.md.
Плейсхолдер несут 3 ролевых файла из 6 в каталоге пары (в каталоге есть ещё два класса ремонта, всего
восемь .md — считая find-ом, не удивляйся числу).
⚠ Честно про величину: измеренного ущерба на английском тексте НЕТ, и советчик считает его малым. Чинится как КЛАСС: он повторится с каждой парой, а на японской книге тот же токен вреден по смыслу.
РОВНО ТАК по инварианту: множество допустимых политик объявляет ПАРА; книга выбирает ИМЯ; Go не знает ни одного имени политики. Ключа в книге нет → пар-умолчание. Ключ есть, а пара имени не знает → громкий отказ до первой траты. Прецедент того же рода уже ратифицирован в этом же загрузчике для двух других полей — найди его и следуй ему, а не изобретай третий путь.
⛔ РЕШИ САМА, и это несущее решение: ГДЕ живёт таблица политик. Очевидный дом —
backend/configs/pairs/<pair>.yaml — имеет ловушку: этот слой не фолдится НИ В ОДИН снапшот, поэтому
правка ТЕКСТА политики двигала бы каждый хеш запроса и молча пере-покупала бы книгу — без отказа
ре-снапшота и без предупреждения. У проекта есть штатный дом для «пар-данные-ТЕКСТ, доезжающий до выхода»:
шаблон заголовка в лангпаке, который фолдится через версию пакета. ⇒ выбери дом С ЦЕНОЙ НА РУКАХ и назови
её; я снял с этого пункта «РОВНО ТАК» именно потому, что первая редакция навязывала дом, не посчитав цену.
⚠ Платформенная половина (убрать пар-связанные ключи из шаблона деплоя) — ЧУЖАЯ ЗОНА. Опиши в отчёте, оркестратор отнесёт пингом.
4.5 Упор в баланс провайдера не имеет своего исхода — ряд 502
Провод классифицирует отказ по деньгам верно и под пином: терминальный, без пустых ретраев. Но типизированная ошибка не покидает пакет транспорта, и перечислимых причин в движке 43, из которых ни одна не про кредиты провайдера (контроль: строк со словом «reason» — 943). ⇒ «у провайдера кончились деньги» и «стадия упала терминально» на уровне исхода неразличимы; тело отказа доезжает до человека только внутри текста обёрнутой ошибки, то есть в журнале процесса.
Почему здесь: предстоит платный прогон двух книг, и прогон, встретивший отказ по балансу на середине, останавливается наполовину купленным. Событие не гипотетическое — на одной оси замеров проекта 44 записи из 52 суть ровно такой отказ.
РЕШИ САМА: строить исход или объявить отложенным. ⛔ Но исход обязан быть назван — «сделано» либо «не делаю, потому что …». В первой редакции этот ряд стоял в карте чтения и не имел работы, и опровергатель поймал это как дефект заказа: пункт проваливался молча.
4.6 Ключи банка латиницей сталкиваются со строчными омографами — бьёт по приоритету №1
Находка предыдущей сессии, в первую редакцию НЕ попавшая. Нормализация ключа складывает регистр, поэтому у
латиницы имя собственное и обычное слово становятся одним ключом: замеренные пары — 167 против 143, 11 против
84, 155 против 2, и это 3 из 25 реально предложенных банкнотой поверхностей. Носитель разбора —
backend/docs/EN_RU_PAIR_BASIS.md §4.7.
⇒ это не опрятность: банк терминов английской книги получает склеенные ключи, а консистентность терминов через книгу есть приоритет №1 владельца.
РЕШИ САМА форму лечения. РОВНО ТАК одно: оно не ветвится по языку. Свойство «регистр различает имя собственное» принадлежит письменности, а не английскому; китайский его не имеет по построению, и правка обязана быть инертна для него.
4.7 ЧТО ВЫНУТО ИЗ ПАКА — чтобы ты не вернула это по своей инициативе
Детерминированный гейт латиницы слеп к диакритике (считает буквами только ASCII, поэтому имя с
диакритикой распадается на осколки). Дефект настоящий, и он вынут замером: потребителей два, ремонт в
боевом конфиге выключен целиком (0 хитов слова repair в pipeline-c1.yaml при контроле 2 хита gates на
269 строк), а выход дешёвых гейтов — чистая наблюдаемость, «в отчёт, никогда не роняя чанк». ⇒ на ЭТОМ
прогоне он не меняет ничего, что видит модель или читатель, зато его обязательный бамп версии двигает
глобальную ось снапшота ОБЕИХ книг. Цена есть, пользы для прогона нет. Ряд остаётся открытым.
5. Самопроверка исполнением — и где у ЭТОГО пака мягко
Ревью исполнением обязательно: своего кода, своих проб, своих результатов. Субагенты прямо разрешены. Сверх исполнения — адверсариальный проход по СВОЕЙ готовой работе; глубину и веер выбираешь сама.
Fable 5 — ОДИН советчик на сессию, с постоянным контекстом. Он советчик, не источник истины. ⚠ У меня он дважды ошибся в адресах, включая файл, которого в дереве нет. Проверяй его так же, как меня.
ПЯТЬ МЕСТ, ГДЕ ЭТОТ ПАК УЯЗВИМ ИМЕННО ПОТОМУ, ЧТО ОН ТАКОЙ:
-
⛔ Закрыв четыре пункта из шести и не закрыв 4.1, ты получишь ЗЕЛЁНУЮ БАТАРЕЮ на книге, которая всё равно откажет. Пункты 4.2–4.6 невозможно предъявить на английской книге, пока стоит отказ пустого пака, и любая проба на китайской книге будет замером в чужой клетке.
-
Маркер курсива уходит в текст, который считают ЧЕТЫРЕ прибора, и ни один об этом не знает. Дефект тут не покраснеет: числа просто станут другими, а «другое число» и «верное число» выглядят одинаково.
-
Экспортных поверхностей две, и вторая молчит в тестах ингеста. Забытое отображение вылезет в файле у читателя — после прогона и после денег.
-
Данные английской пары зеленеют при ЛЮБОМ содержании. Ни один гейт не судит, хороши ли значения, — только что файл разобрался. Единственный рубеж содержимого — твой советчик и твой довод «откуда взято значение». Назови это прямо, не выдавая зелёный разбор за подтверждение содержимого.
-
⛔ ТРИ ЛОЖНЫЕ ПОБЕДЫ, переданные сдавшей сессией — каждая выглядит закрытым пунктом и им не является:
- бампнуть версию промта, чтобы «починить» байтовый гейт — пере-именует ключ ВТОРОЙ пары, у которой байты не двигались, и превратит реестр в носитель ложного утверждения. Лечение — сделать лейбл пар-скоупным, а не бампать. Условие протухания нынешнего «безвредно» названо заранее: первая же покупка на английской книге;
- положить
em/iв список блочных тегов — не починка курсива, а ВТОРАЯ порча: теги инлайновые, и ты получишь разрыв абзаца на каждом из тысяч выделений. Блочных тегов там 31, определение наbackend/internal/chunk/ingest.go:976=var blockTags = map[string]bool{; - завести файл структуры для английского языка — выглядит дешёвой победой: дверь открыта, загрузчик прочтёт, отчитаться легко. Но манифест на контрольной английской книге побайтно тот же и с файлом, и без него: маркерная грамматика до не-CJK текстового пути не доходит (ряд 303). ⇒ либо чинится путь и ТОГДА заводятся данные, либо данные не заводятся вовсе.
⭐ Общее у всех трёх и у дефекта §4.2: артефакт появился, а поведение не изменилось. У каждого своего пункта спрашивай не «сделано ли», а «что в поведении дерева стало другим и чем я это предъявлю».
⛔ ДИСЦИПЛИНА НАД ВСЕМ ПАКОМ, А НЕ НАД ОДНИМ ПУНКТОМ: китайская половина не должна сдвинуться. Глобальные оси снапшота двигают ТРИ твоих пункта: правка ингеста по конвенции проекта бампает версию нарезки, правка промта пары двигает стадийную подпись, правка правил дешёвых гейтов — их версию. Все фолдятся БЕЗУСЛОВНО, то есть у ОБЕИХ книг. ⇒ предъяви один раз на пак, что китайский провод байт-идентичен, и делай это ПЕРВЫМ замером после каждой правки, а не последним.
6. Оси ревью
- Код: батарея + живые пробы + СВОИ адверсариальные посадки вне твоего же списка. Пак, меняющий отгружаемые байты, принимается прогоном через настоящий драйвер, а не чтением диффа.
- Швы: у стыка с экспортом и с платформой — инвентарь ВСЕХ каналов другой стороны чтением ЧУЖОГО кода.
- Данные: каждое значение — с доводом, откуда выведено; «по аналогии с китайским» доводом не является, если не назван признак, по которому аналогия законна.
Вправе заменить ось с аргументом.
Кодовому паку дополнительно, и это обязательно:
- ⛔ пин на УСЛОВНОЕ сообщение обязан иметь фикстуру, где оно ОБЯЗАНО прозвучать. Твой §4.1 и §4.4 заказывают громкие отказы — тест, утверждающий только молчание, вакуумен ровно там, где сообщение ложно;
- перед отчётом сверь КАЖДЫЙ клейм с результатом инструмента ЭТОЙ сессии;
- последний абзац отчёта оказался планом или обещанием — сделай сейчас, а не обещай;
- ⛔ править или удалять тесты ради зелени НЕДОПУСТИМО. Твои бампы версий гарантированно покрасят голдены; правка, вызванная ЗАКАЗАННОЙ сменой поведения, — обслуживание, и она ОБЪЯВЛЯЕТСЯ: что изменилось, какой тест это описывал, куда уехала гарантия. Правка «чтобы прошло» — нет;
- дифф
^func Testпредъявляй исполнением, а не памятью; - в длинной сессии — интервальная самоверификация субагентом против ЯВНЫХ критериев.
7. Записка-план
До первой правки кода — короткая записка: что делаешь по каждому пункту и что считаешь спорным. Присылай оркестратору. ⚠ Порядок работ запиской НЕ решается: §4.1 первым, это задано.
8. Заявление есть команда
Каждое число и каждая категоричная фраза отчёта — с командой, которой получена. Приёмка пере-снимает. ⛔ У каждого НУЛЯ печатай контрольную величину, доказывающую, что прибор спросил существующий предмет.
Ловушки среды, каждая даёт тихий ложный ноль:
- обёртка
grepчтит.gitignoreи не видитbooks/— по корню бериcommand grep; findздесь bfs, и дефекта у него ДВА: относительное время принимает только-mmin(форма-newermt '-10 minutes'даёт ошибку, а с2>/dev/null— чистый ноль), и он тоже чтит игнор-файлы, поэтому книги подbooks/им не находятся вовсе (проверено: поиск epub даёт 0 при трёх существующих файлах, аlsих видит);sqlite3как CLI нет; базы читатьpython3, только на чтение, и только на копиях;- ⚠ и одна не про среду, а про счёт: знаки и байты — разные популяции. Кириллица весит два байта, и
len()противwc -cразойдутся в 1.7 раза на русском тексте. Я на этом сегодня попался.
9. Эхо старта
До работы — ≤10 строк СВОИМИ словами: скоуп · инварианты · чего не делаешь. Дословный пересказ промта подтверждает канал, но не понимание, и повторяет ошибку промта вместе с ним. Шли первым действием.
10. Что НЕ удалось и где прибор слеп
Обязательная секция, две половины. Первая — «что не получилось». Вторая — «что ты знаешь и не сказала»: что невидимо · почему не чинила · чем закрывается. ⭐ В коде названо, в отчёте нет — значит для следующей смены НЕ названо.
11. Канал вопросов и право отказаться
Конфликт промта с кодом или доками — пинг, а не интерпретация. У тебя есть право сказать «этого делать не надо» с аргументом, и это поощряется. ⚠ Эта редакция родилась из восьми мажоров опровергателя и ревью сдавшей сессии: три моих якоря целили не туда, один пункт вынут целиком, а §4.2 был сформулирован так, что его можно было закрыть честно и не сделать работу. Нашла ещё — говори: это починка промта, а не придирка. ⚠ И одно противоречие называю сам: приоритет ряда 347 в трекере — «когда-нибудь», а промт трактует его как первый пункт. Прав промт: ряд писался до того, как прогон стал делом часов.
12. Прямой канал
Механизм — CLAUDE.md §«Связь между сессиями», файл /tmp/textmachine-channel. Впиши туда свой блок первым
делом. ⚠ Адрес из файла не доказывает, что сессия жива: сверься с ListAgents. Нужной роли нет — канала нет,
и это нормально: вопрос секцией в отчёт, работа продолжается.
13. Когда пак считается завершённым
Ты доводишь работу до конца САМА. Приёмка идёт последней и вторым кругом тебе не служит.
- У каждого из пунктов §4.1–§4.6 — исход: сделано · не делаю с доводом · пинг. Шесть пунктов, и §4.5 тоже требует исхода, а не молчания.
- Английская книга доезжает на БОЕВОМ конфиге — предъявлено прогоном, а не рассуждением.
- Китайский провод байт-идентичен — предъявлено хешем, один раз на пак.
- Круги СОШЛИСЬ: последний не дал НОВЫХ находок; прежние закрыты таблицей «находка → что сделано → чем предъявлено».
- ⛔ Таблица мутаций полная, и у неё ТРИ исхода, а не два: поймано · выжило · НЕ ИЗМЕРЕНО. Третий — это записи, у которых базовый прогон пакета не был зелёным, команда не собралась или фикстуре сбросили соединение. Неизмеренное, прочитанное как пойманное, хуже выжившего: оно закрывает вопрос, не задав его. С двумя исходами можно честно отчитаться «выживших нет», имея неизмеренные записи.
- Числа сняты ПОСЛЕ последней правки.
- Гейт зоны прогнан целиком; названо, ЧТО прогнано; рядом с числом
okнапечатан счёт скипов. - Всё живое — в ДЕРЕВЕ, а не в письме.
- Явное «работа завершена, править не планирую».
⛔ И последнее. Предмет пака — не «починить английскую книгу», а сделать данные второй пары достижимыми. Проверка каждого решения одна: заработает ли пара, которой в репозитории ещё НЕТ, без правки Go? Ответ «нет» — решение не готово, сколько бы тестов ни было зелёными.