diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index cc2d347a..9416f983 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,6 +1,6 @@ # Brain Status (auto-generated) -Last updated: 2026-06-22T04:26:29.315Z +Last updated: 2026-06-22T16:20:13.048Z | Контролёр | Состояние | Детали | |---|---|---| @@ -33,28 +33,30 @@ Last updated: 2026-06-22T04:26:29.315Z | enforce-coverage-verify.mjs | `enforce-coverage-verify.mjs` | 🔴 | | enforce-todowrite-skill-verifier.mjs | `enforce-todowrite-skill-verifier.mjs` | 🔴 | -Недавние escape владельца: 1 · Недавние блоки: 10 +Недавние escape владельца: 3 · Недавние блоки: 10 **Недавние escape владельца (детали):** | Время | Действие | Причина | |---|---|---| -| 2026-06-21T06:38:08.264Z | plan-done | escape владельца | +| 2026-06-22T15:17:16.099Z | gate3-arb:accept:0b0aca2de2baa82bb764634b463339cf993fe43c3c7df2171bed23fa9de0b6bd | escape владельца | +| 2026-06-22T15:15:32.983Z | gate3-arb:accept:0b0aca2de2baa82bb764634b463339cf993fe43c3c7df2171bed23fa9de0b6bd | escape владельца | +| 2026-06-22T05:21:06.824Z | owner-seal:63cfffa28978c4f017141cab7aeb36132774cd3e753e64fdf5d1c7b6e4b4d92d | escape владельца | **Недавние блоки (детали):** | Время | Действие | Причина | |---|---|---| -| 2026-06-22T04:22:18.307Z | bash:cat "$TEMP/claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | -| 2026-06-22T04:17:15.434Z | write:c:/моя/проекты/claude-brain | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | -| 2026-06-22T04:16:46.938Z | powershell:$tempPath = $env:TEMP; $file = "$tempPath\claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json"; if (Test | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | -| 2026-06-22T04:16:38.844Z | write:c:/users/administrator/.claude/projects/c--------------claude-brain/42e79641-ee05-4ee7-97ea-3a545ea2a538.jsonl | path «C:/Users/Administrator/.claude/projects/c--------------claude-brain/42e79641-ee05-4ee7-97ea-3a545ea2a538.jsonl» pr | -| 2026-06-22T04:16:24.368Z | bash:cat "$TEMP/claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | -| 2026-06-22T04:16:24.112Z | bash:cat "$TEMP/claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | -| 2026-06-22T04:15:42.934Z | write:c:/моя/проекты/claude-brain | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | -| 2026-06-22T04:15:18.477Z | write:c:/users/administrator/.claude/projects/c--------------claude-brain/42e79641-ee05-4ee7-97ea-3a545ea2a538.jsonl | path «C:/Users/Administrator/.claude/projects/c--------------claude-brain/42e79641-ee05-4ee7-97ea-3a545ea2a538.jsonl» pr | -| 2026-06-22T04:15:11.140Z | bash:cat "$TEMP/claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | разговорный режим: только думать/спрашивать (реализация — после печати артефакта и плана) | -| 2026-06-22T04:15:11.019Z | bash:cat "$TEMP/claude-economy-42e79641-ee05-4ee7-97ea-3a545ea2a538.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | +| 2026-06-22T16:19:05.841Z | bash:ls $TEMP/claude-economy-ae7348fc-4410-4d81-8546-4b57c2df3ad0.json 2>/dev/null && cat $TEMP/claude-economy-ae7348fc- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-22T16:17:41.809Z | bash:ls $TEMP/claude-economy-ae7348fc-4410-4d81-8546-4b57c2df3ad0.json 2>/dev/null && cat $TEMP/claude-economy-ae7348fc- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-22T16:17:18.508Z | bash:cat "$TEMP/claude-economy-c45f5b05-836d-48ba-bf47-ab3477fd20e5.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | +| 2026-06-22T16:15:37.030Z | bash:ls $TEMP/claude-economy-ae7348fc-4410-4d81-8546-4b57c2df3ad0.json 2>/dev/null && cat $TEMP/claude-economy-ae7348fc- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-22T16:12:12.039Z | bash:ls $TEMP/claude-economy-ae7348fc-4410-4d81-8546-4b57c2df3ad0.json 2>/dev/null && cat $TEMP/claude-economy-ae7348fc- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-22T16:10:29.400Z | bash:cat "$TEMP/claude-economy-c45f5b05-836d-48ba-bf47-ab3477fd20e5.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | +| 2026-06-22T16:07:20.953Z | bash:cat "$TEMP/claude-economy-c45f5b05-836d-48ba-bf47-ab3477fd20e5.json" 2>/dev/null \|\| echo "FILE_NOT_FOUND" | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:cat "$TEMP/claude-econ | +| 2026-06-22T15:58:15.793Z | bash:ls $TEMP/claude-economy-c45f5b05-836d-48ba-bf47-ab3477fd20e5.json 2>/dev/null && cat $TEMP/claude-economy-c45f5b05- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | +| 2026-06-22T15:56:58.348Z | bash:tail -c 8000 "C:\Users\Administrator\.claude\projects\c--------------claude-brain\ae7348fc-4410-4d81-8546-4b57c2df3 | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:tail -c 8000 "C:\Users | +| 2026-06-22T15:56:46.709Z | bash:ls $TEMP/claude-economy-ae7348fc-4410-4d81-8546-4b57c2df3ad0.json 2>/dev/null && cat $TEMP/claude-economy-ae7348fc- | floor: опасная по содержанию команда без аварийного выхода — блок (правило 8); FLOOR-ESCAPE: bash:ls $TEMP/claude-econom | ## Метрики (информационные, не алерты) @@ -134,7 +136,15 @@ Episodes since last run: 542 / threshold: 10 ## System Health -Долго работающих процессов нет (порог CPU > 1ч). +Топ-3 процессов с CPU > 1ч: + +| PID | Имя | CPU-время | Возраст | +|---|---|---|---| +| 6976 | Code | 2.59ч | 0.0ч | +| 3440 | MsMpEng | 2.57ч | NaNч | +| 14232 | msedge | 2.39ч | 0.0ч | + +⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий. ## Очередь обучения роутера @@ -148,7 +158,7 @@ Episodes since last run: 542 / threshold: 10 ## Целостность журналов действий -🔴 Битые цепочки (3 из 104): +🔴 Битые цепочки (3 из 107): | session | broken at seq | |---|---| diff --git a/docs/superpowers/specs/2026-06-22-СОСТОЯНИЕ-остатки-и-ключи.md b/docs/superpowers/specs/2026-06-22-СОСТОЯНИЕ-остатки-и-ключи.md new file mode 100644 index 00000000..c8c5c617 --- /dev/null +++ b/docs/superpowers/specs/2026-06-22-СОСТОЯНИЕ-остатки-и-ключи.md @@ -0,0 +1,68 @@ +# 📌 Лидерра — состояние, остатки и ключи (на 22.06.2026) + +**Назначение:** единая сводка — что сделано, что ждёт наката, что нужно от владельца (ключи/решения), что ждёт ООО. Заменяет россыпь пометок по handoff-докам. + +--- + +## ✅ Сделано + +### На боевом liderra.ru (работает) + +- M-1 (app-гейт админки fail-closed), M-2 (реальная капча Yandex SmartCaptcha). +- FN-RESET (сброс пароля), FN-LOGIN-ROUTE, FN-2, FN-3, FN-ENC. +- F-CSV (защита экспорта от инъекций), apiv1-rate (лимит API), N-4 (дайджест без дублей). +- F-T1 (SSRF-guard вебхуков), F-P1 (чистка ПДн), F-T2 (гейт `/api/admin/*`). +- Impersonation: письмо-код на init, письмо клиенту на end, реальная сессия. +- impersonation_tokens RLS = ON. F1 CVE — пакеты пропатчены. +- **failed_jobs очищены** (494 191 → 0). **tenant 24 удалён** (soft-delete). **rekey-orphans** проверен — сирот нет. + +### В коде (gitea), ⏳ ЖДЁТ НАКАТА НА ПРОД + +- **F-NEWPROJECT-1** — клиентская валидация формы нового проекта. +- **RLS на `tenants`** + **`created_at` → TIMESTAMPTZ** (schema v8.51). ⚠️ TZ-ALTER блокирует партиции → деплой в окно низкой нагрузки. +- **Минор**: зелёный тост после отмены отчёта. +- **#21** — карта разделов schema (убран stale `reminders`). +- **JivoSite-виджет** — встроен, спит без ключа. +- Техдолг линтеров `db/` вычищен (коммиты схемы идут без `LEFTHOOK=0`). + +--- + +## 🔑 КЛЮЧИ ОТ ТЕБЯ (чтобы включить каналы) + +| Сервис | Что это | Что дать мне | Куда впишу | Когда | +|---|---|---|---|---| +| **Sentry** | сигнализация об ошибках | **DSN** (строка-ключ из Sentry-инстанса) | `SENTRY_DSN` (+ фронт) | сейчас | +| **JivoSite** | онлайн-чат поддержки на сайте | **ID канала/виджета** (с jivo.ru) | `VITE_JIVO_WIDGET_ID` | сейчас | +| **Slack — ошибки** | техн. ошибки в чат (готово в коде) | **Incoming Webhook URL** | `LOG_SLACK_WEBHOOK_URL` | сейчас | +| **Slack — бизнес-события** | «новый клиент/пополнение/нет денег/поставщик молчит» | сначала **список событий**, потом тот же Webhook | — (надо встроить) | сейчас, после твоего списка | +| **Платёжка (ЮKassa)** | приём денег картой (G5) | **shopId + секретный ключ** | `YOOKASSA_*` | после ООО | +| **Yandex 360 SSO** | вход админов-сотрудников | **client_id + client_secret** + список сотрудников (DO-4) | OAuth-конфиг | после ООО | + +**Коротко:** дай 3 ключа (Sentry DSN, Jivo ID, Slack Webhook) — включу Sentry/Jivo/Slack-ошибки сразу. Скажи список Slack-событий — соберу бизнес-уведомления. Платёжка и SSO — после ООО. + +--- + +## 👤 Решения/действия владельца + +- **Накат на прод** свежих коммитов из gitea (через prod-deploy-validator). +- **Slack-события** — подтвердить список (предложено: новый клиент / пополнение / кончились деньги / поставщик молчит). + +> Пункт «online→batch» снят с обсуждения по запросу владельца (известен, не остаток). + +--- + +## ⛔ Ждёт регистрации ООО (Б-1) + +G5 (оплата картой) · Yandex 360 SSO · домен liderra.ru · контакты подвала · оферта/политика/уведомление РКН (юрист). + +--- + +## 🚫 Снято (доделать пакетом с Yandex SSO после ООО) + +Two-person approval · role-guard супер-админа · SupplierResolver fallback · обезличенный `admin_user_id` · настоящий saas-admin вход. + +--- + +## Закрыто как «не остаток» + +Раздел B (переоценка охвата тестов — реальные гапы уже покрыты +9 тестами) · техдолг линтеров `db/`.