# Roadmap Conformance Audit Дата аудита: 2026-06-07. Аудируемый срез: `origin/main` после TASK_011. Цель: проверить соответствие roadmap, README, документации, API, портала, отчетов, агента и smoke-проверок фактическому состоянию AWatch-rus. Новая функциональность в рамках аудита не добавлялась. ## Executive Summary AWatch-rus в целом соответствует Pilot v1 roadmap как Workforce-first платформа с Security Analytics и Forensics-контуром. Подтверждены production hardening endpoints, Explainable KPI, Risk Narrative, Executive Action Center, Rust Agent baseline, demo pack, registry readiness package, enterprise deployment package и pilot validation package. Критичных conformance-блокеров на проверенном срезе не выявлено. Несколько устаревших человеко-читаемых product-name claims были исправлены в runtime: генерируемый отчет теперь начинается с `# AWatch-rus оперативный отчет`, а headline, KPI label и CLI help используют публичное название AWatch-rus. Закрытые housekeeping gaps Demo Freeze v1: - TASK_001-TASK_004 получили явные секции `Выполнение` с артефактами, проверками и ограничениями. - Для Risk Narrative создан отдельный документ `docs/RISK_NARRATIVE_RU.md`. - Добавлен browser-level conformance smoke с Playwright и screenshots runtime artifacts. Оставшиеся acceptance gaps после TASK_014: - Полная production-приемка требует live validation на стенде заказчика: доступность, TLS/reverse proxy, источники данных, backup/restore и ownership действий. - TASK_013 live validation выявил deployment/version drift, но TASK_014 закрыл его controlled deploy актуального portal binary и повторным live smoke. - TASK_015 выполнил ручной разбор UEBA `critical`: классификация `Needs Investigation`, security interpretation - `Operational Risk confirmed; Security Risk unknown`. - Перед расширением пилота остается проверить agent coverage/missing application data и закрепить операционный ownership за deploy parity, rollback и регулярными smoke. ## Overall Status Статус: `ready for controlled pilot validation`. Оценка соответствия roadmap: высокая, но не финальная production acceptance. Что подтверждено проверками: - Rust workspace собирается, форматируется, проходит clippy и unit tests. - Production endpoints `/healthz`, `/readyz`, `/version`, `/metrics` работают на актуальном release-бинаре. - `/api/reports`, `/api/workforce/kpi/explain`, `/api/risk/narrative` и `/api/actions` проходят smoke-проверку контрактов. - Request id и correlation id возвращаются в HTTP headers. - Query limits и role gates проверяются smoke. - Demo, registry, deployment, screenshots, roadmap, reports и runbooks проходят статические smoke-проверки. ## Confirmed Implemented Items ### Production Hardening Подтверждено: - `GET /healthz`; - `GET /readyz`; - `GET /version`; - `GET /metrics`; - request id / correlation id; - Prometheus text metrics; - query limits for heavy API; - report date range limits; - role gates smoke; - documentation in `docs/PRODUCTION_READINESS_RU.md`; - smoke in `scripts/awatch-production-hardening-smoke.mjs`. Evidence: - `adk-rust/crates/detmir-portal/src/production/`; - `adk-rust/crates/detmir-portal/src/main.rs`; - `scripts/awatch-production-hardening-smoke.mjs`. ### Explainable KPI Подтверждено: - `GET /api/workforce/kpi/explain`; - response model with `kpi_score`, `confidence`, `coverage`, `factors`, `top_applications`, `warnings`, `recommendations`; - deterministic factors; - role-filtered response; - UI blocks `Почему такой индекс` / `Почему такой индекс активности?`; - Markdown section `## Почему такой индекс`; - documentation in `docs/EXPLAINABLE_KPI_RU.md`. Evidence: - `adk-rust/crates/detmir-portal/src/workforce_kpi_explain.rs`; - `adk-rust/crates/detmir-portal/src/static/app.js`; - `adk-rust/crates/detmir-portal/src/contracts/openapi.json`; - `adk-rust/crates/detmir-portal/src/contracts/typescript.d.ts`. ### Risk Narrative Подтверждено: - `GET /api/risk/narrative`; - deterministic rule-based model; - `risk_score`, `risk_level`, `why`, `evidence`, `limitations`; - Executive UI block `Риск-нарратив`; - Markdown section `## Риск-нарратив`; - OpenAPI and TypeScript contracts. Evidence: - `adk-rust/crates/detmir-portal/src/risk_narrative.rs`; - `adk-rust/crates/detmir-portal/src/static/app.js`; - `adk-rust/crates/detmir-portal/src/contracts/openapi.json`; - `adk-rust/crates/detmir-portal/src/contracts/typescript.d.ts`. ### Executive Action Center Подтверждено: - `GET /api/actions`; - rule-based action model; - owner role, priority, deadline, reason codes and evidence; - no auto-remediation; - Executive and Security UI blocks; - Markdown section `## Рекомендуемые действия`; - documentation in `docs/EXECUTIVE_ACTION_CENTER_RU.md`. Evidence: - `adk-rust/crates/detmir-portal/src/executive_actions.rs`; - `scripts/awatch-production-hardening-smoke.mjs`. ### Rust Agent Baseline Подтверждено: - crate `adk-rust/crates/awatch-agent/`; - config loader; - telemetry envelope; - heartbeat; - local spool; - retry and dead-letter; - `/healthz`; - `/metrics`; - structured JSON logging; - unit tests. Также подтверждено различение: - `awatch-agent` - новый baseline core без мониторинга пользователя; - `awatch-agent-rs` - текущий runtime для проверенных worktime/session задач. Не обнаружено в baseline: - keylogger; - screenshot capture; - clipboard capture; - packet interception; - kernel driver; - EDR/DLP/ML/LLM behavior. Evidence: - `adk-rust/crates/awatch-agent/`; - `adk-rust/crates/awatch-agent-rs/`; - `docs/RUST_AGENT_BASELINE_RU.md`. ### Demo Pack Подтверждено: - `docs/demo/DEMO_SCENARIO_EXECUTIVE_RU.md`; - `docs/demo/DEMO_SCENARIO_SECURITY_RU.md`; - `docs/demo/DEMO_SCENARIO_FORENSICS_RU.md`; - `docs/demo/DEMO_PACK_ACCEPTANCE_CHECKLIST_RU.md`; - `docs/DEMO_REPORT_EXAMPLE_RU.md`; - `docs/PILOT_VALUE_PROPOSITION_RU.md`; - `docs/fixtures/pilot-v1-demo/demo-seed-data.json`; - screenshots in `docs/screenshots/`. Smoke подтвердил, что PNG не являются заглушками и ссылки валидны. ### Registry Readiness Подтверждено: - `docs/REGISTRY_PRODUCT_PASSPORT_RU.md`; - `docs/REGISTRY_ARCHITECTURE_RU.md`; - `docs/REGISTRY_FUNCTIONAL_SCOPE_RU.md`; - `docs/REGISTRY_DEPENDENCY_STATEMENT_RU.md`; - `docs/REGISTRY_DEPLOYMENT_MODEL_RU.md`; - `docs/REGISTRY_COMMERCIAL_POSITIONING_RU.md`; - `docs/REGISTRY_READINESS_CHECKLIST_RU.md`. Core, optional and not claimed разделены. Есть explicit caveat, что документы не являются юридической гарантией принятия в реестр. ### Enterprise Deployment Guide Подтверждено: - `docs/ENTERPRISE_DEPLOYMENT_GUIDE_RU.md`; - `docs/DEPLOYMENT_TOPOLOGIES_RU.md`; - `docs/SIZING_GUIDE_RU.md`; - `docs/BACKUP_AND_RECOVERY_RU.md`; - `docs/OPERATIONS_RUNBOOK_RU.md`; - `docs/SECURITY_HARDENING_RU.md`; - `docs/ENTERPRISE_ACCEPTANCE_CHECKLIST_RU.md`; - `scripts/deployment-readiness-smoke.mjs`. Sizing не заявлен как гарантия и требует проверки на инфраструктуре заказчика. ## Partially Implemented Items - TASK_001 Pilot v1 Stabilization: результат фактически покрыт документами, smoke и Pilot v1 artifacts, но сам roadmap-файл не имеет явного статуса выполнения. - TASK_002 Production Hardening: functionality and smoke confirmed, но roadmap-файл не содержит секцию `Выполнение`. - TASK_003 Explainable KPI: functionality confirmed, но roadmap-файл не содержит секцию `Выполнение`. - TASK_004 Risk Narrative: API/UI/report/contracts confirmed, но нет отдельного `docs/RISK_NARRATIVE_RU.md`, а roadmap-файл не содержит секцию `Выполнение`. - Portal visual conformance: UI markers and API-backed blocks confirmed, но TASK_011 run не выполнял отдельный визуальный Playwright regression. ## Documentation-Only Items - Registry readiness остается preparation package, not legal acceptance. - Enterprise deployment docs задают target process, но production deployment требует отдельной приемки на стенде. - Platform and collector ecosystem documents корректно описывают planned, future and contract-only направления, но не являются реализацией новых collectors. - pfSense readiness остается optional / `contract_only`. ## Gaps 1. Обновить roadmap metadata: - добавить `## Выполнение` для TASK_001-TASK_004; - указать текущий статус и evidence files. 2. Создать отдельный `docs/RISK_NARRATIVE_RU.md` или явно сослаться в roadmap TASK_004 на документ, который заменяет dedicated Risk Narrative doc. 3. Добавить отдельный conformance smoke для roadmap/docs claims, чтобы TASK_011 не оставался только ручным аудитом. 4. Выполнить live customer-stand validation: - portal URL; - TLS/reverse proxy; - role access; - `/api/reports`; - backup/restore; - data freshness. 5. Проверить public naming hygiene в старых исторических документах и, если они остаются GitHub-facing, привести их к AWatch-rus naming policy. 6. Зафиксировать release tag, release-specific SBOM and signed/checksummed artifacts перед registry/expert package. ## False Claims Found Исправлено в рамках TASK_011: - Markdown report title, executive headline, status KPI label and CLI help used stale internal product naming. Теперь человеко-читаемый вывод использует публичное название `AWatch-rus`. Не обнаружено в README/Pilot v1 claims: - claim полноценной DLP; - claim полноценной SIEM; - claim EDR/XDR; - claim ML/LLM scoring; - claim обязательного pfSense; - claim готового React/Tauri UI; - claim auto-remediation. Оставшийся risk: - В старых исторических документах и некоторых filename paths есть legacy naming. Это не product capability claim, но это снижает чистоту public GitHub presentation и должно быть отдельной cleanup-задачей. ## API Verification Проверенные endpoints: - `GET /healthz` - 200, JSON, response headers include `X-Request-Id` and `X-Correlation-Id`. - `GET /readyz` - controlled 200/503 with JSON checks. - `GET /version` - 200, includes `app_version` and `schema_version=pilot-v1`. - `GET /metrics` - Prometheus text format, includes `awatch_http_requests_total` and `awatch_readyz_status`. - `GET /api/reports` - covered by production smoke query limits and report payload tests. - `GET /api/workforce/kpi/explain` - 200, numeric KPI and deterministic factors. - `GET /api/risk/narrative` - 200, stable risk level and rule-based model. - `GET /api/actions` - 200, actions array and no auto-remediation. Role gates: - manager -> `/api/security` returns 403 in smoke. - Unit tests confirm executive/security/forensics report filtering. Query limits: - too large `page_size` rejected with `invalid_page_size`. - too wide report date range rejected with `report_range_too_large`. ## Portal Verification Confirmed by static UI code and tests: - Executive Dashboard; - Workforce KPI; - Explainable KPI block; - Risk Narrative block; - Recommended Actions block; - Security view; - Forensics view; - reports view; - architecture page. Evidence: - `adk-rust/crates/detmir-portal/src/static/index.html`; - `adk-rust/crates/detmir-portal/src/static/app.js`; - `adk-rust/crates/detmir-portal/src/static/architecture.html`; - `adk-rust/crates/detmir-portal/src/main.rs` tests. Gap: - TASK_011 did not require and did not run a visual Playwright screenshot regression. Use it before customer-facing UI freeze. ## Agent Verification `awatch-agent` baseline conforms to TASK_005 scope: - no user monitoring collectors; - no clipboard/screenshot/keylogger/packet interception; - no kernel driver; - no DLP/EDR/ML/LLM behavior; - heartbeat-only telemetry envelope; - local spool and dead-letter; - bounded retry/backoff; - health and metrics endpoints; - structured JSON logs. `awatch-agent-rs` remains current runtime and has telemetry/session/worktime tests. Documentation clearly separates baseline core from current runtime. ## Demo Pack Verification Smoke results: - demo docs exist; - screenshots exist and are valid PNG files; - demo dataset exists; - Markdown links valid; - sensitive scan for validation/demo files passed. Screenshots verified: - `01-executive-overview.png`; - `02-risk-heatmap.png`; - `03-security-view.png`; - `04-operations-view.png`; - `05-investigation-pack.png`; - `06-markdown-report.png`; - `07-product-architecture.png`. ## Registry Readiness Verification Confirmed: - core/optional/not claimed are separated; - no legal guarantee of registry acceptance; - remaining gaps are listed; - SBOM is described as release-specific requirement; - open-source dependencies are documented at package level. Gap: - release-specific SBOM and signed artifacts must be generated for final tag, not inferred from roadmap docs. ## Deployment Readiness Verification Confirmed: - deployment guide exists; - topologies exist; - sizing guide exists and includes caveats; - backup/recovery exists; - operations runbook exists; - security hardening exists; - enterprise acceptance checklist exists; - deployment smoke passed. Gap: - restore test, sizing validation and live reverse proxy/TLS validation remain stand-specific acceptance tasks. ## Recommended Fixes 1. Add `## Выполнение` sections to TASK_001-TASK_004. 2. Add dedicated `docs/RISK_NARRATIVE_RU.md` or update TASK_004 to point to the accepted replacement document. 3. Add `scripts/roadmap-conformance-smoke.mjs` for future automated claim checks. 4. Add visual/browser conformance smoke before the customer demo freeze. 5. Clean old public-facing naming paths where legacy internal naming appears in GitHub-visible filenames or links. 6. Run live customer-stand validation and append evidence to pilot acceptance docs. ## Next Roadmap Corrections - TASK_012: Roadmap metadata cleanup for TASK_001-TASK_004. - TASK_013: Risk Narrative documentation closure. - TASK_014: Public naming hygiene cleanup for historical docs and README links. - TASK_015: Browser/visual conformance smoke for Executive, Security, Forensics and Reports views. - TASK_016: Release tag, SBOM and signed artifact readiness. ## Checks Commands executed from `adk-rust/` because the Rust workspace manifest is under `adk-rust/Cargo.toml`: - `cargo fmt --all --check` - OK. - `cargo clippy --all-targets --all-features -- -D warnings` - OK. - `cargo test --all` - OK. - `cargo build --release` - OK. Commands executed from repository root: - `node scripts/deployment-readiness-smoke.mjs` - OK. - `node scripts/pilot-validation-smoke.mjs` - OK. - `AWATCH_PORTAL_SMOKE_URL=http://127.0.0.1:8720 node scripts/awatch-production-hardening-smoke.mjs` - OK. - `git diff --check` - OK. Smoke note: - The first live smoke attempt used a stale binary from `adk-rust/target/release` and correctly failed `/healthz`. The validated production smoke was rerun on the actual cargo release artifact from the configured cargo target cache.