From 2b45da0e982b38cfbd804dce0b72073dd2e71637 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 23 May 2026 13:58:41 +0300 Subject: [PATCH] =?UTF-8?q?docs(spec):=20router=20overhaul=20=E2=80=94=20?= =?UTF-8?q?=D1=8D=D1=82=D0=B0=D0=BF=202=20=D1=83=D0=BF=D1=80=D0=BE=D1=89?= =?UTF-8?q?=D1=91=D0=BD=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BB=D0=BB=D0=B5=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=87=D0=B8=D0=BD=D0=BA=D0=B8=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Параллельная сессия 23.05 13:16-13:38 закрыла 60% этапа 2 через коммиты 3baeaa12/b685bf9b/04a9c12b (spec observer-parser-skill-hook-expand v3): - candidates_considered whitelist filter (KNOWN_NODES) - schema_version 2 → 3 forward-only - primary_rationale.recommended_node (для direct эпизодов) - events[].hook_fired.scripts (reverse-lookup settings.json) - analyzer accepts schema >=2 (v2+v3 mix) + recommended_node_for_direct ось Скорректирован этап 2 spec — отмечено что сделано, оставшаяся работа: disciplinePercentByClassification/routerStepReached/boundariesAppliedRate срезы analyzer, переключение missed-activations на реестр из этапа 1, блок "Метрики дисциплины" в STATUS.md, baseline snapshot. План этапа 1 (реестр) — без изменений, парсер не задействует. Co-Authored-By: Claude Opus 4.7 (1M context) --- ...05-23-router-discipline-overhaul-design.md | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md b/docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md index 52cdd879..2398676a 100644 --- a/docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md +++ b/docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md @@ -136,15 +136,23 @@ ### Этап 2 — Измерения (baseline до enforcement) -**Цель:** починить парсер + добавить метрики, получить **honest «точку До»** дисциплины. +**Цель:** добавить метрики разбивки дисциплины по типам задач, получить **honest «точку До»** дисциплины. -**Артефакты:** +**Что УЖЕ сделано параллельной сессией 23.05 (коммиты `4665c537`, `6192d395`, `6a9df652` — spec `2026-05-23-observer-parser-skill-hook-expand-design.md`):** + +- ✅ Fix `tools/observer-transcript-parser.mjs` — `candidates_considered` whitelist filter (`tools/observer-known-nodes.txt` + `observer-chain-map.json`); проза/процедуры/код отсекаются. Forward-only. +- ✅ Schema v3 — `schema_version` 2 → 3. Старые v2-эпизоды не правим (append-only). +- ✅ `primary_rationale.recommended_node` — поле есть в v3, заполняется из `observer-classification-map.json` (этап 2 переключит на реестр). +- ✅ `events[].hook_fired.scripts` — reverse-lookup имени скрипта из `.claude/settings.json` + user. +- ✅ `tools/brain-retro-analyzer.mjs` accepts schema ≥2 (v2+v3 mix); добавлена `recommended_node_for_direct` факторная ось. + +**Что осталось делать в этапе 2:** -- **Fix `tools/observer-transcript-parser.mjs`** — `candidates_considered` сейчас заполняется булитами ответа. Заменить на честное поле: либо «узлы, реально матченные триггерами шага 3 роутера», либо пустой массив. Forward-only — старые v2-эпизоды не правим, добавляем `schema_version: 3` маркер. - **`tools/brain-retro-analyzer.mjs`** — новые срезы: - `disciplinePercentByClassification` — % эпизодов с матченным триггером, разбивка по `task_classification`. - `routerStepReached` — на каком шаге роутера эпизод действительно остановился (если step=1 для всех — это баг парсера, отметить). - `boundariesAppliedRate` — % эпизодов с непустым `boundaries_applied`. +- **`tools/missed-activations.mjs`** — переключить с `observer-classification-map.json` на реестр из этапа 1 (`docs/registry/nodes.yaml`). Маппинг classification → recommended_nodes теперь автоматический через `nodes[i].triggers[].classification`. - **`docs/observer/STATUS.md` generator** — добавить блок «Метрики дисциплины»: ``` @@ -156,15 +164,14 @@ | analysis | 8 | 50% | 50% | ``` -- **`tools/missed-activations.mjs`** — обновить, чтобы использовать реестр из этапа 1 (а не текущий `observer-classification-map.json`). Маппинг classification → recommended_nodes теперь автоматический через `nodes[i].triggers[].classification`. - **Baseline snapshot** в `docs/observer/baselines/2026-XX-XX-pre-enforcement.md` — фиксируем цифры «до» (% дисциплины, missed activations, % regulated, % границ применено), чтобы потом сравнить. **Definition of done:** -- Парсер `candidates_considered` пишет имена узлов (или `[]`), не булиты ответа. Проверка: ни в одном новом эпизоде нет строк длиннее 50 символов в `candidates_considered`. - STATUS.md показывает разбивку дисциплины по типам задач. - Baseline snapshot закоммичен. -- Существующие тесты `brain-retro-analyzer.test.mjs` + новые срезы — GREEN. +- Существующие тесты `brain-retro-analyzer.test.mjs` + новые срезы (`disciplinePercentByClassification`/`routerStepReached`/`boundariesAppliedRate`) — GREEN. +- `missed-activations.mjs` читает реестр из этапа 1; результат на тех же данных не должен сильно дрейфить от текущего (sanity check). Тесты GREEN. **Точка остановки:** ты видишь цифры «27% дисциплины, 0% на feature», говоришь «продолжаем» → этап 3.