Files
portal/docs/observer/STATUS.md
T
Дмитрий a4a8ea31b9 refactor(security): единый источник security-заголовков — nginx
Убраны дубли HTTP-заголовков. nginx уже шлёт enforcing CSP, X-Frame-Options,
X-Content-Type-Options, Referrer-Policy, HSTS, Permissions-Policy, COOP, CORP
через add_header always. App-уровневый middleware SecurityHeaders дублировал
четыре из них и слал лишний CSP Report-Only; на проде add_header always плюс
PHP-заголовок давали дубль в ответе.

- удалён middleware SecurityHeaders и его регистрация в bootstrap/app.php
- SecurityHeadersTest переписан: фиксирует, что приложение эти заголовки не ставит

Прод-дедуп вступит в силу после деплоя. Verify локально 4 из 4 green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 09:31:47 +03:00

183 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Brain Status (auto-generated)
Last updated: 2026-06-18T06:11:12.692Z
| Контролёр | Состояние | Детали |
|---|---|---|
| C1 L1-watcher | ✅ | [l1-watcher] OK — 0 drift |
| C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files |
| C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 3 week(s) ago |
| C4 Сигнальный статус | ✅ | This file (self-reference) |
| C5 Observer-coverage | ✅ | 2177 episode(s) this month · Stop-hook + post-commit OK |
| C6 Chain map sync | ✅ | [chain-map-checker] OK — 17 chains in sync |
## Кто на посту (оборона М1–М6)
⚠️ **ПОСТ ПУСТОЙ** — не зарегистрированы: enforce-judge-gate.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` | ✅ |
| М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` | ✅ |
| М4 Судья (приёмка + надзор) | `enforce-judge-gate.mjs` | 🔴 |
Недавние escape владельца: 10 · Недавние блоки: 10
**Недавние escape владельца (детали):**
| Время | Действие | Причина |
|---|---|---|
| 2026-06-18T06:08:47.673Z | write:c:/моя/проекты/claude-brain/tools/standby-mode-control.mjs | escape владельца |
| 2026-06-18T06:08:24.060Z | bash:ssh liderra-prod 'sudo -u postgres psql -d liderra -tA -c "SELECT id, tenant_id, email, created_at FROM users ORDER | escape владельца |
| 2026-06-18T06:08:17.915Z | write:c:/моя/проекты/портал crm/документация/docs/superpowers/runbooks/2026-06-18-gitea-prod-deploy-pipeline.md | escape владельца |
| 2026-06-18T06:04:44.929Z | bash:ssh liderra-prod 'sudo -u postgres psql -d liderra -tA -c "SELECT id, subdomain, organization_name, contact_email, | escape владельца |
| 2026-06-18T06:04:30.671Z | gate3-arb:continue:2671a8496c40010114e1165780148740d431e17cae66a5f9b2d94e869d6d3ad4 | escape владельца |
| 2026-06-18T06:00:47.994Z | bash:composer --working-dir=app test -- tests/Feature/AdminBillingIndexTest.php tests/Feature/AdminIncidentsIndexTest.ph | escape владельца |
| 2026-06-18T06:00:10.711Z | write:c:/моя/проекты/портал crm/документация/app/tests/feature/adminbillingindextest.php | escape владельца |
| 2026-06-18T05:59:46.643Z | write:c:/моя/проекты/claude-brain/docs/superpowers/specs/2026-06-18-wall-impl-read-freedom-design.md | escape владельца |
| 2026-06-18T05:56:49.449Z | bash:composer --working-dir=app test -- tests/Feature/AdminBillingIndexTest.php tests/Feature/AdminIncidentsIndexTest.ph | escape владельца |
| 2026-06-18T05:52:42.671Z | write:c:/моя/проекты/портал crm/документация/docs/superpowers/router-mentor-wall-guide.md | escape владельца |
**Недавние блоки (детали):**
| Время | Действие | Причина |
|---|---|---|
| 2026-06-18T06:11:19.256Z | write:c:/users/administrator/.claude/projects/c--------------claude-brain/5714105c-2a95-4bc9-ad32-1714dc853904.jsonl | path «C:/Users/Administrator/.claude/projects/c--------------claude-brain/5714105c-2a95-4bc9-ad32-1714dc853904.jsonl» pr |
| 2026-06-18T06:11:11.354Z | bash:cat "$TEMP/claude-economy-5714105c-2a95-4bc9-ad32-1714dc853904.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
| 2026-06-18T06:11:11.301Z | bash:cat "$TEMP/claude-economy-5714105c-2a95-4bc9-ad32-1714dc853904.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ |
| 2026-06-18T06:10:44.905Z | write:c:/моя/проекты/портал crm/документация | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
| 2026-06-18T06:10:35.112Z | powershell:$tempPath = $env:TEMP; $file = "$tempPath\claude-economy-51a6fd40-3220-4b06-bdcc-8541a67857c1.json"; if (Test | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
| 2026-06-18T06:10:31.109Z | write:c:/users/administrator/.claude/projects/c---------------------crm-------------/51a6fd40-3220-4b06-bdcc-8541a67857c | path «C:/Users/Administrator/.claude/projects/c---------------------crm-------------/51a6fd40-3220-4b06-bdcc-8541a67857c |
| 2026-06-18T06:10:25.862Z | bash:cat "$TEMP/claude-economy-51a6fd40-3220-4b06-bdcc-8541a67857c1.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
| 2026-06-18T06:10:25.762Z | bash:cat "$TEMP/claude-economy-51a6fd40-3220-4b06-bdcc-8541a67857c1.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ |
| 2026-06-18T06:10:25.438Z | write:c:/моя/проекты/claude-brain | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
| 2026-06-18T06:10:10.586Z | write:c:/моя/проекты/портал crm/документация | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) |
## Метрики (информационные, не алерты)
- Observer evidence: 2177 episodes this month, 0 observer_error markers, 38 PII matches before filter
- Legacy v1 episodes (not in factor analysis): 2177
- Last /brain-retro: 22 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.
| Тип задачи | Эпизодов | % с триггер-матчем | % через скил |
|---|---|---|---|
| planning | 247 | 5.3% | 16.6% |
| feature | 74 | 4.1% | 4.1% |
| bugfix | 58 | 6.9% | 12.1% |
| analysis | 50 | 6.0% | 2.0% |
| cleanup | 2 | 0.0% | 0.0% |
| refactor | 1 | 0.0% | 0.0% |
Router step distribution: 1: 1162, 2: 747, 3: 40, 5: 199
Boundaries applied (ADR / границы): 33 of 2148 эпизодов (1.5%).
## Активные многоэтапные проекты
- **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` → удаление) — не начат.
## Длинные сессии
⚠️ Сегодня (2026-06-18 UTC) есть сессии с ≥50 ходов — корреляция с падением дисциплины роутинга (retro #5 candidate B).
| session_id | макс. ход | % regulated | последний эпизод |
|---|---|---|---|
| `ffef16cb` | 50 | 3% | 2026-06-18T05:23:41.663Z |
Long sessions correlate with discipline drift. Если % regulated просел в текущей сессии — рассмотри перезапуск.
## Стоимость месяца
| Компонент | Токены (in/out) | USD |
|---|---|---|
| Classifier (Sonnet 4.6) | 68479/251178 | $3.97 |
| Self-assessment (Sonnet 4.6) | 0/0 | $0.00 |
| Reviewer (Opus 4.7 + fallback) | 0/0 | $0.00 |
| **Итого** | | **$3.97** |
## Аномалии классификатора
Аномалий нет.
## Авто-ретроспектива
Last self-retrospect: never ⚠️ (542 эпизодов с последнего запуска, порог 10)
Episodes since last run: 542 / threshold: 10
## Reviewer: субагент vs fallback
0 эпизодов проверено из 2177.
## 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-время | Возраст |
|---|---|---|---|
| 3420 | MsMpEng | 2.91ч | 0.0ч |
| 18808 | php | 1.30ч | NaNч |
| 1104 | svchost | 1.21ч | 12284958.2ч |
⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.
## Очередь обучения роутера
Очередь пуста — нет кандидатов на одобрение.
## Покрытие дверей
✅ Все двери покрыты верховной стеной М2 (matcher: *).
## Целостность журналов действий
🔴 Битые цепочки (3 из 76):
| session | broken at seq |
|---|---|
| `03437265-6d58-4622-aeed-c0eeac0f2c32` | 1 |
| `54594686-843c-4ea8-bcd3-5ae6a7244e30` | 14 |
| `9c02276d-dabb-40e4-9c04-44c18d47485a` | 14 |
## Алерт-индикаторы
✅ — норма ・ ⚠️ — внимание ・ 🔴 — действие требуется ・ ⚪ — не запускалось