From 6666566f41c9a97cd8d6a54e181128f646f2f670 Mon Sep 17 00:00:00 2001 From: "Claude (backend session)" Date: Sat, 22 Aug 2026 18:46:47 +0300 Subject: [PATCH] Correct two architecture claims the experiments overturned: the tmctl verb list and the state of Q4b --- docs/architecture/10-prompt-architecture.md | 2 +- docs/architecture/13-tech-debt-anchors.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/architecture/10-prompt-architecture.md b/docs/architecture/10-prompt-architecture.md index e8ffc83c..8c6c0165 100644 --- a/docs/architecture/10-prompt-architecture.md +++ b/docs/architecture/10-prompt-architecture.md @@ -15,7 +15,7 @@ |---|---|---| | **Язык самого промпта** (сейчас всё по-русски; для zh→en русский не должен участвовать) | ОТКРЫТ, спроектирован: язык промпта = **свойство пакета пары**, не хардкод. Первый замер ИСПОЛНЕН: Р6/D39.61 — ru/en-срез ОТРИЦАТЕЛЕН (эхо-ось), «не закрыт окончательно» оговоркой; остаток — язык промпта как свойство пакета для не-ru таргетов, вернётся с ja→ru | START_PROMT V4-п5 · аудит `L4-prompt-language-always-russian` (CONFIRMED/HIGH) · `09` §2-слой-2 · D39 п.7 | | **Вырезать правила языка из промтов в отдельный слой** (Палладий/Поливанов, дискурс-нормы, few-shot) | СЕАМ ПОСТРОЕН (пак-1, D39.2): конфиг pair-keyed `prompts: {zh-ru: …}` + `Book.LangPair()` + fail-loud на чужую пару. **Контент ещё НЕ извлечён** — правила по-прежнему в теле zh-ru-файлов; извлечение в структурированный пакет гейтится exp15 + research/18 §D-3 («форма пакета не разрешена») | research/18 §B2.2/§C#15 · `09` §2-слой-2 · D39-решение владельца «сеам сейчас, контент zh→ru» · пак-1 T3.3 | -| **Почему структура абзацев и расширенный язык-промпт — только у РЕДАКТОРА?** | ОСОЗНАННОЕ решение D30.2 (дешёвый буквальный черновик + вся реструктуризация у умного билингв-редактора; exp12: построчность = корень нечитаемости), альтернатива «переводчик отдаёт структуру» — Q4a ИЗМЕРЕН (D39.9: верность на translate-стадии не покупается), Q4b/Q4c не гонялись; асимметрия сохранена по данным; diff-контракт редактора — строка 106 | D-лог D30.2 (`05:366` — «механизм реверстки — открытый вопрос») · аудит `L1-*`/`H3` · research/19 §C · exp15 Q4 | +| **Почему структура абзацев и расширенный язык-промпт — только у РЕДАКТОРА?** | ОСОЗНАННОЕ решение D30.2 (дешёвый буквальный черновик + вся реструктуризация у умного билингв-редактора; exp12: построчность = корень нечитаемости), альтернатива «переводчик отдаёт структуру» — Q4a ИЗМЕРЕН (D39.9: верность на translate-стадии не покупается), ⚠ **«Q4b/Q4c не гонялись» ПРОТУХЛО — испр. 22.08:** Q4b прогнан отдельным экспериментом и ПРИНЯТ (эксп-19, `docs/experiments/19-editor-contract-q4b.md`, D39.108 — диффы ОТЛОЖЕНЫ), а топологию решил эксп-21 (D39.117: full-regen подтверждён, точечная починка как ЗАМЕНА редактора отклонена и принята формой «механический пре-гейт ПЕРЕД редактором», строка 142). Не гонялся только Q4c. Асимметрия сохранена по данным; diff-контракт редактора — строка 106 | D-лог D30.2 (`05:366` — «механизм реверстки — открытый вопрос») · аудит `L1-*`/`H3` · research/19 §C · exp15 Q4 | | **Все промты zh→ru-центричны — неправильно для мультиязычного бэкенда** | Ратифицирован **инвариант общности** (`09` §0.1, поправка владельца 13.07): пара = ось данных, не кода. Латентный баг закрыт паком-1 (ja-книга теперь fail-loud, не едет тихо через «китайский паратаксис»). Новая пара = новый пакет-данные, не переделка кода | `09` §0.1 · D39 п.7 · пак-1 T3.2/T3.3 · аудит `H2` | ## 2. Инвентарь промтов (после пака-1/1.5, HEAD) diff --git a/docs/architecture/13-tech-debt-anchors.md b/docs/architecture/13-tech-debt-anchors.md index 089abe06..ca701ba2 100644 --- a/docs/architecture/13-tech-debt-anchors.md +++ b/docs/architecture/13-tech-debt-anchors.md @@ -91,7 +91,7 @@ grep sanitiz по backend/configs/pipeline-c2.yaml — 0 вхождений (exi ### [CONFIRMED_LOST] Кандидат 73: tmctl «замена термина с главы N» -Команды НЕТ: полный список tmctl = translate|report|status|export|redrive|seed-lint (cmd/tmctl/main.go:73-86); RedriveSelector выбирает только ФЛАГНУТЫЕ чанки по chapter/chunk/reason (pipeline/status.go:561-582), не «чанки с термом X». Источник кандидата — research/15-voice-and-state.md:200: одна команда ставит until_ch=N старой записи и since_ch=N новой. При этом СУБСТРАТ построен целиком: оконные строки в схеме (UNIQUE (book_id, src, sense, since_ch, until_ch), migrate.go:202) и $0-пере-пин при bank-only-сдвиге (pipeline/repin.go:14-36, D39.42 п.5/D39.45) — платятся только юниты, где инъекция реально изменилась. +Команды НЕТ (⚠ перечень в этой улике был неполон и якорь уехал — испр. 22.08: полный список живёт ОДНИМ носителем в коде, `cmd/tmctl/main.go` `dispatchCommands` = `translate·report·status·export·redrive·manifest·backup·migrate·seed-lint`; прежняя редакция не знала `manifest`, `backup` и `migrate`); RedriveSelector выбирает только ФЛАГНУТЫЕ чанки по chapter/chunk/reason (pipeline/status.go:561-582), не «чанки с термом X». Источник кандидата — research/15-voice-and-state.md:200: одна команда ставит until_ch=N старой записи и since_ch=N новой. При этом СУБСТРАТ построен целиком: оконные строки в схеме (UNIQUE (book_id, src, sense, since_ch, until_ch), migrate.go:202) и $0-пере-пин при bank-only-сдвиге (pipeline/repin.go:14-36, D39.42 п.5/D39.45) — платятся только юниты, где инъекция реально изменилась. **Фикс/скоуп:** Занесён правильно; в дизайн-паке скоупить как ТОНКУЮ CLI-обёртку над уже построенным (правка двух окон в сиде + штатный repin), не как пайплайн-работу.