Files
portal/docs/observer/notes/2026-05-20-brain-retro-v2.md
T
Дмитрий 4f5cf263f6 docs(observer): chain attribution L1-L13 spec + plan + brain-retro #2
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>
2026-05-21 04:42:41 +03:00

15 KiB
Raw Blame History

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 L1L12 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 L1L12 в primary_rationale

  • Type: observer schema extension (потребует amend ADR-011 / spec factor-analysis).
  • Evidence: ни один из 23 эпизодов не несёт ссылки на L1–L12 chain из docs/routing-off-phase.md v1.2 (а с finance-tooling — там уже L1L13). «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#2 body) можно только сказать: коррекция структурно не была про 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#2 66 мин (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 дня) слишком мала.