# 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.
