Ratify D39.23 and issue pack-15 structure-and-form prompt: measured package split, form fixes, pair config layer, style note amendment

This commit is contained in:
Claude (backend session) 2026-07-24 23:05:39 +03:00
parent 952469b278
commit f9edd88829
5 changed files with 40 additions and 5 deletions

View file

@ -0,0 +1,29 @@
# Промт бэкенд-сессии: ПАК-15 «структура+форма» (пакетный сплит + форм-фиксы + конфиг-слой пары)
**Статус: ВЫДАН 24.07.2026, оркестратор №7. Ратификация — D39.23.** Источники: приёмочный отчёт пака-14 `docs/archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md` — приложение A (карта связности, **С ПОПРАВКОЙ ревью-шапки**: ведро «distinct/matches (8)» — греп-артефакт, кодовых ссылок 0; miner→membank реально 32/14 кодовых) и приложение B (экспорт-поверхности) + харнес-сверка (crush = провайдеры-данные и фокус-пакеты; GalTransl/AiNiee = data-мандат). Норматив: `docs/architecture/12-go-style-notes.md` §0§1 (§1 амендирован D39.23).
**Жёсткий инвариант: байт-точность.** golden байт-идентичен (`TestGoldenDeterminism`; любое изменение тест-фикстур — объяснить и доказать нейтральность капчура) · майнер-парити EXACT (`n=13618 {方源:0 蛊:1 蛊师:2 古月:22} recall 0.9655`) · wire-байты нетронуты. Каждый ЭТАП — `build/vet/test -race` + golden + парити зелёные ДО следующего. Сплит = дизайн экспорт-поверхности (капитализация = API навсегда): прил. B — отправная точка, отклонения аргументируй в отчёте. Пока пак бежит — никаких параллельных бэкенд-сессий (тронуто всё дерево pipeline).
## Онбординг
`CLAUDE.md``12-go-style-notes.md` (§0/§1) → отчёт пака-14 целиком (прил. A/B + ревью-шапка) → D39.23 в D-логе.
## Этапы (строго по порядку; каждый — верифицированный чекпойнт)
1. **Хойст базы.** `internal/text`: `NormalizeSourceKey`, `RunesEqual`, `TokenizeCyrillic` (сейчас memnorm/mempostcheck; общие для miner+membank+checks). Пакет value-типов (имя — домен, НЕ types/common/util; прил. B предлагает `internal/pipeline/model`): `Chunk`, `MinerChunk`, `SegBudget`, `Document`. Сид-типы (`SeedTerm`/`loadGlossarySeed`/`seedAlias` — майнер читает сид как GT/entity-guard) — реши дом: база или свой пакет; аргументируй.
2. **`internal/miner`** (miner*.go, mining.go — самый узкий срез: 6 внешних не-тест ссылок). Экспорт: `MineBank`, `MinerConfig`, `MinedTerm`, `Contrast`, `LoadContrast`; прячь mineDetect/proposeAliasEdges/buildPalladiusCyrSyllables/patternCandidates/emissionEligible. Импорт: lang, store, text, база.
3. **`internal/checks`** (cheapgates/checkers/sanitizer/coverage/quality/regressionguard). Экспорт: `RunCheapGates`(+Config/Result), `SanitizeOutput`(+Result), `CompileCheckers`(+Checkers); lint*-методы и dcCheckers-внутренности — прячь. Импорт: config, lang, text.
4. **`internal/membank`** (memory/memnorm/mempostcheck/memseed/seeding — минус то, что ушло в text/базу). Экспорт: `MemoryBank`, `Select`, `Version`/`BaseVersion`, `MemoryEntry`, инъекц-рендереры; Aho-Corasick/pickedEntry — прячь.
5. **`internal/chunk`** (chunker/ingest). Экспорт: `SplitChunks`, `Ingest`, `IngestEncoded`.
Драйвер (runner/bookrun/waverun/wave/stagerun/chunkrun/resume) + инфра (snapshot/render/export/status/banknote/disposition/escalation) ОСТАЮТСЯ `internal/pipeline` — композит-корень (аналог crush `internal/agent`).
6. **Форм-фиксы (в новых домах, после переезда):** `Export()` — декомпозиция + ОБЩАЯ derivation member-drop со `status.resolveChunkState` (сейчас байт-согласие держится комментарием); `memory.go` «sticky»-сентинел → типизированное поле; `RequestHash` 13 позиционных параметров → struct; `resolveChunkState` 5-кортеж → struct.
7. **Конфиг-слой пары:** `configs/pairs/<пара>.yaml` — пар-калибровки (fertility, len_ratio_bounds) + роль→промпт; ран-конфиги держат только ран-скоупное (стадии/модели/температуры/бюджеты/гейты) + осознанный оверрайд (`prompt_override` для армов). Промпт-резолв — КОНВЕНЦИЕЙ `prompts/<пара>/<роль>.md` из `Book.LangPair()`+роли стадии; `prompts:`-мапы из конфигов удаляются; fail-loud сохраняется (нет файла пары → громкое падение на загрузке, называя путь). Wire-нейтрально: байты промптов не двигаются, SHA тот же; `prompt_version` остаётся полем стадии.
8. **Остаток пака-14 (ревью-шапка отчёта):** два теста Палладия (unknown-category-толерантность парсера · required-fail через validate()) · fail-loud оверлея УРОВНЕМ ВЫШЕ: пропавший/опечатанный `overlayRoot` = ОШИБКА (явный opt-in владельца), чужой файл/подкаталог на root-уровне overlay = ошибка, категория-опечатка ВНУТРИ overlay-файла = детект (механизм предложи: сверка с сетом категорий, которые реально потребляются) · `unionStringMap`: коллизия ключа base↔overlay = ГРОМКАЯ ошибка (override НЕ ратифицирован — D39.23; пересмотр когда книге реально понадобится) · empty-probe гард `lintMagnitudeScale` (пустой fire/veto-word → чекер инертен, не спурит) · терминаторы `chunker.go:562/573` + `coverage.go:51/62` → та же точка истины, что у майнера (дизайн: pack-терминаторы + generic ASCII-сет кода; байт-нейтрально) · `第` `ingest.go:128` → cjk-section (новая категория chapter_marker). Опционально, если дёшево: sourceLang-тред для `sourceAbbrevs` (18 колл-сайтов SplitChunks).
## НЕ делать
Слой-3 diff-редактор · isRuTarget/'ru'-тред таргета (едет с каналом B) · translit-interj (DEFER D39.16) · редизайн алгоритмов · дробление сверх ратифицированного (4 подсистемы + база; crush-масштаб НЕ эмулируем) · расширение скоупа без санкции оркестратора (пинг через владельца).
## Приёмка (ревью исполнением, мандат 12.07)
`go build/vet/test -race` на каждом этапе · golden байт-идентичен · парити EXACT · **import-граф**: подсистемы не импортируют ни друг друга, ни pipeline (только lang/store/config/text/база; проверь `go list -deps` исполнением) · **API-отчёт**: каждый экспортированный символ с причиной (почему не спрятан) · адверсариальный селф-ревью (линзы: байт-точность / общность §0 / API-минимализм / отсутствие циклов). `git mv` допустим (он стейджит — оркестратор учитывает при лендинге). Отчёт: `docs/archive/reports/PACK15_STRUCTURE_REPORT_<дата>.md`. Сессия НЕ коммитит.

