diff --git a/DEVELOPMENT_PLAN_NEXT.md b/DEVELOPMENT_PLAN_NEXT.md new file mode 100644 index 0000000..6bee98b --- /dev/null +++ b/DEVELOPMENT_PLAN_NEXT.md @@ -0,0 +1,643 @@ +# 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 +```