Files
portal/docs/observer/notes/2026-05-28-brain-retro-9.md
T
Дмитрий 4d7e9e338b docs(session 2026-05-28): brain-retro 8/9, self-retrospect, sanity, Phase 1-3 plans
Groups documentation produced during 2026-05-28 brain-retro session:
retro notes 8 (carryover) and 9, self-retrospect 1, sanity check JSON,
three Phase plans for router-hooks fixes. All implementation already
pushed in earlier commits — this commit groups artifact metadata.

Plus typo fixes in self-retrospect (agregatov, seryj) and cspell vocab
extensions for session-specific terms (PAMYATKA / procs / russian verbs).

Pure documentation. No code, no normative drift.
2026-05-28 12:26:05 +03:00

26 KiB
Raw Blame History

Brain-retro #9 — 2026-05-28

Период: 2026-05-27 .. 2026-05-28 (с retro #8). Эпизоды: 163 (Wed 143 / Thu 20). Task-группы: 71. Observer errors: 0.


0. Контекст

Первый retro после деплоя трёх enforcement-хуков retro #8 follow-up:

  • enforce-classifier-match (commit d1d53080) — threshold 0.7→0.8.
  • enforce-chain-recommendation (commits d1d53080 + 3918f355) — PreToolUse-блок если router дал chain ≥2 и я ни одного не вызвал.
  • enforce-graph-first (commit 497d410e) — Stop-блок если ≥3 Grep/Glob без graphify.

Также в период попало: adr-judge redos fix (1e1457eb) + brain-retro 7→10 cuts (b1398883).


1. Цифровые срезы (MANDATORY 10)

Cut 1. Path-type

path_type count %
improvised 154 94.5%
regulated 9 5.5%

Регламент по-прежнему редкий. Это не плохо — большинство задач 27.05 были sysop/diagnostics/ретро (см. Cut 7), для которых канона нет.

Cut 2. node_chosen (топ)

node_chosen count
direct 151
superpowers:brainstorming 4
subagent-driven-development 4
superpowers:systematic-debugging 3
superpowers:using-git-worktrees 1

92% direct. Скилы: brainstorming + subagent-driven + systematic-debugging.

Из эпизодов где router что-то посоветовал (15 из 163, ~9%):

node count назначение
#37 6 mermaid
#18 3 Pest tests
#3 3 GitHub MCP
#25 1 Semgrep
#11 1 Pint
#36 1 adr-kit

Cut 4. GAP «рекомендован, но direct»

13 missed activations (router рекомендовал → я ушла в direct без скила):

node missed hits
#37 4 бо́льшая часть deploy/monitoring/sanity-чтения, mermaid реально не нужен — потенциальный шум маппинга
#18 3 bugfix×2 + unknown — действительно стоило взять Pest для adr-judge regex
#3 3 deploy×2 + analysis — GitHub MCP вместо ad-hoc gh
#25 1 analysis
#11 1 cleanup
#36 1 unknown

Rework по этому подмножеству = 0 — пропуски не привели к переделкам.

Cut 5. Outcome × node_chosen group (3 группы)

Группа Total success soft blocked rework unknown
skill_used (12) 12 2 6 3 0 1
direct, no recommendation (138) 138 55 68 12 2 1
direct, recommendation ignored (13) 13 1 2 0 1 9

Скилы дают higher blocked rate (3/12 = 25% vs 9% у direct без рекомендации). Это brainstorming + systematic-debugging blocked после ввода ⇒ ожидаемый сигнал «нужно больше входа», не патология. Direct-without-rec даёт normal/healthy распределение.

Cut 6. classifier_source

source count %
llm 75 46%
prefilter 50 31%
regex 29 18%
cache 5 3%
prefilter_inherited 5 3%
NULL 0 0%

Классификатор здоров: 0 NULL, LLM срабатывает в 46% случаев (когда prefilter + regex не сходятся). Сравнение с retro #8: тогда было ~12% NULL — фикс classifier-match threshold помог.

Cut 7. Per-classification breakdown

classification count router rec I took within canon rework
other 91 9 6 0 0
question 34 5 3 0 0
release 14 9 2 0 0
monitoring 9 3 0 0 0
analysis 5 0 0 0 0
planning 4 0 1 0 0
bugfix 2 0 0 0 0
feature 2 0 0 0 0
cleanup 1 1 0 1 0
memory-sync 1 0 0 0 0

«Other» = 56%, «question» = 21% — большинство задач периода это обсуждения, sysop-операции и интерактив. Канонические узлы для них действительно отсутствуют (нет смысла регламентировать «ответь на вопрос»).

bugfix=2 (adr-judge regex fix), router не рекомендовал ничего — связано с пропуском, который заказчик подсветил в sanity-чеке. Канон для bugfix есть (#19/#18/#34), но router не сработал. Дёрнуть бы Pest (#18) и systematic-debugging — этого не было.

Cut 8. Class × canon coverage

classification count canon-узлы router rec взял within canon rework
other 91 9 6 0 0
question 34 5 3 0 0
release 14 9 2 0 0
monitoring 9 3 0 0 0
analysis 5 #25/#39/#53 0 0 0 0
planning 4 #19/#41/#42 0 1 0 0
bugfix 2 #19/#18/#34 0 0 0 0
feature 2 #19 0 0 0 0
cleanup 1 #11/#12 1 0 1 0
memory-sync 1 0 0 0 0

Канон-покрытие = 1/163 ≈ 0.6%. Это сильно ниже здорового уровня. Причина: router рекомендации либо были вне канона (например, #37 mermaid для deploy/monitoring задач — нерелевантно), либо отсутствовали для bugfix/feature/planning/analysis где канон есть. Router нужно дообучить.

Cut 9. Router vs Opus (sample N=30 из 164)

Секция A — Router посоветовал, Opus не согласен (2 случая):

time task classification router → claude opus verdict
27.05 01:46 b11f6b8d question #18 → systematic-debugging wrong_node (нужен был #18) — blocked
27.05 01:48 b11f6b8d other #18 → direct disputable — soft_success

Секция B — Router молчал, Opus говорит «нужен был скил» (4 случая):

time task classification opus suggests outcome reasoning (sample)
27.05 01:16 e3bdbeac question operations soft_success SSH-access — стоило runbook (#51)
27.05 01:33 b11f6b8d other clarify rework 10-символьный «сделай сам» — стоило уточнить, ушла в 4 Bash + 15k tokens
27.05 01:35 0ade4c82 planning discovery-interview soft_success «делай план интеграции» → brainstorming + AskUserQuestion ( верно)
27.05 02:05 3d61dc18 planning brainstorming rework Stop-hook fired 3× — coverage сигнализировал, я игнорила

Секция C — Router посоветовал, Opus согласен что skill излишен: 0 случаев.

Sample-bias: reviewer прошёл по 30/164 эпизодам. Reviewed outcomes: 21 soft / 4 success / 3 blocked / 2 rework. Если экстраполировать sectionB rework rate ≈ 2/30 ≈ 7% → 11 потенциальных rework за период. Это сильный сигнал.

Cut 10. Chain-ignore breakdown

chain length recommended ignored rework
1 (single) 3 2 0
2 1 1 0
3+ 8 7 0
TOTAL 12 10 0

Игнор chain-рекомендаций = 83%. При этом rework=0 — игнор не приводит к переделкам в этом периоде. Но это означает либо (а) chain-рекомендации были нерелевантны → надо чистить маппинг, либо (б) я систематически их обхожу → надо смотреть на enforce-chain-recommendation эффект.

NB: новый хук enforce-chain-recommendation залит вечером 27.05 (commit 3918f355), эпизодов после него 125 hook fires — но реальные блоки/inline-overrides не подсчитаны (анализатор пока не разбирает hook outcomes).


2. Outcome distribution (inferred)

outcome count %
soft_success 76 47%
success 58 36%
blocked 15 9%
unknown 11 7%
rework 3 2%

Здоровый паттерн. blocked=15 — большинство это AskUserQuestion (legitimate clarification), не реальные провалы.


3. Factor analysis matrix (выборочно)

decision_provenance

provenance success soft blocked rework unknown
autonomous (138) 51 62 14 2 9
user_chose_from_options (25) 7 14 1 1 2

74% решений автономные / 18% collaborative-выбор / 0% «навязал метод заказчик». Здоровый расклад.

economy_level

level count success soft blocked rework unknown
100 140 55 59 15 2 9
null 23 3 17 0 1 2

Экономия 100% дала больше blocked (легитимно — AskUserQuestion / hook-блоки), null = чистые vue/spec/long-running без режима.

session_segment

segment count success soft blocked
early 51 18 27 3
mid 95 32 44 11
late 17 8 5 1

11/95 blocked в mid — пик плотности hook-блоков в середине сессии (cascading enforce). На late сегментах падает skill-инициатив — после длинной сессии я ухожу в direct.

post_compaction

Все 163 эпизода: post_compaction=false. Компакции в период не было.


4. Hook scripts breakdown (schema v3)

script times fired заметки
inline:e2f5fa75… 1991 inline hooks (universal)
tools/router-tool-gate.mjs 1954 главный gate
tools/enforce-branch-switch.mjs 1615 branch safety
tools/enforce-verify-before-push.mjs 1615 verify gate
tools/enforce-rationalization-audit.mjs 1231 flag-10 audit
tools/enforce-verify-record.mjs 1076 verify-pass writer
inline:62a129f5… 339 inline
tools/enforce-memory-coverage.mjs 339 memory coverage
tools/enforce-tdd-gate.mjs 339 TDD gate
inline:171492… 155 inline
inline:0d75e3df… 155 inline
tools/enforce-chain-recommendation.mjs 125 NEW 27.05
tools/observer-stop-hook.mjs 99 Stop / per-turn observer
tools/router-stop-gate.mjs 99 Stop / router gate
tools/enforce-coverage-verify.mjs 99 Stop / coverage
tools/enforce-classifier-match.mjs 99 Stop / classifier match
tools/enforce-graph-first.mjs 5 NEW 27.05

Discipline highlights:

  • observer-stop-hook = 99 при 163 эпизодах ⇒ ~64 turn'а без Stop-хука. Это нормально: subagent-driven turns + некоторые multi-prompt batches не триггерят Stop. Не дроп.
  • enforce-chain-recommendation = 125 fires — хук реально нагружен. Но статистики блоков/override-фраз пока нет.
  • enforce-graph-first = 5 fires — низкая активация (Grep/Glob кластеры редкие в этом периоде).

5. Missed Activations (Pravila §16.4 v1.36)

Total: 13 (рекомендован → я ушла в direct):

By node

Node Missed Назначение Классификации
#37 4 mermaid deploy×3, monitoring×1 — нерелевантно, шум маппинга
#18 3 Pest tests bugfix×2, unknown×1 — легитимный промах для adr-judge fix
#3 3 GitHub MCP deploy×2, analysis×1 — частично шум, частично легитимный
#25 1 Semgrep analysis — disputable
#11 1 Pint cleanup
#36 1 adr-kit unknown — связано с adr-judge fix

By classification

Classification Missed Top рекомендованные
deploy 3 #37, #3
monitoring 3 #37
unknown 3 #18, #36
bugfix 2 #18
analysis 1 #25
cleanup 1 #11

Interpretation:

  • #37 mermaid spread across deploy/monitoring = routing-map noise, требует чистки tools/observer-classification-map.json.
  • #18 для bugfix = легитимный hit — adr-judge regex fix должна была пройти через Pest TDD.

6. Канонические цепочки L1–L16

chain times outcome split заметки
L1 4 soft 2 / success 1 / unknown 1 brainstorming chain
L8 3 blocked 2 / soft 1 security chain — blocked это AskUserQuestion
L16 4 soft 2 / success 1 / unknown 1 новая (?)
null 152 success 57 / soft 73 / blocked 13 / rework 3 / unknown 6 вне канона

7. Sanity-check (вход от заказчика)

Q1: Явный пропуск. Ответ: «Исправление adr-judge regex (вечер 27.05)».

Что произошло: catastrophic backtracking в ENFORCEMENT_BLOCK_RE (nested (?:.*?\n)*? + DOTALL) виснет >60s на ADR-011/ADR-016. Я починила декомпозицией regex'а, не вызвав systematic-debugging skill и не написав tests-first (Pest #18). Reviewer-Opus в Section A (запись 27.05 01:46) подтверждает: для этого кейса нужен был именно #18.

Урок: на bugfix с blocking hook'ом — TDD цепочка (systematic-debugging → Pest #18 → debugging session) обязательна. Сейчас канон в observer-classification-map.json для bugfix есть (#19/#18/#34), но router не сработал — нужно проверить, почему классификатор не дал рекомендацию (видимо «исправь regex» классифицировалось как «other», не «bugfix»).

Q2: Слепая зона наблюдателя. Ответ: «Не видел причину timeouts в adr-judge».

Что упустил наблюдатель: висящий python-процесс (PID 6444, 7h+ CPU=25435s) не фиксируется в episodes. Episodes видят только tool_calls в текущей сессии. Системные процессы (background python из прошлой сессии, утечки PM2 daemon'ов, висящие lefthook jobs) — вне scope наблюдателя.

Кандидат на расширение наблюдателя: добавить опциональный system_health срез — высокие CPU процессы > 1h без owning session, в STATUS.md C5. Но это не блокирующий gap — текущий retro #9 это обнаружил через sanity-check, не через автоматику.


8. Causal-chain candidates

6 цепочек найдено анализатором. Все умеренные (<5 разделённых эпизодов с общим файлом). Без острых сигналов retry-storm — отдельной разборки не требуется.


9. Observer health

  • observerErrorCount = 0.
  • Stop-hook fires (99) / total episodes (163) = 60.7% coverage. Остальное — turns без Stop (subagent / multi-prompt batches).
  • 30/164 reviewed (sample), reviewer 0 errors.

10. Cost report

~/.claude/runtime/cost-daily.json отсутствует. Data gap — cost-tracker не пишет файл. Не критично для этого retro, но candidate на проверку (см. ниже).


11. Skill invocations

skill count
superpowers:brainstorming 4
subagent-driven-development 4
superpowers:systematic-debugging 3
superpowers:using-git-worktrees 1
superpowers:subagent-driven-development 1

13 invocations total (≈ Skill tool calls). 8% от 163 эпизодов.


12. Tool use (top)

tool count
Bash 413
Read 99
PowerShell 92
Edit 75
TodoWrite 47
Write 18
AskUserQuestion 17
Grep 16
Agent 15
Skill 13

Bash доминирует (413) — много sysop/diagnostics в период. Grep=16, Glob=9 — низко, что объясняет enforce-graph-first срабатывания (5 раз).


Candidates for owner review

Candidate 1: Router не рекомендует ничего для bugfix-задач с reduced prompt context

  • Type: classifier improvement.
  • Evidence: sanity-кейс «adr-judge regex fix» — задача классифицирована как other, не bugfix. В period: 2 эпизода bugfix, 0 router-рекомендаций.
  • Suggested action: проверить tools/router-classifier-llm.mjs примеры — добавить «исправь / починить regex / fix bug / catastrophic backtracking» к bugfix-классу. Минимум eval-кейс. Не править прямо — открыть spec.
  • Cost / risk: низкий. Smoke-tests на classifier eval-set перед merge.

Candidate 2: chain-ignore 83% при rework=0 — нужна оценка эффекта enforce-chain-recommendation

  • Type: hook effectiveness measurement.
  • Evidence: 12 chain recs, 10 ignored. Хук залит 27.05 вечером (3918f355). Из 125 fires нет статистики «блок vs inline-override».
  • Suggested action: добавить в analyzer chainHookEffectiveness — парсить events[].hook_fired.scripts['tools/enforce-chain-recommendation.mjs'] с разбивкой blocked / override_inline / passed. Surface в retro #10.
  • Cost / risk: низкий, analyzer-only.

Candidate 3: #37 mermaid spread across deploy/monitoring — noise в classification map

  • Type: routing-map cleanup.
  • Evidence: missed_activations.byNode.#37 = 4 (deploy×3 + monitoring×1).
  • Suggested action: убрать #37 из рекомендаций для классов deploy / monitoring в tools/observer-classification-map.json. Mermaid релевантен только для documentation / analysis.
  • Cost / risk: низкий, после правки прогнать retro еще раз на тех же эпизодах — должно упасть 13→9.

Candidate 4: cost-daily.json пуст — cost-tracker не пишет

  • Type: infrastructure gap.
  • Evidence: ~/.claude/runtime/cost-daily.json отсутствует (null при readFile).
  • Suggested action: проверить hook, который должен писать cost-tracking (где он установлен — ~/.claude/settings.json?). Возможно retro #6 commit 4b9a8b (A1 cost tracking) не залит финально, либо hook сломан.
  • Cost / risk: низкий. Read-only диагностика.

Candidate 5: System-process visibility gap (sanity-выявленный)

  • Type: observer scope расширение, опционально.
  • Evidence: sanity Q2 — наблюдатель не видел висящий python adr-judge.
  • Suggested action: добавить в tools/status-md-generator.mjs опциональный блок «System health» — top-3 long-running процессы > 1h. Не блокирующий, инфо-only.
  • Cost / risk: низкий, info-only. Можно отложить.

Informational metrics

  • Эпизодов с reviewer-pass: 30/164 (sample). Остальные 134 — кандидаты на next retro batch.
  • Узлов canon, использованных в период: 5 (brainstorming, subagent-driven-dev, systematic-debugging, git-worktrees + brain-retro/this).
  • Узлов, никогда не использованных с начала observer-логов: ≥40 — не проблема per Pravila §16.4 v1.36 (нет профильных задач для них в период).

Self-retrospect trigger

  • episodes_since_last.self-retrospect-counter.json) = 609.
  • Threshold = 50.
  • Сильно превышен. Кандидат на запуск /self-retrospect отдельной сессией (когда заказчик решит).

Сводка для заказчика (простым языком)

Что я делала 27-28 мая:

  • 163 шага, 71 задача. Большинство — обсуждения, диагностика, починки.
  • 92% времени работала напрямую, без «инструментов» (скилов). Это нормально для разговорного периода.

Чему я научилась за период:

  • Поймана catastrophic backtracking баг в adr-judge.py. Починила, но должна была делать через TDD-инструмент (написать тест → починить → проверить). Ушла в direct. Урок: на bugfix с зависшим хуком — Pest и systematic-debugging обязательны.
  • Расширила brain-retro 7→10 срезов. Хорошо, что обнаружила что мои новые срезы (Cut 8/9/10) сразу подсветили реальные проблемы.

Где автоматика подвела:

  • Router не понял что «исправь regex» — это bugfix. Классифицировал как «other». Нужна правка примеров классификатора.
  • 83% chain-рекомендаций я игнорировала. Новый хук enforce-chain-recommendation залит вчера вечером — пока не понятно, останавливает ли он меня. Проверим на retro #10.
  • Cost-tracker не пишет файл. Не знаю, сколько я стою. Надо починить.

Что заказчик подсветил вручную:

  • Adr-judge fix должна была быть через инструмент, а не голыми руками. Согласна.
  • Наблюдатель не видел висящий 7-часовой python-процесс. Это слепая зона — episodes видят только tool_calls, не системные процессы.

Запуск /self-retrospect — 609 эпизодов с прошлого, порог 50 давно превышен.


Метаданные

  • Анализатор: tools/brain-retro-analyzer.mjs (10-cuts post-b1398883).
  • Reviewer: tools/brain-retro-batch-reviewer.mjs (batch, 30 episodes / 69s, 0 errors).
  • Sanity: docs/observer/sanity-checks/2026-05-28.json (schema v1).
  • PII filter applied to free comments: yes.
  • Retro session ref: brain-retro-9.