View file

@ -11,7 +11,7 @@
## Оркестратор №7 — ПАК-14 «генеральность-пасс» ПРИНЯТ (воркфлоу 11 линз + доприёмка 4) и залендён; пак-15 «структура+форма» готовится, 24.07
Сессия исполнила 9 пунктов + оба аддендума + **расширение по директиве владельца «full data-out»** (детект-регексы чекеров/гейтов/санитайзера → данные, не только lookup-таблицы; `checkers_zh_ru.go` → пар-агностичный `checkers.go`). Два дома данных: `configs/langpacks/`+книго-overlay (`book.yaml: langpack_extend`, аддитивный union, fail-loud на чужой файл) для пар/книго-данных · `internal/lang/data/` go:embed для того, что нужно движку БЕЗ пака (golden ja→ru без langpack это доказал: refusal/CJK-нарезка/→ru-инъекция). **Приёмка исполнением:** 0 блокеров; байт-сверка каждого переноса против HEAD; парити EXACT (`{方源:0 蛊:1 蛊师:2 古月:22}`, 古月 теперь из baseoverlay — общий zh-пак чист); golden байт-нетронут; тесты грузят фикстуры из реального пака. Блокер доприёмки (аддендум parsePalladius не был исполнен) закрыт дельтой: generic-парсер категорий + один типизированный `Pack.Palladius`, required валидирует потребитель; + c2-segmentation явно, packAlgoVersion v2. **Поправка отчёту (ревью-шапка):** Приложение A «distinct/matches 8» — греп-артефакт (0 кодовых ссылок; 35→32/14), хойст-вывод не задет. **Гигиена-инцидент мой:** `77dd9b8` утащил staged `git mv` промптов сессии (git commit коммитит весь индекс) — одна неконсистентная bisect-точка, вылечена этим лендингом; правило: перед лендинг-коммитом `git diff --cached`. Прод-overlay 古月 подключён в оба стендовых book.yaml. **Пак-15 (готовится):** хойст `internal/text`+value-типов → сплит miner/checks/membank/chunk (карта связности+экспорт-поверхности = приложения A/B отчёта пака-14, с моей поправкой) + форм-фиксы Export/RequestHash/resolveChunkState + конфиг-слой пары (пар-калибровки из ран-конфигов, промпт-резолв конвенцией) + перенесённый остаток (тесты Палладия · fail-loud оверлея · unionStringMap-семантика · empty-probe гард · терминаторы chunker/coverage · `第`).
Сессия исполнила 9 пунктов + оба аддендума + **расширение по директиве владельца «full data-out»** (детект-регексы чекеров/гейтов/санитайзера → данные, не только lookup-таблицы; `checkers_zh_ru.go` → пар-агностичный `checkers.go`). Два дома данных: `configs/langpacks/`+книго-overlay (`book.yaml: langpack_extend`, аддитивный union, fail-loud на чужой файл) для пар/книго-данных · `internal/lang/data/` go:embed для того, что нужно движку БЕЗ пака (golden ja→ru без langpack это доказал: refusal/CJK-нарезка/→ru-инъекция). **Приёмка исполнением:** 0 блокеров; байт-сверка каждого переноса против HEAD; парити EXACT (`{方源:0 蛊:1 蛊师:2 古月:22}`, 古月 теперь из baseoverlay — общий zh-пак чист); golden байт-нетронут; тесты грузят фикстуры из реального пака. Блокер доприёмки (аддендум parsePalladius не был исполнен) закрыт дельтой: generic-парсер категорий + один типизированный `Pack.Palladius`, required валидирует потребитель; + c2-segmentation явно, packAlgoVersion v2. **Поправка отчёту (ревью-шапка):** Приложение A «distinct/matches 8» — греп-артефакт (0 кодовых ссылок; 35→32/14), хойст-вывод не задет. **Гигиена-инцидент мой:** `77dd9b8` утащил staged `git mv` промптов сессии (git commit коммитит весь индекс) — одна неконсистентная bisect-точка, вылечена этим лендингом; правило: перед лендинг-коммитом `git diff --cached`. Прод-overlay 古月 подключён в оба стендовых book.yaml. **Пак-15 (промт ВЫДАН — `BACKEND_PACK15_STRUCTURE_SESSION_PROMPT.md`, ратификация D39.23, §1 норматива амендирован):** хойст `internal/text`+value-типов → сплит miner/checks/membank/chunk (карта связности+экспорт-поверхности = приложения A/B отчёта пака-14, с моей поправкой) + форм-фиксы Export/RequestHash/resolveChunkState + конфиг-слой пары (пар-калибровки из ран-конфигов, промпт-резолв конвенцией) + перенесённый остаток (тесты Палладия · fail-loud оверлея · unionStringMap-семантика · empty-probe гард · терминаторы chunker/coverage · `第`).
## Оркестратор №7 — research/22 (доменные харнессы) ПРИНЯТ и залендён; вердикт: калибрующий, не переворачивающий, 24.07

