Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
16 KiB
Каталог данных «мозга» Лидерры
Полный перечень всего, что новый «мозг» (наблюдатель + защиты router-gate v4) способен фиксировать: журнал эпизодов, числовые параметры/счётчики и все оси для факторного анализа.
Статус проверки: разделы A–E сверены по исходному коду tools/ (31.05.2026). Раздел F сверен по коду хуков. Все цитаты — file:line от корня репозитория.
A. Эпизод журнала — docs/observer/episodes-YYYY-MM.jsonl (схема v4.4, schema_minor 4)
Один эпизод = один цикл «промпт заказчика → ответ Claude». Append-only, по строке на эпизод. ПДн вырезаются до записи (observer-pii-filter.mjs). Сборка — observer-transcript-parser.mjs:888 (parseTranscript).
A.1. Идентификация и время
| Поле | Тип / значения | Смысл |
|---|---|---|
schema_version |
4 |
версия схемы |
schema_minor |
3 |
подверсия |
task_id / task_ref |
string (sessionId) | привязка к сессии |
timestamps.started_at / ended_at |
ISO | начало/конец хода |
A.2. Кто и что выбрал
| Поле | Значения | Смысл |
|---|---|---|
path_type |
regulated / improvised |
был ли вызван навык superpowers |
decision_provenance.kind |
autonomous / user_directed_method / user_chose_from_options |
кто выбрал маршрут — Claude сам / навязан заказчиком / заказчик выбрал из предложенного |
decision_provenance.claude_would_have_chosen |
string / null | контрфактуал — что выбрал бы Claude сам |
A.3. Исход
| Поле | Значения | Смысл |
|---|---|---|
outcome |
при записи unknown |
исход (выводится позже, см. C) |
outcome_reviewed |
null → метка | исход по ревью /brain-retro |
outcome_reviewed_source |
null / source | кто проставил ревью |
A.4. Сигнал заказчика
| Поле | Значения | Смысл |
|---|---|---|
prompt_signal |
correction / approval / new_task / neutral |
тон следующего/текущего промпта |
prompt_embedding_base64 |
null → вектор | смысловой вектор первого промпта (дозаполняется асинхронно) |
A.5. Обстановка (environment)
| Поле | Значения | Смысл |
|---|---|---|
economy_level |
0 / 5 / 100 / null | режим экономии |
model |
имя модели | модель контроллера |
post_compaction |
bool | был ли сжат контекст до хода |
session_turn |
int | номер хода после последнего сжатия |
parallel_session |
bool | признак второй активной сессии |
classifier_model |
имя / null | модель LLM-классификатора |
A.6. Размер (task_size)
tool_calls (всего вызовов инструментов) · files_touched (уникальных файлов) · files[] (список путей). — observer-transcript-parser.mjs:423.
A.7. Стоимость и токены (task_cost)
observer-transcript-parser.mjs:472. Базовые: input_tokens · output_tokens · cache_read_input_tokens · cache_creation_input_tokens · web_search_requests · web_fetch_requests · iterations (детектор extended-thinking).
Слой LLM-агентов (дозаполняется): classifier_input_tokens · classifier_output_tokens · self_assessment_input_tokens · self_assessment_output_tokens · reviewer_input_tokens · reviewer_output_tokens · reviewer_subagent_usd · reviewer_direct_fallback_usd · judge_spend_usd (✅ NEW — judge_calls × JUDGE_PER_CALL_USD).
A.8. Мета (task_meta)
prompt_length_chars · mcp_servers_used[] · file_type_distribution по корзинам src / test / config / spec / norm / data / other (classifyFilePath — observer-transcript-parser.mjs:358).
A.9. Классификатор (classifier_output) + degraded_mode
observer-state-enricher.mjs:52. task_type · recommended_node · recommended_chain · recommended_chain_id · no_skill_found · source (llm/regex/prefilter/cache) · reasoning (≤600 симв.) · confidence · latency_ms · retry_count_internal · llm_error · alternatives_considered[] (топ-3). Отдельно degraded_mode (bool, LLM→regex fallback).
A.10. Рассуждение маршрута (primary_rationale)
step · node_chosen · chain_ref · triggers_matched[] · candidates_considered[] · boundaries_applied[] · hard_floor{invoked, rules[]} · task_classification · recommended_node · recommended_chain · chain_progress · chain_completed.
task_classification — 12 значений (observer-transcript-parser.mjs:208): memory-sync, regulatory-bump, planning, release, refactor, bugfix, feature, docs, analysis, cleanup, monitoring, question, other.
A.11. События (events[]) — 11 видов
skill_invoked (skill) · tool_summary (counts) · error (tool, summary) · hook_fired (counts, scripts, errors) · interrupt · retry · time_burn (ход > 15 мин) · parse_gap (> 10% битых строк) · unrecovered_error (ход кончился на ошибке) · ask_user_question (question_count, answer_kind: option/custom/no_answer) · subagent_invoked (subagent_type, model, description).
A.12. Сигналы защит router-gate v4 (v4_signals) — ✅ NEW (schema_minor 4)
Поднимаются в эпизод ридером observer-v4-signals.mjs по окну хода [started_at, ended_at]: rationalization_flag_count (число пойманных самооправданий в окне) · judge_verdict (YES/NO/block/null — последний вердикт судьи в окне) · safe_baseline_action (allow/soft_flag/hard_block/null — худшее действие safe-baseline в окне) · judge_calls (кумулятивно за сессию из бюджета судьи).
B. Факторные оси — FACTOR_FNS (brain-retro-analyzer.mjs:326) — 27 осей + chain_ref
Каждая ось раскладывает эпизоды по корзинам и строит матрицу «значение фактора × распределение исходов» (buildFactorMatrix, brain-retro-analyzer.mjs:384).
Pass 0 (из ядра эпизода): decision_provenance · economy_level · model · post_compaction · session_segment_turn · parallel_session · task_size · node_chosen · task_classification · recommended_node_for_direct.
Pass 1 (дешёвые оси из v4): prompt_signal · classifier_source · degraded_mode · path_type · retry_count · error_count · hard_floor_invoked · iterations_bucket.
Pass 2 (метрики классификатора): latency_bucket (fast<500 / medium<2000 / slow<10000 / very_slow) · error_type.
Pass 3 (динамика): prompt_length_bucket (short<100 / medium<1000 / long<2500 / huge) · time_of_day_bucket (night/morning/afternoon/evening, UTC) · day_of_week · inter_prompt_gap_bucket (<1m / 1-10m / 10-60m / 60m+) · mcp_server_used (any/none) · file_type_main · skill_invocations_bucket (0/1/2+) · subagent_spawns_bucket (0/1/2+).
Pass 4 (семантика): similar_past_outcome_majority (исход большинства соседей по смысловому вектору; no_neighbors если вектора нет).
Pass 5 (✅ NEW — сигналы router-gate v4): rationalization_flag_count (0/1/2+) · judge_verdict (YES/NO/block/null) · safe_baseline_action (allow/soft_flag/hard_block/null) · judge_calls_bucket (0 / 1-9 / 10+).
Отдельно: chain_ref — мульти-значный (эпизод считается по разу на каждую цепочку).
C. Вывод исхода — inferOutcome (brain-retro-analyzer.mjs:95) — 5 меток
blocked— ход кончился на неисправленной ошибке (unrecovered_error).rework— следующий эпизод имеетprompt_signal = correction.success— следующий =approvalилиnew_task.soft_success— следующий =neutral(тихий успех).unknown— следующего эпизода ещё нет.
D. Аналитические срезы (Cuts) /brain-retro (brain-retro-analyzer.mjs)
| Срез | Функция | Что агрегирует |
|---|---|---|
| Факторная матрица | buildFactorMatrix |
27 осей × распределение исходов |
| Cut 8 — Class × canon coverage | buildClassCanonCoverage:448 |
по классу задачи: count, канон-узлы, как часто роутер рекомендовал, что взял Claude, попало ли в канон, rework |
| Cut 9 — Router vs Opus | buildRouterVsOpus:498 |
расхождение роутера и Opus-ревьюера (3 секции) |
| Cut 10 — Chain-ignore breakdown | buildChainIgnoreBreakdown:559 |
% игнора цепочек + rework-rate по длине (1 / 2 / 3+) |
| Cut 11 — Chain-hook effectiveness | analyzeChainHookEffectiveness:36 + buildChainHookEffectiveness:59 |
исходы срабатывания chain-хука по ledger |
| Router-gate hook effectiveness | buildRouterGateHookEffectiveness:617 |
эффективность router-gate |
| Self-fabrication signals | buildSelfFabricationSignals:643 |
признаки фейковых результатов |
E. Числовые счётчики и деньги (вне эпизода)
E.1. ~/.claude/runtime/cost-daily.json (per-date)
cost-aggregator.mjs:13. Поля: classifier_usd · self_assessment_usd · reviewer_subagent_usd · reviewer_direct_fallback_usd · self_retrospect_usd · total_usd · episode_count.
E.2. PRICING (cost-pricing.mjs)
Sonnet — $3/Mtok вход, $15/Mtok выход. Opus — $15/Mtok вход, $75/Mtok выход.
E.3. ~/.claude/runtime/hook-outcomes.jsonl
6 корзин исхода хука (classifyOutcome): blocked / passed-with-skill / passed-inline-override / passed-global-override / passed-short-chain / passed-no-mutating. Строка: rule, outcome, sessionId, timestamp.
E.4. ~/.claude/runtime/override-usage.jsonl
Лог override-фраз. Порог 5/день на фразу (6-я блокируется enforce-override-limit). Байпас — фраза «лимит снят».
E.5. Контролёр C5 (observer-coverage-checker.mjs) — warn-only
coverage (хук зарегистрирован, но 0 эпизодов за месяц) · registration (Stop-хук + post-commit на месте) · missed.totalMissed (промахи активации узлов, missed-activations.mjs).
E.6. Три счётчика в docs/observer/
.pii-counters.json (сколько ПДн вырезано) · .read-counter.json (когда читали файлы наблюдателя; алерт через 54 недели тишины) · .self-retrospect-counter.json (episodes_since_last, порог 50 → предложить саморазбор).
F. Сигналы новых защит router-gate v4
Обновление 31.05.2026: F.1–F.3 ✅ заведены в эпизод (
v4_signals, см. A.12) и в факторный анализ (Pass 5, раздел B) через ридерobserver-v4-signals.mjs. F.4/F.5 — пока только на диске.
F.1. Rationalization-audit (enforce-rationalization-audit.mjs)
~/.claude/runtime/rationalization-flags-<session>.jsonl. Строка: {kind, evidence}. Виды (kind): rationalization-phrase (фраза-самооправдание) · prod-edit-without-test (правка прод-кода без теста в том же ходе) · weak-commit-message (commit с сообщением < 12 симв.). Блокирует на 3-м флаге за сессию (decide:112). Перед сопоставлением снимает цитаты/код (stripQuotedContext:51).
F.2. Safe-baseline metering (enforce-safe-baseline-metering.mjs)
~/.claude/runtime/safe-baseline-ledger-<sess>.json (per-task счётчики вызовов safe-инструментов Read/Grep/Glob/LS/TodoWrite/AskUser + skill_match_within_task + lastKeywords) и safe-baseline-flags-<sess>.jsonl ({ts, tool, reason}). Действия: allow / soft_flag / hard_block (мутирующий инструмент за порогом без навыка). Escape — любой Skill / EnterPlanMode.
F.3. LLM-судья Layer 4 (enforce-llm-judge-per-tool.mjs + -response-scan.mjs)
Вердикт по каждому мутирующему инструменту: YES → allow, NO/сомнение → block. Spend гейтится resolveJudgeConfig (флаг ROUTER_LLM_JUDGE_ENABLED И ключ) + per-session бюджет JUDGE_SESSION_BUDGET (инкремент только на реальный вызов). Исключения из проверки (scope-fix, не понижение дисциплины): isReadonlyBashEvent (readonly git/cat/grep/ls) и isTestRunnerBashEvent (vitest/pest/phpunit/artisan test/composer test/npm test без цепочки).
F.4. Router-state writer (router-prehook.mjs:156)
~/.claude/runtime/router-state-<session>.json: classification (вывод классификатора — task_type/recommended_node/recommended_chain/source/confidence/reasoning/…) · chainProgress[] · chainCompleted · task_cost (токены классификатора). Это источник, из которого observer-state-enricher обогащает эпизод (A.9–A.10).
F.5. Прочие runtime-сигналы
expected-branch-<session> (защита от угона ветки, enforce-branch-switch) · verify-pass-<session> (свежесть регрессии перед push, enforce-verify-before-push) · askuser-decisions-<session>.jsonl (одобрения git-операций) · session-lock-<workspaceHash>.json (замок параллельной сессии, enforce-parallel-session-lock) · router-gate-mode.json и набор *-mode.json (рубильники слоёв).
Кандидаты на расширение факторного анализа
✅ Реализовано 31.05.2026 (план docs/superpowers/plans/2026-05-31-brain-factor-analysis-f-candidates.md): следующие 4 оси заведены в эпизод (v4_signals) и в FACTOR_FNS (Pass 5):
rationalization_flag_count(F.1) — число самооправданий за ход/сессию.safe_baseline_action(F.2) — allow / soft_flag / hard_block.judge_verdict(F.3) — YES / block / disabled (когда Layer 4 активен).judge_spend_usd(F.3) — расход судьи (добавить компонентом вtask_costи вcost-daily.json).