Brain-retro #2 (весь май) → кандидат: атрибуция canonical chains L1-L13. Spec + 9-task TDD plan (chain_ref в primary_rationale, C6 sync-контролёр, ретрофилл). Исполнение разблокировано — epic observer-instrument-expansion влит в main. +cspell словарь. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
15 KiB
Brain-retro #2 — весь май 2026 (полный срез)
Дата: 2026-05-20 (вечер, ~17:55 MSK)
Период: весь май 2026 — 2026-05-19T05:18Z .. 2026-05-20T08:58Z (28 строк JSONL; 23 v2-эпизода + 5 v1 пропущено).
Источник: docs/observer/episodes-2026-05.jsonl (28 строк) + docs/observer/.read-counter.json.
Анализатор: node tools/brain-retro-analyzer.mjs docs/observer/episodes-2026-05.jsonl.
Отношение к предыдущему ретро: надстройка над 2026-05-20-brain-retro.md (то — 17 v2-эпизодов, 12:25 MSK); здесь — те же 17 + дельта в 6 новых.
Уровень анализа: верхнеуровневый по запросу заказчика; экономия 100%.
Анализатор:
episodeCount=23,v1SkippedCount=5,observerErrorCount=0. Все цифры по 23 v2-эпизодам, если не отмечено иное.
Period
2026-05-19T05:18:16Z .. 2026-05-20T08:58:44Z. 7 уникальных task_id (сессий), 23 v2-анализируемых эпизода.
Дельта vs прошлое ретро (6 новых эпизодов после 2026-05-20T08:12:29Z):
| task_id | turn | start..end (Z) | path_type | provenance | node_chosen | econ | tool_calls | files | events примечательное | inferred outcome |
|---|---|---|---|---|---|---|---|---|---|---|
98298ec2 |
5 | 08:13..08:19 | improvised | autonomous | direct | 100 | 19 | 4 | 2× error tool_result + 2× retry | success (continuation) |
35fc31da |
1 | 08:16..08:24 | improvised | autonomous | brain-retro | 0 | 20 | 6 | skill_invoked brain-retro | rework (следующий ход — correction) |
35fc31da |
2 | 08:30..08:36 | improvised | autonomous | direct | 5 | 17 | 4 | 1× error + retry; prompt_signal=correction | success |
35fc31da |
3 | 08:36..08:37 | improvised | user_directed_method (claude_would_have_chosen=brain-retro) |
direct | null | 0 | 0 | — | unknown (no-op ход) |
35fc31da |
4 | 08:39..08:46 | improvised | autonomous | direct | 0 | 15 | 14 | 14× Read mass | success |
286dd904 |
2 | 07:52..08:58 | regulated | user_chose_from_options ("На Plan 3 (экспорт)") | superpowers:verification-before-completion | 5 | 133 | 25 | skill_invoked verification; 1× error; time_burn 66 мин | unknown (нет следующего эпизода) |
Path-type distribution (v2, n=23)
| path_type | count | % |
|---|---|---|
| improvised | 20 | 87.0% |
| regulated | 3 | 13.0% |
| alternative | 0 | 0% |
| mixed | 0 | 0% |
Доля regulated на 4.6 п.п. ниже прошлого ретро (17.6% → 13.0%) — три новых improvised-эпизода без skill в дельте сдвинули долю.
Outcome distribution
| outcome | count | % |
|---|---|---|
| success (inferred) | 9 | 39.1% |
| rework (inferred) | 1 | 4.3% |
| unknown (последние/нет следующего) | 13 | 56.5% |
«Unknown» здесь — это эпизоды, после которых нет хода с positive/correction-сигналом (хвост сессий) — не provenance-bug.
Skill invocations (events skill_invoked, n=6)
| skill | times | sessions |
|---|---|---|
| superpowers:verification-before-completion | 2 | 553717ec, 286dd904 |
| superpowers:systematic-debugging | 1 | 553717ec |
| superpowers:test-driven-development | 1 | 553717ec |
| claude-md-management:claude-md-improver | 1 | 553717ec |
| brain-retro | 1 | 35fc31da |
Factor analysis matrix (analyzer factorMatrix)
decision_provenance — «rework мой или роутера?»
| provenance | success | rework | unknown |
|---|---|---|---|
| autonomous | 6 | 1 | 10 |
| user_directed_method | 2 | 0 | 2 |
| user_chose_from_options | 0 | 0 | 2 |
Единственный rework (brain-retro turn 1) — autonomous-выбор узла brain-retro заказчиком (это сам skill, инвокированный по /brain-retro); коррекция — про точность аналитики прошлого ретро, не про routing. «Rework мой, не роутера.»
economy_level
| economy_level | success | rework | unknown |
|---|---|---|---|
| null | 3 | 0 | 2 |
| 0 | 0 | 1 | 2 |
| 5 | 4 | 0 | 6 |
| 100 | 1 | 0 | 4 |
Слишком маленькая выборка для выводов; единственный rework на 0% — это brain-retro turn 1 (для самого ретро economy=0% это норма, заказчик так попросил).
model · post_compaction · task_size
| factor value | success | rework | unknown |
|---|---|---|---|
| model: claude-opus-4-7 | 8 | 1 | 14 |
| post_compaction=true | 6 | 0 | 5 |
| post_compaction=false | 2 | 1 | 9 |
| session_turn late (≥10) | 6 | 0 | 5 |
| session_turn early (<10) | 2 | 1 | 9 |
| task_size small | 8 | 0 | 11 |
| task_size medium | 0 | 1 | 2 |
| task_size large | 0 | 0 | 1 |
Все эпизоды на одной модели → строка про model — не сигнал. Post_compaction=true и late session_turn — это одна и та же длинная brain-governance сессия 553717ec (turn 82+); концентрация success там — артефакт сессии, не закономерность.
node_chosen · task_classification
| node_chosen | success | rework | unknown |
|---|---|---|---|
| direct | 8 | 0 | 11 |
| superpowers:verification-before-completion | 0 | 0 | 1 |
| superpowers:systematic-debugging | 0 | 0 | 1 |
| superpowers:test-driven-development | 0 | 0 | 1 |
| brain-retro | 0 | 1 | 0 |
| task_classification | success | rework | unknown |
|---|---|---|---|
| bugfix | 2 | 0 | 1 |
| feature | 2 | 0 | 2 |
| other | 3 | 0 | 9 |
| refactor | 1 | 0 | 0 |
| question | 0 | 1 | 2 |
«direct» — 8/0/11 — основная масса задач без skill-маршрутизации, всё работает. superpowers-узлы (3 эпизода, все unknown) сидят в хвостах своих сессий — нет следующего хода с явным signal.
Episodes → tasks (analyzer tasks, 15 task-групп)
| task_ref | episodes | rework turns |
|---|---|---|
553717ec#1..#10 |
10 | turn 82 (rework — improvised CLAUDE.md edit, retry-recovered) |
24acfa10#1 |
1 | — |
a42e4ba5#1 |
1 | — |
dd905ea0#1 |
1 | — |
98298ec2#1..#3 |
3 (continuation across 5 turns) | — |
35fc31da#1..#4 |
4 | turn 1 (brain-retro) — correction в turn 2 |
286dd904#1 |
1 (66-min verification) | — |
Causal-chain candidates (analyzer causalChains)
| from | to | shared files |
|---|---|---|
| — | — | — |
Анализатор не нашёл «errored episode → fix episode на тех же файлах». 7 событий error (tool_result reported is_error) — это transient-сбои тулов внутри одного эпизода с retry-recovery, не межэпизодные.
Observer health
observerErrorCount = 0— за весь май ни одногоobserver_error-маркера. Парсер ни разу не сломался тихо.interrupts = 0— заказчик ни разу не прерывал ход.errors = 7(внутри 5 эпизодов) — все transient, retry-recovered.retries = 6— корреспондируют ошибкам один-в-один (один retry бесплатный после restart-tooling).time_burn_total = 86 мин— из них 66 мин — один эпизод286dd904#2(длинная verification-сессия Plan 2 экспорт).
Canonical chains L1–L12 hit rate
Не считаем за май — нет атрибуции chain_ref; routing-таблица docs/routing-off-phase.md v1.2 ещё не интегрирована в primary_rationale. Кандидат на доработку парсера — см. ниже.
Improvised chains (повторённые ≥2)
| node-set | times | candidate L13+? |
|---|---|---|
| direct → direct (continuation в одной сессии) | 14 | нет — это норма, не цепочка |
Других повторов нет.
chain_divergence cases
Нет атрибуции — пропуск.
Top error classes
| error class | count | recovery pattern |
|---|---|---|
tool_result reported is_error (transient) |
7 | retry в том же эпизоде, без user-intervention |
confusion_marker hot-spots
Нет таких маркеров в схеме v2 — пропуск.
Candidates for owner review
Candidate 1: уточнить analyzer для дельта-сравнения с предыдущим ретро
- Type: doc/skill enhancement, не нормативная правка.
- Evidence: прошлое ретро (35fc31da#1) →
prompt_signal=correctionследующего хода (35fc31da#2). Анализатор корректно пометилoutcome=rework, но в выводе нет указателя на номер прошлого ретро или diff vs предыдущий. - Suggested action: в
tools/brain-retro-analyzer.mjsдобавить опциональный аргумент--since <ISO>(срез поstarted_at >= since), чтобы можно было дёшево считать только дельту между ретро. Альтернатива: в шаблоне.claude/skills/brain-retro/references/aggregation-template.mdдобавить секцию «Delta vs prior retro» с явным diff'ом. - Cost / risk: низкий; чистый node-скрипт без побочек на JSONL. Сейчас процесс ручной (этот ретро diff делался руками).
- Rejection option: заказчик может сказать «всегда срез — полный месяц», и тогда диффы не нужны.
Candidate 2: атрибуция canonical chains L1–L12 в primary_rationale
- Type: observer schema extension (потребует amend ADR-011 / spec factor-analysis).
- Evidence: ни один из 23 эпизодов не несёт ссылки на L1–L12 chain из
docs/routing-off-phase.mdv1.2 (а с finance-tooling — там уже L1–L13). «Canonical chains hit rate» — пустая таблица. - Suggested action: в
tools/observer-routing-detector.mjs(или новый детектор) маппить выбранные узлы в L-цепочку и писатьprimary_rationale.chain_ref: "L7"(например). Только тогда можно отслеживать чистоту следования цепочкам. - Cost / risk: средний — нужен маппинг «node_chosen → L-chain», который сейчас живёт только в человеческом тексте routing-off-phase.md. Риск: дрейф маппинга между парсером и документом.
- Rejection option: оставить L1–L13 как нормативное «чтение для человека», не пытаться формализовать.
Candidate 3: проверить корректность аналитики прошлого ретро
- Type: ad-hoc review (не нормативка).
- Evidence: rework-flag на 35fc31da#1 — единственный rework в выборке. Я (текущее ретро) дельту посчитал и нашёл, что предыдущее ретро отчиталось «17 эпизодов, 5 v1 пропущено» — это совпадает с записанным; коррекция была про что-то другое (содержание ретро, не структура). Без доступа к самой формулировке коррекции (
35fc31da#2body) можно только сказать: коррекция структурно не была про observability, а про текст ретро. - Suggested action: заказчик при желании может прокомментировать «что именно правил после ретро 12:25», и записать урок в notes. Не блокирующее.
- Rejection option: игнорировать — мелкая коррекция текста, не системный сигнал.
(Других кандидатов нет. Никаких removals/zombie nodes per memory feedback_brain_unused_tools_not_problem.)
Informational metrics (NOT alerts)
- Узлов, использованных хотя бы раз за период (явно через
skill_invoked): 5 / 63+ (superpowers TDD/debug/verify, claude-md-improver, brain-retro). Узелdirect(=прямое исполнение) — отдельная категория, 19 эпизодов. - Узлов, ни разу не использованных с начала наблюдения: большинство (≥55 из 63+) — не проблема per feedback_brain_unused_tools_not_problem. Capability-readiness — осознанная стратегия заказчика.
- Параллельные сессии: 12 эпизодов из 23 (52%) с
parallel_session=true— норма для текущего рабочего режима с §15 Pravila. - Длинные эпизоды (
time_burnсобытие): 1 —286dd904#266 мин (Plan 2 экспорт verification). Все остальные — без time_burn-маркера (под 60 мин).
Дельта vs прошлое ретро 2026-05-20 12:25 — итог
- Картина устойчива: improvised-доминанта, opus-4-7-only, 0 observer_error, rework на autonomous-выборах единичный.
- Новый класс события:
prompt_signal=correctionпосле skill-инвокации (35fc31da#1 → #2). Раньше correction наблюдался только на autonomous direct-выборах; теперь видно, что brain-retro skill тоже не неприкосновенен — это здоровый сигнал. - Новый успешный кейс гибридной модели:
user_chose_from_options→ regulated path (286dd904#2, 66 мин, 133 tool_calls, через superpowers:verification-before-completion). Это первое подтверждение, что collaborative-choice + skill-маршрутизация даёт длинные продуктивные эпизоды без interruptions. - Никаких рекомендаций править Pravila / PSR_v1 / Tooling / CLAUDE.md — выборка (23 эпизода / 2 дня) слишком мала.