View file

@ -16,7 +16,7 @@
- `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).
- `research/` — фактура исследований 0405.07: `0110` базовые, `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) — **читай баннер прежде содержимого**.
- `PROGRESS.md`**журнал** (CURRENT-STATE сверху, ниже хронология; НЕ источник решений).
- **Активные хендофф-промты (пост-пак-14, 24.07):** [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **Паки 12/13/14 ЗАЛЕНДЕНЫ 24.07** (`7fe0a5b`/`2f91b04`/пак-14 — приёмка воркфлоу-линзами; отчёт пака-14 с ревью-шапкой — [`archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md`](archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md); норматив общности — [`architecture/12-go-style-notes.md`](architecture/12-go-style-notes.md)). Дальше: **пак-15 «структура+форма»** (хойст text/model-базы → сплит miner/checks/membank/chunk + Export/RequestHash/resolveChunkState + конфиг-слой пары; промт готовится) → пак-16 = канал B вживую / слой 3 diff-based редактор (прецедент research/22) → голос/состояние D21 + C2/C3. Закрытые — в `archive/prompts/`.
- **Активные хендофф-промты (пост-пак-14, 24.07):** [`BACKEND_PACK15_STRUCTURE_SESSION_PROMPT.md`](BACKEND_PACK15_STRUCTURE_SESSION_PROMPT.md) (**пак-15 «структура+форма» — ТЕКУЩИЙ**, D39.23: хойст text/value-базы → сплит miner/checks/membank/chunk + форм-фиксы + конфиг-слой пары; байт-точность+парити EXACT) · [`ORCHESTRATOR_SESSION_PROMPT.md`](ORCHESTRATOR_SESSION_PROMPT.md) (хендофф №5) · [`POLYGON_PACKAGE4_SESSION_PROMPT.md`](POLYGON_PACKAGE4_SESSION_PROMPT.md) (residual пилот/18+/echo). **Паки 12/13/14 ЗАЛЕНДЕНЫ 24.07** (`7fe0a5b`/`2f91b04`/пак-14 — приёмка воркфлоу-линзами; отчёт пака-14 с ревью-шапкой — [`archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md`](archive/reports/PACK14_GENERALITY_REPORT_2026-07-24.md); норматив общности — [`architecture/12-go-style-notes.md`](architecture/12-go-style-notes.md)). Дальше: **пак-15 «структура+форма»** (промт выдан, D39.23) → пак-16 = канал B вживую / слой 3 diff-based редактор (прецедент research/22) → голос/состояние D21 + C2/C3. Закрытые — в `archive/prompts/`.
- `archive/` — закрытые сессионные промты (только история, инструкции оттуда не исполнять).
## Статус (2026-07-23, пост-D39.20 — механизация выпускного качества)

File diff suppressed because one or more lines are too long

View file

@ -13,7 +13,7 @@
## §1. Go-ответы (только то, о чём реально спорим)
- **`_test.go` рядом с кодом — не бардак, а требование тулчейна**: `go test` собирает тесты только из каталога пакета; отдельных `tests/`-деревьев в Go не существует.
- **~50 файлов в `internal/pipeline` — норма, не смелл.** Google явно: число/размер файлов — НЕ критерий сплита («maintainers can move code between files without affecting callers»; эталон — stdlib `bytes`). Единственный легитимный триггер сплита — концептуально отдельная подсистема со своим узким API, которую не импортируют всегда вместе с pipeline. Дробление «ради размера» рождает util-пакеты и течёт деталями в публичные API.
- **Число/размер файлов — НЕ критерий сплита** (Google: «maintainers can move code between files without affecting callers»; эталон — stdlib `bytes`). Легитимный триггер — концептуально отдельная подсистема со своим узким API. **Этот тест прогнан против фактуры (пак-14, прил. A: связность измерена) — его проходят miner/checks/membank/chunk → сплит РАТИФИЦИРОВАН (D39.23, пак-15): сначала хойст общего субстрата (`internal/text` + value-типы), затем подсистемы; драйвер остаётся композит-корнем `internal/pipeline`.** Дробление «ради размера» по-прежнему запрещено (util-пакеты, течь деталей в API); crush-масштаб (~71 пакет) не эмулируем — сплит только по измеренному узкому API.
- **Никаких пакетов `util`/`common`/`helpers`/`types`** — имя пакета обязано нести домен (Decisions/CodeReviewComments).
- **«Least mechanism»** (Guide): сперва slice/map/struct, потом stdlib, только потом своё/зависимость; это же — мера сдержанности к дженерикам и абстракциям «на вырост».
- **Интерфейс объявляет потребитель, не реализация**; не заводить интерфейсы заранее «для моков» (CodeReviewComments) — наш `BuildClient`/адаптеры уже так устроены, держать линию.