From dfff53390cc2548d017c50ed088c2ce65a704ab4 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 1 Aug 2026 23:11:25 +0300 Subject: [PATCH] Ratify D39.79: small tails pack sanctioned with F4 pulled early, checker package open questions decided by owner delegation, session prompt issued and cold-verified --- .../BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md | 68 +++++++++++++++++++ docs/PROGRESS.md | 17 +++-- docs/architecture/05-decisions-log.md | 4 +- 3 files changed, 79 insertions(+), 10 deletions(-) create mode 100644 docs/BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md diff --git a/docs/BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md b/docs/BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md new file mode 100644 index 00000000..52c96008 --- /dev/null +++ b/docs/BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md @@ -0,0 +1,68 @@ +# Промт бэкенд-сессии: МЕЛКАЯ ПАЧКА ХВОСТОВ (строки 89 · 93 · 53 · 83 + решения D39.79; $0) + +**Выдан 02.08.2026, оркестратор №9; санкция владельца 02.08 («давай сделаем») + решения §6 пакета-чекеров, принятые делегированием владельца и ратифицированные D39.79.** Ты — бэкенд-сессия TextMachine. Зона: `backend/` (+ `configs/langpacks/`, стенд-данные `~/books/gu-zhenren/`) + свой отчёт в `docs/archive/reports/`. НЕ коммитить — лендит оркестратор. **Первый деливерабл — эхо-блок ≤10 строк** (первым сообщением ДО работы: как понял скоуп/стоп-точки/$0/зону; продублируй шапкой отчёта; подтверждения не жди — СТОП только в конце). Денег НОЛЬ: ни одного вызова провайдеров, только код/тесты/данные/фейк-провайдер. + +## §0. Рамка + +**Глобальный критерий владельца (дословно): «Мультиязычный бэкенд перевод с чистой архитектурой и современными подходами к переводу опережающий конкурентов по харнесс решениям».** Механизм строится только там, где несёт качество/деньги. Ревью-вопросы общности — ОБА обязательны: «заработает ли пара, которой в репо ещё НЕТ, без правки Go?» и (расширение D39.79) «ВТОРАЯ КНИГА той же пары — без ложных флагов и без правки Go?». + +**Мандат ревизии посылок:** каждому пункту — вердикт-тройка (а: посылка верна? б: нужность на данных? в: форма/исход) ДО кода; «не чинить, закрыть с обоснованием» — легитимный и уважаемый исход; если твой замер бьёт по ПОСЫЛКЕ пункта — СТОП и пинг оркестратору, не формальный артефакт. **Самопроверка исполнением обязательна** (решение владельца 12.07): ревью своего кода + прогонов + результатов; в конце — адверсариальный проход author≠reviewer (агентом/вторым взглядом) по СВОИМ правкам; найденное чинить до отчёта. + +## §1. Инварианты приёмки (проверяй ИСПОЛНЕНИЕМ в конце, числа — в отчёт) + +- `go build ./...` · `go vet ./...` · `go test -race ./...` — зелёные. +- Майнер-парити EXACT: `TM_MINER_PARITY=1 go test ./internal/miner/ -run Parity`. Правки майнер-зоны (§3-B) НЕ должны двигать выходы — двинулись → СТОП+пинг. +- **Labels-фриз** (`TM_CHECKER_LABELS=1 go test ./internal/checks/ ./internal/membank/ -run Label -v`): k4b **10/1/36/99** · k4_inverse **3/0/1/71** · k2 **34/1/6/51** · K6 **1/6/0/251** · k4a **0/0/0/348** · фрозен-ДО #3 **5/1/41/99** — ни одна ячейка не движется (искл.: если построишь DC7 по §3-E1б — он добавляет НОВЫЙ класс замера, старые не трогает). +- **Голден: ожидание = НЕ движется ВООБЩЕ** (`go test ./internal/pipeline/ -run TestGoldenDeterminism`): правки = комменты/тесты/gofmt/стенд-данные/книжный конфиг; `CheapGateVersion` НЕ бампать. Голден дёрнулся → СТОП+пинг с маскированным диффом. Байты пар-пака (`dc-checkers.txt`) двигают `LangpackVersion` — на этой фазе это ок (перекупок нет, D39.63), но голден-фикстура пак не грузит и стоять обязана. +- Чужое в дереве НЕ трогать: `START_PROMT.MD`, `frontend/`, `platform/` — параллельные сессии/владелец. + +## §2. Карта чтения (по якорям, целиком доки НЕ читать) + +CLAUDE.md → этот промт → по ходу пунктов: ревью-шапка и §8 отчёта [`archive/reports/CHECKER_PACKAGE_2026-08-02.md`](archive/reports/CHECKER_PACKAGE_2026-08-02.md) (контекст хвостов §3-A) · карта §3 `docs/archive/reports/GENERALITY_RESEARCH*` (вёдра B/D для §3-B) · `docs/architecture/12-go-style-notes.md` (норматив общности §0). D-корпус целиком НЕ читать. + +## §3. Пункты (каждому — вердикт-тройка в отчёте) + +### A. Строка 93 — хвосты двухраундового ревью чекеров (комменты/гвозди/контракты) + +1. **substring-вето → whole-word**: `checkers.go:643-645` (`isSpokenChevronLine` глушит spoken по `strings.Contains` маркера — «в уме» ⊂ «в умении» гасит РЕАЛЬНЫЙ mixing-клэш). Переиспользуй `containsWholeWordPhrase` (cheapgates.go); гвоздь: ёлочная реплика с «в умении» + тире-строка в чанке → mixing фаерит. Labels стоят (в корпусе 0 инстансов). +2. **Recall-трейд отсечения — в контракт**: `speechAttribution` (cheapgates.go:299-306) подан только как закрытие FP; допиши: маркер ПОСЛЕ внутренней запятой/многоточия внутри атрибуции («— X, — сказал он, про себя ругаясь») = невидимый дефект — потолок ПРАВИЛА, не данных (симметрично Р4-записи #3). +3. **Негатив-ассерт Demoted**: мутант `m.Demoted = true` в default-ветке `Postcheck` (mempostcheck.go:127) сейчас переживает сьют — добавь ассерт «ambiguous-мисс несёт Demoted=false» (mempostcheck_test.go). +4. **Stale-коммент**: repair.go:349 «counts leaked lowercase Latin tokens» — ложь после #6 (caps считаются). Поправь. +5. **CAND k4_inverse = опровергнутый вариант**: labelcandidates_test.go:76 меряет whole-line-substring правило, отвергнутое ревью, и лог читается как прод-числа. По образцу фикса-3: пометь REJECTED/замени замером боевого правила — лог не должен врать. +6. **Конвенции код↔коммент**: `sentenceFinalBefore` (cheapgates.go:391-392) принимает ДВЕ ascii-точки при комменте «...» — приведи к одному (что именно — вердикт-тройкой; labels стоят); thin-space U+2009 в `isInlineSpace` — код НЕ расширять (унаследованная HEAD-конвенция), одну оговорку в коммент. +7. **Кана-оговорка**: mempostcheck_test.go:52-54 «Han alone lacks segmentation» — неточно (kana тоже не boundary-checked, memory.go:536); переформулируй честно: демоция Han-only = ратифицированный скоуп до B6 (бэклог-строка 81). +8. **Target-алиасы пост-чек-матча**: НЕ строить — одна NB-строка в контракт `dstFormPresent`: алиасы = сид-концерн. + +### B. Строка 89 — остаток ведра D карты общности + сверка ведра B + +- Дубль `isHeaderContentRune` (chunk/chunker.go:215) ↔ `isHeaderSeparator` (chunk/ingest.go:172-175): консолидировать или задокументировать различие — вердикт-тройкой. +- `minerPackVersion = "zh-universal-v1"` (miner/miner_patterns.go:19): имя лжёт про универсальность? Если строка фолдится в выход/снапшот/парити — НЕ переименовывать, честный коммент; иначе вердикт-тройка. +- Глифы `⟨проверить⟩`: данные (`lang/data/injection.txt:6,9`) легитимны (target-данные); грепни ЖЁСТКИЕ вхождения в Go/tmctl (status.go:98 — коммент; было заявление «tmctl/render» в карте) — литерал target-глифа в Go = утечка слоя; по находкам — вердикт-тройка (возможный исход: «уже ушло в данные, закрыто»). +- Вес palladius (miner/miner.go:52) — коммент уже честный («retained for parity; off in default B»); вероятный исход «не чинить», зафиксируй. +- **Дюжина ведра D** по карте §3 GENERALITY_RESEARCH: пройди СПИСОК ЦЕЛИКОМ, каждой позиции строка-вердикт «сделано (чем/где) / не нужно (почему) / чинится здесь». Часть ушла фазой-2 (D39.64) и чекер-паком (D39.78) — не переделай сделанное. +- **Ведро B (6 «пар-модуль без гейта»)** — сверка против пост-D39.64 состояния: таблица «позиция → закрыта чем / жива где (носитель)». Живое без носителя → пинг оркестратору (не заводи строк сам). + +### C. Строка 53 — мелкие хвосты качества + +- gofmt: `gofmt -l .` ИЗ `backend/` (не от корня — от корня зацепишь чужую зону `eval/`) сейчас = `internal/llm/llm.go` + `internal/pipeline/miningstop_join_test.go` + `internal/terminology/classify_test.go` + `internal/terminology/series_test.go`; после тебя — пусто. +- `editor-mono.md` DORMANT: пометки в файле НЕТ (grep пуст) — вердикт-тройка: где читатель должен узнать, что файл спит; помни — байты промпта двигают PromptSHA256 соответствующего пака, проверь, боевой ли он (если правка двигает боевой SHA — честно скажи в отчёте; перекупок нет, D39.63). +- Внутрифайловый дубль ключа pair-файла → громкая ошибка (`parseDCCheckers`, lang/langpack.go; исходник PACK15 §Внутрифайловый) + тест. +- Ledger-очередь LOW/NOTE (D39.4) и остаток фикс-листов D23 п.4 / D28 п.3(б): найди их по D-номерам (grep по 05-decisions-log), каждому пункту вердикт-тройка; «не чинить/уже сделано» — ок, главное диспозиция. + +### D. Строка 83 — F4: бэкап + integrity_check (ПОДТЯНУТА D39.79) + +**Продукт-требование:** платный прогон стенд-книги НЕ начинается без свежего бэкапа SQLite-файла книги и зелёного `PRAGMA integrity_check` (SPOF: тихая потеря банка и подписей владельца). **Рекомендуемая форма (вердикт-тройкой уточняй, не раздувай):** tmctl-верб `backup` (VACUUM INTO в `~/books/<книга>/backups/.db` + integrity_check) И автоматический pre-flight в БОЕВОМ (не fake-provider) пути прогона: integrity-провал = громкий отказ старта. Fake-провайдер/голден-пути НЕ трогаются (детерминизм, ноль новых файлов в тестах). Durable-дом строго `~/books` (норма «персист, не scratch»). Гвозди: юнит на верб (temp-БД), тест «fake-путь бэкапов не создаёт». + +### E. Решения D39.79 (данные + малый шов) + +1. **Q1 — канон грейда «класс X» (D39.79):** (а) **факт-фиксация носителя канона, БЕЗ правок прогон-БД**: tmctl-верба банк-инспекции НЕТ — смотри read-only (sqlite3/BANK-FULL.tsv/сид). Известное состояние (верифицировано 02.08): подписанный сид `guzhenren-seed-v2.yaml` УЖЕ чист (0 «разряд» в dst); банк coldrun-a ПУСТ (прогон встал на банк-стопе); «разряд»-draft-ряды живут только в ЗАМОРОЖЕННЫХ исторических прогон-БД (acceptance/rerun/diag) — их НЕ трогать (история, не носитель). Твоя работа: подтвердить это состояние, зафиксировать канон «класс X» в отчёте; если найдёшь «разряд» в ЖИВОМ носителе (сид/эталонный конфиг) — пинг. (б) **$0-замер нужности DC7** на боевых финалах labels-корпуса (в corpus.jsonl ~28 вхождений «разряд» — замер осмыслен): сколько грейд-рендеров ≠ канон? **≥1 реальный дефект → построй МИНИМАЛЬНЫЙ data-driven DC7** по образцу DC1 (данные в `dc-checkers.txt`, алгоритм generic, observability-класс, замер до/после в отчёт; тянет >~50 строк Go → СТОП+пинг с дизайном). **0 → закрой с обоснованием** (gated-триггер: первая книга с живой грейд-серией). +2. **Q2 — 兩 довершить консистентно:** числовые группы `shichen_re` (dc-checkers.txt:42) получают 兩 (обе группы, если численных две); probe-ЛИТЕРАЛЫ (时辰/千万/数十万 и родня) НЕ трогать; NB-коммент границы в файл: «traditional-поддержка = numeral-классы; паттерн-литералы simplified до первой traditional-книги (D39.79)». +3. **Q4 — register_neg → книжный слой:** списки `register_neg` (dc-checkers.txt:29-35) и жанро-несущий `msg dc6_register` (:81, «xianxia») уезжают из ПАР-файла в КНИЖНЫЙ конфиг — дом `StyleAllowlist` (config/book.go:56-59; та же lower-fold дисциплина :232-238) → `CheapGateConfig` → DC6-алгоритм БЕЗ изменения семантики. Жанро/книго-литералов в Go НЕТ (жанр в detail — из конфига книги, если нужен; допустим generic-английский diagnostic в Go, как у прочих гейтов). «Терем»-список переезжает в книжный конфиг стенда: эталон = `~/books/gu-zhenren/coldrun-a/book.yaml` (последний боевой; исторические прогон-конфиги НЕ трогать; в отчёте перечисли, какие book.yaml обновил). Пар-файл zh-ru остаётся чисто пар-фактами. ⚠ Известные обязательные Go-швы переноса (не удивляйся громкому фейлу): `langpack.go:957-958` требует НЕПУСТОЙ register_neg в пар-файле, а required-msg список `checkers.go:204` включает `dc6_register` — оба стать ОПЦИОНАЛЬНЫМИ (пар-файл без register-таблиц легален). Пустой конфиг = инертность (контракт «inert without data»). Тесты DC6 → на конфиг-источник. Ревью-вопрос приёмки: «вторая книга zh-ru другого жанра — НОЛЬ ложных DC6 и НОЛЬ правок Go?» + +## §4. Чего НЕ делать + +`CheapGateVersion` НЕ бампать · боевой `editor.md` НЕ трогать · thin-space/«..»-ПОВЕДЕНИЕ кода не менять без доказанного вердикт-тройкой дефекта (labels-фриз) · `minerPackVersion` не переименовывать, если двигает парити/снапшот · Р2/Р4-контракты (D39.63) обязательны: потолки — В КОНТРАКТ правила, не пойнтером · провайдеров не звать вовсе. + +## §5. Отчёт и стоп + +`docs/archive/reports/SMALLPACK_TAILS_2026-08-02.md`: эхо-шапка · вердикт-тройки ВСЕХ пунктов (вкл. «не чинить») · таблицы вёдер B/D · числа Q1-замера · labels-фриз и голден-«не двинулся» — числами · git-список тронутого (только своё). Краткий итог — в `docs/PROGRESS.md` §Бэкенд (бэклог-таблицу и CURRENT-STATE НЕ трогать). D-номер лендинга проставит оркестратор — в своих пометках пиши «D-номер проставит оркестратор». **СТОП в конце — приёмка оркестратора.** diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 404632c5..a0751d05 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,8 +1,8 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-02, голова D39.78). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.77); этот файл — ЖУРНАЛ.** +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-02, голова D39.79). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.77); этот файл — ЖУРНАЛ.** > - **Сделано (сводно; детали — D-лог и архив-слайсы):** Ф0 ✅ · Ф1-инфра ✅ · арх-ресет D39 (7 слоёв, паки 11–16) ✅ · паки 17 «канал B» · 18 «долги» · 19 «голос/состояние» · 20 «банк+терминолог» ✅ (D39.26–28/31/41–56) · мини-прогон (D39.37) и ХОЛОДНЫЙ прогон (D39.58: recall банка 0.918/0.980, банк приходит переведённым) приняты · полигон-пакеты 5–8, ToS-речек (D39.57), Р6+P4 (D39.61) закрыты · **карта языковой привязки движка (D39.60): 149 сайтов/45 файлов, книго-ось чиста (4), ja→ru безопасно без правки Go, en→ru — нет** · Р1–Р4 закрыты целиком (D39.63: Р2 = ЗНАЧЕНИЕ, Р4 = норма потолка recall) · **ФАЗА 2 ОБЩНОСТИ ✅ (D39.64: П0 эмбед-хеш · П1 цель-шов · П2 скрипт-шов, ko-баг закрыт · П3 нарезка · П4 манифест-по-каналам; голден вердикт-нейтрален 0/172, майнер-парити EXACT)** · жанровый словарь отменён как класс (D39.47) · петля ремонта построена и НЕ включена (D39.38). -> - **Курс (D39.59–78): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (D39.69/75/77) → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.78: строка 25 целиком; харнесс labels В GIT 12/12; K2 r0.85 · K4b r0.22 · K6 fp 14→6; Р2 hard/soft + Р4-потолки в контрактах).** **Текущее: очередь = ре-проба flash (строка 74, по слову владельца) + вопросы §6 пакета-чекеров у владельца (строка 92); finding-1 ЗАКРЫТ (D39.77).** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; там же 6/6-порог классификатора и слоты Q2/Q7). Перекупок нет (D39.63).** +> - **Курс (D39.59–78): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (D39.69/75/77) → ПАКЕТ-ЧЕКЕРОВ ✅ (D39.78: строка 25 целиком; харнесс labels В GIT 12/12; K2 r0.85 · K4b r0.22 · K6 fp 14→6; Р2 hard/soft + Р4-потолки в контрактах).** **Текущее: МЕЛКАЯ ПАЧКА ХВОСТОВ в работе (строки 89·93·53·83 + решения D39.79, промт `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md`); вопросы §6 РЕШЕНЫ делегированием (D39.79: канон «класс X» · 兩 в numeral-классах · value-чек 成 загейчен строкой 12 · register_neg → книжный слой); ре-проба flash (строка 74) — по слову владельца; finding-1 ЗАКРЫТ (D39.77).** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; там же 6/6-порог классификатора и слоты Q2/Q7). Перекупок нет (D39.63).** > - **Горизонт (D39.62/67):** ре-проба flash (74; + платный порог 6/6 классификатора + пробы 36б-замера Q2/эмиссии Q7 по слову) → **ДОБОР ИДЕАЛА** (первым прогоном: оси голоса 24 · авто-режим · итерация №2 редакторов 65 · цена 16 · веса K1–K12 13а · вне-претрейн чекпоинт 55) → ВТОРАЯ ПАРА живьём (ja→ru; преп 81) → МАСШТАБ → пилот Ф2.5 (гейт резюме-строки 80; строки 62–68, 85) → Ф3 ридер-IDE (69–71). **Стоячие:** ToS-триггер 25.10 · Ш-2 до go1.27 · строка 74 перед любым платным прогоном. > - **Стек:** draft deepseek-v4-flash thinking-ON (+банкнота) **⚠0731** → терминолог (та же модель, батчи, экран `target_script`) → editor deepseek-v4-pro БИЛИНГВ ИНТЕРИМ (вендором НЕ тронут; glm-5 резерв) → судья gemini (Ф2, полигон); канал B Mistral+grok; ~$0.85/ранобэ (D30.4) — пере-калибровка после развилки 74. > - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). @@ -24,13 +24,12 @@ | 9 | Промпт-слой под лейблом: лейбл не доезжает до промпта — должны ли переводчик/редактор знать о свойстве контента | владелец | когда-нибудь | отдельное решение | CURRENT-STATE (владелец, из пака-17) | | 10 | Дата создания аккаунта OpenAI (низкий приоритет, OpenAI вне цепочки) + применимость OpenAI Sharing & publication policy 2022 (quirks:128) | владелец | когда-нибудь | отдельное решение | D39.32 | | 11 | Флип coverage-гейта (`enabled:false`, D12-Q4) — за подписью владельца ; при флипе решить судьбу v1.1 quote-absorption (D12-Q1, Python-first лок-степ) | владелец | когда-нибудь | отдельное решение | D39.34(2) | -| 12 | `postcheck_gate` в hard-gate — требует пере-замера recall (recall чекеров измерен и низок); ⚠ «fn=0» демоции #10 класс-вакуумен на labels (ноль одно-Han-позитивов, D39.78) — пере-замер обязан добрать одно-Han-позитивы, на «fn=0» не опираться; одно-Han-класс при gate-on вне гейта (Unverified+Demoted) | владелец | когда-нибудь (после фазы 2) | отдельное решение | D39.34(2), D24.4+D28.1, D39.39, D39.78 | +| 12 | `postcheck_gate` в hard-gate — требует пере-замера recall (recall чекеров измерен и низок); ⚠ «fn=0» демоции #10 класс-вакуумен на labels (ноль одно-Han-позитивов, D39.78) — пере-замер обязан добрать одно-Han-позитивы, на «fn=0» не опираться; одно-Han-класс при gate-on вне гейта (Unverified+Demoted); тем же решением строится HARD-value-детектор 成/万 (Q3 §6 — честный hard-gate требует value-чека; либо раньше при ненулевом потоке value-дефектов добора, D39.79) | владелец | когда-нибудь (после фазы 2) | отдельное решение | D39.34(2), D24.4+D28.1, D39.39, D39.78, D39.79 | | 13 | Включение платной петли ремонта + per-class исходы ремонта (схемное решение принимается вместе) — вернуться при расширении классов детекторов и ненулевом остатке; ⚠ при включении: репэйр-гард №5 после #10 слеп на одно-Han-дифференциал (демоция в обоих прогонах ⇒ 0>0 — репэйр, стёрший верно отрендеренный одно-Han-термин, не ветируется; D39.78-ревью) | владелец | когда-нибудь | отдельное решение | D39.38, D39.39(а), D39.78, CURRENT-STATE | | 13а | Веса рубрики K1–K12 не выбраны (Q1: «по данным фазы B»; фаза B прошла на BWS без весов — выбор нужен к агрегатной приёмке качества книги) | владелец | когда-нибудь (к пилоту) | Ф2.5 / отдельное решение | D39.44 Q1, D39.46 | | 13б | `speech-cue.txt` zh НЕ шипить до замера голос-флаггера на холодном прогоне (данные для недоказанного детектора = инерция; вывод обсуждения 31.07): оси пустые → файл не нужен, оси ловят → решение владельца о шипе (байты двигают `LangpackVersion`) | владелец | отложено-до-замера | первый прогон добора идеала (оси голоса, строка 24) → отдельное решение | D39.56, PACK19_BUILD §7.2, чат 31.07 | | 14 | Четыре data-инженерных флага фазы-2 общности, каждый с рекомендованным дизайном (§5 отчёта): ё-фолд → target-данные (`char_fold`; смена сигнатуры core-примитива через вердикт-несущий банк, сдвиг `memory_version`) · segmentation-фолбэк громким (ломает контракт corridor-фолбэка `pipeline.go:839-848` + голден-фикстура на нём; лечение — объявить блок в голден-yaml) · `Fertility` per-script map (калибровка ждёт боевого токенизатора) · `source-encoding.txt` + Go-реестр декодеров | владелец | когда-нибудь (следующий пак общности) | отдельное решение | D39.64, GENERALITY_PHASE2 §5.1–5.4 | | 86 | Мелкие открытые решения одним списком (свип D39.66): echo-семантика дропнутого c-lite-члена (D39.18 — оставить pre-c-lite?) · magnitude-кап тяжёлой CJK-утечки (D38.3 п.4в; сейчас strip+flag) | владелец | когда-нибудь | отдельные решения | D39.66, D39.69(feed_cap закрыт §1) | -| 92 | Вопросы пакета-чекеров (§6 отчёта, D39.78): (Q1) канон грейда — «класс X» (approved) vs «разряд X» (draft), гейт DC7-чекера; реком. подписать «класс» и демотировать draft-ряд; (Q2) 兩-traditional данными — подтвердить или откатить; при подтверждении завершить батч консистентно (shichen_re + DC1/DC2-пробы остались simplified-only); (Q3) HARD-value-детектор 成 (нужны ru-numeral-word-данные) или SOFT-наблюдаемость до решения по `postcheck_gate` (связка со строкой 12); (Q4) register_neg: жанровый канон в пар-слое — «терем»-список + «xianxia» в msg-шаблоне `dc-checkers.txt` — вторая zh-ru книга другого жанра унаследует ложные флаги; перенести в книжные/жанровые данные (brief/seed или genre-keyed target-пак)? | владелец | скоро | отдельные решения | D39.78, CHECKER_PACKAGE §6 | | **— ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) —** | | | | | | | 16 | Полная цена холодного старта: edit-волна не гонялась (Р7); измерено всё ДО редактуры (драфт+банкнота $0.0247/волна · терминолог $0.006–0.013/проход) | бэкенд | когда-нибудь (первый прогон добора идеала) | добор идеала | D39.58 | | 18 | Эмиссия головы 蛊: сид-половина = чек-лист (определяющий терм книги сидится `allow_short`, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы | полигон → бэкенд | скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) | полигон-замер → решение | D39.58, D39.60, D39.69 | @@ -39,17 +38,17 @@ | 74 | ⚠ **DeepSeek-V4-Flash-0731: боевая черновая форма покупает пустые ответы — блокер ПЛАТНЫХ прогонов.** Оперативное состояние = «(в) ждать» (D39.63; фаза-2 всё равно $0-код). Перед следующим платным прогоном — ре-проба flash за копейки → если не устаканилось, выбор: (а) флор 16000 (сдвиг request_hash безболезнен — перекупок на этой фазе нет; хвост не закрывает, упор 2/5) или (б) слать `reasoning_effort` явно (вендорская модель, дешевле ~22%; но амендмент `echoMineViolation`, эхо ~6% и качество черновика при `low` не судилось — нужен замер ~$0.05; тогда же предмет для постинструкции/префилла); включение ручки #77 (ре-ген эха перед эскалацией, построена D39.64, дефолт 0) — тем же решением; при включении помнить общий счётчик attempt с length-ре-геном + рост `maxTokensForAttempt`; остаток §12.7 (8 несудимых fidelity-пар ≈$0.10 · ja-вход ≈$0.005 · prefill-continuation research/21 §1.17) — вернуться при предмете wiring; ⚠ cap 8000 бьёт и СТАДИЮ ТЕРМИНОЛОГА (reasoning 8063/батч, D39.65) — резолюция обязана накрыть терминолога; тем же заходом: платный порог приёмки §2 классификатора (6/6 harm-набор, ~$0.01, D39.69) + полигон-слоты Q2 (36б-замер) и Q7 (эмиссия головы, после #10) | владелец (по ре-пробе) | перед следующим платным прогоном | ре-проба → решение | D39.61, D39.63, D39.64, POLYGON_PROMPTLANG_ANTIECHO §12.4 | | 78 | Леджер денег = НИЖНЯЯ граница: «2xx body decode failed (call IS billed)» — провайдер списал, исходная попытка в `request_log` НЕ попадает (≤$0.009/сессия); дизайн фикса ГОТОВ (GENERALITY_PHASE2 §5.6: `BilledDecodeFails` + per-billed-attempt settle с `Estimated=true`), но это money/ledger-путь — не $0-хастл | бэкенд | когда-нибудь (money-паком) | отдельное решение (дизайн §5.6) | D39.61, D39.64 | | 79 | Граница ПЛОТНОСТИ письма для серий: `enabled` через Go-константу `cjkScriptNames` — новый плотный скрипт требует правки Go (head-finality уже в данных script-series.txt; пре-существующая граница, D39.75). Первые два компонента строки (isCyrLetter→`isTargetWordLetter` · magnitude `SourceScripts`-гейт) исполнены пакетом-чекеров, D39.78 | бэкенд | когда-нибудь | следующий пак общности / касание чекеров | D39.64, D39.78 | -| 89 | Остатки карты общности D39.60 без носителя (пропуск свипа, D39.72); СУЖЕНО D39.78 — checkers-срез ведра D исполнен пакетом (6 указателей `checkers_zh_ru.go` + ложная шапка checkers.go). Остаток: дубль isHeaderContentRune↔isHeaderSeparator · minerPackVersion «zh-universal-v1» · глифы ⟨проверить⟩ tmctl/render · вес palladius miner.go (дюжину сверить по карте §3) + сверка ведра B (6 «пар-модуль без гейта») против фазы-2 | бэкенд | скоро | мелкая пачка | D39.60, D39.66, D39.72, D39.78 | +| 89 | Остатки карты общности D39.60 без носителя (пропуск свипа, D39.72); СУЖЕНО D39.78 — checkers-срез ведра D исполнен пакетом (6 указателей `checkers_zh_ru.go` + ложная шапка checkers.go). Остаток: дубль isHeaderContentRune↔isHeaderSeparator · minerPackVersion «zh-universal-v1» · глифы ⟨проверить⟩ tmctl/render · вес palladius miner.go (дюжину сверить по карте §3) + сверка ведра B (6 «пар-модуль без гейта») против фазы-2 | бэкенд | в работе (промт выдан D39.79) | `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md` | D39.60, D39.66, D39.72, D39.78 | | 90 | Ф2-кандидаты 02-mvp-плана без носителя (свип-хвост, D39.73): CometKiwi/T-index метрики судьи · Batch API судьи (экономия) · llama-server-интеграция локали · стриминг — взять/закрыть при пилот-препе | полигон/бэкенд | когда-нибудь (Ф2.5) | пилот-преп-промт (с 85) | 02-mvp-plan, D39.66, D39.73 | | **— НАХОДКИ СВИПА ПОЛНОТЫ (D39.66: 951 обязательство проверено, потери возвращены в трекер) —** | | | | | | | 80 | Резюме-слой памяти — проза-суммарайзер ЗАКРЫТ (D39.69); строка = ГЕЙТ ПИЛОТА Ф2.5: первый деливерабл пилота — «допускает ли автономная нарратив-состояние-строка ДЕТЕРМИНИРОВАННЫЙ верификатор (source-anchored) — или это D1-компаундинг со схемой»; не-покрытые классы (source-anchored reveal · арк-колбэки без ключа) реальны, но не измерены как дефект | Ф2.5 (Q3 подтверждён D39.70) | когда-нибудь (пилот) | Ф2.5 пре-рег | D25 п.8–9, D39.66, D39.69 | | 81 | ja-преп B6-ja (сужено пост-сверкой D39.66): Поливанов-валидатор (`translit_policy` = «Phase 2»-заглушка, migrate.go:186/194) + kana-омограф POS/known-word гейтинг / B6-токенизатор (memory.go:1048); чек-лист kana-алиасов сида УЖЕ построен (backend/README §ja + `AttachRubyAliasesToManual`) — остаток в нём только дизамбигуация двойных чтений (тот же B6) | бэкенд | когда-нибудь (перед ja→ru) | ja→ru-пак (рядом 35) | D16.4, D17.1, D18, D39.66 | | 82 | Морфо-гейт РОДА (C3: русский глагол прош. вр. при gender=hidden = механический спойлер-канал; «жалоба №1 читателей MTL»; python-сайдкар/pymorphy, связка с морфопроходом Decl из 73) | бэкенд | когда-нибудь (Ф2-гейты) | отдельный пак (с 52) | 06-реестр C3, research/12, D39.66 | -| 83 | F4: бэкап + integrity_check SQLite-файла книги перед платным прогоном (VACUUM INTO; SPOF — тихая потеря банка и подписей владельца) | бэкенд | когда-нибудь (до МАСШТАБА) | малый пак (с 67/78) | 06-реестр F4, D39.66 | +| 83 | F4: бэкап + integrity_check SQLite-файла книги перед платным прогоном (VACUUM INTO; SPOF — тихая потеря банка и подписей владельца); ПОДТЯНУТА D39.79 с «до МАСШТАБА» на «до платных прогонов добора идеала» | бэкенд | в работе (промт выдан D39.79) | `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md` | 06-реестр F4, D39.66, D39.79 | | 85 | Пилот-преп добор (к переупаковке PACKAGE4): Bertalign GOLD-пары + zh→ru spot-check (D29.2в; GPL-тулинг отдельно) · fidelity-каскад R2 shadow с корпус-подготовкой (D25.2) · exp08 v3 пере-съём COGS до фиксации budget_usd (D21.8) | полигон | когда-нибудь (Ф2.5) | пилот-преп-промт | D25, D29, D21.8, D39.66 | | **— ПАК-21 «чекеры»: РАСТВОРЁН (D39.62); шестёрка исполнена 2/6 фазой 2 (D39.64: #11 · строка 26), остаток — ниже —** | | | | | | -| 93 | Хвосты пакета-чекеров (минорки двухраундового ревью D39.78 — комменты/гвозди/данные одним касанием): строгий OffLanguage (36а, deferred) · разметить 分之-срез прежде стройки DC2 word↔word (полигон) · substring-вето `isSpokenChevronLine` → whole-word (второй call-site маркер-листа; гасит mixing-клэш на «в умении») · recall-трейд двустороннего отсечения `speechAttribution` вписать в контракт (маркер после внутренней запятой/многоточия в атрибуции = FN правила, не данных) · негатив-ассерт Demoted=false на ambiguous-популяции · stale-коммент `repair.go` LatinResidueCount «lowercase» · CAND k4_inverse в labelcandidates = опровергнутый whole-line вариант (заморозить/пометить по образцу фикса-3) · конвенции «..»-vs-«…» и thin-space джойна (код↔коммент) · кана-оговорка в обосновании Han-only демоции (класс открыт до B6, строка 81) · target-алиасы пост-чек-матча (сид-концерн) | бэкенд/полигон | когда-нибудь (следующее касание чекеров) | мелкая пачка / полигон-разметка | D39.78 | -| 28 | Банк-линт латиницы в dst или строгая форма языкового предиката (7 строк утечки алфавита проходят экран) | бэкенд | скоро | пакет-чекеров при свежем мини-прогоне (флаг §5.5; помнить оговорку 36а: «甲等 → класс Цзя» строгой формой не ловится) | D39.52, D39.62, D39.64 | +| 93 | Хвосты пакета-чекеров (минорки двухраундового ревью D39.78 — комменты/гвозди/данные одним касанием): строгий OffLanguage (36а, deferred) · разметить 分之-срез прежде стройки DC2 word↔word (полигон) · substring-вето `isSpokenChevronLine` → whole-word (второй call-site маркер-листа; гасит mixing-клэш на «в умении») · recall-трейд двустороннего отсечения `speechAttribution` вписать в контракт (маркер после внутренней запятой/многоточия в атрибуции = FN правила, не данных) · негатив-ассерт Demoted=false на ambiguous-популяции · stale-коммент `repair.go` LatinResidueCount «lowercase» · CAND k4_inverse в labelcandidates = опровергнутый whole-line вариант (заморозить/пометить по образцу фикса-3) · конвенции «..»-vs-«…» и thin-space джойна (код↔коммент) · кана-оговорка в обосновании Han-only демоции (класс открыт до B6, строка 81) · target-алиасы пост-чек-матча (сид-концерн) | бэкенд/полигон | в работе (промт выдан D39.79; 分之-разметка остаётся полигону) | `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md` | D39.78 | +| 28 | Банк-линт латиницы в dst или строгая форма языкового предиката (7 строк утечки алфавита проходят экран) | бэкенд | когда-нибудь (добор идеала — носитель «свежий мини-прогон» растворён D39.67, актуализация D39.79) | касание чекеров при данных добора (помнить оговорку 36а: «甲等 → класс Цзя» строгой формой не ловится) | D39.52, D39.62, D39.64, D39.79 | | 28а | Prompt-injection-проба входного текста ($0): сепаратор ⟦TM-BANK-v1⟧ и якорь-подобные маркеры В ТЕКСТЕ КНИГИ — поведение среза/парсера/инъекции (книга = недоверенные данные; инструментов у моделей нет, но канал банкноты читает вывод по маркеру) | бэкенд/полигон | когда-нибудь | малая проба | сводка-ревью 26.07 | | **— СВИП ГИПОТЕЗ —** | | | | | | | 30а | Перерисовка puml-диаграмм под пост-пак-20 пайплайн (терминолог, банкнота отдельным файлом); PUML НЕ рендерить (гардрейл) | оркестратор | когда-нибудь | док-пасс | аудит доков 26.07 | @@ -82,7 +81,7 @@ | 50 | F3-остаток идемпотентности | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | | 51 | `human_override` LOCK (D29 п.1г, в коде 0 вхождений) | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | | 52 | Ф2-гейты вне идеала: морфо-гейты канцелярита + L1-лемматизация (python-сайдкар) · полный OpenCC · опциональный пре-перевод гейт ; состав явно: канцелярит + РОД (строка 82) + класс Ф2-гейтов карты 04-unhappy (обсцен-гейт/феминитивы/время сцены — состав решить паком) ; + класс идиоматики (свип-хвост, D39.73): сехоуюй-словарь · вэньянь-классификатор (zh) · васэй-эйго ложные друзья (к ja-паку 81) — данные пары или закрытие «банк книги покрывает» тем же паком | бэкенд | когда-нибудь | отдельное решение | D39.34(4) | -| 53 | Мелкие хвосты качества одним паком: ledger-очередь LOW/NOTE (D39.4) · остаток фикс-листов D23 п.4 / D28 п.3(б) · `editor-mono.md` DORMANT · gofmt-нит `llm.go` ; + внутрифайловый дубль ключа pair-файла → громкая ошибка (PACK15 §Внутрифайловый) | бэкенд | когда-нибудь | отдельный пак | D39.34(5), D39.45 | +| 53 | Мелкие хвосты качества одним паком: ledger-очередь LOW/NOTE (D39.4) · остаток фикс-листов D23 п.4 / D28 п.3(б) · `editor-mono.md` DORMANT · gofmt-нит `llm.go` (+3 теста) ; + внутрифайловый дубль ключа pair-файла → громкая ошибка (PACK15 §Внутрифайловый) | бэкенд | в работе (промт выдан D39.79) | `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md` | D39.34(5), D39.45 | | 54 | Масштаб целой книги: волны/каденс/потолки/ETA на сотнях глав (гоняли максимум 10; книга 7,78 млн симв., ~2284 раздела) | бэкенд | когда-нибудь (последним по курсу) | МАСШТАБ | D39.33, CURRENT-STATE | | **— ПОЛИГОН (кандидаты пакетов) —** | | | | | | | 55 | `dialogue_dash` мерить только на невиданном тексте (подогнан под 蛊真人; цифры мини-прогона аргументом не считаются) ; расширено до вне-претрейн чекпоинта целиком: r-коэффициенты exp01/08 · precision чекеров · частота эха · чистовик exp15-выводов ; + arity-полоса паспорта (D29.2г): решить — dialogue_dash покрывает диалоговую половину или мерить (D39.73) | полигон | скоро | полигон-пакет | D39.37(4), D39.40, D39.46 | diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index aad12751..dfc793d5 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.78 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) +# Журнал решений оркестратора — контракт D1–D39.79 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: > ⚠ **Навигация (актуализация 01.08):** карта ниже детально покрывает D1–D39.28; решения D39.29–63 живут хронологически в теле файла, **свежая голова — С ХВОСТА** (новые ноты аппендятся вниз). Сводка текущей головы и очередь — CURRENT-STATE в `../PROGRESS.md`. @@ -1233,3 +1233,5 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу ## D39.77 — СТОПГЭП A ЗАЛЕНДЕН, СТРОКА 91 ЗАКРЫТА (+ УТОЧНЕНИЕ ПОЛИТИКИ ПОДПИСИ по вопросу владельца 02.08): бэкенд-сессия исполнила мини-касание — (1) сид стенд-книги (`guzhenren-seed-v2.yaml`, вне git): дописана ТОЛЬКО мн. парадигма «Винного червя» (5 форм полной детерминированной парадигмы; ⚠ честное уточнение сессии: все 4 формы «Фан Юань» и ед. обликы «Винного червя» УЖЕ стояли в сиде с 24.07 — нетто-новьё только мн. число); (2) гвозди (2 тест-файла): Линь/линию→Линь/линий (эмпир-проба: Stem(линий)=лин — дискриминирует, старая пара инертна — диагноз приёмки D39.75 подтверждён) + позитив-гвоздь «Фан Юаню» через forms[] (PARTIAL D39.75 закрыт); ядро Go не тронуто, голден не тронут, seed-lint 0/0. **(3) ЧЕСТНАЯ НАХОДКА СЕССИИ, бьющая по цифрам замера D39.76: coldrun-a был СИДЛЕСС-прогоном** (банк рождался майнером без сида) ⇒ харнесс мерил чистый стеммер-путь, слепой к forms[]; в подписанном сид-прогоне обликы «Фан Юань» уже ловились ⇒ реальный прод-разрыв ЕЩЁ МЕНЬШЕ отчётных чисел — решение «стопгэп вне ядра» только укрепляется. **(4) ПОЛИТИКА ПОДПИСИ (вопрос владельца «мы же не подписываем старые банки?»):** договорённость В СИЛЕ — подпись БАНКА (майнер→терминолог) опциональна, банк обязан приходить верным автономно (D39.59/67); СИД — другой артефакт (ручной входной канон книги: вкусовые dst/гендеры/спойлер-окна), НО **детерминированная морфология сида (падежные формы) владельческой подписи НЕ требует** — это не вкус; забирается приёмкой оркестратора; подпись владельца остаётся только за ВКУСОВЫМИ полями сида. Стратегическая нота: стопгэп = временная механика стенд-книги; автономная Decl-эмиссия — открытый шов арки (реопен с C-триггером строки 91 на второй паре) (02.08, оркестратор №9). ✅ ## D39.78 — ПАКЕТ-ЧЕКЕРОВ ПРИНЯТ И ЗАЛЕНДЕН (строка 25 ЦЕЛИКОМ + первые два компонента строки 79; $0 — только фейк-провайдер; двухраундовая приёмка: 10-агентный адверсариал-воркфлоу → 5 CONFIRMED major → постфикс той же сессией ДО коммита → 3-агентный дельта-раунд: 0 major; `CheapGateVersion` v7 бампнут ОДИН раз): **харнесс labels пересобран В GIT** (env-гейт `TM_CHECKER_LABELS=1`, checks+membank+candidates; `metrics.json` пакета-6 воспроизведён ПОБАЙТНО 12/12 классов — k4a добавлен маркер-онли постфиксом; 2 независимых пути счёта; манифактуренной сходимости НЕТ — джойн-конвенции независимо пересчитаны ревью-агентом из сохранённых эра-вердиктов). **ПОСТРОЕНО:** #10 демоция одно-руновых Han-миссов в Unverified + `PostcheckMiss.Demoted` (K6 fp 14→6, fn=0 — ⚠ КЛАСС-ВАКУУМЕН: в labels ноль одно-Han-позитивов, recall-цена демоции НЕ измерена — hard-gate строки 12 на «fn=0» не опираться; репэйр-гард №5 ослеп на одно-Han-дифференциал — оговорка в строке 13; кана-класс открыт до B6, строка 81) · #3 атрибуция ёлочки «X!»/«X?»/«X…» с отказом плоской цитате sentence-final-гейтом (K4b recall 0.109→0.217; Р4-потолок ~0.22 inline в контракте) · #6 caps-латиница + case-insensitive allowlist (K2 recall 0.75→0.85, честная precision 0.971) + синк репэйр-твина (caps-утечки адресуемы актуатору) · k4_inverse маркер-в-атрибуции (3/0/1/71; сегмент режется с ДВУХ сторон, маркеры whole-word) · #8 两/兩 данными (0 эффекта — generality) · Р2 hard/soft split (`UnitScaleHard`={DC1, NumberMagnitude} / `Soft`={DC2, PercentScale}; `Total` не тронут) · строка-79: `isCyrLetter`→`isTargetWordLetter` + DC1-трим + magnitude `SourceScripts`-гейт через единый `lang.IsDenseScript` (закрыто и ведро C-2) · рефрен-исключение editor.md/mono (PromptSHA256 двигается, перекупок нет D39.63). **ЗАКРЫТО с обоснованием:** #5 (единственный дефект магнитуды DC2-покрыт) · #7 (THRESHOLD=2 = 0 изменений; 3 = Р4-потолок inline; гомоглиф = `tk.mixed`, приёмка пройдена) · DC2 word↔word (ноль размеченных дефектов — сперва разметить 分之-срез) · research/22 §2№5 (не подтверждены labels) · omission-бэкстоп (уже стеммером D39.75) · строгий OffLanguage (36а deferred) · fix-8 скоуп verb-гейта (ЗАГЕЙЧЕН контрактом checkers.go: ёлочный экстрактор атрибуции + корпус-замер ПРЕЖДЕ стройки). **Приёмка оркестратора исполнением:** labels-ячейки перепрогнаны лично, фрозен-ДО #3 5/1/41/99 воспроизводится из дерева · голден: независимый маскированный дифф ПУСТ дважды (двинулся только `style_check_version` v6→v7 + хеш-каскад; постфикс-перезахват = байт-идентичный no-op) · build/vet/-race/майнер-парити зелёные · общность: ноль пар/книго-ветвлений, Han-предикат #10 скрипт-структурен. Раунд-1-находки (скоуп k4_inverse = весь хвост строки · 2 ложных «вскрытых» примера #3 в отчёте · BASE==EXT кандидат-теста · рассинхрон репэйр-твина · Р4-потолки не в контракте) ВСЕ закрыты постфиксом §8. Остаточные минорки раунда-2 → строка 93; вопросы владельцу (§6 + жанр-ось register_neg «xianxia» в пар-шаблоне + асимметрия 兩-батча) → строка 92. Лендинг-штамп: «D39.76» постфикса → фактический D39.78 (отчёт + 2 код-коммента; механическая нумерация — сессия номера не знала). Строка 25 ЗАКРЫТА · 79 сужена до cjkScriptNames-границы · 89 сужена (checkers-срез ведра D исполнен). Незаявленные в дерево-списке отчёта файлы (langpack.go — коммент-указатели ведра D; memdecl_test.go — gofmt) тривиальны, проверены (02.08.2026, оркестратор №9). ✅ + +## D39.79 — МЕЛКАЯ ПАЧКА ХВОСТОВ САНКЦИОНИРОВАНА + РЕШЕНИЯ §6 ПАКЕТА-ЧЕКЕРОВ ПРИНЯТЫ ДЕЛЕГИРОВАНИЕМ (владелец 02.08: «давай сделаем» по пачке 89+93+53+83; по строке 92 — «подумай как это сделать и реши за меня; интересует качество подходов и работающего решения»): **(1) Пачка** = строка 89 (остаток ведра D + сверка ведра B) + 93 (хвосты чекер-ревью) + 53 (мелкие хвосты качества) + **83/F4 ПОДТЯНУТА** с «до МАСШТАБА» на «до платных прогонов добора идеала» (SPOF: тихая потеря банка и подписей владельца; VACUUM INTO дёшев) — один промт `BACKEND_SMALLPACK_TAILS_SESSION_PROMPT.md`, $0, голден-ожидание = НЕ движется. **(2) Q1 канон грейда = «класс X»** (approved-ряд банка побеждает draft «разряд X»; демоция draft-рядов = операция над стенд-данными, приёмка оркестратора — выбор среди уже-подписанного, не новый вкус); **DC7-чекер вслепую НЕ строить**: сперва $0-замер нужности на боевых финалах labels-корпуса; ≥1 реальный дефект → минимальный data-driven чекер по образцу DC1; 0 → закрыть с обоснованием и gated-триггером «первая книга с живой грейд-серией». **(3) Q2: 兩 ПОДТВЕРЖДЁН в numeral-классах** (консистентность: cjk-section уже нёс 兩 — ровно класс дефекта #8) и ДОВЕРШАЕТСЯ в числовой группе `shichen_re`; **probe-ЛИТЕРАЛЫ (时辰/千万/数十万) остаются simplified-only** до первой traditional-книги — тогда цельным дата-батчем (спекулятивные варианты паттернов без книги = инерция, норма 13б); NB-граница в файл данных. **(4) Q3: PercentScale остаётся SOFT, HARD-value-детектор 成/万 НЕ строить** — нужность = 1 инстанс на корпус, механизм без носителя качества/денег; реопен ДВУМЯ триггерами: перевод `postcheck_gate` в hard-gate (строка 12 — честный HARD потребует value-чека) ЛИБО ненулевой поток value-дефектов с добора идеала. **(5) Q4: register_neg ПЕРЕЕЗЖАЕТ из пар-пака в КНИЖНЫЙ слой** — дом `StyleAllowlist` (book-config → `CheapGateConfig`), DC6-алгоритм не меняется, «терем»-список → стенд-конфиг gu-zhenren, пар-файл zh-ru остаётся чисто пар-фактами, жанро-литералов в Go НЕТ; **жанровый shared-слой НЕ строим** — gated-триггер «≥2 книги одного жанра» (зеркало C-триггера D39.76). Ревью-вопрос общности расширен: к «пара без правки Go» добавлен «ВТОРАЯ КНИГА той же пары — без ложных флагов и без правки Go». **(6) Q7 (эмиссия головы, 18) и 36б-замер (5) подтверждены полигон-слотами при ре-пробе 74** — стройка только по эффекту, без изменений. Строка 92 ЗАКРЫТА (решения здесь); 28 вес актуализирован (носитель «свежий мини-прогон» растворён D39.67 → добор идеала) (02.08.2026, оркестратор №9, по делегированию владельца). ✅