Files
AWatch-rus/docs/WINDOWS_RUST_VALIDATION_RU.md
T

151 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Windows Rust validation
Дата: 2026-06-05
`aw-windows-telemetry.exe validate-deployment` является Rust-заменой первого
уровня для `windows/validate-deployment.ps1`.
Цель команды: дать машинный JSON gate перед дальнейшей заменой Windows
PowerShell runtime scripts на Rust EXE.
## Команда
```powershell
C:\Program Files\AWatch-rus\windows\aw-windows-telemetry.exe `
validate-deployment `
--config-path C:\ProgramData\AWatch-rus\deployment-config.json
```
Вывод: JSON.
Exit codes:
- `0` - validation прошла;
- `1` - ошибка запуска, чтения config или runtime error;
- `2` - validation выполнена, но есть failed sections.
## Что проверяется сейчас
- `deployment-config.json` читается как JSON, включая UTF-8 BOM.
- `ActivityWatch File1C Upload` указывает на
`aw-windows-telemetry.exe file1c-upload`.
- `ActivityWatch DLP Evidence Sync` указывает на
`aw-windows-telemetry.exe dlp-evidence-sync`.
- `AWatch Rust Telemetry Agent` указывает на `awatch-agent-rs.exe`.
- `AWatchRusCollectorGuard` service указывает на
`aw-windows-telemetry.exe collector-guard` через service wrapper.
- Rust collector guard получает `sessionId` через native Windows API,
дедуплицирует legacy browser/fileops/DLP endpoint collectors по
`(kind, sessionId)` и пропускает повторный запуск launch tasks, если legacy
collectors уже работают.
- Rust worktime agent запущен.
- Rust collector guard запущен.
- Worktime bucket свежий.
- Локальные DLP/file operation queues не превышают безопасный depth.
- `aw-windows-telemetry.exe browser-domains-collector`,
`dlp-endpoint-collector` и `file-operations-collector` доступны как P0
runtime subcommands.
- Browser Rust collector реализует URL/domain/category parity:
UIAutomation extraction, URL normalization, host/rootDomain, default/custom
category rules, `aw-watcher-web-*`, `aw-detmir-web-category_*` и web DLP
incident schema.
- DLP endpoint Rust collector реализует incident semantics для
`clipboard_change`, `usb_insert` и `print_job`: raw endpoint signal,
policy evaluation, cooldown и `aw-dlp-incidents_*` event fields сохранены.
USB write-block и print cancel не выполняются в пилотном режиме без
отдельного enforcement решения.
- В live-конфигурации `collectors.browserCollectorMode`,
`collectors.dlpEndpointMode` и `collectors.fileOpsMode` переключены в
`rust_primary`.
- P0 PowerShell collector runtime
(`browser-domains-native-collector.ps1`,
`dlp-endpoint-signals-collector.ps1`, `file-operations-collector.ps1`)
отсутствует в штатных пользовательских сессиях.
- Rust collectors пишут per-session state/log/queue, чтобы разные RDP-сессии
не конфликтовали за один state-файл.
- Оставшийся PowerShell runtime классифицируется для миграционной карты через
native WinAPI process snapshot. `wmic.exe` не требуется.
## Инвентаризация процессов
На новых Windows `wmic.exe` может отсутствовать. Validator не зависит от него:
1. сначала используется native WinAPI process snapshot;
2. если native snapshot недоступен, используется `wmic.exe`;
3. если `wmic.exe` отсутствует, используется `tasklist.exe` fallback.
В штатном режиме native snapshot дает:
- `processes.commandLineQueryOk=true`;
- классификацию PowerShell runtime по видам:
`browser`, `fileops`, `dlp_endpoint`, `guard`, `recovery`, `worktime`;
- подтверждение отсутствия `worktime-session-collector.ps1`.
- подтверждение отсутствия `aw-collector-guard.ps1`.
`tasklist.exe` fallback ограничен:
- наличие `awatch-agent-rs.exe` подтверждается;
- command line PowerShell-процессов недоступна;
- поле `processes.commandLineQueryOk=false`;
- поле `processes.noPowerShellWorktimeRuntime=null`;
- это не считается ошибкой, если task actions, Rust agent и bucket freshness
подтверждены.
Для полного доказательства отсутствия конкретного `.ps1` процесса можно
дополнительно использовать operator inventory через WinRM/Ansible, но это не
должно блокировать Rust validation на системах без WMIC.
## Проверенный live checkpoint
2026-06-05 на Windows/RDP host:
- `overallOk=true`;
- failed sections: `[]`;
- File1C task: Rust EXE;
- DLP evidence task: Rust EXE;
- worktime agent: Rust EXE;
- collector guard service: Rust EXE child;
- worktime bucket age: меньше 300 секунд.
- native process inventory: `commandLineQueryOk=true`;
- PowerShell worktime runtime: отсутствует;
- PowerShell collector guard runtime: отсутствует;
- оставшийся PowerShell runtime классифицирован как `recovery/other`; P0
browser/fileops/DLP endpoint PowerShell collectors отсутствуют.
- Rust browser/DLP/fileops runtime после live switch: `browser=3`,
`dlp_endpoint=3`, `fileops=3`, `guard=1`, legacy P0 count `0`.
- После одного guard-cycle P0 Rust counts остались `3/3/3`, DLP state по трем
сессиям: `status=ok`, `sendFailures=0`.
- После parity update 2026-06-05T23:10Z:
- `browser_rust=3`, `dlp_endpoint_rust=3`, `fileops_rust=3`,
`guard_rust=1`, legacy P0 collector count `0`;
- `validate-deployment`: `overallOk=true`, failed sections `[]`;
- AW API после restart `activitywatch-server` отвечает локально за ~0.002s;
- `aw-detmir-web-category_*` получает Rust `collector_health` с
`foregroundProcess`, `browserDetected`, `urlDetected`;
- текущие RDP-сеансы disconnected, поэтому live foreground пустой и
`browserDetected=false`, `urlDetected=false`; URL event path проверен
self-test/unit-test, но live URL требует активного foreground browser;
- `aw-dlp-endpoint-signals_*` получает свежие Rust `self_test` events:
`queueDepth=0`, `sendFailures=0`;
- `detmir-dlp`: `ok=true`, `counts={ok:22,warn:0,fail:0}`;
- `detmir-status`: `severity=OK`, `needs_heal=false`,
`ok_for_operator=true`; актуальный refresh через Rust-first
`/usr/local/bin/detmir-auto --no-heal --no-report` дал
`service_warnings=0` и DLP `counts={ok:22,warn:0,fail:0}`.
- Rust file operations live mode использует per-session queue/state/log;
bounded shadow create/rename/delete smoke ранее подтвердил `Created`, один
`Renamed` с `oldPath`, `Deleted` и штатные `collector_health` события.
- Collector guard duplicate prevention smoke: при принудительном stale
action `run-task` получил `applied=false`,
`reason=legacy-collectors-already-running`; runtime counts остались
`browser=3`, `fileops=3`, `dlp_endpoint=2`.
Ограничение: этот checkpoint подтверждает end-to-end live runtime, policy
semantics и schema parity. Полный live URL/domain incident path физически
требует активного foreground browser в интерактивной RDP-сессии; disconnected
сеансы корректно дают только health/self-test. Удаление legacy `.ps1` остается
отдельным rollback/decommission gate.
Live hostnames, private IP и runtime report сохранены только в private
`.ops`-контуре.