3 дыры обнаружены при инспекции warn-only состояния сторожа 24.05.2026:
1. UTF-8 mojibake в state-файле сторожа (Windows Node stdin без setEncoding).
2. recommended_node не пишется в эпизоды наблюдателя (helper существует, не подключён).
3. chain_progress / chain_completed / recommended_chain — то же.
Без починки brain-retro новых метрик (domainHitRate / chainCompletionRate)
покажет пустоту, а Layer 2 эскалация на русских промптах работает по
испорченному тексту. Stage 3 enforce включать до фиксов нельзя.
Spec scoped к 3 файлам кода + ≤80 строкам нетто; subagent-driven
последовательно (3 Sonnet + closure Opus). Smoke на живой сессии.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Spec for two specialized AI agents to offload the main controller:
- #1 normative-sync: applies 4-file normative sync (Pravila/PSR/Tooling/CLAUDE.md)
after a completed task. ~20 invocations/week, saves ~70K controller tokens
per episode. Model: Sonnet 4.6.
- #2 prod-deploy-validator: 8-check pre-flight before liderra.ru deploy.
~5-7 invocations/week. Driven by 24.05 03:46 UTC 18-min portal incident
(quirk 107 — config:cache not under www-data). Model: Sonnet 4.6.
Based on brainstorming session 24.05 with measured frequencies from
MEMORY.md + CLAUDE.md §6 + push history 16-24.05.
Precedents: pest-parallel-debugger, rls-reviewer project agents.
Also: +7 cspell-words entries for the new spec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pre-sharing-эпик legacy: ProcessWebhookJob + WebhookReceiveController +
POST /api/webhook/{token} + webhook_log/webhook_dedup_keys/tenants.webhook_token.
На проде 0 вызовов за всю историю. Не часть актуальной архитектуры каналов
(основной = шеринг crm.bp-gr.ru, резервный = CSV reconcile — оба уже на always-rub).
Удаление снимает блокер для Phase B Спека A (DROP COLUMN balance_leads),
закрывает публичный endpoint /api/webhook/{token}, убирает расхождение
биллинг-моделей в коде.
Approach: одним PR, одним релизом. Бэкап перед миграцией, 7д наблюдение.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Правило: дедуп — ответственность поставщика; Лидерра телефон не фильтрует,
берём за всё, что прислано. Защита от своих дублей — на уровне БД
(замок supplier_lead_deliveries, ключ по поставке, не по телефону).
Лимит шеринга = 3 разных клиента, одному клиенту одна копия.
Вариант B (железобетонный) утверждён на брейнсторме 23.05.2026.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Final-review followup. .claude/settings.json uses regex-style combined
matchers like "Edit|Write"; transcript writes per-tool PreToolUse:Edit.
Split on | when building map so per-tool counts resolve. Also sync
spec doc loadHookMap -> buildHookMap (impl name).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
aggregation-template.md gets two new sections (Hook script breakdown,
Recommended-node candidates) + paragraph in Missed Activations.
factor-analysis spec gets a v3 amendment cross-ref to the 2026-05-23 spec.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Spec terminology aligned with codebase: recommended_skill →
recommended_node (classification-map хранит Tooling IDs `#NN`, не имена
skill'ов). Test runner — vitest (npm run test:tools), не node --test.
Missed-activations filter тоже поднимается до >=2.
5 atomic TDD commits: hook-resolver, recommended-node, parser+smoke,
analyzer factor-axis, brain-retro template.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Forward-only расширение episode schema: hook_fired.scripts (reverse-lookup
.claude/settings.json → имена хук-скриптов рядом с matcher-counts) +
primary_rationale.recommended_skill для direct-эпизодов (из
classification-map). Analyzer фильтр >=2 для backward-compat с v2.
Связано: ADR-011, factor-analysis spec 2026-05-19, Pravila §16,
feedback_feature_via_writing_plans.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Раздел карты C1 «Маркетинг и лидогенерация» (пустой) — подбор 10 узлов
#74–#83 (8 ставим сейчас + 2 DEFERRED), 18-я off-phase подкатегория
marketing-tooling. Вариант Б, смешанный акцент, VK вне scope.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Разовая artisan-команда supplier:import-projects: усыновляет активные проекты
с crm.bp-gr.ru (lkomega) под тенант info@lkomega.ru по правилам Лидерры
(B1/B2/B3 → один проект, лимит = сумма площадок), без записи на портал.
dry-run по умолчанию, --commit для реальной записи.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Enlightn abandoned (Packagist) + no Laravel 13 support. User chose to find
a replacement. Ward (Eljakani/ward, Go, MIT, 316★) — same niche, Go binary
so no Laravel-version dependency. infosec-vet.md §ПЕРЕСМОТР #70 + spec/plan
amendment notes. Node #70 keeps number/niche; tool + type change.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sync header + §12 changelog summarising the 18-task epic «Observer
instrument expansion v2» implementation. Each subsection (§12.1-§12.9)
references the brain-retro 2026-05-20 #N item and the worktree commit
chain.
Closes Task 20 of docs/superpowers/plans/2026-05-20-observer-instrument-expansion.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
§6 drifted from the implemented brain-retro analyzer after Phase 1.2/1.3:
- factor matrix now lists 9 axes (session_turn + parallel_session were
captured in the episode schema §3 but missing from the §6 matrix);
- outcome inference documents 'blocked' (error events > retry events) and
notes 'failure' as deferred to the phase-2 agent-judge.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Standalone HTML dashboard that visualises the observer episode log over
the automation-graph topology — 4 views (map / task-replay / session
feed / aggregate), graph as shared canvas, 3-phase build order.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds 3rd decision_provenance kind for collaborative-choice case
(user picks one of options Claude offered). Distinct from
user_directed_method: counterfactual = Claude's recommended option,
not "what Claude would have done autonomously". Routing-gate does
NOT block this kind — collaborative choice from Claude-designed
choice-space.
Trigger: 19.05.2026 live false-positives — "1 экономия 0%",
"в делаем", "делай 2" classified as user_directed_method.
§11 + 8 subsections; 7-attribute decision_provenance schema;
new tools/observer-choice-detector.mjs (pure module); parser
+routing-gate +/brain-retro extensions.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Design for making the brain governance observer rich enough for real
factor analysis. Surfaced during a discussion with the owner: the
observer is "paper-complete" but episodes lack the data factor analysis
needs — the outcome is a hardcoded "success", there is no decision
provenance (who chose the node — Claude autonomously, or the owner
forcing a method), no environment factors, no task grouping.
4-layer architecture:
- Layer 1 — episode schema v2: decision_provenance (+ counterfactual),
environment block, task_size, real outcome enum, task_ref.
- Layer 2 — capture: deterministic transcript parsing for all factors +
a one-line routing tag (owner-forced-method only).
- Layer 3 — two-sided enforcement: 3a routing-gate (Stop-hook blocks the
turn until the tag is present — unbypassable by Claude); 3b observer
self-discipline (silent failures become recorded observer_error
markers; coverage + registration verified by a controller).
- Layer 4 — analysis: /brain-retro infers real outcome from the next
episode's opening prompt, groups episodes into tasks, correlates
causal chains, builds the factor matrix.
Scope: everything except an independent agent-judge — that, plus
confusion_marker as a real judgment and real-time friction flags, is
phase 2 (separate spec).
Brainstormed via superpowers:brainstorming. Next: writing-plans.
Refs: ADR-011, spec 2026-05-19-brain-governance-design.md, Pravila §16.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
User-requested перед запуском суб-агента: observer должен фиксировать
не только факт выбора узла, но и причину — чтобы был возможен
факторный анализ через /brain-retro.
Изменения §5.2:
- 4 обязательных поля → 5 (+primary_rationale на эпизод-уровне).
- Новое событие routing_decision в массиве events[] (1 на каждое
решение роутера в сессии; для цепочки из N — N событий).
- Новая под-секция §5.2.1 — структура 7 полей (step / node_chosen /
triggers_matched / candidates_considered / boundaries_applied /
hard_floor / task_classification). primary_rationale — копия
первого routing_decision для дешёвой агрегации без чтения events[].
- Полный JSON-пример эпизода с цепочкой из 2 узлов.
Изменения §5.5:
- /brain-retro aggregation расширен новой секцией «Факторная матрица»:
таблица «узел × фактор × частота» + cross-tab «фактор × фактор».
5 осей факторов: triggers / dropped_because / boundaries /
hard_floor.rules / task_classification.
Эффект: /brain-retro теперь может выдавать утверждения уровня «#55
выбрался против #53 по ADR-009 7 раз и по triggers-match 5 раз», а
не просто «#55 использован 12 раз». Это closes гэп факторного
анализа.
Header bump v1.0 → v1.1. ADR-011 текст в плане Task A1 будет
обновлён следующим коммитом (план amendment).
Связано: dd5bded (spec v1.0), ca93cf7 (plan v1.0).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Резервный CSV-канал импорта лидов от crm.bp-gr.ru: страховка на случай
обрыва webhook. Сверка отчёта поставщика «Запрос номеров» (CSV 3 колонки
Name;Tag;Phone) каждые 30 мин + кнопка вручную; дедуп по phone+project;
recovery пропущенных лидов; drift-детект падения webhook.
Дизайн утверждён заказчиком. Ключевые решения: vid → nullable (CSV не
даёт vid), окно 2 кал. дня, rework SupplierCsvParser/CsvReconcileJob под
реальный async-флоу заказа отчёта.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Deals page redesign: design spec + implementation plan (Phase A page redesign,
Phase B 14->5 status funnel) + v8 HTML mockups (variants comparison + final).
AppSidebar: remove Импорт данных / Отчёты nav links (routes stay reachable by
direct URL); AppLayout.spec updated to 6 nav items. stylelint --fix on mockups;
cspell-words += deals-redesign terms.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Pre-existing баг: 5×../ перелетал repo-root на 2 уровня. Поймана pre-push lychee реколлажа. Корректный путь от docs/superpowers/specs/ до repo-root CLAUDE.md — 3×../
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
B4 + B5 реализованы и закрыты; B1 «Напоминания в сайдбар» откатан как
конфликтующий с прежним решением заказчика «sidebar cleanup» (5c8ad27).
Отмечено в §3 расписании, §4 таблице B и §8 approval log.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Дописана §11: 6 скоростных правил (блок A 5 пунктов + блок B п.3) внесены секцией СКОРОСТЬ в LEVELS[5] хуков; B4 (замер latency хуков) задокументирован как закрытый одноразовый bench. §5.1/§5.2 актуализированы под текущие хуки, §2 формула расширена, статус-шапка → Реализован.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Уровень «экономия 5%» = «0% без избыточности»: то же качество, что 0%,
вырезаны 6 пунктов дублирующей/бесполезной работы (re-read CLAUDE.md,
тесты-после-каждой-правки, gitleaks-full-history per-commit, Stop-верификатор,
авто-гейты brainstorming/plan-mode -> §12.2-floor). Уровень 0% не меняется.
cspell-words.txt: +коммитятся (валидная форма семейства коммит*).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>