Actualize the polygon README and the D15.2 spec status: tmctl export extraction rule, superseded editor caveat, judge EOL residual, deferred-implementation banner

This commit is contained in:
Claude (backend session) 2026-07-17 03:20:53 +03:00
parent fd4f93947c
commit 68032f7565
2 changed files with 15 additions and 7 deletions

View file

@ -1,7 +1,12 @@
# D15.2 — Спека v3.1: content-addressed переиспользование чекпоинтов (дизайн, НЕ код)
**Статус:** **v3.1 — реализация РАЗБЛОКИРОВАНА (D30.9, промт `BACKEND_D152_SESSION_PROMPT.md`,
этап Б).** v3.1 закрывает два ОБЯЗАТЕЛЬНЫХ амендмента D22.2 (§0-бис ниже) + пре-имплементационные
**Статус (актуализация 17.07, D39.6-гигиена):** **v3.1 = дизайн-оф-рекорд; реализация ОТЛОЖЕНА**
промт-эры D30.9 (`BACKEND_D152_SESSION_PROMPT.md`) superseded арх-ресетом D39; этап Б (three-hash/
guard_hash/verdict-split/fast-path v2) в ledger-очереди ПОСЛЕ слоя 1 (нарезка, гейтится exp15) —
resume-путь денежно-критичен, реализация всё-или-ничего. ⚠ Скоуп спеки = ТОЛЬКО content-addressed
resume: `tmctl export` сюда НЕ входит и его READ-половина уже ПОСТРОЕНА отдельно (D39.5,
`internal/pipeline/export.go`); annotation/override-половина экспорта — отдельный отложенный кусок.
Исходный статус v3.1 (для истории):** v3.1 закрывает два ОБЯЗАТЕЛЬНЫХ амендмента D22.2 (§0-бис ниже) + пре-имплементационные
пункты (axis-тест, паритетные не-цели §8, освежение line-refs). Зона: спека в `backend/docs/`
(зона бэкенда); при лендинге оркестратор сворачивает её в
`docs/architecture/03-implementation-notes.md` новым разделом.

View file

