8769245ed5
Живой бой 30.07.2026. Сегмент дозрел за 15 часов — Яндекс опознал 1644 человека
из 1693, охват 3379. Портал нажал «Запустить» и получил отказ Директа:
Budget for this period cannot be less than 600 rub.
Стена оказалась не одна, а две. Обе — молчаливые: портал о них не знал.
Первая — аудитория. Сегмент в Аудиториях существует и при этом НЕГОДЕН, пока
Яндекс сводит загруженные номера с людьми. Портал этого не спрашивал вообще:
ни один файл не читал can_create_dependent. Он просто шёл в Директ строить
условие ретаргетинга и получал «объект не найден» — тот же отказ, что и на
несуществующий сегмент. Судить о готовности можно ТОЛЬКО по can_create_dependent:
статус is_processed означает «обрабатывается», а не «готов».
Вторая — деньги. Директ не берёт кампанию, у которой бюджет за период ниже
шестисот рублей. Приёмочная кампания на 1693 показа давала около 146 рублей.
Проверки минимума в портале не было тоже.
В обоих случаях клиент видел сырую ошибку Яндекса на английском и не понимал,
виноват ли он и что делать дальше.
Что сделано. Обе проверки выполняются ДО первого обращения к Яндексу: в кабинете
ничего не создаётся, деньги не морозятся, кампания остаётся черновиком.
аудитория ещё готовится → 202 и «подождите, обычно несколько часов»
смета мала → 422 и «нужно 6945 показов, это 833.40 рублей»
Наружу уходят ТОЛЬКО клиентские числа. Ни минимума площадки, ни нашей наценки:
по паре «минимум площадки — цена клиенту» долю Яндекса можно вычислить делением.
Минимум вынесен в настройку YANDEX_DIRECT_MIN_SPEND_RUB, Яндекс может его менять.
Тестом вперёд, в живой Яндекс из тестов не ходили. Четыре новых теста на запуск
и два на ответы портала. Реклама целиком: 342 теста зелёные.
Заодно приведён в порядок список исключений статанализа. Он был красным ЗАДОЛГО
до этой правки и не пускал ни одну правку кода: 629 замечаний до моих изменений,
638 после. Проверено в обеих папках работы — не артефакт подпапки.
Разбор 637 замечаний по составу:
611 — статанализ не понимает устройство тестов Pest и ругается на
обращения вида this->postJson и this->tenant. Таких записей в списке
исключений уже было 671 — просто новые тестовые файлы туда не дописали.
26 — придирки к типам, из них 7 в боевом коде.
Все семь в боевом коде разобраны поимённо и оказались ложной тревогой. Доказано
не рассуждением, а зелёными тестами, которые упали бы при настоящей поломке:
shows_until, три замечания — три теста прямо проверяют закрытие кампании по
истечении срока показа и разморозку остатка. Будь там строка вместо даты,
первый тест упал бы, а деньги клиента остались бы заперты навсегда.
snapshot_from и snapshot_to, два замечания — тесты ручного режима строят
аудиторию по этим датам, на строке они бы рухнули.
SetTenantContext строка 56 и CampaignMessageService строка 168 — лишние
подстраховки, вреда нет.
Корень ложных срабатываний: Larastan ищет приведения типов в старом виде —
свойством casts, а у нас метод casts. Код правильный, инструмент отстал.
После обновления списка статанализ зелёный: 0 замечаний. Теперь сторож снова
ловит НОВОЕ, а не молчит красным.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
144 lines
8.8 KiB
Markdown
144 lines
8.8 KiB
Markdown
# Brain Status (auto-generated)
|
||
|
||
Last updated: 2026-07-30T09:36:32.961Z
|
||
|
||
| Контролёр | Состояние | Детали |
|
||
|---|---|---|
|
||
| C1 L1-watcher | 🔴 | If the plugin is referenced in Tooling under a group/human name, add an alias to tools/.l1-watcher-aliases.txt. |
|
||
| C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files |
|
||
| C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 9 week(s) ago |
|
||
| C4 Сигнальный статус | ✅ | This file (self-reference) |
|
||
| C5 Observer-coverage | ⚠️ | 0 episode(s) this month · observer-stop-hook NOT registered in .claude/settings.json Stop hook; .git/hooks/post-commit not installed (run: npx lefthook install --force) |
|
||
| C6 Chain map sync | ✅ | [chain-map-checker] OK — 17 chains in sync |
|
||
|
||
## Кто на посту (оборона М1–М6)
|
||
|
||
⚠️ **ПОСТ ПУСТОЙ** — не зарегистрированы: enforce-floor.mjs, enforce-supreme-gate.mjs, enforce-normative-content-rules.mjs, enforce-read-path-deny.mjs, enforce-mcp-classification.mjs, enforce-judge-gate.mjs, enforce-snapshot.mjs, enforce-floor-escape-consume.mjs, enforce-skill-journaler.mjs, enforce-verify-gate.mjs, enforce-criterion-gate.mjs, enforce-coverage-verify.mjs, enforce-todowrite-skill-verifier.mjs (оборона НЕ подтверждена; SE-B/Δ8)
|
||
|
||
Судья М4: **live-block** (inert $0 / shadow / floor-only / live-block)
|
||
|
||
| Машина / страж | Хук | Зарегистрирован |
|
||
|---|---|---|
|
||
| М5 Пол (вето-до-плана / content-floor) | `enforce-floor.mjs` | 🔴 |
|
||
| М2 Стена (действие = шаг плана) | `enforce-supreme-gate.mjs` | 🔴 |
|
||
| М1/М5 Нормативный страж (КАРТА/ЗАКОН) | `enforce-normative-content-rules.mjs` | 🔴 |
|
||
| М5 Read-exfil страж | `enforce-read-path-deny.mjs` | 🔴 |
|
||
| М5 Egress-exfil страж | `enforce-mcp-classification.mjs` | 🔴 |
|
||
| М4 Судья (приёмка + надзор) | `enforce-judge-gate.mjs` | 🔴 |
|
||
| М6 Снимок (точка отката) | `enforce-snapshot.mjs` | 🔴 |
|
||
| М6 Escape владельца (законная дверь) | `enforce-floor-escape-consume.mjs` | 🔴 |
|
||
| М1 Журналер навыков | `enforce-skill-journaler.mjs` | 🔴 |
|
||
| enforce-verify-gate.mjs | `enforce-verify-gate.mjs` | 🔴 |
|
||
| enforce-criterion-gate.mjs | `enforce-criterion-gate.mjs` | 🔴 |
|
||
| enforce-coverage-verify.mjs | `enforce-coverage-verify.mjs` | 🔴 |
|
||
| enforce-todowrite-skill-verifier.mjs | `enforce-todowrite-skill-verifier.mjs` | 🔴 |
|
||
|
||
Недавние escape владельца: 0 · Недавние блоки: 0
|
||
|
||
## Метрики (информационные, не алерты)
|
||
|
||
- Observer evidence: 0 episodes this month, 0 observer_error markers, 0 PII matches before filter
|
||
- Legacy v1 episodes (not in factor analysis): 0
|
||
- Last /brain-retro: 64 day(s) ago
|
||
- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 0. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store).
|
||
|
||
## Метрики дисциплины
|
||
|
||
Baseline дисциплины роутера (этап 2 router discipline overhaul, spec 2026-05-23). Цель — увидеть «точку До» перед enforcement-хуком этапа 3.
|
||
|
||
| Тип задачи | Эпизодов | % с триггер-матчем | % через скил |
|
||
|---|---|---|---|
|
||
| (no data) | 0 | 0% | 0% |
|
||
|
||
Router step distribution: (empty)
|
||
|
||
Boundaries applied (ADR / границы): 0 of 0 эпизодов (0.0%).
|
||
|
||
## Активные многоэтапные проекты
|
||
|
||
- **Router discipline overhaul** ([spec](../superpowers/specs/2026-05-23-router-discipline-overhaul-design.md))
|
||
- Этап 1 (машиночитаемый реестр) ✅ закрыт 2026-05-23 — `docs/registry/nodes.yaml` (83 узла + 16 chains L1-L16), `tools/registry-load.mjs` + `tools/registry-render.mjs` (16 тестов), auto-render Tooling §4.0 + routing-off-phase, lefthook job 17 (warn-only).
|
||
- Этап 2 (измерения + классификатор-парсер) ✅ закрыт 2026-05-24 + влит в main 2026-05-24 — discipline-metrics (3 среза), brain-retro-analyzer переключён на реестр, STATUS.md блок «Метрики дисциплины», baseline snapshot `docs/observer/baselines/2026-05-24-pre-enforcement.md`. Plan: `docs/superpowers/plans/2026-05-24-router-overhaul-stage-2-measurements.md`.
|
||
- Этап 3 (принуждение — хук на routing) — Phase A+B (классификатор + 3 хука: router-prehook/tool-gate/stop-gate в `.claude/settings.json`) ✅ + влит в main 2026-05-24. Гейт работает в режиме **`warn-only`** (только stderr-предупреждения, никакой блокировки). Bug-fix `bec69aa5`: `deriveRouterStep` в `tools/discipline-metrics.mjs` — шаг роутера теперь выводится из наблюдаемых признаков (был захардкоженной константой 1). **Follow-up 3 fixes 2026-05-24** (после ANTHROPIC_API_KEY + рестарта CC выявлены при инспекции state): (a) UTF-8 stdin helper `tools/router-stdin-helper.mjs` через `StringDecoder` + подключение к 3 хукам (русский в state-файл и Anthropic API без mojibake); (b) `tools/observer-state-enricher.mjs` — pure helper для чтения `router-state-<session>.json`; (c) `parseTranscript` обогащение `primary_rationale` 4 полями (`recommended_node` override + `recommended_chain` + `chain_progress` + `chain_completed`). 538 tools-тестов GREEN. Plan: `docs/superpowers/plans/2026-05-24-router-stage3-three-fixes.md`. CHECKPOINT B: дать warn-only накопить реальные наблюдения с **починенным** сторожем (план говорит «минимум 24 часа»), затем Task 9 — переключение в `enforce` + 2 новых метрики (domain-hit-rate / chain-completion). Plan: `docs/superpowers/plans/2026-05-24-router-overhaul-stage-3-enforcement.md`.
|
||
- Этап 4 (уборка устаревших правил, deprecation `observer-classification-map.json` → удаление) — не начат.
|
||
|
||
## Длинные сессии
|
||
|
||
(нет данных)
|
||
|
||
## Стоимость месяца
|
||
|
||
| Компонент | Токены (in/out) | USD |
|
||
|---|---|---|
|
||
| Classifier (Sonnet 4.6) | 0/0 | $0.00 |
|
||
| Self-assessment (Sonnet 4.6) | 0/0 | $0.00 |
|
||
| Reviewer (Opus 4.7 + fallback) | 0/0 | $0.00 |
|
||
| **Итого** | | **$0.00** |
|
||
|
||
## Аномалии классификатора
|
||
|
||
Аномалий нет.
|
||
|
||
## Авто-ретроспектива
|
||
|
||
Last self-retrospect: never ⚠️ (542 эпизодов с последнего запуска, порог 10)
|
||
Episodes since last run: 542 / threshold: 10
|
||
|
||
## Reviewer: субагент vs fallback
|
||
|
||
0 эпизодов проверено из 0.
|
||
|
||
## Reviewer findings
|
||
|
||
(нет проверенных эпизодов в текущем периоде)
|
||
|
||
## Использование override-фраз
|
||
|
||
|
||
|
||
| Фраза | За всё время | За сегодня |
|
||
|---|---|---|
|
||
| `recovery` | 2302 | 0 |
|
||
| `без скилов` | 507 | 0 |
|
||
| `ремонт инфраструктуры` | 331 | 0 |
|
||
| `срочно` | 225 | 0 |
|
||
| `memory dump` | 46 | 0 |
|
||
| `direct ok` | 6 | 0 |
|
||
| `быстрый коммит` | 3 | 0 |
|
||
|
||
## System Health
|
||
|
||
Топ-3 процессов с CPU > 1ч:
|
||
|
||
| PID | Имя | CPU-время | Возраст |
|
||
|---|---|---|---|
|
||
| 3544 | MsMpEng | 8.05ч | 0.0ч |
|
||
| 23936 | Code | 2.15ч | NaNч |
|
||
| 4 | System | 1.33ч | 0.0ч |
|
||
|
||
⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.
|
||
|
||
## Очередь обучения роутера
|
||
|
||
Очередь пуста — нет кандидатов на одобрение.
|
||
|
||
## Покрытие дверей
|
||
|
||
⚠️ Есть забытые двери (matcher: (хук НЕ зарегистрирован)).
|
||
|
||
Непокрытые мутирующие инструменты: Edit, Write, MultiEdit, NotebookEdit, Bash, Task, Skill
|
||
|
||
## Целостность журналов действий
|
||
|
||
🔴 Битые цепочки (3 из 120):
|
||
|
||
| session | broken at seq |
|
||
|---|---|
|
||
| `03437265-6d58-4622-aeed-c0eeac0f2c32` | 1 |
|
||
| `54594686-843c-4ea8-bcd3-5ae6a7244e30` | 14 |
|
||
| `9c02276d-dabb-40e4-9c04-44c18d47485a` | 14 |
|
||
|
||
## Алерт-индикаторы
|
||
|
||
✅ — норма ・ ⚠️ — внимание ・ 🔴 — действие требуется ・ ⚪ — не запускалось
|