textmachine/docs/BACKEND_GENERALITY_PHASE2_SESSION_PROMPT.md

8.3 KiB
Raw Blame History

Промт бэкенд-сессии: ОБЩНОСТЬ, фаза 2 — rewrite-пакеты П0П4 + малая пачка ($0-код, БЕЗ платных вызовов)

Выдан 01.08.2026, оркестратор №9; санкция владельца D39.62 (П1 включён — заморозка D39.24 §15.3 амендирована; пак-21 растворён). Карта и рабочая истина = docs/archive/reports/GENERALITY_RESEARCH_2026-07-31.md (принята D39.60): якоря — §3, трасса второй пары — §5, цены — §6, план — §9, чего НЕ делать — §10. Первый деливерабл — эхо-блок ≤10 строк.

Платных вызовов моделей — НОЛЬ. DeepSeek сменил веса под слагом (D39.61, строка 74 бэклога): боевая черновая форма покупает пустые ответы; развилка у владельца. Вся фаза — код+тесты. --resnapshot НЕ запускать ни в каком виде — подготовить один общий (см. «Выход»), запуск = отдельное слово владельца после развилки 74.

ШАГ 0 — карта чтения (≤6 позиций)

GENERALITY_RESEARCH §3/§5/§6/§9/§10 · D39.6062 в D-логе · 12-go-style-notes.md §0 · правило условного фолда (отчёт §6.2: фолдить ⟺ выход в оплаченном запросе/вердикте/final_hash; новый фолд — условный по присутствию) · прецедент «ридер+дефолт сейчас, файл данных позже» (readOptional, langpack.go:567-576) · бэклог-строки 25/26/28/32/7478.

Скоуп (порядок = порядок исполнения)

  1. П0 «байты есть версия»: lang.EmbeddedVersion() = sha256 эмбед-FS в фиксированном порядке, фолд в снапшот рядом с LangpackVersion. Приёмка: правка байта data/target-ru.txt ⇒ громкий resnapshot-стоп, не тихая смена вердиктов (мутационный тест).
  2. П1 цель-шов (слой 7): isRuTarget (6 call-site) → инертность-ПО-ДАННЫМ · TokenizeCyrillic → токенизатор с алфавитом цели из данных (закрывает и U+0301 #11, и самозадокументированный долг checks/repair.go:182-189 — шов ОДИН, оба потребителя на нём) · реестр целей из эмбед-данных вместо Go-мапы · ruSanitizer → поле Checkers · гейт на ExportNormalize ($0 по его же шапке) · ё-фолд → цель-данные. З2 соблюдать: строковые предикаты, НИКАКОГО language.Tag.
  3. П2 скрипт-шов источника: cjkShare → доля рун ОБЪЯВЛЕННОГО письма источника (объявлять, не нюхать) · консолидация выражений «класс CJK» с явным решением по Hangul (закрывает живой баг ko — строка 75) · isCJKLang → атрибут данных.
  4. П3 нарезка/оценка: таксономия классов EstimateTokens из данных (не два поля Go-типа; вторую копию арифметики в memory.go:494-506 — на тот же шов) · фолбэк segmentation = ГРОМКАЯ ошибка вместо zh-литералов (pipeline.go:843-852; правило «терпимость к своим данным = воркэраунд») · generic-детект глав (маркер + цифры + опц. юнит, с пробелом — закрывает «Chapter 12» и 第N話) · аллоулист кодировок из данных · sourceAbbrevs по языку книги.
  5. П4 пак как механизм: манифест по КАНАЛАМ вместо 11 обязательных файлов (майнер получает nil-канал и молчит с WARN) · табличный список опциональных файлов вместо 4 копий read→hash→parse→assign · новые файлы книгой не оверлеятся (явно).
  6. Дешёвая шестёрка растворённого пака-21 (якоря — §8 отчёта, НЕ D39.39): #11 U+0301 (закрывается токенизатором П1) · #2 атрибуция K4b до спана · #4 inner_marker симметрично вето · гомоглиф отдельным детектором смешанного письма · строгая форма OffLanguage (строка 28; ⚠ оговорка 36а: «甲等 → класс Цзя» она не ловит — не заявлять) · строка 26 translitInterjections → данные.
  7. Малая пачка: строка 77 — ре-ген N=1 ПЕРЕД эскалацией для cjk_artifact (посылка «retry just re-produces them» опровергнута D39.61; гейт не ослаблять ни на байт; конфиг-ручка с дефолтом = текущее поведение, условный фолд) · строка 78 — billed-попытка «2xx body decode failed (call IS billed)» обязана попадать в request_log.

НЕ делать (заморозки в силе)

§10 отчёта целиком: language.Tag (З2) · UAX#29 · авто-детект письма по тексту · дробление internal/lang · кана-фолд NormalizeSourceKey · жанровые словари (З7) · «X-X»-обобщение (З6) · границы глосс (З5) · П5-майнер (гейт = реальная вторая книга) · П6-расщепление хеша пака (решение владельца: не делаем) · пар-кеинг DC-чекеров (З3) · дизайн автономности банка (отдельная арка).

Дисциплина (мандат самопроверки — норма владельца 01.08, ОБЯЗАТЕЛЕН)

Цикл: план → синк (карта чтения; расхождение промта с кодом/доками = пинг через владельца, не тихая интерпретация) → исполнение → самоверификация ТОЙ ЖЕ сессией, ИСПОЛНЕНИЕМ: build/vet/go test -race · golden байт-в-байт там, где вердикты не двигаются, и Ш-1 маскированный дифф там, где двигаются (П3!) — каждая сдвинутая строка объяснена осью · майнер-парити EXACT · мутационные проверки несущих гейтов (мин.: П0-байт, П1-инертность на target_lang: en, П2-Hangul) · сухой прогон второй пары: ja→ru и en→ru конфиги доходят до промпт-отказа БЕЗ тихих засыпаний (проверить трассу §5 отчёта) · «вывод на агрегате до вскрытия единиц запрещён». Приёмочный критерий каждого пакета: «пара, которой нет в репо, проходит этот слой без правки Go» + счёт снапшот-осей, которые пакет сдвинул.

Выход

docs/archive/reports/GENERALITY_PHASE2_<дата>.md: эхо-блок · что построено по пакетам с file:line · самоверификация исполнением (команды/числа) · сводка «что сдвинуло снапшот» = заготовка одного общего resnapshot (оси + проекция цены по корпусу) · критик полноты. Запись в PROGRESS (секция «Бэкенд»). Сессия НЕ коммитит; --resnapshot НЕ запускает. СТОП после отчёта — приёмка оркестратора.