diff --git a/docs/observer/STATUS.md b/docs/observer/STATUS.md index d9362b09..37bfd864 100644 --- a/docs/observer/STATUS.md +++ b/docs/observer/STATUS.md @@ -1,6 +1,6 @@ # Brain Status (auto-generated) -Last updated: 2026-05-22T15:11:41.534Z +Last updated: 2026-05-22T15:50:05.811Z | Контролёр | Состояние | Детали | |---|---|---| @@ -8,15 +8,15 @@ Last updated: 2026-05-22T15:11:41.534Z | C2 Cross-ref consistency | ✅ | [cross-ref-checker] OK — 0 drift in 4 files | | C3 Observer-of-observer | ✅ | [observer-of-observer] OK — last read 0 week(s) ago | | C4 Сигнальный статус | ✅ | This file (self-reference) | -| C5 Observer-coverage | ⚠️ | 76 episode(s) this month · Stop-hook + post-commit OK · 28 missed activation(s) — see /brain-retro | -| C6 Chain map sync | ✅ | [chain-map-checker] OK — 15 chains in sync | +| C5 Observer-coverage | ⚠️ | 78 episode(s) this month · Stop-hook + post-commit OK · 29 missed activation(s) — see /brain-retro | +| C6 Chain map sync | 🔴 | В .md есть цепочки без записи в JSON: L16 — добавьте узлы в tools/observer-chain-map.json | ## Метрики (информационные, не алерты) -- Observer evidence: 76 episodes this month, 0 observer_error markers, 23 PII matches before filter +- Observer evidence: 78 episodes this month, 0 observer_error markers, 8 PII matches before filter - Legacy v1 episodes (not in factor analysis): 5 - Last /brain-retro: 3 day(s) ago -- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 28. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store). +- Использование узлов: см. `/brain-retro` (раз в спринт). missed_activations: 29. **Неиспользованные узлы — не алерт, если профильной задачи не было** (Pravila §16.4 v1.36; capability-readiness; см. memory `feedback_brain_unused_tools_not_problem` — outside-repo memory store). ## Алерт-индикаторы diff --git a/ПИЛОТ.md b/ПИЛОТ.md index fed8fd90..e319e6c1 100644 --- a/ПИЛОТ.md +++ b/ПИЛОТ.md @@ -8,7 +8,7 @@ - Волатильную часть (доступ, версии, что развёрнуто) перед рискованными действиями **перепроверять реальной командой по SSH**, не доверять снимку вслепую. - Обновляется по команде заказчика **«обнови пилот»**. -**Снимок снят:** 22.05.2026 (поздний вечер) — устранён инцидент **500 Server Error на всём портале** (повреждённый `APP_KEY` в `.env`: 24 строки с CRLF + дубль ключа от `key:generate` → Laravel падал на дефолтный sqlite-кэш; **APP_KEY ротирован** — все Redis-сессии стали невалидны, юзеры разлогинятся при следующем визите). Развёрнут **мониторинг доступности с email-алёртом на `kdv1@bk.ru`** (cron `/2 мин`), **pre-flight гейт деплоя** `/usr/local/bin/liderra-precheck.sh` (15 проверок: CRLF в .env, длина APP_KEY, decrypt(encrypt) round-trip, PG/Redis ping, ...), **systemd-лимиты для `liderra-queue`** (Restart=on-failure + Burst=5/5min + OnFailure email — больше не крутится в бесконечном крэше); в WAF для `/api/*` поднят порог `inbound_anomaly_score` 5→10 (правило 1900300 в `liderra-exclusions.conf` — edge-case JSON-payloads больше не дают false-positive). Скрипты в `tools/liderra-monitoring/` (push `365d1a0`). Раньше 22.05 — развёрнут серверный слой безопасности (HTTPS, fail2ban, бэкапы, **WAF в режиме блокировки**) + расширения БД pg_audit/pg_anonymizer + Lockbox-хранилище секретов; **APP_URL переведён на `https://liderra.ru`** + SANCTUM-домены; **настроена фирменная исходящая почта `verify@liderra.ru`** (Яндекс 360 — §7). **Выкачен прикладной код:** регистрация по коду на email + обязательный телефон (E2E live ✅), денежный фикс деления лимита B1/B2/B3, RLS-фикс admin-impersonation (§2). **Также 22.05 поздний вечер** — выполнен сквозной аудит журналирования (статика + конфиг + живые цифры с прода): найдено 9+ дыр — `pd_processing_log=0` при 417 сделках с телефонами, `activity_log` 412 строк все с `user_id=NULL`, `incidents_log` не наполняется автоматически (25 445 failed_webhook_jobs прошли без инцидента). Подготовлены три плана закрытия — см. §6 пп.7–9. **Также 22.05 поздний вечер** — выкачен **backend supplier group-sync fix** (на main `d3197095`, мерж 2 моих коммитов `1be2d62f` + `2033655f` поверх C1-marketing-tooling параллельной сессии): online-синхронизация теперь пересчитывает всю «группу» источника (union regions/days, group computeOrder + distribute, status paused) вместо данных одного проекта; смена источника отвязывает старые supplier_projects + dispatches DeleteSupplierProjectJob; auto-link корня перенесён в main. Закрывает на проде #1 при изменении (`20→30 → 10/10/10`, переплата ×3 устранена), #10 пауза (`status=false`, заказы остановлены), C2/C3 multi-client (union вместо затирания). 5 файлов задеплоены `/var/www/liderra/app/`, бэкап `/home/ubuntu/deploy-backups/2026-05-22-supplier-group-fix.tar.gz`, проверено вживую qa-проектами + чистка. +**Снимок снят:** 22.05.2026 (поздний вечер +1) — выкачены на боевой **UI-замечания #4-#7 (П12-П15)** страницы «Проекты» (origin/main `0e5ab345`): #4 правая панель и галочка теперь исчезают после Save/Pause/Delete (drawer.onPause +emit close, ProjectsView.onDrawerSaved +clearSelection); #5 отступ от тёмных границ выровнен с KanbanView (24 px со всех сторон, scoped CSS вместо Vuetify `pa-6` чтобы `has-drawer` мог перекрыть правый отступ); #6 селектор «Показывать по 20/50/100/200» (паттерн как у DealsView, v-btn-toggle) + v-pagination когда total>per_page + серверный max per_page 100→200; #7 фильтры **регион** (89 субъектов; проекты с пустым `regions[]` = «вся РФ» попадают в любой фильтр через `regions @> ARRAY[?]::int[] OR regions='{}'/NULL`) и **день приёма** (bitwise `delivery_days_mask & (1<` и в заголовок CSP; (б) `app.config.cspNonce = ` в Vue-bootstrap; (в) проверка, что Vuetify (Vue 3) подхватывает `cspNonce` для динамических `