# AWatch-rus: план развития на следующие 6-12 месяцев Дата аудита: 2026-07-01. Статус: development planning после анализа текущего репозитория. Документ не добавляет новые продуктовые функции и не меняет runtime-поведение. Цель - снизить эксплуатационные, release, security и maintainability риски без нарушения обратной совместимости. ## Границы плана - Production уже существует; текущий DetMir контур рассчитан примерно на 5 RDP пользователей. - Рабочие подсистемы не переписываются. Все изменения должны быть инкрементальными, проверяемыми и откатываемыми. - DLP runtime остается `core_only/disabled` по умолчанию; `light` включается только вручную после resource preflight. - Loki и always-on Velociraptor не включаются как часть этого плана. - PowerShell fallback на Windows сохраняется до доказанной parity и burn-in Rust-пути. - GitHub остается public mirror validation; release evidence для российского контура должен формироваться отдельно. ## Фактическое состояние репозитория - Основной runtime слой стал Rust-first: `adk-rust/` содержит 58 workspace crates; локальный `cargo metadata --locked` разрешает 349 пакетов. - Rust dependency hygiene уже включен: `cargo audit --deny warnings`, `cargo deny`, `cargo machete --with-metadata`, `cargo tree --duplicates` есть в workflow или локальных gate. Текущий аудит: `cargo audit` и `cargo machete` чистые, `cargo deny` проходит, но оставляет 36 `bans` warnings. - CI уже покрывает Rust, docs/registry, smoke, operational maturity, dependency hygiene, security scan и release binary build. Есть drift: несколько workflows используют floating `stable`, хотя `rust-toolchain.toml` закрепляет `1.94.0`. - DetMir DLP resource guardrails реализованы: runtime disabled/core-only by default, `detmir-dlp-load-guard`, documented rollback, skipped DLP buckets в smoke считаются нормой. - Security Finding Inbox, Hayabusa и Velociraptor оформлены как optional findings/forensics sources и не являются hot-path зависимостью Workforce. - Документация registry/governance сильная, но `docs/PROJECT_STATUS_RU.md` и `docs/RESIDUAL_RISKS_RU.md` фиксируют открытые gaps: Gitea restore drill, Russian build-runner, первый release evidence build, legal/rightsholder package, external review evidence. - Самые крупные maintainability hotspots: `adk-rust/crates/detmir-portal/src/main.rs` - 14200 строк, `adk-rust/crates/aw-windows-telemetry/src/main.rs` - 6411 строк, `proxmox/tsj_guardian_bot.py` - 4610 строк, `adk-rust/crates/worktime-api/src/main.rs` - 3988 строк, `ansible/deploy_aw_server.yml` - 3099 строк. - Найдены точные дубликаты скриптов: `scripts/aw-contour-diag.sh` = `scripts/detmir-full-diagnostics/aw-contour-diag.sh`; `scripts/check_production_inventory_placeholders.sh` = `scripts/detmir-full-diagnostics/check_production_inventory_placeholders.sh`. - Найден security hygiene gap: ClickHouse/1C ops wrappers передают `CLICKHOUSE_PASSWORD` через `--password`, что раскрывает секрет в process argv на хосте. ## P0 - критично для production ### P0-1. Gate фактической свежести production Rust-бинарников - Почему нужно: `scripts/check_detmir_rust_release_artifacts.sh` проверяет наличие локальных release artifacts, но не доказывает, что production service/timer/Windows task реально запускает тот же binary SHA256. - Риск: stale бинарник в production может отличаться от проверенного кода, усложнить rollback и скрыть регрессию в high-load контуре. - Ожидаемый эффект: воспроизводимая цепочка `service/timer/task -> binary path -> crate -> local artifact -> prod sha256 -> git sha`. - Сложность: средняя. - Объем работ: 3-5 инженерных дней. - Затрагиваемые файлы: `scripts/check_detmir_rust_release_artifacts.sh`, `scripts/package_rust_release_binaries.py`, `scripts/detmir-full-diagnostics/`, `adk-rust/crates/detmir-readiness/`, `windows/validate-deployment.ps1`, `docs/DETMIR_CURRENT_STATE_RU.md`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`. - Критерии приемки: команда dry-run выводит все реально задействованные binaries на `10.10.10.2`, `10.10.10.13` и Windows RDP host; для каждого binary есть crate, role, unit/timer/task, prod SHA256 и local release SHA256; gate падает при missing/stale binary; проверка не включает heavy DLP, Loki или always-on Velociraptor; rollback path документирован и проверен на одном canary binary. ### P0-2. Bounded retention для state, evidence, queues и diagnostic output - Почему нужно: DLP/evidence/backlog/diagnostic контуры уже имеют guardrails, но retention/cleanup policy для исторических artifacts остается отдельной future work; disk exhaustion на Proxmox/AW server является прямым outage риском. - Риск: накопление JSONL queues, screenshots, Hayabusa drops, diagnostic runs, ClickHouse landing files или локальных state snapshots может забить диск и остановить ingestion, portal или ActivityWatch. - Ожидаемый эффект: предсказуемое потребление диска, безопасный dry-run cleanup, понятный rollback через backup/hold rules. - Сложность: средняя. - Объем работ: 4-7 инженерных дней. - Затрагиваемые файлы: `adk-rust/crates/aw-prune-local-state/`, `scripts/detmir-full-diagnostics/`, `scripts/detmir_dlp_warehouse_sync.sh`, `aw-server/logrotate.conf`, `windows/validate-deployment.ps1`, `adk-rust/crates/aw-windows-telemetry/`, `docs/DLP_OPTIONAL_RUNTIME_RU.md`, `docs/DLP_RESOURCE_PROFILES_RU.md`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`. - Критерии приемки: есть единая retention matrix по путям, владельцам, age/size limits и dry-run; cleanup never follows untrusted paths and only touches allowlisted roots; Windows queues имеют max-age/max-size validation; skipped DLP buckets при `AW_DLP_ENABLED=false` не считаются ошибкой; smoke показывает, что cleanup не удаляет active state и не требует downtime. ### P0-3. Убрать секреты ClickHouse/1C из process argv - Почему нужно: `clickhouse-1c/ops/run_*.sh` передают пароль как `--password "${CLICKHOUSE_PASSWORD}"`; этот аргумент виден через process list локальному пользователю или диагностике. - Риск: утечка ClickHouse credentials с возможностью чтения/изменения production analytics data. - Ожидаемый эффект: секреты передаются через env/config file descriptor или другой non-argv канал; logs и error output остаются redacted. - Сложность: низкая-средняя. - Объем работ: 2-4 инженерных дня. - Затрагиваемые файлы: `clickhouse-1c/ops/run_ingest_cycle.sh`, `clickhouse-1c/ops/run_manager_brief.sh`, `clickhouse-1c/ops/run_recovery_brief.sh`, `clickhouse-1c/ops/run_company_registry_bindings_refresh.sh`, `clickhouse-1c/ops/run_company_intelligence_refresh.sh`, `clickhouse-1c/ops/check_ingest_freshness.sh`, `clickhouse-1c/ai/*.py`, `clickhouse-1c/etl/*.py`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`. - Критерии приемки: `rg -- '--password \"\\$\\{CLICKHOUSE_PASSWORD\\}\"' clickhouse-1c` ничего не находит в runtime wrappers; smoke через `ps` доказывает отсутствие password в argv; существующие env-based deployments остаются совместимыми; failed auth logs не печатают password; `bash -n clickhouse-1c/ops/*.sh` и affected Python smoke проходят. ## P1 - желательно выполнить до следующего релиза ### P1-1. Выровнять Rust toolchain во всех CI workflows - Почему нужно: `rust-toolchain.toml` закрепляет `1.94.0`, но `.github/workflows/ci.yml`, `security.yml`, `coverage.yml`, `dependency-hygiene.yml` и `release-assets.yml` используют floating `dtolnay/rust-toolchain@stable`. - Риск: CI и release runner могут собирать разные версии компилятора, что снижает воспроизводимость и усложняет анализ regressions. - Ожидаемый эффект: единый compiler baseline для local, GitHub mirror и будущего российского build-runner. - Сложность: низкая. - Объем работ: 1-2 инженерных дня. - Затрагиваемые файлы: `rust-toolchain.toml`, `.github/workflows/ci.yml`, `.github/workflows/security.yml`, `.github/workflows/coverage.yml`, `.github/workflows/dependency-hygiene.yml`, `.github/workflows/release-assets.yml`, `.github/workflows/rust-binary-build.yml`, `.github/workflows/rust-workspace.yml`, `docs/QUALITY_STATUS_RU.md`. - Критерии приемки: все blocking Rust jobs используют `rust-toolchain.toml` или тот же explicit channel; nightly остается только для advisory `cargo udeps`; CI check names не меняются; локально и в CI проходят `cargo fmt`, `cargo test`, `cargo clippy -D warnings`. ### P1-2. Staged triage для duplicate/deprecated Rust dependencies - Почему нужно: `cargo deny` проходит, но `cargo tree --duplicates` показывает дубли `bitflags`, `getrandom`, `hashbrown`, `mio`, `zip`, `windows-*`; `serde_yaml 0.9.34+deprecated` уже зафиксирован как средний риск. - Риск: supply-chain surface и binary size растут, а устаревшие crates могут стать будущим vulnerability blocker. - Ожидаемый эффект: baseline по допустимым дублям, запрет новых необоснованных дублей, replacement path для deprecated crates. - Сложность: средняя. - Объем работ: 4-8 инженерных дней. - Затрагиваемые файлы: `adk-rust/Cargo.toml`, `adk-rust/Cargo.lock`, `deny.toml`, `.github/workflows/dependency-hygiene.yml`, crates using `serde_yaml`, `calamine`, `notify`, `zip`, `windows-sys`, `docs/THIRD_PARTY_LICENSES_RU.md`, `docs/QUALITY_STATUS_RU.md`. - Критерии приемки: для каждого duplicate family есть decision: keep with reason, update, or remove; `cargo audit --deny warnings` и `cargo deny ...` проходят; новые duplicates без allowlist/обоснования блокируются; replacement plan для `serde_yaml` не ломает существующие YAML configs; изменения dependency graph идут отдельными PR, не смешиваются с runtime features. ### P1-3. Load regression harness для portal/worktime/report hot paths - Почему нужно: `docs/PROJECT_STATUS_RU.md` прямо фиксирует residual risk: full report/snapshot prewarm может быть CPU/IO дорогим. Сейчас production малый, но расширение users/events без бюджета нагрузки рискованно. - Риск: рост RDP users или history window приводит к slow portal, stale cache, ClickHouse/AW amplification или datastore lock pressure. - Ожидаемый эффект: измеримые budgets для p95 latency, memory, query count, cache hit/stale behavior и degradation semantics. - Сложность: средняя-высокая. - Объем работ: 1-2 недели. - Затрагиваемые файлы: `scripts/operational-maturity-check.mjs`, `scripts/awatch-production-hardening-smoke.mjs`, `adk-rust/crates/detmir-portal/`, `adk-rust/crates/worktime-api/`, `adk-rust/crates/worktime-prewarm/`, `adk-rust/crates/aw-contour-smoke/`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`, `docs/QUALITY_STATUS_RU.md`. - Критерии приемки: synthetic dataset проверяет минимум 5/20/50 users without prod data; harness фиксирует p95 latency, max RSS, query count and stale-cache decisions; disconnected RDP sessions and event-driven buckets не дают false-fail; `AW_DLP_ENABLED=false` profile respected; heavy job остается scheduled/advisory, blocking smoke остается быстрым. ### P1-4. Windows Rust validation parity before reducing PowerShell runtime - Почему нужно: `docs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.md` показывает, что Rust overlay уже основной для части collectors, но `validate-deployment.ps1`, Hayabusa upload и некоторые recovery paths остаются fallback/runtime. - Риск: преждевременное удаление PowerShell fallback ухудшит recovery на Windows Server 2019 и localized RDP sessions. - Ожидаемый эффект: доказанная parity Rust validation, safe fallback policy и меньше runtime drift. - Сложность: средняя. - Объем работ: 1-2 недели. - Затрагиваемые файлы: `adk-rust/crates/aw-windows-telemetry/`, `windows/validate-deployment.ps1`, `windows/export-upload-hayabusa-to-aw-server.ps1`, `windows/ActivityWatch.Windows.Common.psm1`, `ansible/deploy_aw_windows.yml`, `docs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.md`, `docs/POWERSHELL_TO_RUST_ROADMAP_RU.md`. - Критерии приемки: Rust `validate-deployment` покрывает все 7 секций PowerShell validation; CP866/localized user handling covered by tests; canary run сравнивает Rust и PowerShell reports на одном RDP host; PowerShell fallback остается documented rollback; no removal before burn-in evidence. ### P1-5. Российский build-runner и первый release evidence build - Почему нужно: `ROADMAP.md`, `docs/PROJECT_STATUS_RU.md` и `docs/RESIDUAL_RISKS_RU.md` фиксируют, что `awatch-build-01` planned, а первый release evidence build pending. - Риск: registry/release package cannot be claimed reproducible in target Russian contour. - Ожидаемый эффект: проверяемый release package: source archive, binaries, SBOM, SHA256SUMS, cargo metadata/tree, logs, manifest. - Сложность: средняя. - Объем работ: 3-6 инженерных дней плюс инфраструктурное окно. - Затрагиваемые файлы: `scripts/build_release_evidence.sh`, `scripts/check_release_evidence.sh`, `scripts/verify_release_assets.sh`, `docs/registry/RU_BUILD_RUNNER_READINESS_RU.md`, `docs/registry/BUILD_RUNNER_SETUP_RUNBOOK_RU.md`, `docs/registry/RELEASE_EVIDENCE_RUNBOOK_RU.md`, `docs/registry/registry-evidence-manifest.json`. - Критерии приемки: build-runner имеет documented OS/toolchain; release evidence build выполнен не на GitHub runner; `scripts/check_release_evidence.sh` проходит; artifacts имеют SHA256 и manifest; public docs не заявляют registry completion раньше legal approval. ### P1-6. Gitea backup restore drill - Почему нужно: backup и SHA256 documented, но `restore_tested=false` остается открытым residual risk. - Риск: disaster recovery process может оказаться неполным только во время инцидента. - Ожидаемый эффект: доказанный restore на отдельном хосте и понятный RTO/RPO baseline. - Сложность: средняя. - Объем работ: 2-4 инженерных дня. - Затрагиваемые файлы: `docs/registry/GITEA_BACKUP_AND_RESTORE_RUNBOOK_RU.md`, `docs/registry/registry-evidence-manifest.json`, `scripts/registry_readiness_check.sh`, `docs/PROJECT_STATUS_RU.md`, `docs/RESIDUAL_RISKS_RU.md`. - Критерии приемки: restore выполнен на отдельном сервере; checksums, logs, repository accessibility и rollback notes сохранены; manifest обновлен с `restore_tested=true`; recovery evidence не содержит секреты. ### P1-7. Hayabusa upload path: Rust helper parity and operational proof - Почему нужно: матрица PowerShell-to-Rust помечает `windows/export-upload-hayabusa-to-aw-server.ps1` как P1 runtime wrapper. Hayabusa is optional, but it is a security evidence path. - Риск: Windows PowerShell encoding, task principal или SSH wrapper drift ломает forensics upload без явной compile-time проверки. - Ожидаемый эффект: Rust helper covers upload, sidecar metadata, checksum and server drop-zone contract; PowerShell remains fallback. - Сложность: средняя. - Объем работ: 5-8 инженерных дней. - Затрагиваемые файлы: `adk-rust/crates/aw-windows-telemetry/`, `adk-rust/crates/hayabusa-tools/`, `windows/export-upload-hayabusa-to-aw-server.ps1`, `aw-server/hayabusa/aw-hayabusa.sh`, `ansible/deploy_aw_windows.yml`, `docs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.md`, `docs/POWERSHELL_TO_RUST_ROADMAP_RU.md`. - Критерии приемки: helper creates identical server-side intake result on fixture; BOM/backslash/path traversal tests preserved; task principal remains interactive Administrator where required; server `aw-hayabusa-drop.path` processing stays optional and fail-closed; no automatic remediation is introduced. ## P2 - улучшения архитектуры и сопровождаемости ### P2-1. Инкрементальная декомпозиция крупных runtime modules - Почему нужно: несколько production-critical files слишком крупные для надежного review и локального reasoning, особенно `detmir-portal/main.rs` и `aw-windows-telemetry/main.rs`. - Риск: высокий change-coupling, труднее делать точечные fixes и находить regressions. - Ожидаемый эффект: smaller modules by domain, faster review, focused tests. - Сложность: средняя-высокая. - Объем работ: 2-4 недели несколькими малыми PR. - Затрагиваемые файлы: `adk-rust/crates/detmir-portal/src/main.rs`, `adk-rust/crates/detmir-portal/src/*`, `adk-rust/crates/aw-windows-telemetry/src/main.rs`, `adk-rust/crates/worktime-api/src/main.rs`, `proxmox/tsj_guardian_bot.py`, `clickhouse-1c/ai/company_intelligence_api.py`. - Критерии приемки: каждый PR только moves/extracts one bounded domain; public API, config names, systemd units and task names unchanged; tests before/after identical; no new dependencies without written justification; line count decreases in target `main.rs` files without behavioral rewrite. ### P2-2. Consolidate exact duplicate diagnostic scripts - Почему нужно: две пары скриптов имеют identical SHA256, что создает риск будущего drift при исправлениях. - Риск: one copy fixed, bundled copy stale; diagnostics disagree. - Ожидаемый эффект: single source of truth while preserving existing paths. - Сложность: низкая. - Объем работ: 1-2 инженерных дня. - Затрагиваемые файлы: `scripts/aw-contour-diag.sh`, `scripts/detmir-full-diagnostics/aw-contour-diag.sh`, `scripts/check_production_inventory_placeholders.sh`, `scripts/detmir-full-diagnostics/check_production_inventory_placeholders.sh`, `scripts/detmir-full-diagnostics/detmir-full-diagnostics.sh`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`. - Критерии приемки: оба старых paths продолжают работать; есть один canonical implementation или generated copy check; CI/quality gate ловит future drift; shellcheck/bash syntax pass. ### P2-3. Split oversized Ansible deployment playbook without behavior change - Почему нужно: `ansible/deploy_aw_server.yml` имеет 3099 строк; это усложняет review и безопасные partial changes. - Риск: accidental deploy behavior changes in unrelated task blocks. - Ожидаемый эффект: role/include structure with same task order and clearer ownership. - Сложность: средняя. - Объем работ: 1-2 недели. - Затрагиваемые файлы: `ansible/deploy_aw_server.yml`, `ansible/roles/`, `ansible/group_vars/`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`. - Критерии приемки: `ansible-playbook --syntax-check` passes; `--list-tasks` before/after is reviewed for ordering parity; no default vars changed; rollback is reverting includes to previous single playbook. ### P2-4. Bound 1C ingest memory and file processing profile - Почему нужно: `adk-rust/crates/aw-1c-ingest/src/main.rs` currently reads rows into `Vec` and builds large JSON batches; acceptable for pilot, but risky for larger exports. - Риск: memory spikes, long transaction windows, ClickHouse insert amplification on larger 1C files. - Ожидаемый эффект: chunked processing where practical, explicit limits and predictable failure mode for oversized files. - Сложность: средняя-высокая. - Объем работ: 1-2 недели. - Затрагиваемые файлы: `adk-rust/crates/aw-1c-ingest/src/main.rs`, `clickhouse-1c/etl/config.yml`, `clickhouse-1c/etl/config.example.yml`, `clickhouse-1c/sql/`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`, `docs/QUALITY_STATUS_RU.md`. - Критерии приемки: synthetic large CSV/XLSX fixture documents max RSS and runtime; oversized input fails closed with clear diagnostic; existing small DetMir files produce identical rows; ClickHouse insert batch size is configurable and bounded. ### P2-5. Systematic command execution boundary audit - Почему нужно: `detmir-portal` already validates shell probe commands and kills process groups on timeout, but other operational binaries also execute shell/commands (`aw-slo-monitor`, `diag-and-manual-restart`, quality tooling). - Риск: future config drift can reintroduce command injection, secrets in argv or incomplete timeout cleanup. - Ожидаемый эффект: documented command execution policy and shared tests for allowlisted commands, timeouts, redaction and process-group cleanup. - Сложность: средняя. - Объем работ: 4-7 инженерных дней. - Затрагиваемые файлы: `adk-rust/crates/detmir-portal/src/main.rs`, `adk-rust/crates/detmir-portal/src/production/limits.rs`, `adk-rust/crates/aw-slo-monitor/src/main.rs`, `adk-rust/crates/diag-and-manual-restart/src/main.rs`, `adk-rust/crates/quality-gate/src/main.rs`, `docs/SECURITY_OPERATIONS_RUNBOOK_RU.md`. - Критерии приемки: every runtime command source is classified as constant, allowlisted config or operator-only diagnostic; tests reject shell control operators where config-driven; timeout tests verify child/grandchild cleanup; logs never include secrets from env or args. ### P2-6. Install kit artifact reproducibility and stale payload checks - Почему нужно: install kit is critical for Windows deployment, includes large LFS artifacts, and must not silently ship stale payloads. - Риск: Windows production receives an older collector or mismatched config while repo checks pass. - Ожидаемый эффект: deterministic installer evidence and stronger install-kit-vs-repo validation. - Сложность: средняя. - Объем работ: 5-8 инженерных дней. - Затрагиваемые файлы: `windows/installkit/innosetup/`, `adk-rust/crates/check-install-kit-vs-repo/`, `adk-rust/crates/rebuild-install-kit/`, `adk-rust/crates/validate-install-kit/`, `adk-rust/crates/verify-innosetup-installer/`, `scripts/rebuild_install_kit.sh`, `docs/INSTALL_KIT_RUNBOOK_RU.md`. - Критерии приемки: installer manifest lists exact source commit and payload SHA256; validation fails on stale collector payload; generated artifacts are not confused with source files; Windows task names and config schema remain backward compatible. ### P2-7. Standardize operational metrics contract across Rust daemons - Почему нужно: individual services expose useful fields, but there is no consistent minimal metrics/diagnostics contract for every long-running Rust daemon. - Риск: incident response depends on service-specific knowledge; regressions in one daemon are harder to compare with another. - Ожидаемый эффект: consistent `/health`, structured log fields and optional metrics snapshots for status, cache, queue, retry, timeout and resource pressure. - Сложность: средняя. - Объем работ: 2-3 недели staged by service. - Затрагиваемые файлы: `adk-rust/crates/aw-rus-healthd/`, `adk-rust/crates/worktime-api/`, `adk-rust/crates/detmir-portal/`, `adk-rust/crates/dlp-*`, `adk-rust/crates/aw-1c-ingest/`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`, `grafana/`. - Критерии приемки: minimal contract documented; each daemon reports version/build, config profile, degraded reason and queue pressure where applicable; existing endpoints remain backward compatible; Grafana/dashboard changes are additive. ## P3 - долгосрочные улучшения ### P3-1. Coverage thresholds after baseline review - Почему нужно: coverage workflow exists, but roadmap explicitly says threshold should be added after baseline review. - Риск: coverage can silently decline while CI remains green. - Ожидаемый эффект: gradual coverage floor without slowing blocking jobs. - Сложность: средняя. - Объем работ: 1-2 недели. - Затрагиваемые файлы: `.github/workflows/coverage.yml`, `adk-rust/`, `docs/QUALITY_STATUS_RU.md`, `docs/REVIEW_CHECKLIST_RU.md`. - Критерии приемки: initial threshold is based on measured baseline, not arbitrary target; critical crates get stricter per-crate goals; generated/fixture code excluded consistently; threshold moves from advisory to blocking only after stable history. ### P3-2. Russian OS compatibility matrix - Почему нужно: roadmap keeps Russian OS compatibility as planned validation. - Риск: deployment assumptions can fail on target OS variants only after a customer deployment attempt. - Ожидаемый эффект: explicit supported/unsupported OS matrix and installation evidence. - Сложность: средняя-высокая. - Объем работ: 2-4 недели depending on available test hosts. - Затрагиваемые файлы: `docs/registry/`, `docs/INSTALLATION.md`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`, `ansible/`, `windows/`, `windows/installkit/`. - Критерии приемки: matrix lists OS version, role, test date, result and limitations; unsupported combinations are documented explicitly; no production defaults are changed only for compatibility claims. ### P3-3. Reduce single-maintainer operational risk - Почему нужно: `docs/RESIDUAL_RISKS_RU.md` identifies one-main-developer risk and pending reviewed PR evidence. - Риск: incident response and release continuity depend too much on one person. - Ожидаемый эффект: documented ownership, review evidence and handoff paths. - Сложность: организационная, средняя. - Объем работ: 1-3 месяца part-time. - Затрагиваемые файлы: `.github/CODEOWNERS`, `.github/pull_request_template.md`, `docs/PR_REVIEW_WORKFLOW_RU.md`, `docs/PR_REVIEW_EVIDENCE_RU.md`, `docs/REVIEW_CHECKLIST_RU.md`, `docs/RESIDUAL_RISKS_RU.md`. - Критерии приемки: at least one reviewed PR merged without bypass; release branch review policy documented; emergency maintainer handoff checklist exists; residual risk status updated only with real evidence. ### P3-4. Historical docs and naming hygiene - Почему нужно: older docs still reference staged statuses, older check names or public-readiness context; this increases cognitive load for maintainers. - Риск: operators follow outdated docs or confuse GitHub public mirror checks with Russian release evidence. - Ожидаемый эффект: clearer current-state docs and archived historical records. - Сложность: низкая-средняя. - Объем работ: 3-6 инженерных дней. - Затрагиваемые файлы: `docs/PROJECT_STATUS_RU.md`, `docs/ROADMAP_CONFORMANCE_AUDIT_RU.md`, `docs/QUALITY_STATUS_RU.md`, `docs/registry/`, `README.md`, `ROADMAP.md`. - Критерии приемки: current-state docs contain current required check names; historical docs are marked historical and not operational runbooks; no product claims are strengthened without evidence; broken/stale links are corrected. ### P3-5. Long-horizon capacity sizing guide - Почему нужно: current DetMir production is small; future deployments need sizing guidance for AW SQLite, ClickHouse, Influx/Grafana, DLP light profile and Windows collector load. - Риск: deployments scale by guesswork and overload the small-Proxmox pattern. - Ожидаемый эффект: sizing table by users/events/day, retention, disk, CPU/RAM and optional security contours. - Сложность: средняя. - Объем работ: 2-4 недели after P1 load harness data exists. - Затрагиваемые файлы: `docs/DLP_RESOURCE_PROFILES_RU.md`, `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`, `docs/DETMIR_CURRENT_STATE_RU.md`, `grafana/`, `scripts/operational-maturity-check.mjs`. - Критерии приемки: guide is based on measured data, not estimates only; separate profiles exist for 5, 20, 50 and 100 users; optional DLP/Hayabusa/Velociraptor resource costs are explicit; default production profile remains conservative. ## Не включено, потому что уже реализовано - Включение dependency hygiene automation: `cargo machete`, `cargo deny`, `cargo audit`, `cargo tree --duplicates`, advisory `cargo udeps` уже есть в workflow. - Удаление текущих unused Rust dependencies: текущий `cargo machete --with-metadata` не нашел unused dependencies. - DetMir DLP light/core-only guardrails: runtime control, resource profiles, load guard and skipped-bucket semantics already implemented. - Security Finding Inbox and optional Hayabusa/Velociraptor findings path: schema, portal/API and fail-closed executor path already documented as optional and approval-driven. - Operational maturity smoke workflow: already exists and explicitly avoids heavy DLP/Loki/always-on Velociraptor. - Branch protection/CODEOWNERS/PR checklist basics: already documented; the remaining work is evidence and regular use, not creating the mechanism. ## Проверки, использованные для аудита ```bash cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian/adk-rust export CARGO_TARGET_DIR=/home/igor/.cache/detmir-adk-rust-target cargo metadata --locked --format-version 1 cargo tree --duplicates --locked cargo audit --deny warnings cargo deny --manifest-path Cargo.toml check --config ../deny.toml --hide-inclusion-graph --show-stats cargo machete --with-metadata cd /mnt/usb_hdd2/Projects/ActivityWatch-Russian rg -n "dtolnay/rust-toolchain@(stable|[0-9])|rust-toolchain" .github/workflows rust-toolchain.toml rg -n "CLICKHOUSE_PASSWORD|--password" clickhouse-1c/ops clickhouse-1c/ai clickhouse-1c/etl sha256sum scripts/aw-contour-diag.sh scripts/detmir-full-diagnostics/aw-contour-diag.sh sha256sum scripts/check_production_inventory_placeholders.sh scripts/detmir-full-diagnostics/check_production_inventory_placeholders.sh wc -l adk-rust/crates/detmir-portal/src/main.rs adk-rust/crates/aw-windows-telemetry/src/main.rs proxmox/tsj_guardian_bot.py adk-rust/crates/worktime-api/src/main.rs ansible/deploy_aw_server.yml ```