From a6f6b0e1e88d0964026f78b296e1a95fe12af9bf Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 25 Jul 2026 20:44:07 +0300 Subject: [PATCH] Record D39.36: the banknote WHAT channel is parsed and discarded so the owner signs bare terms, freeze the mini run until the mining stop contract is decided --- CLAUDE.md | 2 +- docs/BACKEND_MINIRUN_SESSION_PROMPT.md | 4 +++- docs/README.md | 2 +- docs/architecture/05-decisions-log.md | 18 ++++++++++++++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8d114447..e94fdcb3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,7 +14,7 @@ Go-бэкенд издательского художественного пер ## Источники истины (по убыванию) -1. **`docs/architecture/05-decisions-log.md` (D1–D39.35)** — ратифицированный контракт; при конфликте с любым другим доком побеждает он; сверху файла — карта актуальности (что чем superseded). **Правило чтения (онбординг-диета 25.07): карта + живая голова (эра D39.x); корпус D1–D38 = справочник — по ссылкам/grep по D-номеру, целиком НЕ читать.** +1. **`docs/architecture/05-decisions-log.md` (D1–D39.36)** — ратифицированный контракт; при конфликте с любым другим доком побеждает он; сверху файла — карта актуальности (что чем superseded). **Правило чтения (онбординг-диета 25.07): карта + живая голова (эра D39.x); корпус D1–D38 = справочник — по ссылкам/grep по D-номеру, целиком НЕ читать.** 2. `docs/experiments/00-provider-quirks.md` — wire-квирки провайдеров (читать ПЕРЕД правкой адаптеров/вызовами провайдеров). 3. `docs/architecture/09-target-architecture.md` (7 слоёв; статус стройки — шапка-таблица) · `12-go-style-notes.md` (норматив общности §0) · `10-prompt-architecture.md` (промпт-тема). 4. `docs/architecture/01-decisions.md` (Р1–Р10), `02-mvp-plan.md`, `04-unhappy-paths.md`, `06-memory-risk-registry.md` — тела исторические, читать через ⚠-баннеры 25.07. diff --git a/docs/BACKEND_MINIRUN_SESSION_PROMPT.md b/docs/BACKEND_MINIRUN_SESSION_PROMPT.md index 41c8f5d0..98d6d4c7 100644 --- a/docs/BACKEND_MINIRUN_SESSION_PROMPT.md +++ b/docs/BACKEND_MINIRUN_SESSION_PROMPT.md @@ -1,6 +1,8 @@ # Промт бэкенд-сессии: МИНИ-ПРОГОН ~10 глав — сквозной тест всего построенного (гигиена → прогон → верификация в ОДНОЙ сессии) -**Статус: ВЫДАН 25.07.2026, оркестратор №8.** Решение владельца: **всё делает одна сессия** — и гонит, и проверяет. Это платный прогон (ожидаемо $0.10–0.35), но его цель не «перевести 10 глав», а **доказать исполнением, что построенное паками 11–18 работает и работает как надо**. +**⚠ СТАТУС: ЗАМОРОЖЕН до решения владельца (25.07, D39.36) — НЕ СТАРТОВАТЬ.** Проверка вскрыла дефект шва: предложенный моделью перевод (банкнота) ПАРСИТСЯ И ВЫБРАСЫВАЕТСЯ (`banknote.go:177`), а подписная карта майнинга — WHICH-only, поэтому на майнинг-стопе владелец подписывает ГОЛЫЕ термины. Прогон в этом виде воспроизведёт ровно то трение, которое владелец назвал. Стартовать после решения по D39.36 (жёсткий стоп vs опциональный; и что делать с trust-gate). + +**Статус выдачи: 25.07.2026, оркестратор №8.** Решение владельца: **всё делает одна сессия** — и гонит, и проверяет. Это платный прогон (ожидаемо $0.10–0.35), но его цель не «перевести 10 глав», а **доказать исполнением, что построенное паками 11–18 работает и работает как надо**. **Первый деливерабл — эхо-блок (≤10 строк): скоуп / инварианты / чего не делать. ДО любых трат.** diff --git a/docs/README.md b/docs/README.md index 543f5ee3..8ee1c68e 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.35); при конфликте с любым доком он выше.** +- `architecture/` — синтез. **Источник истины по решениям — [`05-decisions-log.md`](architecture/05-decisions-log.md) (D1–D39.36); при конфликте с любым доком он выше.** - `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-ответы. **Исполненные (архив 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) — **читай баннер прежде содержимого**. diff --git a/docs/architecture/05-decisions-log.md b/docs/architecture/05-decisions-log.md index b65d205b..8476c0a6 100644 --- a/docs/architecture/05-decisions-log.md +++ b/docs/architecture/05-decisions-log.md @@ -1014,3 +1014,21 @@ API-529-долг закрыт: 8-осевой refute-by-default воркфлоу **Деньги мини-прогона, по фактическим цифрам rerun2** (`rerun2/RERUN_REPORT.md`): срез 1–5 глав = 28 336 байт GB18030; драфт **$0.010931**, редактура за арм **$0.0401–0.0766**, судья $6.4617 (не зовём). Экстраполяция на ~10 глав: **драфт ≈ $0.02, редактура ≈ $0.08–0.15 за арм** ⇒ **один арм ≈ $0.10–0.17, два арма (итерация №2 dspro-vs-glm) ≈ $0.20–0.32.** Потолок книги $15 не приближается; судья остаётся невызванным по D39.32. **Операционное (в промт прогона):** стендовая БД на схеме **v9**, бинарь ожидает **v10** — первая же write-команда мигрирует; **перед прогоном сделать резервную копию `rerun2/*.db`** (запись rerun2 — единственный носитель фактуры того прогона). + +## D39.36 — ДЕФЕКТ ШВА, найден вопросом владельца: канал WHAT (банкнота) ПАРСИТСЯ И ВЫБРАСЫВАЕТСЯ — владелец подписывает термины БЕЗ предложенного перевода; плюс майнинг-стоп жёсткий там, где замышлялся выбор (25.07, оркестратор №8). ✅ + +**Как вскрылось:** владелец описал свою модель работы майнинга («термины набираются по драфту → попадают в банк → получают ПРЕДПОЛАГАЕМЫЙ ПЕРЕВОД → дальше опциональный ОК: не ок — правим, ок — идём дальше без оков») и сказал, что «что-то не то». Проверка по коду показала: **его модель совпадает с ратифицированным ЗАМЫСЛОМ, а не с построенным**. + +**Замысел (в комментариях и в D39.10):** `internal/pipeline/mining.go:20` — «default B, WHICH-only — **the dst is the owner's to attach via the banknote at sign time**»; `internal/miner/miner.go:20` — «The dst (WHAT) is delivered by the banknote (WS4)»; D39.10 — «код находит сущности (0.97), но **канон-dst доставляет БАНКНОТА**». + +**Что построено (проверено исполнением):** +1. **`internal/pipeline/banknote.go:177`: `_, flags = parseBanknote(block, false)`** — распарсенные записи (`bankEntry{Src, Dst, Type}`, где `Dst` = «the model's proposed translation») **отбрасываются в `_`**; сохраняются ТОЛЬКО счётчики телеметрии (`n_banknote_lines`, `parse_fail`, `truncated`). Вне тестов `bankEntry` не используется НИГДЕ (грep по `internal`): 5 упоминаний, все внутри самого парсера. +2. **Сырой блок банкноты срезается из драфта до хранения** (`applyBanknote` → `commitBanknoteExport` персистит ЧИСТЫЙ текст), то есть предложенный перевод не остаётся и в артефактах прогона. +3. **Подписная карта — WHICH-only:** `miner.DeltaYAML` (`miner_emit.go:177-194`) кладёт `Src`, `Type`, `Status: auto`, алиасы и evidence-заметку — **поля dst в ней нет**. +⇒ **На майнинг-стопе владелец получает голые исходные термины и обязан придумывать русский вариант сам**, хотя модель его уже предложила и мы его выбросили. Шов «WHICH × WHAT», ради которого разводились каналы, физически не соединён. + +**Второе расхождение (флоу, не дефект — ратифицированный выбор, который владелец пересматривает):** непустая дельта ⇒ прогон **ЖЁСТКО останавливается** (`runBankMiningStop` → STOP перед edit-волной, `mining.go:36-87`), и стоп очищается, только когда КАЖДЫЙ терм либо промоутнут, либо отклонён. Владелец хочет **опциональный** ОК: идти дальше на предложенном банке, вмешиваясь лишь когда хочет поправить. + +**Третья, несущая связка, которую надо решить ЯВНО:** сегодня в инъекцию идёт **только CONFIRMED** (trust-gate банка, D39.2; D21 п.5). Значит «идти дальше на предложенном банке без оков» **не эквивалентно** «просто не останавливаться»: если mined-термы остаются `auto`, они в инъекцию НЕ попадают, и продолжение без подписи даёт банк, который для этих терминов не работает. Либо trust-gate ослабляется для mined+dst (и тогда в перевод едет НЕподписанный канон — с риском закрепить ошибку на всю книгу), либо остаётся, и «без оков» означает лишь «не блокировать прогон», а не «использовать предложенное». + +**Диспозиция:** дефект №1 (выброшенный dst) — чинить безусловно, он противоречит собственному замыслу и обесценивает канал WS4. Пункты 2 и 3 — **вопрос владельцу**, потому что это его продуктовый выбор между скоростью и риском закрепления неподписанного канона. До ответа мини-прогон ЗАМОРОЖЕН: он упрётся ровно в этот стоп и попросит подписать голые термины — то есть воспроизведёт трение, которое владелец только что назвал.