@ -2,18 +2,20 @@
Зона сессии «Полигон»: эмпирическая валидация допущений архитектуры (мерить, а не верить). Отчёты — `docs/experiments/NN-*.md` (методика + цифры + честные ограничения). `backend/` только читать; расхождения с architecture/research — пингом оркестратору в `docs/PROGRESS.md`. **`.env` не читать; `data/refusal_corpus/*` не открывать без прямой задачи владельца.**
> **Очередь полигона (пост-D39.6, 17.07):** exp15 сегментация-эмпирика — промт `docs/POLYGON_SEGMENTATION_EMPIRICS_SESSION_PROMPT.md` ВЫДАН, ждёт запуска (фриз = первый коммит; скрипты — семьёй `eval/exp15/` по конвенции D38.2) → полигон-стадия банк-майнинга (research/20 §D, отдельный промт ПОСЛЕ exp15). Residual-трекер пилота/18+/echo — `docs/POLYGON_PACKAGE4_SESSION_PROMPT.md` (отложен).
## Карта
| Скрипт | Эксперимент | Заметки |
|---|---|---|
| `refusal_bench.py` | exp02; его `split_sentences`/`classify_output` = **приёмочный оракул** coverage-гейта Go (паритет закреплён Go-тестом; любое изменение — Python-first, лок-степ) | `run_refusal.sh` — однокоманда |
| `token_calc.py` | exp01 токен-калибровка (r-множители) | токенизаторы в `tokenizers/` |
| `editor_bench.py` + `build_editor_artifact.py` | exp04 бейк-офф редакторов | ✅ слепота починена (D13.5): рандомизация меток ПО ФРАГМЕНТУ (соль), ключ+цена в отдельном `--key` файле. Выбор grok-4.3 провизорен — exp04 §Оговорки |
| `editor_bench.py` + `build_editor_artifact.py` | exp04 бейк-офф редакторов | ✅ слепота починена (D13.5): рандомизация меток ПО ФРАГМЕНТУ (соль), ключ+цена в отдельном `--key` файле. ⚠ Выбор grok-4.3 SUPERSEDED D30.1: боевой редактор = БИЛИНГВ glm-5, grok reasoning-off из редакторских ролей снят (no-op); exp04-ранг был на дефолт-reasoning |
| `coverage_precision.py`, `content_filter_probe.py` | exp07 precision гейта (0 FP/57) | |
| `cost_model_v2.py` | exp08 COGS (~$0.69/ранобэ) | цены датировать и перепроверять |
| `extract_bench.py` | exp06 экстракция терминов (спот=локаль/рендер=облако) | health-верификация каждого ответа — образец |
| `cost_model_v2.py` | exp08 COGS (~$0.69/ранобэ — ДО-флиповый; после флипа D1 билингв ≈$0.85, D30.4) | цены датировать и перепроверять |
| `extract_bench.py` | exp06 экстракция терминов (спот=локаль/рендер=облако) | health-верификация каждого ответа — образец. ⚠ recall 0.981.0 мерен на PD-классике; вебновелл-ре-замер = research/20 §D-A6 (полигон-стадия банк-майнинга) |
| `retrieval_bench.py` | эмбеддинг-бенч памяти (bge-m3 дефолт) | |
| `pilot/declmetric.py`, `pilot/memory_eval.py`, `pilot/kana_precision.py` | харнесс пилота Ф2.5 (exp09) | ✅ починен (D13.5): эхо-контроль, ПОЛНЫЕ выходы, **fidelity-ось** (cross-family судья), M0M3, Go-синк 7 расхождений (self-test+адверсариально verified). `--self-test`/`--dry-run` без API. Инъекция = зеркало `memory.go` — синк с Go v3 выполнен (пакет №2: suppressUnboundedPhonetic + апостроф-фолд, adversarial parity); при расхождении верить Go. `kana_traps.json`+`trad2simp.txt` (508, hash-синк) |
| `pilot/declmetric.py`, `pilot/memory_eval.py`, `pilot/kana_precision.py` | харнесс пилота Ф2.5 (exp09) | ✅ починен (D13.5): эхо-контроль, ПОЛНЫЕ выходы, **fidelity-ось** (cross-family судья), M0M3, Go-синк 7 расхождений (self-test+адверсариально verified). `--self-test`/`--dry-run` без API. ⚠ судья-дефолт `memory_eval --judge` = `gemini-2.5-flash` (EOL 16.10.2026, research/15-фактчек) — мигрировать слаг при следующем прогоне (residual POLYGON_PACKAGE4). Инъекция = зеркало `memory.go` — синк с Go v3 выполнен (пакет №2: suppressUnboundedPhonetic + апостроф-фолд, adversarial parity); при расхождении верить Go. `kana_traps.json`+`trad2simp.txt` (508, hash-синк) |
| `webnovel_slice.py` | добор вне претрейна (r-коэф/эхо/coverage-precision) | одна команда по появлению `data/samples/webnovel/<lang>/*.txt`; блокируется корпусом graceful |
| `adaptive_*.py` | research/14 пробы (гибрид отклонён) | индикативные, не решения |
| `memory_hotpath.py` | УСТАРЕЛ (контракт до cc57c7b) — не переиспользовать | актуальное зеркало — `pilot/memory_eval.py` |
@ -50,7 +52,8 @@
4. **LLM-судьи:** ≤23 семейства, 11+ повторов со свапом позиций, Bradley-Terry/медиана, судья не судит выходы своего семейства (D13.3); κ против человеческого IAA, не «средняя корреляция».
5. Env: `eval/.venv` (torch-cpu, sentence-transformers, openai, dotenv, pymorphy3); ключи скрипты читают из `eval/.env` сами. Стенд: GTX 1070 8GB — модель полигона `qwen3-abliterated:30b-a3b` в ollama не выселять без нужды; **localhost из-под прокси даёт 403** — для локальных вызовов no-proxy.
6. `data/` в .gitignore (коммитится только код) — критичные результаты дублируй цифрами в `docs/experiments/`.
7. **Аномалия провайдера ≠ повод гадать:** странный отказ (интермиттентный 404/5xx, новый `finish_reason`, молча игнорируемые параметры) → сначала официальная дока вендора (deprecations/changelog/status) + свежий /models живьём, потом диагноз; в отчёт оба слоя — наблюдение И вендор-факт с датой/URL. Урок: 404-флейки gemini-2.5-flash оказались предвестником EOL всей 2.5-серии 16.10.2026 (research/15 → фактчек 10.07; правило — шапка `00-provider-quirks.md`).
7. **Экстракция прод-выходов — ТОЛЬКО через `tmctl export` (D39.5, инвариант №8 backend/README):** сырое чтение чекпоинтов store (records.json-стиль) отдаёт НЕнормализованные байты (без export-contract слоя) и молча-неполную книгу (без manifest-join/drift-гарда). `--plaintext` для глаз, дефолтный JSON для скриптов. Прежний путь `final_hash→response_text` — только для форензики сырья, не для оценки качества.
8. **Аномалия провайдера ≠ повод гадать:** странный отказ (интермиттентный 404/5xx, новый `finish_reason`, молча игнорируемые параметры) → сначала официальная дока вендора (deprecations/changelog/status) + свежий /models живьём, потом диагноз; в отчёт оба слоя — наблюдение И вендор-факт с датой/URL. Урок: 404-флейки gemini-2.5-flash оказались предвестником EOL всей 2.5-серии 16.10.2026 (research/15 → фактчек 10.07; правило — шапка `00-provider-quirks.md`).
## Доступные ключи от моделей
DEEPSEEK_API_KEY, ZAI_API_KEY, KIMI_API_KEY, OPENAI_API_KEY, GEMINI_API_KEY, XAI_API_KEY, MISTRAL_API_KEY