17 KiB
Промт сессии: КАЧЕСТВО — подать подписанный канон в прогон и ЗАМЕРИТЬ чекер
Роль: бэкенд (+ полигонная половина замера). Зона записи:
backend/и своя секция «Бэкенд» вdocs/PROGRESS.md— единственное разрешённое каноном исключение из «docs/— зона оркестратора». Ты НЕ коммитишь: дерево готовишь и передаёшь оркестраторуtextmachine-main-27. Чужие зоны (platform/,frontend/,eval/вне своей половины) и соседний worktree/home/ubuntu/projects/textmachineне трогаешь..envне читаешь никогда.
КАРТА ЧТЕНИЯ — ЗАКОН, пять позиций, дальше только по её ссылкам
CLAUDE.md— цели, зоны, гардрейлы.^## D39.198(журнал решений) — приоритет качества словом владельца и почему весов рубрики НЕ НУЖНО.^## D39.205— что владелец решил 05.09 про гейт глоссария и чего он НЕ решал.- Строки бэклога 295 · 12 · 296 в
docs/PROGRESS.md(греп^| 295 |и так далее). docs/architecture/12-go-style-notes.md§1 — язык кода и три корзины целевого языка. ⚠ Голову журнала целиком НЕ читать. Номер грепается: тело —^## D<номер>; подномер (D39.196,D2.3) собственного тела НЕ имеет — это ПУНКТ внутри родителя, отбрось хвост.
⛔ ГЛАВНОЕ, ЧТО НАДО ЗНАТЬ ДО ВСЕГО ОСТАЛЬНОГО: ПРИБОР УЖЕ ЕСТЬ И УЖЕ ДАЛ ЦИФРУ
Первая редакция этого промта заказывала «замерить точность чекера» как неизвестное. Это был заказ на
построенное, пойманный внешним ревью до выдачи. Факты, каждый проверен командой:
· харнесс — backend/internal/membank/labelharness_test.go и backend/internal/checks/labelharness_test.go,
гейт окружения TM_CHECKER_LABELS=1; корпус лейблов ВНЕ git — books/gu-zhenren/labels/;
· результат записан: books/gu-zhenren/labels/metrics.json, класс k6 (пост-чек глоссария) —
n=258, tp=1, fp=14, fn=0, precision=0.0667, recall=1.0 (замер 26.07, ДО стеммера);
· ⇒ из пятнадцати срабатываний ЧЕТЫРНАДЦАТЬ ЛОЖНЫЕ, а полнота 1.0 держится на ОДНОМ положительном
примере — то есть порочна именно ПОЛНОТА, как и говорит строка 12, а точность измерена и она плохая;
· ⚠ все fp_ids — из прогонов С ПОДКЛЮЧЁННЫМ сидом (acceptance, minirun, rerun2-*), значит для
ЭТОГО прибора «сначала подключить канон» не предусловие: его корпус уже с каноном.
Твоя работа — не построить замер, а СНЯТЬ ЕГО ЗАНОВО ЧЕСТНО: добрать положительные примеры (без них
полнота — вырожденное утверждение) и пере-снять точность ПОСЛЕ стеммера.
ЗАЧЕМ ЭТОТ ПАК — одной фразой
Приоритет №1 владельца — «100% консистентность, никаких разнопереведённых терминов» — сегодня не исполняется, и живая дыра НЕ там, где её искали. Не порог 98% и не ранг флага: подписанный канон из 53 терминов просто НЕ ПОДКЛЮЧЁН к прогону. Весь измеренный дрейф — дрейф С ОТКЛЮЧЁННЫМ каноном; там, где его подключали, консистентность 99.3–100%. ⇒ мерить точность чекера на таком прогоне — мерить не то.
ЧТО ДЕЛАТЬ — ТРИ ШАГА, ПОРЯДОК ЖЁСТКИЙ
ШАГ 1. ПОДАТЬ КАНОН В ПРОГОН (строка 295) — ЭТО ПРАВКА ДАННЫХ, А НЕ КОДА. ⚠ Движковая половина
ПОСТРОЕНА и запинена: backend/internal/pipeline/runner_memory_test.go, греп
TestRunnerMemoryInjectionAndPostcheck — подписанные формы доезжают до system-сообщения ОБЕИХ ролей.
Не подключён сид на ОДНОМ стенде (books/gu-zhenren/probe-4axes/book.yaml), и это сознательное
пре-регистрированное решение полигона, а не забывчивость; на восьми других стендах сид подключён.
⛔ Стенд — ЧУЖАЯ зона (полигон), и подключение сида двигает memory_version ⇒ ОБА снапшота ⇒
обесценивает $0-резюм всех рук. Куплено там около $8.7. ⇒ без явного слова полигона и
оркестратора ничего на стенде не трогать. ⚠ И books — симлинк в соседний worktree, который тебе
трогать запрещено: значит физически правит стенд ПОЛИГОН, а не ты.
⚠ Что действительно движковое и $0: данные канона (allow_short: false у одноруновых ключей —
books/gu-zhenren/guzhenren-seed-v2.yaml, и отсев minKeyLenHan = 2 в backend/internal/membank/memory.go)
и, если решишь заказывать, поле в status --json «сид подключён / сколько подписанных форм» — сегодня
там есть только счётчик НЕподписанных.
Прежняя редакция шага 1: Ключ glossary_seed в книжном конфиге существует
(backend/internal/config/book.go, греп GlossarySeed); канон лежит файлом. Задача: предъявить
ИСПОЛНЕНИЕМ, что прогон идёт С каноном — что подписанные формы доезжают до провода обеих ролей и что
status --json это показывает. ⚠ Если подключение двигает RequestHash/снапшот — скажи ЦИФРУ цены
пере-снапшота ДО того, как что-то менять, и жди слова оркестратора: пере-снапшот есть пере-оплата.
ШАГ 2. ПЕРЕ-СНЯТЬ ЗАМЕР ЧЕСТНО — ЭТО ГЛАВНОЕ (строка 12). Прибор и корпус названы выше; гонится как
TM_CHECKER_LABELS=1 go test ./internal/membank -run <класс>. ⚠ Одно-Han класс структурно недостижим без
правки ДАННЫХ: ключ 蛊 несёт allow_short: false, а отсев стоит на minKeyLenHan = 2 — «добрать
одно-Han-позитивы» невозможно, пока это не сменится, а смена двигает memory_version ⇒ снапшот. Назови
цену прежде, чем менять. Прежний замер полноты ПОРОЧЕН и почему — сказано в
самой строке: класс одного иероглифа не имел НИ ОДНОГО положительного примера, то есть «ошибок нет»
означало «мерить было нечем». Нужны точность и полнота на выборке, где положительные примеры есть,
и отдельно — доля ЛОЖНЫХ срабатываний. ⛔ Слово владельца 05.09 дословно: «если он ложно
положительно будет стрелять это плохо, очень плохо». Ложное срабатывание удерживает ХОРОШИЙ текст, то
есть чинит консистентность ценой отказа отдать книгу.
ШАГ 3. ПОДГОТОВИТЬ РЕШЕНИЕ, НЕ ПРИНИМАЯ ЕГО. Ручка gates.glossary.postcheck_gate построена
(backend/internal/config/pipeline.go, греп PostcheckGate) и ВЫКЛЮЧЕНА в боевом конфиге. Включать её
ты НЕ вправе — это решение владельца, и он его отложил именно до твоего замера. Твой выход: цифры и
рекомендация одной фразой.
ЧТО В ПАК НЕ ВХОДИТ
· Строка 296 (точечная перегенерация по промаху глоссария) — она ГЕЙЧЕНА строкой 295 и делается ПОСЛЕ замера: перегенерация по ложному срабатыванию перепишет верный текст. Не начинай. · Включение гейта · правка порога 98% в доках (зона оркестратора) · платные прогоны сверх санкции.
РАЗМЕТКА СВОБОДЫ
ДЕЛАЙ РОВНО ТАК: гейт postcheck_gate НЕ включать (решение владельца, он его отложил до твоих цифр) ·
стенд полигона своей рукой НЕ трогать · любое движение, двигающее memory_version или снапшот, —
с названной ЦЕНОЙ и до слова оркестратора · строку 296 не начинать.
РЕШАЕШЬ САМА: как добирать положительные примеры в корпус лейблов · какие классы мерить сверх k6 ·
форма отчёта о точности/полноте · нужно ли поле «сид подключён» в status --json и как его назвать.
СПРАШИВАЕШЬ: конфликт промта с кодом · всё, что стоит денег · всё, что требует правки чужой зоны.
ЭХО-ПРОТОКОЛ СТАРТА — первым делом, ≤10 строк
Блок в /tmp/textmachine-channel + эхо оркестратору: скоуп своими словами · инварианты · чего НЕ делаешь ·
чем предъявишь. Разошёлся скоуп с промтом — значит промт неясен, и ловится это ДО работы.
ЗАПИСКА-ПЛАН И КОМПЛЕКТНОСТЬ ПРОТИВ ЗАКАЗА
До работы — короткая записка-план в свою секцию журнала. Перед сдачей — механическая сверка пункт за пунктом: что сделано, что нет, почему. ⚠ 05.09 обе сессии нашли этой сверкой по два дефекта в своих промтах.
OBSTACLE REPORTING — обязательная секция отчёта
«Что НЕ удалось · что не проверено · где вывод правдоподобен, но исполнением не подтверждён · чего не хватило». ⛔ Пустая секция подозрительна сама по себе. «Не проверено» ≠ «опровергнуто».
ОБЯЗАТЕЛЬНЫЕ НОРМЫ СДАЧИ (без них пак не принимается)
- Ревью ИСПОЛНЕНИЕМ своего кода, своих запросов к моделям и полученных результатов. Самоотчёт «проверено» без предъявленной команды и её вывода утверждением НЕ является.
- Адверсариальный проход по СВОЕЙ готовой работе. Уязвимое место этого пака названо прямо: замер, который меряет не то. Атакуй свою выборку вопросом «а есть ли в ней положительные примеры того класса, про который я делаю вывод» — прежний замер пал ровно здесь.
- NAMED-АРТЕФАКТ: посадка
QC-canon-not-loadedвbackend/cmd/tmmutate/mutations.json— предъявить КРАСНОЙ. Пакет —./internal/pipeline/, ожидаемый красный тест —TestRunnerMemoryInjectionAndPostcheck. ⚠ НЕ целить посадку в харнесс лейблов: безTM_CHECKER_LABELS=1он СКИПАЕТСЯ, и посадка выйдет зелёной по скипу — это форма ложной зелени, а не пин. ⚠ Этот механизм окупился 05.09: он поймал не «забыли прогнать», а ВЫРОЖДЕННЫЙ ТЕСТ — утверждение, зелёное потому, что его предмета в фикстуре не было. - Своё воркфлоу-ревью готовой работы — обязательная часть сдачи, не «если останется время».
- Fable 5 помощник — ОДИН, максимум ДВА, модель задавать ЯВНО, вести долгим разговором, а не поднимать нового на каждый вопрос.
- Сверить ЭТОТ промт с тем, что заказано, и НАЗВАТЬ расхождения — не исполнять молча. Прецедент: 05.09 оба пака нашли в своих промтах по два дефекта, и один из них был внутренне противоречив.
- Каталог мутаций гонится ЦЕЛИКОМ и обязан СОЙТИСЬ. «Прогнан целиком» и «прогнан целиком И СОШЁЛСЯ» — разные утверждения; 05.09 первый полный прогон нашёл четыре дыры именно потому, что был честным. ⚠ Проверка «якорь посадки резолвится РОВНО ОДИН раз» гоняется ПОСЛЕ КАЖДОГО касания кода.
docs/scripts/counts.py --lint— гнать ОБЯЗАТЕЛЬНО (его корень включаетbackend/docs, куда ты пишешь полный отчёт): собственная проверка якорей тула НЕ заменяет этот гейт — вытеснение существующего гейта своей привычкой стоило смене шести битых якорей (D39.202п.3-бис).- Нормы смены 05.09 —
^## D39.202, прочти целиком. Там девять форм ложной зелени, включая ту, что стоила дороже всех: гейт, ЗАЩИЩАЮЩИЙ дефект (тест ПИНИТ неверное поведение).
ЧЕГО ЖДЁТ ОТ ТЕБЯ ПРИЁМКА
Два верификатора по обязательным нормам: №1 судит ЗАКАЗ и ДИФФ не читая твой отчёт, №2 строит карту
твоего отчёта и ищет ВНЕ неё. ⚠ Им выдаётся ГОТОВЫЙ ПУТЬ отдельного рабочего дерева
(git worktree add) — общее дерево они не трогают.
Отчёт — в свою секцию docs/PROGRESS.md, полный — файлом в backend/docs/. Числа получены
командами, команды воспроизведения самодостаточны и не ссылаются на скретчпад сессии.
⚠ Канал сессий — /tmp/textmachine-channel: впиши свой блок первым делом, адрес сверяй ListAgents.