From bb4142f5035a7d39e5425f1d216089e4da13f2d2 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Fri, 17 Jul 2026 02:16:48 +0300 Subject: [PATCH] Ratify D39.5 landing pack-1.5 with the F1-F9 fix-list after execution verification, closing the polygon export surface question --- docs/PROGRESS.md | 2 +- docs/architecture/05-decisions-log.md | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/PROGRESS.md b/docs/PROGRESS.md index ca79707..42d381e 100644 --- a/docs/PROGRESS.md +++ b/docs/PROGRESS.md @@ -80,7 +80,7 @@ ## Оркестратор №6 — трек A пак-1 залендён (D39.2, `d3f6b34`), 2026-07-16 -Бэкенд исполнил T1–T4; **верификация прямая, исполнением** (мандат): build/vet/race-тесты зелёные (прогнал сам), golden-детерминизм PASS, пиновые тесты вербозно, несущие диффы прочитаны построчно, **golden re-capture воспроизведён независимо** (маскированный структурный дифф = 0 расхождений — только хеши/версии/2 новых пустых поля). ⚠ **Мульти-агентный второй рубеж 3× упал на API-529 — зарегистрирован ДОЛГОМ** (по восстановлении API; находки → фикс-лист пак-2, маршрут D37). Залендено: **терм-дрейф закрыт в КОДЕ** (trust-gated suppressor, memmatch-v4, громкий retrieval_state) · export-contract нормализация каждого финала (width.Fold, не NFKC — тот калечит «…»/«№») · **pair-keyed промпт-сеам** (fail-loud на не-zh-ru; `Book.LangPair()` ожил) · реестр role→инъекция · target-gated readability · `tmctl report` (детерм. quality-KPI). Снапшот: memmatch-v4+sanitizer-v5 → плановый единый resnapshot (и так требовался D38.5). Открытое → D39.2 (полигон-экспорт-поверхность ДО пере-прогона; CJK-глоссы — владельцу; билингв src→dst; ja-пример). Разбор — D-лог **D39.2**. **Решения владельца (16.07, пост-D39.2):** бюджет §D-эмпирики ≤$15 ✅ · поле gender в схеме сида ✅ (транспорт+подпись — в exp15-преп) · **CJK-глоссы СОХРАНЯТЬ** (против текущего стрипа → whitelist в фикс-лист пак-2; скоринг exp15 глоссы не штрафует) · W1.5-гейт — решить после Q3. **Адверсариал-долг ПОГАШЕН (D39.4, 17.07):** 8 осей по обоим пакам, 0 CRIT/1 HIGH/6 MED — ядро держится; HIGH = fold-first обход санитайзера (полноширинная сигнатура обходит детектор, exportNormalize изготавливает ASCII-дефект) + глосс-whitelist не ограничивает латиницу; **пак-1.5 НЕ лендится до фикс-листа F1–F9** (вписан в `BACKEND_TRACKA_PACK15` §T4; v6 не лендился → fold-first в тот же бамп v5→v6, один golden re-capture). **Пакет банк-майнинга W1.5 ратифицирован (D39.3, по записке ресёрчера-19 через владельца):** диспозиция H15/V4-п4 → активный пакет «ресёрч→полигон→бэкенд-дизайн»; гипотеза №1 владельца («код сам разметит») — проверяемая; промт `RESEARCHER_BANK_MINING_SESSION_PROMPT.md` ВЫДАН с HOLD-гейтом (запуск после фриза exp15). **Промт exp15 ВЫДАН:** `POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md` (исполнение research/19 §D: пре-рег фриз пинит бэкенд-HEAD/сид/промты; Q2b→Q1+Q3→Q2a/Q2c→Q4→Q0; преп: DeepSeek-слаги до 24.07, вендор-чек кэша ZAI/GLM, gender-транспорт). +Бэкенд исполнил T1–T4; **верификация прямая, исполнением** (мандат): build/vet/race-тесты зелёные (прогнал сам), golden-детерминизм PASS, пиновые тесты вербозно, несущие диффы прочитаны построчно, **golden re-capture воспроизведён независимо** (маскированный структурный дифф = 0 расхождений — только хеши/версии/2 новых пустых поля). ⚠ **Мульти-агентный второй рубеж 3× упал на API-529 — зарегистрирован ДОЛГОМ** (по восстановлении API; находки → фикс-лист пак-2, маршрут D37). Залендено: **терм-дрейф закрыт в КОДЕ** (trust-gated suppressor, memmatch-v4, громкий retrieval_state) · export-contract нормализация каждого финала (width.Fold, не NFKC — тот калечит «…»/«№») · **pair-keyed промпт-сеам** (fail-loud на не-zh-ru; `Book.LangPair()` ожил) · реестр role→инъекция · target-gated readability · `tmctl report` (детерм. quality-KPI). Снапшот: memmatch-v4+sanitizer-v5 → плановый единый resnapshot (и так требовался D38.5). Открытое → D39.2 (полигон-экспорт-поверхность ДО пере-прогона; CJK-глоссы — владельцу; билингв src→dst; ja-пример). Разбор — D-лог **D39.2**. **Решения владельца (16.07, пост-D39.2):** бюджет §D-эмпирики ≤$15 ✅ · поле gender в схеме сида ✅ (транспорт+подпись — в exp15-преп) · **CJK-глоссы СОХРАНЯТЬ** (против текущего стрипа → whitelist в фикс-лист пак-2; скоринг exp15 глоссы не штрафует) · W1.5-гейт — решить после Q3. **Пак-1.5+F1–F9 ЗАЛЕНДЕНЫ (D39.5, 17.07):** tmctl export (manifest-join+drift-гард; полигон-экстракция впредь через него — D39.2-open№1 ЗАКРЫТ) · fold-first санитайзер (HIGH закрыт) · bounded глосс-whitelist · пример zh-ru; верификация исполнением, masked-golden пуст. **Адверсариал-долг ПОГАШЕН (D39.4, 17.07):** 8 осей по обоим пакам, 0 CRIT/1 HIGH/6 MED — ядро держится; HIGH = fold-first обход санитайзера (полноширинная сигнатура обходит детектор, exportNormalize изготавливает ASCII-дефект) + глосс-whitelist не ограничивает латиницу; **пак-1.5 НЕ лендится до фикс-листа F1–F9** (вписан в `BACKEND_TRACKA_PACK15` §T4; v6 не лендился → fold-first в тот же бамп v5→v6, один golden re-capture). **Пакет банк-майнинга W1.5 ратифицирован (D39.3, по записке ресёрчера-19 через владельца):** диспозиция H15/V4-п4 → активный пакет «ресёрч→полигон→бэкенд-дизайн»; гипотеза №1 владельца («код сам разметит») — проверяемая; промт `RESEARCHER_BANK_MINING_SESSION_PROMPT.md` ВЫДАН с HOLD-гейтом (запуск после фриза exp15). **Промт exp15 ВЫДАН:** `POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md` (исполнение research/19 §D: пре-рег фриз пинит бэкенд-HEAD/сид/промты; Q2b→Q1+Q3→Q2a/Q2c→Q4→Q0; преп: DeepSeek-слаги до 24.07, вендор-чек кэша ZAI/GLM, gender-транспорт). ## Компоненты единого resnapshot залендены (D38.5), 2026-07-12 diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index 5283abb..3141e1d 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -3,7 +3,7 @@ > **⟶ КАРТА АКТУАЛЬНОСТИ (ревизия D31, продлена до D38.2 [12.07]; исторические записи ниже НЕ переписываются — дисциплина D23.3).** Читая контракт целиком, держи под рукой, что чем перекрыто: > - **Полностью superseded:** **D1 (моно-редактор) → D17 → D30.1 (редактор БИЛИНГВ)** · D9 (ja-приёмка) → D18 (蛊真人 zh→ru; ja — второй прогон) · D17 → D30.1 · скобка D19.4 «ключ без data-sharing» и D20.3 «чистый ключ = блокер пилота» → **D27** (единый ключ С data-sharing, отключение перед продом) · exp04-дефолт «editor grok-4.3» (D3) → D30.1 (grok reasoning-off из редакторских ролей СНЯТ — no-op; кандидат glm-5-билингв; gemini — премиум-эскалация только за санитайзером D30.3). > - **Частично амендировано:** D3 (канал B → D14.1/D19.1 + оговорки D22.5/D22.6; апекс-слаг `-preview` — D22.4; draft под вопросом exp13 — D30.6) · D6 («off/minimal для draft/edit» эродирован: draft thinking-ON принудительно, editor-off снят D30.1; живы per-роль принцип и D6.2-буфер) · D10 (+D24.2 alias-слепое пятно, истинная консистентность ≈99.5%) · D11-числа → exp08 → **D30.4** (флип D1 = +15–25%, ~$0.85/ранобэ; «$1.5–2» = неподписанная опция Б) · D12 (+D24.3 флоры max_tokens; +D29.1в rollup — амендмент вердикт-правила) · D13.1-арм из решающего → ПОДТВЕРЖДАЮЩИЙ (D30.1); +D25.3 prefix-анализ судьи · D14.2 закрыт D19.1/D22.4; D14.4 закрыт D22.1 · D15.3 исполнен; спека D15.2: v2→v3→v3.1 (D22.2), реализация = текущий пакет (D30.9) · D24.4 +D28.1 (precision/recall-трейдофф; hard-gate требует пере-замера) · порядок D24.5 отложен D26.1 (этап B — после читаемых 25 глав). -> - **Живое ядро без изменений:** D2 (+новый гейт-класс D30.3), D4, D5, D7, D8, D10-механизм, D12-таксономия отказов, D16, D18, D19.1–19.2, D21 (Ф2-механизмы voice/address/reveal), D22.5–22.7, D23 (golden = инвариант №8), D24–D39.4 — действующая голова контракта (**D39.4 = адверсариал-долг ПОГАШЕН [8 осей: 0 CRIT/1 HIGH/6 MED], пак-1.5 придержан под фикс-лист F1–F9 в §T4**; **D39.3 = пакет банк-майнинга W1.5 [диспозиция H15/V4-п4] ратифицирован, research/20-промт с HOLD до фриза exp15**; **D39.2 = трек-A пак-1 залендён `d3f6b34`: trust-gated suppressor [терм-дрейф закрыт в КОДЕ] + export-contract нормализация + pair-сеам + реестры + quality-report; адверсариал-долг за 529**; **D39.1 = research/19 залендён: конфликт exp14↔research/18 разрешён [эмиссия≠окно≠связность], Go-спека чанкера+когезии, волновая архитектура W0–W3 [вводная владельца: параллелизм], пре-рег эмпирики Q0–Q5; оркестратор-ревью снято владельцем**; **D39 = АРХ-РЕСЕТ: синк-аудит сломанного телефона [65 находок, 0 refuted, `08-sync-audit-ledger.md`] + целевая 7-слойная архитектура [`09-target-architecture.md`] + фазовый план [трек A build-now ∥ трек B ресёрч, пере-прогон после]; формализует фантомный «D35.7» как цель слоя 1; терм-дрейф код-корень жив [сид-воркэраунд]; редактор 4-мандата-full-regen = причина инверсий**; D35 = пивот качество-первым; D36 = приёмка research/18; D37 = приёмка exp14: претензия-1=промпт-рычаг; D38 = приёмка exp14b: «только gpt-5.4» ОПРОВЕРГНУТО [mistral/deepseek-pro чинят], фронтир в дефолт НЕ нужен, корень терм-дрейфа = статус-draft сида; **D38.1 = слепой h2h P1a↔F-disc залендён [ChatGPT «фронтир сильнее» / Claude «near-parity» расходятся, СХОДЯТСЯ: дефекты = инфра] → РАЗВОРОТ «мерить→строить», выдан BACKEND_INFRA_PACK; D38.2 = консолидация/док-гигиена: спент exp-скрипты в `eval/exp12|13|14|14b/`, статус-доки+.puml актуализированы; D38.3 = инфра-пак читаемости залендён (санитайзер-классы strip+export + число/omission-гард), верифицирован исполнением [build/vet/test зелёные, 3 span-дефекта запинены]; D38.4 = аудит полноты exp14/14b: чэнъюй-рычаг забыт near-term→дописан в дискурс-промпт; inversion-гард D37 §2г не строился (число/omission ≠ полярность)→editor-swap = защита от инверсий (приоритет↑); нарезка = re-run-арм; гард-тумблер вкл. при resnapshot; D38.5 = компоненты resnapshot залендены+верифицированы [reseed-сид eb409f2 · дискурс+чэнъюй editor v3 0ac5f7a с few_shot-тумблером] → следующий шаг единый resnapshot + пере-прогон**). +> - **Живое ядро без изменений:** D2 (+новый гейт-класс D30.3), D4, D5, D7, D8, D10-механизм, D12-таксономия отказов, D16, D18, D19.1–19.2, D21 (Ф2-механизмы voice/address/reveal), D22.5–22.7, D23 (golden = инвариант №8), D24–D39.5 — действующая голова контракта (**D39.5 = пак-1.5+F1–F9 залендены [tmctl export с manifest/drift-гардами · fold-first санитайзер · bounded глосс · пример zh-ru]; экстракция полигона впредь через tmctl export**; **D39.4 = адверсариал-долг ПОГАШЕН [8 осей: 0 CRIT/1 HIGH/6 MED], пак-1.5 придержан под фикс-лист F1–F9 в §T4**; **D39.3 = пакет банк-майнинга W1.5 [диспозиция H15/V4-п4] ратифицирован, research/20-промт с HOLD до фриза exp15**; **D39.2 = трек-A пак-1 залендён `d3f6b34`: trust-gated suppressor [терм-дрейф закрыт в КОДЕ] + export-contract нормализация + pair-сеам + реестры + quality-report; адверсариал-долг за 529**; **D39.1 = research/19 залендён: конфликт exp14↔research/18 разрешён [эмиссия≠окно≠связность], Go-спека чанкера+когезии, волновая архитектура W0–W3 [вводная владельца: параллелизм], пре-рег эмпирики Q0–Q5; оркестратор-ревью снято владельцем**; **D39 = АРХ-РЕСЕТ: синк-аудит сломанного телефона [65 находок, 0 refuted, `08-sync-audit-ledger.md`] + целевая 7-слойная архитектура [`09-target-architecture.md`] + фазовый план [трек A build-now ∥ трек B ресёрч, пере-прогон после]; формализует фантомный «D35.7» как цель слоя 1; терм-дрейф код-корень жив [сид-воркэраунд]; редактор 4-мандата-full-regen = причина инверсий**; D35 = пивот качество-первым; D36 = приёмка research/18; D37 = приёмка exp14: претензия-1=промпт-рычаг; D38 = приёмка exp14b: «только gpt-5.4» ОПРОВЕРГНУТО [mistral/deepseek-pro чинят], фронтир в дефолт НЕ нужен, корень терм-дрейфа = статус-draft сида; **D38.1 = слепой h2h P1a↔F-disc залендён [ChatGPT «фронтир сильнее» / Claude «near-parity» расходятся, СХОДЯТСЯ: дефекты = инфра] → РАЗВОРОТ «мерить→строить», выдан BACKEND_INFRA_PACK; D38.2 = консолидация/док-гигиена: спент exp-скрипты в `eval/exp12|13|14|14b/`, статус-доки+.puml актуализированы; D38.3 = инфра-пак читаемости залендён (санитайзер-классы strip+export + число/omission-гард), верифицирован исполнением [build/vet/test зелёные, 3 span-дефекта запинены]; D38.4 = аудит полноты exp14/14b: чэнъюй-рычаг забыт near-term→дописан в дискурс-промпт; inversion-гард D37 §2г не строился (число/omission ≠ полярность)→editor-swap = защита от инверсий (приоритет↑); нарезка = re-run-арм; гард-тумблер вкл. при resnapshot; D38.5 = компоненты resnapshot залендены+верифицированы [reseed-сид eb409f2 · дискурс+чэнъюй editor v3 0ac5f7a с few_shot-тумблером] → следующий шаг единый resnapshot + пере-прогон**). Ответ на вопросы бэкенд-сессии (PROGRESS §«Вопросы от бэкенда», §«[НУЖНО РЕШЕНИЕ] перед Фазой 1» — с ревизии D31 в `archive/PROGRESS-2026-07-04-10.md`) и полигона (think-режим). Каждое решение прошло адверсариальную панель из 3 критиков (research / экономика / исполнимость в коде Фазы 0); ни одно не отклонено, все уточнены. Это **контракт Фазы 1** — бэкенд исполняет отсюда; при конфликте с буквой 01-decisions/02-mvp-plan — источник истины здесь (потом сольём в основные доки). @@ -604,3 +604,11 @@ exp14b (D37-мандат) прогнал батарею DET-смысл-трап API-529-долг закрыт: 8-осевой refute-by-default воркфлоу (деньги/resume · снапшот · trust-gate · export-normalize · pair-сеам/конфиг · quality-report · export-поверхность · глосс-whitelist), всё исполнением, ~1M токенов, $0 к провайдерам. **Итог: 0 CRITICAL · 1 HIGH · 6 MEDIUM · 14 LOW · 14 NOTE**; ядро обоих паков держится (деньги/resume/детерминизм/SHA-нейтральность/trust-gate-семантика — CONFIRMED-SAFE), находки — по краям новых поверхностей. **Несущее:** (1) **HIGH — обход санитайзер-гейта, воспроизведён исполнением:** 5/6 классов детектят по сырому тексту, exportNormalize шипит свёрнутый → полноширинная вариация сигнатуры («перевод:», «###») обходит детектор, а нормализация изготавливает ASCII-дефект в экспорте; регресс vs v4-поведения. Фикс = fold-first детекция + инвариант `sanitizeOutput(exportNormalize(x))==0`. (2) **MED×2 (глосс):** isValidGloss не ограничивает латиницу — «(拳 the …)» проносит английскую фразу чистой (найдено НЕЗАВИСИМО осями 4 и 8). (3) **MED×2 (export):** gate-drift (гейт из текущего конфига, не снапшота) + нет manifest-сверки (частичная книга молча «полная» — класс D37-скью). (4) **MED×2 (quality):** gate-withheld чанки в KPI-популяции; `cjk_leak_rate` считает markdown-only strips. **Решение:** пак-1.5 НЕ лендится до F1–F6 (+дешёвые F7–F9); v6 не лендился → fold-first вливается в ТОТ ЖЕ бамп v5→v6 (один golden re-capture). Фикс-лист вписан в `BACKEND_TRACKA_PACK15_SESSION_PROMPT.md` §T4 (слот ровно для этого). LOW/NOTE-хвост — в ledger-очередь (Retries-снапшот pre-existing; pair-fail-loud-до-store; trustGateEvent первый-отказ; и пр.). Прямая верификация оркестратора (build/vet/race, 12 пиновых тестов, независимая репликация masked-golden-диффа = ПУСТО) — подтверждена воркфлоу без расхождений. + +## D39.5 — Трек-A пак-1.5 + фикс-лист F1–F9 ЗАЛЕНДЕНЫ одним пакетом (17.07, оркестратор №6). ✅ + +Бэкенд исполнил §T4-фикс-лист поверх T1–T3; оркестратор верифицировал исполнением (свежий `-count=1 -race` весь зелёный; 16 пиновых тестов вербозно; независимая репликация masked-golden-диффа = ПУСТО — только хеши + sanitizer-v5→v6; спот-чтение fold-first: детекция по свёрнутому, strip/export по оригиналу, офсеты не пересекаются, fold идемпотентен) и залендил (`git log -1`). + +**Что залендено:** **T1** `tmctl export` — read-only поверхность для полигонной экстракции (final_hash→checkpoint→exportNormalize; glossary-gate re-derive как status; +F3 ConfigDrift-поле/WARN при снапшот-дрейфе; +F4 manifest-join: `[]` не null, pending-строки, Total/Pending-счётчики, ghost-строки дропаются с WARN; +F9 fail-loud на DispOK без final_hash). **T2** глосс-whitelist v6 (голова+скобки, ≤6 CJK; +F2 бound не-CJK: ≤40 рун, пиньинь-токены ≤24 рун/≤cjk+1; +F1 **fold-first детекция всех 6 классов** — закрыт HIGH-обход полноширинными сигнатурами; инвариант-тест `sanitizeOutput(exportNormalize(x))==0`). **T3** пример zh→ru runnable (+F8 palladius). **F5/F6** quality: gate-withheld вне KPI-популяции; `cjk_leak_rate`→`cosmetic_strip_rate`. **F7** resume Model-атрибуция. Сессионный адверсариал (author≠reviewer) поймал+запинил 2 дефекта своих же фиксов (U+3000-глосс детекция↔strip дивергенция; joined-пиньинь кап 14→24). + +**Решения по открытым вопросам:** капы `maxGlossCJKRunes=6`/`maxGlossLatinTokenRunes=24` — приняты как tunable-эвристики (residual = сохранённый глосс, не дроп чанка; ревизия по пере-прогону); F6-rename принят (CJK-специфичный сплит — дешёвый follow-up по надобности); F3-поза field+WARN (не fail-loud) — принята, зеркалит Status. **Ledger-очередь без изменений** (golden-глосс-ячейка, escalated+stripped тест, Retries-снапшот, пунктуационные огрызки и пр.). D39.2-open №1 (полигон-поверхность) — ЗАКРЫТ этим лендингом; полигонная экстракция пере-прогона обязана читать `tmctl export`, не сырые чекпоинты.