Три группы накопившихся auto-правок (НЕ ручные): 1. markdownlint --fix auto-format (~25 .md в docs/superpowers/, docs/security/marketing-vet.md, docs/adr/015, docs/deploy/lkomega-runbook): MD031/MD032 (blank lines around fence/list) + MD004 (bullet markers `+`→`-`). Содержательных текстовых правок 3: ADR-015 bullet, sprint5d-cleanup bullet, router-discipline trailing space. 2. lefthook 2.1.6 → 2.1.8 (package.json + lock): patch-bump, авто-резолвил npm. 3. Observer runtime (docs/observer/): episodes-2026-05.jsonl +420 строк (текущая активность мозга), STATUS.md regen, .pii-counters / .read-counter тики, +2026-05-24-brain-retro.md note. Цель — разблокировать merge feat/llm-first-router → main (этап 0 плана постановки в боевой). Содержание ветки не трогает.
18 KiB
Brain-retro #4 — дельта с 2026-05-23
Дата: 2026-05-24 (~16:30 MSK).
Период: 2026-05-23T09:02Z .. 2026-05-24T13:18Z (~28 часов, 116 v2+v3 эпизодов).
Анализатор: node tools/brain-retro-analyzer.mjs docs/observer/episodes-2026-05.jsonl + tools/missed-activations.mjs (фильтр после cutoff retro #3 = 2026-05-23T08:47Z).
Уровень анализа: дельта-срез по умолчанию; экономия 100%.
Отношение к предыдущему ретро: надстройка над 2026-05-23-brain-retro.md (cutoff 2026-05-23T08:47Z). Кандидаты A1/A2/B1/D1 из retro #3 — применены заказчиком (commit 963379c3).
episodeCount=116(21 v2 + 95 v3),observerErrorCount=0. v3 parser-expand активен с 2026-05-23 (pushaad48de6).
Period & context
Двое суток после retro #3 — финал плотного спринта и переход к router-discipline-overhaul:
- Биллинг v2 Спек B Phase 1 → прод (24.05 ночь, push
ccfecd5e, 10 коммитов FF). УбранDuplicateDetector, добавлена раздачаLeadRouterс лок-таблицейsupplier_lead_deliveries. - Partition+RLS+log durable fix → прод (23.05 ночь +2, push
7e0c8dde, 3 коммита FF). Закрыт operational-долг hole #2. - Observer parser v3 expand → main (23.05 day, push
aad48de6, 8 коммитов FF). Новые поляhook_fired.scripts(object map) +primary_rationale.recommended_node. - PII-leak RU-phone hardening (23.05, push
11822e38). 11 строк лога санитизированы. - Router-discipline-overhaul stages 2+3 (23.05 + 24.05, мерж
d030dbbe). Введёнtools/router-tool-gate.mjs(warn-only), 3 хука зарегистрированы, реестр узловdocs/registry/nodes.yamlсоздан как новый SoT (классификационная карта DEPRECATED). - Mapping hygiene retro #3 → A1+A2+B1+D1 применены (commit
963379c3). - 2 controller-offload агента (
normative-sync,prod-deploy-validator) — pushc8963031+e3ec2446+ патч9bc090fb.
Macro метрики дельты (vs ретро #3)
| метрика | ретро #3 | ретро #4 (дельта) | дельта |
|---|---|---|---|
| период, дней | 5 | ~1.2 | — |
| эпизоды v2+v3 | 116 v2 | 21 v2 + 95 v3 = 116 | паритет, но v3 уже 82% |
| уникальных task_id | 61 | 22 | — |
| path_type regulated | 13.8% (16/116) | 19.0% (22/116) | +5.2 п.п. |
| skill-инвокации | 13/93 (14%) | 22/116 (19%) | +5 п.п. |
| missed activations | 40 | 9 | −78% |
| observer_error | 0 | 0 | — |
| error events / episode | 1.3 | 0.55 | −58% |
| post_compaction | 43/116 | 0/116 | — (короткая дельта) |
Ключевое: дисциплина и качество роутинга растут синхронно — regulated rate +5 п.п., missed activations −78%, error density −58%. Это первая ретра в которой видно измеримый эффект brain-governance цикла (применение кандидатов retro #3 → снижение шума → виден сигнал).
Path-type distribution (n=116)
| path_type | count | % |
|---|---|---|
| improvised | 94 | 81.0% |
| regulated | 22 | 19.0% |
| mixed | 0 | — |
| alternative | 0 | — |
Regulated +5.2 п.п. vs retro #3 (13.8% → 19.0%). Все skill-инвокации в дельте — из Superpowers (brainstorming×6, writing-plans×6, systematic-debugging×4, subagent-driven-development×3, TDD×1, verification-before-completion×1, using-superpowers×1). Все остальные категории (skills проекта, vendored) — direct.
Outcome distribution
Прокачка _inferredOutcome на full-file даёт корректный outcome inference. Сырой outcome (записанный unknown) ничего не говорит — нужен следующий эпизод задачи.
По factor matrix (от full-file analyzer):
success≈ 33%soft_success≈ 46%unknown≈ 20% (хвосты сессий)blocked≈ 1%
prompt_signal distribution дельты: 50 new_task / 56 neutral / 8 approval / 2 correction (1.7% rework — на уровне retro #3, здоровый низкий).
Factor matrix highlights
decision_provenance — кто решает?
| provenance | count | % |
|---|---|---|
| autonomous | 95 | 81.9% |
| user_chose_from_options | 21 | 18.1% |
| user_directed_method | 0 | — |
user_directed_method=0 — заказчик НЕ навязывал методы за эти 28 часов. Healthy.
user_chose_from_options=21 — стабильный паттерн collaborative-choice (≈18%).
economy_level
| economy_level | count |
|---|---|
| 100 | 115 (99.1%) |
| null | 1 |
Только стандартный уровень. Никаких degradations / экспериментов.
parallel_session
16/116 (13.8%) эпизодов с parallel_session=true. Pravila §15 территория — пилот/dev-машина или разные ветки. Не выделяется в blocked / correction (только 2 correction по дельте, оба не в parallel-сессиях).
model
100% claude-opus-4-7 (15 эпизодов с null модели — артефакт парсера v2; v3 уже всегда заполняет).
v3 parser expand — фактическое покрытие
- 95/116 (82%) эпизодов в дельте — schema_version=3.
hook_fired.scriptspopulated в большинстве v3-эпизодов как object{script_name: count}(top 8 уникальных скриптов, см. ниже).primary_rationale.recommended_nodepopulated: только в 4 эпизодах (#19×3, #25×1). Низкое покрытие — потому что classifier даётotherчаще всего, аdirectбез явной рекомендации в маппинге.
Это хороший знак — наблюдатель не врёт, заполняет рекомендацию только когда есть факт (classification → non-empty mapping).
Hook telemetry (v3 expand, дельта)
| script | invocations |
|---|---|
inline:e2f5fa75197ed8a7 |
748 |
tools/router-tool-gate.mjs |
294 |
inline:62a129f5897d02fb |
212 |
inline:123781b7a77c2213 |
212 |
inline:171492082025e488 |
123 |
inline:0d75e3df119ecf14 |
123 |
inline:ee9b8c077fcab23d |
27 |
tools/observer-stop-hook.mjs |
2 |
router-tool-gate.mjs 294 фаира — main сигнал. Stage 3 task 6 deployed (b4fb2cec), warn-only mode активен. Каждое срабатывание = potential block в enforce-режиме (когда заказчик переключит).
Inline-хуки e2f5fa75... (748 раз) и 62a129f5/123781b7... (по 212) — компоненты economy/skill-discipline architecture. Распределение типичное: 1 «сердечный» хук + 4 матчер-специализированных.
Tool mix (дельта)
| tool | invocations |
|---|---|
| Bash | 562 (PreToolUse) |
| Edit | 220 |
| Read | 147 |
| Agent | 100 |
| TodoWrite | 74 |
Всего ~1060 tool-calls на 116 эпизодов (≈9 tool/episode median). Распределение task_size: median 3, p95 39, max 80. 45/116 (39%) эпизодов — micro (0 tool-calls, Q&A или approval), 13/116 (11%) — heavy (>20 tool-calls, implementation).
Errors / retries / time_burn
64 error / 53 retry / 13 time_burn / 0 interrupt / 0 parse_gap.
Распределение здоровое — 0.55 err/episode (vs 1.3 в retro #3). Большая часть retry — нормальные Bash-итерации (поиск ошибки, прогон тестов несколько раз). Никаких observer-error / parser-gap.
Missed activations (Pravila §16.4 v1.36 conditional rule)
Total: 9 (vs 40 в retro #3 — снижение −78% после применения A1/A2 cleanup).
By classification
| classification | episodes | bypassed nodes |
|---|---|---|
| analysis | 6 | #25 Semgrep, #39 ToB Skills, #53 process-analysis |
| feature | 2 | #19 Superpowers |
| planning | 1 | #19, #41 CCPM, #42 product-management |
Анализ — ЧТО ИЗ ЭТОГО реально промах vs шум
- 6 analysis — все 6 связаны с meta-работой: разбор
docs/observer/STATUS.md+brain-retro-analyzer.mjs+ПИЛОТ.md+2026-05-23-brain-retro.md(это сам сеанс retro #3 + правка анализатора). Маппингanalysis → [#25 Semgrep, #39 ToB Skills, #53 process-analysis]— про техн-аудит/SAST/process discovery. Brain-retro / observability-анализ не покрывается этими узлами. Шум классификатора, не реальный промах. - 2 feature — обе с правкой
docs/observer/STATUS.md+docs/superpowers/specs/...router-discipline-overhaul-design.md(24.05 ночь, stage 3 follow-up закрытие) +memory/project_webmaster.md(новая memory-запись). Это STATUS-регенерация после уже сделанной фичи и memory-update — не «новая фича». Классификатор слишком широкий: то что коснулось spec-файла или memory не значит, что это feature-разработка. Шум классификатора. - 1 planning —
docs/superpowers/specs/2026-05-23-router-discipline-overhaul-design.md(router stage 4 чтение/уточнение). Реальный план уже есть, эпизод — продолжение работы по существующему. Маргинал; #19 Superpowers уже использован в предыдущих эпизодах task'а.
Реальные промахи в дельте: 0–1. Все 9 — classifier noise.
Кандидаты на пересмотр (если решите трогать)
Маппинг сейчас в tools/observer-classification-map.json, но DEPRECATED 24.05 — SoT переехал в docs/registry/nodes.yaml (новый файл, видимый stage 4 router-overhaul). Рефинить старый файл = создавать дрейф с новым. Кандидат: дождаться stage 4 router-discipline-overhaul и рефинить узкие классификации (analysis / feature) уже в новом registry.
Causal chains
Топ файлов в дельте:
| файл | эпизодов | контекст |
|---|---|---|
memory/MEMORY.md |
17 | memory-sync after big-day events |
memory/project_state.md |
7 | state updates |
memory/reference_github.md |
6 | push-логи (3+ деплоя) |
memory/project_router_overhaul.md |
6 | новый memory-файл, отслеживает stages 2+3+4 |
ПИЛОТ.md |
5 | обновления после прод-деплоев |
.claude/skills/subagent-driven-development/references/git-safety-checklist.md |
5 | rebuild + protocol updates |
tools/observer-classification-map.json |
4 | A1/A2/deprecation header |
cspell-words.txt |
4 | termsync для новых имён (registry/router-state/etc.) |
Цепочки задач (≥3 эпизода shared-file):
memory/project_router_overhaul.md— отслеживает router-discipline-overhaul progress (stages 2+3 merge + 3 follow-up fixes).memory/MEMORY.md+ project_state.md + reference_github.md — стандартный memory-sync после прод-деплоев Billing v2 + partition fix.ПИЛОТ.md— два больших обновления (послеccfecd5eи7e0c8dde).
Нет «error→fix loop» цепочек.
Skill invocations (дельта, n=22)
| skill | times |
|---|---|
| superpowers:brainstorming | 6 |
| superpowers:writing-plans | 6 |
| superpowers:systematic-debugging | 4 |
| superpowers:subagent-driven-development | 3 |
| superpowers:test-driven-development | 1 |
| superpowers:verification-before-completion | 1 |
| superpowers:using-superpowers | 1 |
22 skill-инвокации / 116 эпизодов = 19% regulated. Все — Superpowers, ни одного project-скила (audit-portal/regression/brain-retro/billing-audit/security-go-live/etc.).
Покрытие L1-L16 chain'ов (из primary_rationale.chain_ref): L1 ×12, L8 ×4, L1+L16 ×6. L1 пайплайн (brainstorming→writing-plans→executing-plans) — доминирует, как и должно для feature-планирования.
Candidates for owner review
Все ниже — кандидаты, не правки. Применять только по явному «делай» от заказчика.
E. Router-gate warn-only → enforce (мониторинг)
E1. tools/router-tool-gate.mjs отработал 294 раза в warn-only за дельту. Stage 3 spec говорит «первая неделя warn-only, потом ручной переключатель». Сейчас неделя ещё не прошла (deploy 24.05 ночь). Кандидат: подождать ещё ~5 дней warn-only baseline, затем посмотреть распределение причин фаира перед переключением в enforce.
- Why: baseline нужен, чтобы знать какие сценарии будут блокироваться. 294 фаира — это уже видимое поле для анализа.
- Rejection-option: включить enforce немедленно (агрессивная дисциплина — но риск ложных блоков в активных фичах вроде Billing v2 Спек C).
F. Classification-map deprecation handling
F1. Файл tools/observer-classification-map.json помечен DEPRECATED 24.05 (SoT → docs/registry/nodes.yaml). 9 missed activations этой ретры — все classifier noise (analysis / feature слишком широкие). Кандидат: НЕ править deprecated файл; запланировать рефайн узких классификаций в новом registry в рамках stage 4 router-discipline-overhaul.
- Why: двойное обслуживание двух источников приведёт к дрейфу. stage 4 явно про это.
- Rejection-option: одно-разово почистить старый файл (узкие
analysis_security/analysis_meta,feature_code/feature_status_regen) — даст чистые метрики на ближайшие 1-2 ретры до миграции.
G. v3 parser coverage gap
G1. 21/116 эпизодов в дельте всё ещё v2 (после deploy v3 parser 23.05). Скорее всего — параллельные сессии на старой кодовой базе. Кандидат: ничего не трогать — v2/v3 mixed нормально для transition window; v3 уверенно растёт до 100%.
- Why: observability metric, не actionable.
- Rejection-option: force-restart всех сессий чтобы перейти на v3 (overkill для observability).
H. Skill-invocation diversity
H1. Все 22 skill-инвокации — Superpowers. Ноль вызовов project-скилов (audit-portal, regression, brain-retro, billing-audit, security-go-live, pdn-152fz-audit, и т.д.) — кроме самой текущей brain-retro. Кандидат: запомнить как baseline для следующей ретры — project-скилы используются эпизодически, рост в Billing v2 Спек C или security-go-live перед публикацией ожидается естественно.
- Why: не сигнал проблемы; project-скилы триггерятся только специфичными задачами.
- Rejection-option: Принудительно вызывать project-скил для каждого подходящего паттерна (риск over-discipline / шумные сессии).
Behavioral rule check (Pravila §16.4)
- «Не использован ≠ проблема» — соблюдено. Из 9 missed-activations:
- 0 соответствуют профилю в realistic смысле (все 9 — classifier noise).
- 9 маркированы как кандидаты, но не алертами; формально это сигнал, но в этой ретре прозрачно отмечено как шум (см. секцию выше).
- Снижение шума с 40 до 9 — прямой эффект применения retro #3 кандидатов A1/A2.
Что НЕ меняется этим retro
- НЕ редактирую
tools/observer-classification-map.json,docs/registry/nodes.yaml,tools/.node-dormancy.json, нормативку, code. - НЕ переключаю router-gate из warn-only в enforce.
- НЕ пишу в
episodes-*.jsonl(read-only). - НЕ trigger'у auto-memory.
- STATUS.md перегенерируется через
node tools/status-md-generator.mjs(шаг 8a процедуры).