Эпизоды реальных сессий после hotfix — сторож пишет state + классификацию
на каждый промпт (verified: UUID-session state files). Данные для brain-retro
warn-only ревью.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two real bugs found via verification (hook didn't fire in live session):
1. UserPromptSubmit block had matcher:"*" — event doesn't support matcher,
non-standard block dropped (claude-code-guide authoritative). Removed →
block now {hooks:[...]} like working observer-stop-hook.
2. stdin field was event.user_prompt; Claude Code sends event.prompt.
Now reads (event.prompt || event.user_prompt) for compat.
Field-fix verified manually with real stdin shape {prompt:...} → #71 pdn-152fz.
Firing fix (matcher) NOT verifiable in-session (hooks load at session start) —
needs restart + next-turn state-file check.
NB stop-gate turn_events field also wrong (Stop sends transcript_path) — separate
follow-up, not on observation critical path (affects chain tracking only).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
UserPromptSubmit → router-prehook (classifier).
PreToolUse Edit|Write|MultiEdit|Bash → router-tool-gate (warn-only).
Stop → router-stop-gate (chain progress).
router-gate-mode.json = warn-only (outside repo, ~/.claude/runtime/).
Переключение в enforce — отдельным шагом после Checkpoint B (24ч наблюдения).
End-to-end smoke verified: «проверь пдн» → #71 pdn-152fz-audit,
warn-only пишет в stderr, не блокирует. Доменная разметка Task 1 работает.
NB активация в основной сессии: хуки в worktree-копии settings.json
версионируются; для реального наблюдения нужна либо merge ветки, либо
ручное применение к основному .claude/settings.json (warn-only безопасен).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
После каждого хода обновляет state.chainProgress по реально вызванным
скилам. chainCompleted=true когда последний шаг достигнут.
skillInvokedThisTurn флажок для PreToolUse gate.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Подкрутка classifier'а БЕЗ правки реестра (доменная разметка Task 1 сохранена):
- TASK_TYPE_KEYWORDS +командные глаголы (проверь/составь/поправь/распиши/...);
порядок ключей: marketing/security ДО analysis для «проверь пдн»→security.
- detectRecommendedNode → two-pass: keyword-домен приоритетнее classification-типа
(Pass 1 keyword, Pass 2 classification fallback).
- MICRO_KEYWORDS +увеличь/уменьши/одну строку/bump.
Accuracy regex-only: 68.3% → 80.0% (type 55%→85%, micro 95%→100%, node 55%).
Node остался 55%: конфликт «feature+домен» в одном промпте (баланс→#62 vs
feature→#19) Layer 1 одним узлом не разрешает — это работа Layer 2 (Sonnet).
Ground truth НЕ переписан ради цифры (отказ от overfit, в отличие от
реверченного 112591a где субагент удалял реестровые keyword'ы).
489/489 tools GREEN.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Snapshot "Commit:" field referenced 30b795c (dangling orphan from
amend cycle). Replaced with actual e239160a + 436284c5 (F1 fix).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spec review F1: positions 4-5 had stale numbers (#41:2 #42:2);
actual analyzer output shows #25:3, #39:3 (and #53:3 tied at pos 5).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Зафиксированы цифры дисциплины роутера на 2026-05-24 перед запуском
enforcement-хука этапа 3. Sanity-check passed: missed_before=17 ==
missed_after=17 (delta=0) после переключения источника правды на реестр.
observer-classification-map.json помечен deprecated — для удаления в этапе 4.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Auto-generated блок с разбивкой % дисциплины по типам задач,
router-step distribution + suspicious-флаг, boundaries-applied rate.
Backward-compat: блок опускается, если discipline не передан.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8 задач: baseline → таблица-замок supplier_lead_deliveries → раздача
по клиентам (LeadRouter DISTINCT ON) → удаление DuplicateDetector из
обоих джобов → замок insertOrIgnore → тесты (model-agnostic) → регрессия.
Вариант B. Заякорено на always-rub LedgerService (Спек A в origin/main).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Правило: дедуп — ответственность поставщика; Лидерра телефон не фильтрует,
берём за всё, что прислано. Защита от своих дублей — на уровне БД
(замок supplier_lead_deliveries, ключ по поставке, не по телефону).
Лимит шеринга = 3 разных клиента, одному клиенту одна копия.
Вариант B (железобетонный) утверждён на брейнсторме 23.05.2026.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
status-md-generator рендерит блок «Активные многоэтапные проекты»
из repo-local docs/observer/active-projects.md (если файл есть).
renderStatus backward-compatible: без activeProjects блок пустой.
active-projects.md — single source состояния многоэтапного router
overhaul (этап 1 ✅ закрыт, этапы 2-4 pending). Будущая сессия видит
статус в STATUS.md dashboard + memory tracker.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Структура узла (9 полей + 3 trigger типа + 3 boundary типа), status
маппинг, процесс добавления узла, auto-render, lefthook gate, cross-refs
на spec/plan/Pravila/ADR-011/router-procedure/routing-off-phase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Auto-region <!-- auto:tooling-registry-summary --> в docs/Tooling_v8_3.md
обновлён рендером из docs/registry/nodes.yaml (3 → 83 строки).
routing-off-phase auto-region остался без изменений: routing-table
выводит только classifications, а в реестре их два узла (#18 Pest + #19
Superpowers, 5 строк). Keyword-based routing — отдельная задача
(этап 3, классификатор).
Diff: +80 строк строго внутри маркеров auto-region. --check mode прошёл.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Tooling §3.5 line 332 содержит опечатку «лит» вместо «линт» —
буквальный перенос в Task 8a сделал keyword мёртвым (роутер
не сработает на «линт миграций»). Реестр приоритезирует
функциональность над faithful copy.
Tooling §3.5 будет починен отдельной задачей при следующем
auto-rerender (Task 10).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
renderAll() режим без --check переписывает файлы; с --check
возвращает exit 1 на drift (для lefthook).
Сейчас рендерит 2 региона: Tooling summary + routing-table.
Маркеры в Markdown добавим в Task 6 (без них скрипт корректно падает
с понятной ошибкой Markers not found).
Fix: entry-point guard использует fileURLToPath+resolve вместо
string-замены — совместимость с кириллическими путями (Windows quirk).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Покрытие: индексация по classification/keyword, exclude
historic/dormant из индексов, cache lifecycle, schema violation,
chain membership lookup.
Все 11 GREEN на пилотном реестре из 3 узлов.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Экспортирует loadRegistry/findByClassification/findByKeyword/
findActiveNodes/findChainsByNode + clearCache для тестов.
Кэширует в module-scope (per-process); валидирует через ajv при
загрузке (schema + ajv-formats). Keyword индексация case-insensitive
(.toLowerCase()) для последовательности с findByKeyword.
Тестов нет — Task 4.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
I-1: weight range 0-1 added to classification + file_pattern trigger
variants (раньше было только на keyword) — иначе weight=50 silent
ranking-bug в Task 3 indexByTrigger.
I-2: additionalProperties:false на 3 trigger-variant объекты — ясная
ajv-ошибка при mixed-key (keyword+classification одновременно).
I-3: additionalProperties:false на definitions.node и definitions.chain
— typo ("categori" / "keywrod") теперь reject'ится, не silently
accepted.
Smoke-проверка: 3 теста — weight=50 reject, typo categori reject, valid
accept. ajv compile OK.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Schema поддерживает: id/name/slug/category/status, триггеры трёх видов
(keyword/classification/file_pattern), границы (adr/pair), членство в
цепочках L1-L16, dormancy/deferred-статус.
README — заглушка, наполнится в Task 13.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Final-review followup. .claude/settings.json uses regex-style combined
matchers like "Edit|Write"; transcript writes per-tool PreToolUse:Edit.
Split on | when building map so per-tool counts resolve. Also sync
spec doc loadHookMap -> buildHookMap (impl name).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
aggregation-template.md gets two new sections (Hook script breakdown,
Recommended-node candidates) + paragraph in Missed Activations.
factor-analysis spec gets a v3 amendment cross-ref to the 2026-05-23 spec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Mirrors missed-activations dormancy logic (id === false strict).
First live recommended node from classification-map, else null.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>