diff --git a/CLAUDE.md b/CLAUDE.md index 0d3dc04a..091fc009 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,15 @@ # TextMachine — контекст для Claude-сессий -Go-бэкенд издательского художественного перевода крупных текстов (ранобэ/вебновеллы, zh/ja/en→ru) через мультиагентный LLM-пайплайн: дешёвый черновик → редактор → детерминированные $0-гейты → судья (Ф2). Цели: победить translationese; низкий COGS; детерминированный банк памяти книги; обработка чувствительного контента с учётом цензуры провайдеров; телеметрия денег с первого дня. +Go-бэкенд издательского художественного перевода крупных текстов (ранобэ/вебновеллы, zh/ja/en→ru) через мультиагентный LLM-пайплайн: дешёвый черновик → редактор → детерминированные $0-гейты → судья (Ф2). + +## Цели и мерило (канон владельца, 02.08 — каждое решение сверяется с этим) + +1. **Продукт:** издательское художественное качество перевода больших текстов — победить translationese; консистентные термины/голоса на всю книгу; чувствительный контент с учётом цензуры провайдеров. +2. **Мультиязычность:** движок ОДИН и общий; языко-/пара-/книго-специфика легитимна, но живёт в ДАННЫХ и отдельных модулях, встраиваемых архитектурно чисто (langpacks · пар-промпты · сид/бриф), и разрабатывается отдельно от ядра. Ревью-вопрос по умолчанию: «заработает ли пара, которой в репо ещё НЕТ, без правки Go?» +3. **Чистая архитектура:** бэкенд легко писать и поддерживать; механизм строится только там, где несёт качество/деньги — не ради галочки трекера. +4. **Современные подходы и харнесс-превосходство:** пайплайн и транспорт на уровне или впереди конкурентных харнесс-решений (калибровка — research/21–22); эмпирика решает — мерить, не верить. +5. **Экономика:** низкий COGS на дешёвых моделях с адресными дорогими вызовами; деньги видимы с первого вызова (телеметрия · потолки · явное согласие на пере-оплату). +6. **Детерминизм:** воспроизводимый прогон (снапшоты · банк памяти · golden) — повторение без сюрпризов и тихих перепокупок. ## Роли сессий и зоны (НЕ править чужую зону) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index 8c007584..9f02990a 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -1,8 +1,8 @@ # Журнал прогресса -> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-02, голова D39.69). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.69); этот файл — ЖУРНАЛ.** +> **⟶ ТЕКУЩЕЕ СОСТОЯНИЕ** (на 2026-08-02, голова D39.70). **Источник истины по РЕШЕНИЯМ — `architecture/05-decisions-log.md` (D1–D39.70); этот файл — ЖУРНАЛ.** > - **Сделано (сводно; детали — 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–69): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (ядро построено).** Банк-пак принят целиком (D39.69: серия-батчинг head-aware · тип-классификатор первичным · Decl-стеммер+neuter; 36а/36в/27/84/feed_cap закрыты; голден вердикт-нейтрален, «4 серии на живом BANK-FULL» воспроизведено независимо). **Текущее: ПАКЕТ-ЧЕКЕРОВ (промт `BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md` выдан, сессия НЕ запущена) + фикс-лист банка (строка 87, несущее — «ь» в decl_suffix) + 8 вопросов владельцу (строка 88, вкл. ⚠Q8 книжные каноны в classifier.md).** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; при ре-пробе добрать платный порог §2 «6/6 harm»). Перекупок нет — стендовый корпус одноразовый (D39.63).** +> - **Курс (D39.59–69): ОБЩНОСТЬ ✅ → КАЧЕСТВО БАНКА ✅ (ядро построено).** Банк-пак принят целиком (D39.69: серия-батчинг head-aware · тип-классификатор первичным · Decl-стеммер+neuter; 36а/36в/27/84/feed_cap закрыты; голден вердикт-нейтрален, «4 серии на живом BANK-FULL» воспроизведено независимо). **Текущее: ПАКЕТ-ЧЕКЕРОВ (промт `BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md` выдан, сессия НЕ запущена) + фикс-лист банка (строка 87, несущее — «ь» в decl_suffix) — вопросы §9 закрыты ответами владельца (D39.70: Q8 санкционирован, Q1–Q7 по рекомендациям).** ⚠ **DeepSeek-V4-Flash-0731: платные прогоны СТОП до ре-пробы (строка 74; при ре-пробе добрать платный порог §2 «6/6 harm»). Перекупок нет — стендовый корпус одноразовый (D39.63).** > - **Горизонт (D39.62/67):** пакет-чекеров (строка 25) + фикс-лист банка (87) → ре-проба 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. > - **ЕДИНЫЙ БЭКЛОГ — секция «Бэклог» ниже** (одна таблица, единственный трекер; каждая петля обязана иметь диспозицию: решено / отложено-с-записью / отклонено; ведёт оркестратор). @@ -17,7 +17,7 @@ | **— ВИСИТ НА ВЛАДЕЛЬЦЕ —** | | | | | | | 2 | Четыре вопроса границы «алгоритмического идеала» (Annotator · семантический судья · ja→ru §B5 · ru-target до/после) | владелец | скоро (гейт «добора идеала» перед МАСШТАБОМ) | отдельное решение | D39.33, D39.38 | | 4 | Ре-чек ToS по триггерам — первый ИСПОЛНЕН 31.07, дельт вердиктов нет (D39.57); предмет Google-мониторинга перевешен на цепочку договора (PUP · Additional ToS · Google APIs ToS); следующие: квартал 25.10.2026 · первая лейблованная книга · любая правка `accepts_labels` | владелец/полигон | скоро (следующий триггер 25.10.2026) | отдельное решение (правило) | D39.32, D39.57 | -| 5 | Судья-с-декоем/36б «второе мнение» — бэкенд-стройка ЗАКРЫТА дизайном (D39.69): маршрут = полигон-ЗАМЕР нужности рецензента-другого-семейства ПОВЕРХ §1+§2 (Q2); переживёт замер → тонкая колонка наблюдаемости, не гейт | владелец → полигон | когда-нибудь (по слову, можно при ре-пробе 74) | полигон-замер → решение | D39.50 п.6, D39.58, D39.69 | +| 5 | Судья-с-декоем/36б «второе мнение» — бэкенд-стройка ЗАКРЫТА дизайном (D39.69): маршрут = полигон-ЗАМЕР нужности рецензента-другого-семейства ПОВЕРХ §1+§2 (Q2); переживёт замер → тонкая колонка наблюдаемости, не гейт | полигон | скоро (санкция Q2 D39.70 — слотом при ре-пробе 74) | полигон-замер → решение | D39.50 п.6, D39.58, D39.69 | | 6 | Строка Gemini в `accepts_labels` — ждёт слова владельца о подписи интерпретации сужения как разрешения; ре-чек 31.07 понизил приоритет: подпись даёт ПРАВО, но не судью 18+ (фильтр неконфигурируем D22.6 + обход запрещён договором) — возвращаться при вопросе, требующем именно права | владелец | когда-нибудь | отдельное решение | D39.32, D39.57 | | 7 | Q2 «редактор под `sexually-explicit`» (grok-4.3 интерим · glm-5 после сверки ToS Z.AI · mistral вон) | владелец | когда-нибудь (перед первой explicit-книгой) | отдельное решение | D39.27 п.7 | | 8 | D22.7 пер-чанковый L3-скрин — несня­тое предусловие первой erotica-книги в проде, отдельный гейт | владелец | когда-нибудь | отдельное решение | D22.7, CURRENT-STATE (оркестратор) | @@ -32,16 +32,15 @@ | 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) | | **— ХВОСТЫ ХОЛОДНОГО ПРОГОНА (исполнен достаточно, D39.58; Р7 владельца) —** | | | | | | | 16 | Полная цена холодного старта: edit-волна не гонялась (Р7); измерено всё ДО редактуры (драфт+банкнота $0.0247/волна · терминолог $0.006–0.013/проход) | бэкенд | когда-нибудь (первый прогон добора идеала) | добор идеала | D39.58 | -| 18 | Эмиссия головы 蛊: сид-половина = чек-лист (определяющий терм книги сидится `allow_short`, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы | полигон → бэкенд | когда-нибудь (после #10, по слову Q7) | полигон-замер → решение | D39.58, D39.60, D39.69 | +| 18 | Эмиссия головы 蛊: сид-половина = чек-лист (определяющий терм книги сидится `allow_short`, D39.50); эмиссия-КАНАЛ демотирован до ИЗМЕР-ГЕЙТА (Q7): полигон-замер «меняет ли эмиссия головы рендер композитов» — строить ТОЛЬКО по эффекту и ПОСЛЕ #10 (однознаковый пост-чек чинится чекер-паком); перед стройкой резолвить K-гейт и KWIC-грязь одиночной головы | полигон → бэкенд | скоро (санкция Q7 D39.70 — после #10, очередью с ре-пробой) | полигон-замер → решение | D39.58, D39.60, D39.69 | | 24 | Остаток: авто-режим флага (проект Б не гонялся) · оси голоса A–D (профили не подписаны; черновик готов — `coldrun-a/SIGN-PACKAGE.md` §3) ; + слот инъекции голоса и решение gates.voice при ненулевых осях (D39.55/D21 п.2) · слой-2 voice не строим до доказательства слоя-1 · сверить until_ch 白凝冰 при курации сида (D19.3в) | бэкенд | когда-нибудь (первый прогон добора идеала) | добор идеала | D39.40, D39.58 | | **— ТЕКУЩАЯ ОЧЕРЕДЬ (D39.59) —** | | | | | | | 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) — резолюция обязана накрыть терминолога | владелец (по ре-пробе) | перед следующим платным прогоном | ре-проба → решение | 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 | Остаточные Cyrillic-хардкоды пар-гейтед DC-чекеров: `checks/repair.go:131` (трим DC1-спана) · `checks/checkers.go:457,474` (`isCyrLetter` словограница register) — инертны без dc-данных пары, но пара С DC-чекерами и не-ru целью потребует правки Go; кандидат на `c.wordScript` ; + lintNumberMagnitude гейтить по объявленному письму источника (находка §8 карты D39.60) | бэкенд | когда-нибудь (следующий пак цель-оси) | ближайшее касание чекеров | D39.64 | -| 87 | Фикс-лист банк-пака (D39.69, приёмка): **«ь» (и класс -нь/-ль) в `decl_suffix` — приёмочный кейс «Фан Юаню»→«Фан Юань» сейчас ПРОВАЛИВАЕТСЯ (одна строка данных + пере-захват голдена)** · комментарий `Batch` «request hash independent of ordering» неверен (ChunkIdx фолдится — поправить) · оверсайз-серия одним батчем (помнить мину cap-8000 терминолога) · classify_types при выключенном terminology-гейте = тихий no-op + config-тесты classify-веток · мутационный тест neuter-фолда · voice-checker без стеммера (решить: заводить или объявить не-нужным) · дистилл-фикстура BANK-FULL (пин «4 серии») | бэкенд | скоро (малой пачкой при следующем касании банка; можно паровозом к чекер-паку по слову владельца) | ближайшее касание | D39.69 | -| 88 | Вопросы дизайн-пака банка §9 у владельца: Q1 канон-пин серий между прогонами (реком: не сейчас) · Q2 полигон-замер 36б (реком: да, до стройки) · Q3 подтвердить резюме-гейт Ф2.5 · Q4 hard-инъективность ranked-set (реком: нет) · Q5 вкус авто-транслита реалий (юаньци/цзин-ци-шэнь — промпт-инструкция?) · Q6 «сокращённая форма» = морфоклип или прозвище + компат neuter-сидов · Q7 замер эмиссии головы 蛊 · **⚠Q8 книжные каноны в `classifier.md` (方源 и др.) — санкция или жанрово-генерические примеры** | владелец | скоро | ответы → мелкие правки | D39.69, BANK_QUALITY_DESIGN §9 | +| 87 | Фикс-лист банк-пака (D39.69, приёмка): **«ь» (и класс -нь/-ль) в `decl_suffix` — приёмочный кейс «Фан Юаню»→«Фан Юань» сейчас ПРОВАЛИВАЕТСЯ (одна строка данных + пере-захват голдена)** · комментарий `Batch` «request hash independent of ordering» неверен (ChunkIdx фолдится — поправить) · оверсайз-серия одним батчем (помнить мину cap-8000 терминолога) · classify_types при выключенном terminology-гейте = тихий no-op + config-тесты classify-веток · мутационный тест neuter-фолда · voice-checker без стеммера (решить: заводить или объявить не-нужным) · дистилл-фикстура BANK-FULL (пин «4 серии») · `series`/`head_final` → строкой в `lang-script.txt` (сейчас Go-константа CJK-класса — D39.70) · консолидация `lang.TokenizeWords`↔`text.TokenizeScript` · промпт-инструкция роли «реалии — смыслом, транслит — именам» (Q5, данные пар-промпта) | бэкенд | скоро (малой пачкой при следующем касании банка; можно паровозом к чекер-паку по слову владельца) | ближайшее касание | D39.69 | | **— НАХОДКИ СВИПА ПОЛНОТЫ (D39.66: 951 обязательство проверено, потери возвращены в трекер) —** | | | | | | -| 80 | Резюме-слой памяти — проза-суммарайзер ЗАКРЫТ (D39.69); строка = ГЕЙТ ПИЛОТА Ф2.5: первый деливерабл пилота — «допускает ли автономная нарратив-состояние-строка ДЕТЕРМИНИРОВАННЫЙ верификатор (source-anchored) — или это D1-компаундинг со схемой»; не-покрытые классы (source-anchored reveal · арк-колбэки без ключа) реальны, но не измерены как дефект | владелец (Q3) → Ф2.5 | когда-нибудь (пилот) | Ф2.5 пре-рег | D25 п.8–9, D39.66, D39.69 | +| 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 | @@ -103,6 +102,10 @@ | 69 | Gemini API «под-18» обязательство на конечный продукт (независимо от лейблов) | владелец | когда-нибудь | Ф3 / отдельное решение | D39.32, D39.34(7) | | 70 | Action-security gate перед выдачей tools/webfetch (D25 п.5) | бэкенд | когда-нибудь | Ф3 | D39.34(7) | | 71 | Планы research/22: epub-tag-rewrite · Q7-леджер ; + F3-brief из D29.3 (chat-edit · Not-useful-петля · cost-of-fix) + Ф3-скоуп 02-mvp-plan (TMX/TBX · Bertalign · дистилляция 7–14B) | бэкенд | когда-нибудь | Ф3 | D39.34(7) | +## Оркестратор №9 — ОТВЕТЫ ПО §9 РАТИФИЦИРОВАНЫ + КАНОН ЦЕЛЕЙ В CLAUDE.md (D39.70), 02.08 + +Q8 (книжные примеры classifier.md) санкционирован с нормой «специфика — модулями/данными, встраиваемыми чисто»; Q1–Q7 делегированы «как лучше по исследованию» — диспозиции по рекомендациям (Q2/Q7 = полигон-слоты при ре-пробе 74; Q5 = промпт-инструкция в 87; Q6 = морфоклип, прозвища алиасами). Оценка series.go по запросу владельца: ядро по канонам; head_final-константа → в 87 (перенос в lang-script данные). «Цели и мерило» (6 пунктов) вписаны в CLAUDE.md на поправку владельца. Строка 88 закрыта. + ## Оркестратор №9 + бэкенд — КАЧЕСТВО БАНКА ПРИНЯТО И ЗАЛЕНДЕНО ОБОИМИ ЭТАПАМИ (D39.69), 02.08 Отчёт: [`archive/reports/BANK_QUALITY_DESIGN_2026-08-01.md`](archive/reports/BANK_QUALITY_DESIGN_2026-08-01.md) (ревью-шапка обоих этапов). Процесс: этап 1 ратифицирован владельцем напрямую; этап 2 до чекеров (не стартовали — коллизий нет); отдельного отчёта стройки нет — компенсировано приёмкой исполнением. Верификация: тесты/парити/голден зелёные; голден 172/172 hex-only независимой маскировкой; «4 серии на живом BANK-FULL» воспроизведено независимо; 4-агентное адверсариальное ревью. Закрыты строки 36а/36в/27/84/73 (+feed_cap из 86); строки 5/18/80 перевязаны на замер/гейт; новые 87 (фикс-лист, несущее «ь» в decl_suffix) и 88 (вопросы Q1–Q8, вкл. ⚠книжные каноны в classifier.md). Отступление стройки от дизайна по оси neuter ПРИНЯТО как улучшение (scoped-фолд по §6.2). diff --git a/docs/README.md b/docs/README.md index 0d74bff6..51d6f68e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -11,7 +11,7 @@ ## Структура -- `architecture/` — синтез. **Источник истины по решениям — [`05-decisions-log.md`](architecture/05-decisions-log.md) (D1–D39.69); при конфликте с любым доком он выше.** +- `architecture/` — синтез. **Источник истины по решениям — [`05-decisions-log.md`](architecture/05-decisions-log.md) (D1–D39.70); при конфликте с любым доком он выше.** - `01-decisions.md` — принципы Р1–Р10; `02-mvp-plan.md` — фазы и приёмка (v3, 09.07); `03-implementation-notes.md` — контракты Фазы 0; `04-unhappy-paths.md` — ~70 режимов отказа → механизм; `06-memory-risk-registry.md` — реестр рисков банка памяти; **[`09-target-architecture.md`](architecture/09-target-architecture.md) — целевая 7-слойная архитектура (D39; статус стройки — шапка-таблица; инвариант общности §0.1)** · [`10-prompt-architecture.md`](architecture/10-prompt-architecture.md) — консолидированная промпт-заметка (концерн 4) · [`12-go-style-notes.md`](architecture/12-go-style-notes.md) — норматив общности §0 + Go-ответы · [`13-tech-debt-anchors.md`](architecture/13-tech-debt-anchors.md) — якоря техдолга (справочник к бэклогу, НЕ трекер). **Исполненные (архив 25.07, санкция владельца, → `archive/architecture/`):** [`07-strategic-review.md`](archive/architecture/07-strategic-review.md) (стратаудит 09.07 — курс исполнен) · [`08-sync-audit-ledger.md`](archive/architecture/08-sync-audit-ledger.md) (ледджер синк-аудита — отработан) · [`11-implementation-plan.md`](archive/architecture/11-implementation-plan.md) (план пака-11 — исполнен целиком); `components.puml`/`pipeline.puml` — диаграммы (перерисованы 25.07 под пост-пак-16 реальность: волновой исполнитель, пакетный сплит пака-15, repair-петля за `enabled:false`, generic content-labels D39.25; владелец смотрит PlantUML-расширением VS Code; вручную НЕ рендерить). - `experiments/` — эмпирика «Полигона»: `00-provider-quirks` (читать перед любым вызовом провайдера), `01-token-calibration`, `02-refusal-benchmark`, `03-local-stand`, `04-editor-quality`, `06-local-extraction`, `07-coverage-precision`, `08-cost-model-v2` (актуальная денежная модель), `09-pilot-protocol` (пилот Ф2.5 + поправки D13), `10-explicit-benchmark` (18+ violence-рука канала B), `11-erotica-benchmark` (erotica по трём парам/регистрам — закрытие D14.4, D22), `12-quality-diagnosis`/`13-translator-bakeoff`/`14-quality-empirics`/`14b-meaning-battery` (дуга качества «мерить→строить», закрыты → D30/D32/D37/D38), `15-segmentation-empirics` (exp15: когезия под floor-шумом, фертильность — закрыт → D39.7/D39.8), `16-bank-mining` (exp16: WHICH/WHAT банк-майнинга — закрыт → D39.10). - `research/` — фактура исследований 04–05.07: `01–10` базовые, `11-gap-*` добор критиком, `12-*` режимы отказа/отзывы/таксономии (+ два внешних материала с провенанс-шапками), `13` валидация памяти, `14` адаптивная память, `15` голос и состояние (принят, D21), **`16` ридер-IDE (принят с ревью-шапкой, D29)**, **`17` внешняя критика GPT-5.6 (принят с ревью-шапкой, D25)** — у 16/17 читать шапку прежде тела. **`18` рычаги качества (два отчёта, D36)** · **`19` нарезка+когезия+контракт t/e (D39.1)** · **`20` банк-майнинг W1.5 (D39.6)** · **`21` обзор LLM-транспорта чужих харнессов (23.07: наш транспорт опережает/вровень со всеми 11)** · **`22` доменные харнессы перевода (24.07: калибрующий — ядро подтверждено, впереди COGS/18+/общность/измеренность, позади Q4-выпуск и gate+repair-петля; сиквел `02`/`05`)** — у всех ревью-шапки. ⚠ Часть под superseded-баннерами (01/02/03/04/05/09 и gap-1/2/5) — **читай баннер прежде содержимого**. @@ -19,9 +19,9 @@ - **Активные хендофф-промты (01.08; всё остальное — в `archive/prompts/` с баннерами-исходами):** [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (роль/нормы; состояние НЕ дублирует) · [`BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md`](BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md) (**ТЕКУЩИЙ бэкендный**: пакет-чекеров против labels; сессия ещё не запущена) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual-трекер пилота/18+/echo, отложен; P4-хвост из него закрыт D39.61). Закрытые 30.07–01.08 (промты в `archive/prompts/`, отчёты с ревью-шапками в `archive/reports/`): пак-19 «голос/состояние» (D39.54–56) · холодный мини-прогон (D39.58) · ToS-речек (D39.57) · ресёрч общности фаза 1 (D39.60) · полигон Р6+P4 (D39.61) · **фаза 2 общности (D39.64)** · **полигон «сырьё арки банка»+пробы (D39.65)** · **качество банка, оба этапа (D39.69)**. - `archive/` — `prompts/`: закрытые сессионные промты (только история, инструкции оттуда не исполнять) · `reports/`: отчёты паков/ресёрч-сессий с ревью-шапками (живая фактура приёмок — на них ссылаются D-лог и активные промты) · `architecture/`: исполненные арх-доки (07 стратревью · 08 синк-ледджер · 11 план пака-11) · четыре слайса хроники `PROGRESS-2026-07-{04-10,10-13,13-25,25-31}.md`. -## Статус (2026-08-01, голова D39.69 — эра «общность → качество банка») +## Статус (2026-08-01, голова D39.70 — эра «общность → качество банка») -Полная карта состояния НЕ здесь: фазы/курс/очередь/горизонт — в шапке [`PROGRESS.md`](PROGRESS.md) (CURRENT-STATE + единый бэклог), решения — в [`architecture/05-decisions-log.md`](architecture/05-decisions-log.md) (карта актуальности; свежая голова — с хвоста файла). Коротко: Ф0/Ф1 ✅ · арх-ресет D39 (паки 11–16) ✅ · паки 17–20 ✅ · мини-прогон и холодный прогон приняты (D39.37/58) · карта языковой привязки движка снята (D39.60: книго-ось чиста; ja→ru безопасна без правки Go, en→ru — нет) · Р1–Р4 закрыты (D39.63) · пак-21 растворён (D39.62) · **фаза 2 общности принята (D39.64: цель/скрипт-швы по данным, эмбед-хеш, манифест-по-каналам; голден вердикт-нейтрален)**. Полигон-ветка закрыта D39.65 (строки 21/22, фиксы 36а/36в проверены живьём). Банк-пак принят целиком (D39.69: серия-батчинг · тип-классификатор · Decl/neuter). Текущее: пакет-чекеров (промт выдан, не запущен) + фикс-лист 87 + вопросы владельцу 88. Свип полноты исполнен и пост-сверен кодом (D39.66: 951 обязательство, потери возвращены; якоря — architecture/13). ⚠ DeepSeek-0731 сменил веса под слагом — платные прогоны СТОП до ре-пробы (бэклог-строка 74). Дальше: стройка банка ∥ пакет-чекеров → ре-проба flash → ДОБОР ИДЕАЛА (мини-прогон и свип гипотез влиты, D39.67) → вторая пара (ja→ru) → МАСШТАБ → пилот Ф2.5 → Ф3 ридер-IDE. +Полная карта состояния НЕ здесь: фазы/курс/очередь/горизонт — в шапке [`PROGRESS.md`](PROGRESS.md) (CURRENT-STATE + единый бэклог), решения — в [`architecture/05-decisions-log.md`](architecture/05-decisions-log.md) (карта актуальности; свежая голова — с хвоста файла). Коротко: Ф0/Ф1 ✅ · арх-ресет D39 (паки 11–16) ✅ · паки 17–20 ✅ · мини-прогон и холодный прогон приняты (D39.37/58) · карта языковой привязки движка снята (D39.60: книго-ось чиста; ja→ru безопасна без правки Go, en→ru — нет) · Р1–Р4 закрыты (D39.63) · пак-21 растворён (D39.62) · **фаза 2 общности принята (D39.64: цель/скрипт-швы по данным, эмбед-хеш, манифест-по-каналам; голден вердикт-нейтрален)**. Полигон-ветка закрыта D39.65 (строки 21/22, фиксы 36а/36в проверены живьём). Банк-пак принят целиком (D39.69: серия-батчинг · тип-классификатор · Decl/neuter). Текущее: пакет-чекеров (промт выдан, не запущен) + фикс-лист 87 (вопросы §9 закрыты D39.70; канон целей — в CLAUDE.md). Свип полноты исполнен и пост-сверен кодом (D39.66: 951 обязательство, потери возвращены; якоря — architecture/13). ⚠ DeepSeek-0731 сменил веса под слагом — платные прогоны СТОП до ре-пробы (бэклог-строка 74). Дальше: стройка банка ∥ пакет-чекеров → ре-проба flash → ДОБОР ИДЕАЛА (мини-прогон и свип гипотез влиты, D39.67) → вторая пара (ja→ru) → МАСШТАБ → пилот Ф2.5 → Ф3 ридер-IDE. ## Доступные ключи от моделей DEEPSEEK_API_KEY, ZAI_API_KEY, KIMI_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XAI_API_KEY, MISTRAL_API_KEY diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 4dbffac2..0a46360d 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1,4 +1,4 @@ -# Журнал решений оркестратора — контракт D1–D39.69 (развязки 04.07 · пакеты 09–10.07 · приёмка/качество-первым/пивот/эмпирика 11–12.07 · арх-ресет+стройка пере-прогонного стека 13–19.07) +# Журнал решений оркестратора — контракт D1–D39.70 (развязки 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`. @@ -1215,3 +1215,5 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу ## D39.68 — ХЕНДОФФ КАЧЕСТВА БАНКА И ПАКЕТА-ЧЕКЕРОВ БЭКЕНД-СЕССИЯМ (решение владельца 01.08: «дизайна от оркестратора не жду — передать бэкендерам ресёрч → алгоритмы → реализацию → ревью; главное — правильные промты»): выданы ДВА промта — **`BACKEND_BANK_QUALITY_SESSION_PROMPT.md`** (двухфазный: этап 1 = ресёрч+дизайн $0 read-only с деливераблом-отчётом и СТОП на ратификацию — серия-батчинг по морфеме · тип-пере-вывод · Decl-шов+строка 27+84 · честное оспаривание 36б · рекомендация по резюме-слою 80 · дыра 蛊 18 · быстрые вердикты кандидатов вкл. first-occurrence-тест $0; этап 2 = стройка ТОЛЬКО по релею ратификации и после лендинга чекеров — общее дерево) и **`BACKEND_CHECKER_PACKAGE_SESSION_PROMPT.md`** (стройка сразу: полный перечень строки 25 + строка 79; харнесс labels пересобрать В GIT по образцу майнер-парити; Р2/Р4-контракты D39.63 обязательны — hard=значение/soft=форма, потолки в контракт правила; вердикт-двиги голдена для чекер-класса ратифицированы промтом — пере-захват один раз с маскированным диффом и вскрытыми единицами). **ОБА промта несут два новых обязательных блока (нормы владельца 01.08): (1) «Глобальный критерий» дословно — чистый архитектурный бэкенд, который легко писать и поддерживать и который качественно выполняет задачу; общность; механизм только где несёт качество/деньги; (2) «МАНДАТ РЕВИЗИИ ПОСЫЛОК» — свип D39.66 собрал долг по критерию «забыли», НЕ по критерию «надо ли»: каждый пункт перед кодом получает вердикт-тройку (посылка: источник и актуальность · нужность: что даёт на данных, иначе «закрыть» · форма: лучшая из ≥2 альтернатив по критерию), допустимый исход = «не строить», замер против посылки = СТОП и пинг.** Обе кучки $0 — исполняются, пока платные прогоны стоят на развилке 74 (01.08, оркестратор №9). ✅ ## D39.69 — КАЧЕСТВО БАНКА: ОБА ЭТАПА ПРИНЯТЫ И ЗАЛЕНДЕНЫ (этап 1 дизайн ратифицирован ВЛАДЕЛЬЦЕМ напрямую; этап 2 стройка той же сессией, $0, чекер-пак ещё не стартовал — коллизий нет; приёмка оркестратора: тесты/парити/голден исполнением + независимое воспроизведение флагманских чисел + 4-агентное адверсариальное ревью): **ПОСТРОЕНО ТРИ ПРИМИТИВА** — **§1 серия-батчинг (36в ЗАКРЫТА)**: `DetectSeries` HEAD-AWARE (равная длина · общая голова · различие только в модификаторе · L=1 вне · без транзитивного замыкания) + серия ЦЕЛИКОМ в батч + value-порядок отреза бюджета (частота-desc — **feed_cap ЗАКРЫТ этим**, из строки 86 изъят); канал по классу письма из данных (`lang-script.txt`), алфавитный источник инертен; «ровно 4 серии на живом BANK-FULL, ноль блоба, 方源/元石/元海 вне» — воспроизведено оркестратором НЕЗАВИСИМО; **§2 тип-классификатор ПЕРВИЧНЫМ (36а ЗАКРЫТА)**: отдельная фокус-фаза ДО RenderBatch (единственная форма с живой пробой 6/6), корректный тип роутит conform + праймит рендер + банкуется `attachClassifiedType` БЕЗ смены эмиссии (D39.50 не реоткрыт); своя роль/бюджет/промт `classifier.md`, request-hash-ось, fail-loud пары без промпта; честный $0-экран (тест ПИНИТ, что он пропускает юаньши/Юаньхай — флаг, не гейт); денежный цикл терминолога зарефакторен в общий `runBankRoleBatches` (resume $0 запинен тестом); **§3 Decl-шов (строки 27/84 ЗАКРЫТЫ)**: `lang.TargetStemmer` из ru-ДАННЫХ `decl_suffix` (пара без данных инертна) → `dstFormPresent` принимает косвенные падежи; короткая форма 27 — уже работала через `decl.forms[]` (пин пре-существующим тестом); neuter end-to-end (enum · `gender_neuter` в injection-данных · SeedLint громко отбраковывает неизвестный род); ось = **scoped `neuter-directive-v1`-фолд в `memory_version`** (отступление от дизайна ПРИНЯТО как улучшение — точнее правила условного фолда §6.2, книга без neuter байт-идентична, голден доказал). **ЗАКРЫТО ПО НУЖНОСТИ дизайном (ратификация закрытий):** 36б второе мнение — бэкенд-стройки НЕТ, маршрут = полигон-замер (Q2, строка 5 перевязана) · резюме-слой (строка 80) — проза-суммарайзер закрыт, строка = ГЕЙТ ПИЛОТА Ф2.5 («допускает ли нарратив-строка детерминированный верификатор — или это D1 со схемой») · эмиссия головы 蛊 — сид-половина (чек-лист) + измер-гейт Q7 ПОСЛЕ #10 (строка 18 перевязана) · эмбеддинг A7/D2 — закрыт по нужности, реопен = измеренный recall-разрыв на МАСШТАБЕ, только batch-time лейн · STITCH — закрыт до давления МАСШТАБА (реопен = бюджет ИЛИ измеренный эффект размера инъекции) · ranked-set — качество закрыто §1, hard-режим = Q4. **First-occurrence-тест ($0, исполнен): гипотеза первенства ОПРОВЕРГНУТА** — роль не первовхожденческий и не частотный выбиратель, ре-решает контекстом (позитивное подтверждение D39.65). **Голден: 172/172 hex-only** (сдвиг = `embedded_version` от данных injection/target-ru), вердикты байт-идентичны. **Фикс-лист → строка 87** (несущее: «ь» в `decl_suffix` — приёмочный кейс «Фан Юаню» сейчас ПРОВАЛИВАЕТСЯ; неверный комментарий Batch про независимость request-hash; оверсайз-серия одним батчом — помнить cap-8000; classify-валидация/тесты; мутационный тест neuter; voice-stemmer вопрос). **⚠ Вопрос владельцу Q8: `classifier.md` несёт книжные каноны (方源 и др.) в общий пар-слой** — санкция или жанрово-генерические примеры. Вопросы §9 Q1–Q7 + Q8 — строка 88. Платный порог «6/6 harm» — добрать при ре-пробе 74 (02.08, оркестратор №9). ✅ + +## D39.70 — ОТВЕТЫ ВЛАДЕЛЬЦА ПО §9 БАНК-ПАКА + КАНОН ЦЕЛЕЙ (02.08): **(Q8) книжные примеры в `classifier.md` САНКЦИОНИРОВАНЫ** с восстановленной нормой: языко-/книго-специфичное ДЕЛАТЬ МОЖНО — но выносить в данные/отдельные модули, встраиваемые архитектурно чисто (пар-промпт = легитимный модуль); **(Q1–Q7) делегированы инженерному «как лучше по исследованию, соблюдая цели»** — диспозиции: Q1 канон-пин серий НЕ сейчас (вернуться на МАСШТАБЕ) · Q2 полигон-замер нужности 36б — ДА, до любой стройки (слот при ре-пробе 74) · Q3 резюме = гейт пилота Ф2.5 ПОДТВЕРЖДЁН (строка 80) · Q4 hard-инъективность — НЕТ (warning-only по дизайну, порядок закрыт серией) · Q5 авто-транслит реалий — промпт-инструкцией роли «предпочитай смысловой перевод реалий; транслит — именам собственным» (данные пар-промпта, в фикс-лист 87; судится следующим прогоном) · Q6 «сокращённая форма» = МОРФОКЛИП (`decl.forms[]` достаточно, $0; прозвища живут алиасами банка — отдельного поля НЕ строить); отбраковка неизвестного рода компат-безопасна (neuter-сидов в природе нет) — строка 27 остаётся закрытой · Q7 замер эмиссии головы — ДА, дешёвым полигон-слотом ПОСЛЕ #10 (очередью с ре-пробой; строка 18 уже так стоит); **(2) оценка `series.go` по канонам (вопрос владельца)**: ядро — ПО КАНОНАМ (пакет пар-агностичен, параметры приходят значением, алгоритм generic и детерминирован, языковые примеры только в комментариях с измеренным «почему»); один этаж ниже канона — `SeriesMorphology`: `head_final` захардкожен Go-константой CJK-класса вместо данных (код сам помечает «the one place to revisit») → в фикс-лист 87 добавлено «`series`/`head_final` → строкой в `lang-script.txt`» + консолидация дубля `lang.TokenizeWords`↔`text.TokenizeScript`; **(3) КАНОН ЦЕЛЕЙ ПРОЕКТА сформулирован и вписан в CLAUDE.md** («Цели и мерило», 6 пунктов: продукт-качество · мультиязычность модулями/данными · чистая поддерживаемая архитектура · современные подходы/харнесс-превосходство · экономика с видимыми деньгами · детерминизм) — собран оркестратором из формулировок владельца (START_PROMT, 24.07 общность, 01.08 критерий, 02.08 харнесс-буллеты), НА ПОПРАВКУ владельцу; сессионные промты далее ссылаются на канон вместо пере-цитирования. Строка 88 ЗАКРЫТА (02.08, оркестратор №9). ✅