# AWatch-rus Production Validation Дата проверки: 2026-06-07. Статус после TASK_015: рабочий внутренний pilot-контур приведен к Demo Freeze v1 по portal runtime, production-hardening endpoints и основным live smoke. UEBA `critical` разобран в `docs/UEBA_CRITICAL_REVIEW_RU.md` и классифицирован как `Needs Investigation`. Расширение пилота допустимо только контролируемо, после проверки agent coverage и назначения операционного ownership. ## Executive Summary Проверка выполнялась read-only по рабочему внутреннему контуру на нескольких пользователях. Реальные payload, логи, screenshots, IP-адреса, hostname, логины, ФИО и подразделения в репозиторий не сохранялись. Подтверждено: - gateway и portal service доступны; - базовый portal UI открывается; - ActivityWatch API доступен и содержит свежие buckets; - `/portal/api/reports` отвечает по ролям; - Security events backend в рабочем контуре подключен; - role gates в существующем portal smoke срабатывают; - Forensics view и базовые portal tabs открываются; - Windows runtime содержит активный текущий агентский процесс и watcher-процессы. Ключевые gaps, найденные до TASK_014: - фактический portal runtime отстает от Demo Freeze v1: отдельные endpoints `/portal/api/workforce/kpi/explain`, `/portal/api/risk/narrative` и `/portal/api/actions` на live-контуре возвращают `404`; - production-hardening endpoints `/healthz`, `/readyz`, `/version`, `/metrics` не доступны на фактическом portal port; gateway-level `/healthz` отвечает, но это не заменяет portal production contract; - request id / correlation id headers на live portal API не возвращаются; - Executive visual conformance не проходит по текущему freeze smoke: в рабочем runtime не отображаются новые Pilot v1 блоки Risk Narrative / Explainable KPI / Recommended Actions; - UEBA на live-контуре возвращает `critical` score; TASK_015 классифицировал его как `Needs Investigation`, а не как подтвержденный инцидент ИБ. TASK_014 remediation update: - deployment/version drift закрыт controlled deploy актуального release binary; - live `/healthz`, `/readyz`, `/version`, `/metrics` теперь отвечают `200`; - request id / correlation id headers возвращаются; - live Explainable KPI, Risk Narrative и Executive Action Center endpoints отвечают `200`; - live production hardening smoke прошел; - live browser conformance smoke прошел; - live portal tabs smoke прошел. Вывод: контур можно использовать для контролируемого внутреннего pilot review и подготовки ограниченного пилота. Перед расширением на 10-50 пользователей остается проверить agent coverage, уточнить missing application data и закрепить порядок операционной поддержки. ## Scope Проверялось: - runtime health; - gateway/portal topology; - portal tabs and role views; - Workforce KPI и related report structure; - Explainable KPI availability; - UEBA; - Risk Narrative availability; - Executive Action Center availability; - agent/data flow; - performance snapshot; - data hygiene. Не проверялось: - destructive recovery; - restart/redeploy; - изменение правил scoring; - изменение collectors; - production rollout новой версии; - raw evidence review с персональными данными. ## Environment Обезличенно: - пользователей: несколько; - контур: working internal pilot; - данные: реальные, но в документе не раскрываются; - gateway: отдельный reverse-proxy host с внешней авторизацией; - portal runtime: локальный сервис на gateway host; - ActivityWatch/worktime: отдельный AW-rus server; - Windows runtime: RDP host с текущим агентским контуром. ## Runtime Health Проверено: | Поверхность | Результат | Комментарий | | --- | --- | --- | | Gateway `/healthz` | `200` | Nginx/gateway-level health отвечает | | Gateway `/portal/` | `401` снаружи | Внешний доступ закрыт авторизацией | | Portal local `/portal/` | `200` | UI доступен на gateway host | | Portal local `/portal/api/health` | `200` | API health доступен | | Portal local `/healthz` | `200` | Production-hardening endpoint подтвержден после TASK_014 | | Portal local `/readyz` | `200` | Production-hardening endpoint подтвержден после TASK_014 | | Portal local `/version` | `200` | Production-hardening endpoint подтвержден после TASK_014 | | Portal local `/metrics` | `200` | Prometheus text metrics подтверждены после TASK_014 | | ActivityWatch `/api/0/settings` | `200` | AW API отвечает | Request/correlation headers после TASK_014: - `X-Request-Id`: возвращается live portal API; - `X-Correlation-Id`: возвращается live portal API. Metrics: - Prometheus metrics format на фактическом portal runtime подтвержден через `/metrics`. ## Portal Validation Проверено через tunnel к фактическому gateway-local portal port. Screenshots создавались только во временном каталоге вне репозитория и не коммитились. Результат `scripts/browser-conformance-smoke.mjs` на live-контуре после TASK_014: | View | Результат | Комментарий | | --- | --- | --- | | Executive | OK | KPI, Explainable KPI, Risk Narrative и Recommended Actions отображаются | | Workforce | OK | KPI, подразделения, тренды и explainability отображаются | | Security | OK | Security actions, events, correlation и candidates отображаются | | Forensics | OK | Расследования, timeline, материалы и аудит отображаются | Результат `scripts/detmir-portal-tabs-smoke.mjs` на live-контуре после TASK_014: - базовые tabs открываются; - loading status доходит до ready; - role switcher есть; - Security events доступны; - manager/security/forensics/admin view checks проходят; - server role gates проходят; - Executive dashboard layer и expected management block order проходят. ## KPI Validation `/portal/api/reports?role=executive` возвращает валидный JSON и содержит: - `kpis`: массив агрегированных KPI; - `workforce`: объект с `department_comparison`, `owner_comparison`, `trend`, `trend_status`, `insights`; - `business_risk`; - `risk_heatmap`; - `security_events_summary`. Обезличенные счетчики live response: - KPI entries: `13`; - department comparison entries: `1`; - owner comparison entries: `3`; - business risk entries: `2`; - risk heatmap entries: `7`. Оценка: - базовый Workforce/Business Risk слой на live-контуре присутствует; - KPI выглядит как рабочий агрегированный отчет, но текущий UI/API не соответствует Demo Freeze v1 explainability контракту; - перед расширением пилота нужно подтвердить свежесть источников по каждому пользователю и роль ожидаемых подразделений. ## Explainable KPI Validation Live endpoint после TASK_014: ```text /portal/api/workforce/kpi/explain -> 200 ``` Вывод: - Explainable KPI развернут на рабочем контуре; - live UI показывает ожидаемый блок `Почему такой индекс активности?`; - прежний `404` был следствием устаревшего deployed binary. ## UEBA Validation Live endpoint: ```text /portal/api/ueba -> 200 ``` Обезличенная сводка: - response `ok=true`; - severity: `critical`; - status: `FAIL`; - score: `100`; - reason codes: несколько; - score components: несколько. Оценка после TASK_015: - UEBA endpoint работает; - score `critical` является фактическим rule-based результатом текущих сигналов; - классификация: `Needs Investigation`; - security interpretation: `Operational Risk confirmed; Security Risk unknown`; - executive readiness: `Insufficient Confidence`; - основной вклад дают Workforce/baseline/history signals, а не DLP, network, time или application anomaly. ## Risk Narrative Validation Live endpoint после TASK_014: ```text /portal/api/risk/narrative -> 200 ``` Вывод: - Risk Narrative развернут на рабочем контуре; - Executive UI block соответствует Demo Freeze v1 ожиданиям; - Risk Narrative можно показывать как deployed capability, сохраняя честное ограничение: это rule-based объяснение, не ML-прогноз. ## Executive Action Center Validation Live endpoint после TASK_014: ```text /portal/api/actions -> 200 ``` Вывод: - Executive Action Center развернут на рабочем контуре; - live runtime отдает отдельный actions endpoint; - рекомендации можно показывать как deployed rule-based guidance, без claims об автоматическом remediation. ## Agent/Data Flow Validation AW-rus server: - ActivityWatch server active; - worktime API service active; - failed systemd units: `0`; - ActivityWatch API buckets endpoint отвечает `200`; - buckets count: `27`; - latest bucket timestamp близок к моменту проверки; - oldest bucket timestamp старый, что нормально для исторических/event buckets, но требует отдельной интерпретации freshness по bucket type. Windows/RDP runtime: - текущий `awatch-agent-rs` process активен; - collector guard process активен; - watcher/window/telemetry processes активны; - scheduled tasks для ActivityWatch/AWatch runtime находятся в состоянии `Ready` или `Running`. Фактические роли: ```text legacy/current runtime: awatch-agent-rs и существующие ActivityWatch watchers new baseline core: adk-rust/crates/awatch-agent, покрыт тестами, но не подтвержден как основной live runtime ``` Backlog/dead-letter: - явный dead-letter count на AW server: `0`; - known spool directories на AW server не обнаружены в проверенных путях; - Windows-side spool/backlog требует отдельной безопасной проверки без вывода путей и payload. ## Performance Snapshot Обезличенная сводка: | API | Status | Время ответа | | --- | --- | --- | | `/portal/api/health` | `200` | < 1 ms на gateway-local check | | `/portal/api/reports?role=executive` | `200` | первый observed run около 9 s, warm-cache run < 10 ms | | `/portal/api/reports?role=manager` | `200` | < 10 ms на warm-cache run | | `/portal/api/reports?role=security` | `200` | < 10 ms на warm-cache run | | `/portal/api/reports?role=forensics` | `200` | < 10 ms на warm-cache run | Логи: - recent portal log scan за окно проверки не показал `500`, panic или явных timeout в sanitized summary; - ActivityWatch/worktime recent error scan не показал явных ошибок в sanitized summary. Ограничение: - это snapshot, не load test и не sizing report. ## Noise / False Positive Findings Потенциальный шум: - UEBA severity `critical` / score `100` после TASK_015 классифицирован как `Needs Investigation`: высокий score выглядит операционно значимым, но не доказывает ИБ-инцидент; - stale исторические buckets могут искажать общее восприятие freshness, если не разделять active, inactive и event-driven bucket types; - live Executive headline/runtime naming все еще может содержать старую внутреннюю терминологию, что конфликтует с public naming hygiene. Не исправлялось в этой задаче: - scoring rules; - UEBA thresholds; - report content logic; - deployed binary/runtime. ## Documentation Mismatches Расхождения, найденные TASK_013, закрыты TASK_014: 1. Production-hardening endpoints `/healthz`, `/readyz`, `/version`, `/metrics` теперь доступны на фактическом portal port. 2. Standalone endpoints `/api/workforce/kpi/explain`, `/api/risk/narrative`, `/api/actions` теперь доступны на live runtime. 3. Visual smoke текущей freeze-ветки проходит Executive, Workforce, Security и Forensics views. 4. Live runtime обновлен controlled deploy актуального release binary. ## Security / Privacy Notes Соблюдено: - raw logs не коммитились; - raw JSON payload не коммитился; - screenshots с реальными данными не коммитились; - реальные IP/hostname/usernames/ФИО/подразделения в этот документ не внесены; - deploy выполнялся controlled способом с backup старого binary и rollback path; - destructive data operations не выполнялись; - collectors, scoring rules и источники данных не менялись. ## Gaps Критично перед расширением пилота: 1. Проверить agent coverage и missing application data, которые могли усилить UEBA `critical`. 2. Назначить операционного владельца live smoke, deploy parity и rollback. 3. Зафиксировать регламент: после каждого deploy проверять binary/version, endpoint matrix и live smoke. Желательно до пилотного расширения: 1. Добавить отдельный pilot-feedback контур для замечаний руководителя, ИБ, эксплуатации и расследователей. 2. Разделить freshness report по bucket types: active, inactive, event-driven, historical. 3. Проверить Windows-side spool/backlog безопасной командой без раскрытия путей и payload. Можно перенести после первого ограниченного пилота: 1. Тонкая настройка UEBA thresholds. 2. Расширение Action Center rules. 3. Улучшение dashboard wording по результатам реальной обратной связи. ## Recommended Next Tasks Не открывать feature roadmap. Следующие задачи должны быть pilot-feedback / operations oriented: - `docs/pilot-feedback/BUGS.md` - зафиксировать deployment/version drift как bug; - `docs/pilot-feedback/FEATURE_REQUESTS.md` - собирать только запросы от реальных ролей; - `docs/pilot-feedback/LESSONS_LEARNED.md` - фиксировать, что было непонятно на показе; - отдельная operator task: сверить deployed portal binary/commit с freeze branch; - отдельная operator task: повторить live smoke после controlled deploy. ## Explicit Non-Goals В рамках TASK_013/TASK_014 не выполнялись: - новые API; - новый UI; - новые collectors; - ML/LLM; - DLP/SIEM/EDR claims; - изменение scoring logic; - изменение collectors или источников данных; - выгрузка персональных данных; - сохранение real screenshots в git. ## Conclusion Рабочий внутренний контур AWatch-rus существует и собирает реальные данные. Portal, ActivityWatch, Security events, UEBA endpoint, Forensics и базовые role views частично подтверждены. После TASK_014 live runtime соответствует Demo Freeze v1 по production-hardening endpoints, request/correlation headers, Explainable KPI, Risk Narrative, Executive Action Center и основным smoke-проверкам. Текущий статус: ```text ready for controlled internal pilot review; ready for limited pilot preparation after agent coverage review and operations ownership assignment. ```