815 lines
25 KiB
Markdown
815 lines
25 KiB
Markdown
# TASK_065: Production 1.0 development plan
|
|
|
|
Audit date: 2026-07-01.
|
|
|
|
Scope: AWatch-rus repository readiness for Production 1.0. This plan is based
|
|
only on repository evidence: tracked files, documentation, CI workflows,
|
|
Cargo metadata, dependency checks, scripts, deployment assets and operational
|
|
maturity contracts.
|
|
|
|
This is not a feature roadmap. Every task below exists because the current
|
|
repository still has a confirmed blocker or material risk for a durable
|
|
Production 1.0 release.
|
|
|
|
## Guardrails
|
|
|
|
- Do not redesign working subsystems.
|
|
- Do not add new product functionality as part of Production 1.0 readiness.
|
|
- Preserve backward compatibility for deployed DetMir production.
|
|
- Keep DLP runtime conservative: `core_only/disabled` by default; `light` only
|
|
after explicit operator resource preflight.
|
|
- Do not enable Loki or always-on Velociraptor as part of Production 1.0.
|
|
- Keep PowerShell fallback until Rust parity, canary evidence and rollback
|
|
criteria are proven.
|
|
- GitHub remains public mirror validation. Release evidence must be produced in
|
|
the controlled release contour documented under `docs/registry/`.
|
|
|
|
## Evidence Base
|
|
|
|
Reviewed repository areas:
|
|
|
|
- Rust workspace: `adk-rust/`, 58 crates from `adk-rust/crates/*/Cargo.toml`.
|
|
- Cargo state: `cargo metadata --locked --format-version 1` returned 58
|
|
workspace members and 349 packages.
|
|
- Dependency hygiene: `cargo audit --deny warnings` passed; `cargo machete
|
|
--with-metadata` found no unused dependencies; `cargo deny` passed with
|
|
non-blocking policy warnings; `cargo tree --duplicates --locked` found
|
|
duplicate roots including `bitflags`, `getrandom`, `hashbrown`, `mio`, `zip`.
|
|
- CI: `.github/workflows/ci.yml`, `security.yml`, `coverage.yml`,
|
|
`dependency-hygiene.yml`, `operational-maturity.yml`,
|
|
`rust-workspace.yml`, `rust-binary-build.yml`, `release-assets.yml`.
|
|
- Operational maturity: `configs/operational-maturity-contract.json`,
|
|
`scripts/operational-maturity-check.mjs`,
|
|
`docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`.
|
|
- Registry and release evidence docs: `docs/registry/*`,
|
|
`docs/PROJECT_STATUS_RU.md`, `docs/RESIDUAL_RISKS_RU.md`,
|
|
`docs/QUALITY_STATUS_RU.md`, `ROADMAP.md`.
|
|
- Runtime/deployment: `ansible/`, `aw-server/`, `windows/`, `proxmox/`,
|
|
`clickhouse-1c/`, `grafana/`, `pfsense/`, root operational wrappers.
|
|
|
|
Confirmed current strengths:
|
|
|
|
- Rust-first runtime and wrappers exist.
|
|
- Public mirror CI exists.
|
|
- Dependency hygiene automation exists.
|
|
- Operational maturity offline harness exists.
|
|
- DLP resource guardrails and conservative runtime profile exist.
|
|
- Security Finding Inbox / Hayabusa / Velociraptor are optional and separated
|
|
from Workforce hot path.
|
|
- Production runbooks and DetMir guardrails are documented.
|
|
|
|
Confirmed Production 1.0 blockers and material risks are organized below.
|
|
|
|
## P0 - Critical before Production 1.0
|
|
|
|
### P0-1. Production binary parity gate
|
|
|
|
Purpose: prove that every binary actually running in production matches the
|
|
reviewed release artifact.
|
|
|
|
Reason: `scripts/check_detmir_rust_release_artifacts.sh` verifies local release
|
|
artifacts, but Production 1.0 also needs a verified mapping from deployed unit,
|
|
timer or Windows task to exact production SHA256 and source crate.
|
|
|
|
Operational impact: prevents stale binary drift and makes rollback decisions
|
|
deterministic.
|
|
|
|
Risk: high. A stale production binary can invalidate test results and hide
|
|
regressions.
|
|
|
|
Estimated effort: 3-5 days.
|
|
|
|
Affected modules:
|
|
|
|
- `scripts/check_detmir_rust_release_artifacts.sh`
|
|
- `scripts/package_rust_release_binaries.py`
|
|
- `scripts/detmir-full-diagnostics/`
|
|
- `adk-rust/crates/detmir-readiness/`
|
|
- `adk-rust/crates/aw-windows-telemetry/`
|
|
- `windows/validate-deployment.ps1`
|
|
- `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Report maps `service/timer/task -> binary path -> crate -> runtime role`.
|
|
- Report includes local release SHA256, production SHA256 and git SHA.
|
|
- Missing or mismatched binaries fail the gate.
|
|
- DLP/Loki/Velociraptor heavy runtime is not enabled by the check.
|
|
|
|
Validation steps:
|
|
|
|
- Run the parity gate against current release artifacts.
|
|
- Run diagnostics for `10.10.10.2`, `10.10.10.13` and Windows RDP host.
|
|
- Confirm stale binary simulation fails.
|
|
|
|
Expected benefit: release and production state become auditable.
|
|
|
|
### P0-2. Controlled release evidence build
|
|
|
|
Purpose: produce Production 1.0 release evidence outside GitHub public mirror.
|
|
|
|
Reason: `docs/PROJECT_STATUS_RU.md`, `docs/QUALITY_STATUS_RU.md` and
|
|
`docs/registry/registry-evidence-manifest.json` state that GitHub Actions are
|
|
public validation only and that the Russian build-runner/release evidence path
|
|
is still pending.
|
|
|
|
Operational impact: separates mirror CI from release authority.
|
|
|
|
Risk: high. Without controlled release evidence, Production 1.0 cannot be
|
|
treated as reproducibly built.
|
|
|
|
Estimated effort: 3-6 days plus infrastructure window.
|
|
|
|
Affected modules:
|
|
|
|
- `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/RELEASE_EVIDENCE_MANIFEST_RU.md`
|
|
- `scripts/build_release_evidence.sh`
|
|
- `scripts/check_release_evidence.sh`
|
|
- `scripts/verify_release_assets.sh`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Controlled runner has documented OS, toolchain and access model.
|
|
- Release evidence includes source archive, binary archive, SBOM if available,
|
|
SHA256SUMS, Cargo metadata/tree, smoke logs and release manifest.
|
|
- `scripts/check_release_evidence.sh` passes on produced artifacts.
|
|
- GitHub CI is not described as release evidence.
|
|
|
|
Validation steps:
|
|
|
|
- Run release evidence script on controlled runner.
|
|
- Verify manifest and checksums.
|
|
- Record runner environment and commit SHA.
|
|
|
|
Expected benefit: Production 1.0 release becomes reproducible and auditable.
|
|
|
|
### P0-3. Disaster recovery restore proof
|
|
|
|
Purpose: prove that repository backup can be restored before Production 1.0.
|
|
|
|
Reason: `docs/registry/registry-evidence-manifest.json` records
|
|
`restore_tested=false`, and `docs/RESIDUAL_RISKS_RU.md` lists Gitea restore
|
|
test as open.
|
|
|
|
Operational impact: validates recovery from source repository loss.
|
|
|
|
Risk: high. Untested backup is not a recovery capability.
|
|
|
|
Estimated effort: 2-4 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Restore is performed on a separate host.
|
|
- SHA256 verification, logs, restored repository access and rollback notes are
|
|
captured.
|
|
- Manifest is updated only after evidence exists.
|
|
- No secrets are copied into repository documentation.
|
|
|
|
Validation steps:
|
|
|
|
- Execute restore runbook.
|
|
- Run registry readiness check after manifest update.
|
|
- Confirm restored repository clone and log evidence.
|
|
|
|
Expected benefit: repository DR becomes proven, not only documented.
|
|
|
|
### P0-4. Bounded retention for operational state and evidence
|
|
|
|
Purpose: prevent disk exhaustion from state, queues, diagnostics, evidence and
|
|
forensics artifacts.
|
|
|
|
Reason: DLP optional runtime docs explicitly state that historical DLP buckets
|
|
and artifacts may remain until a separate retention/cleanup procedure. Scripts
|
|
and diagnostics also create durable output.
|
|
|
|
Operational impact: reduces outage risk on Proxmox/AW server/Windows state
|
|
paths.
|
|
|
|
Risk: high. Disk exhaustion can stop ingestion, portal, ClickHouse or
|
|
ActivityWatch services.
|
|
|
|
Estimated effort: 4-7 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Retention matrix lists roots, owners, max age, max size and dry-run behavior.
|
|
- Cleanup only touches allowlisted roots and refuses traversal/symlink escape.
|
|
- Active state is preserved.
|
|
- Disabled DLP buckets remain `SKIPPED`, not failure.
|
|
|
|
Validation steps:
|
|
|
|
- Run dry-run cleanup on fixture tree.
|
|
- Run apply mode on controlled temporary tree.
|
|
- Run operational smoke after cleanup.
|
|
|
|
Expected benefit: long-running production operation has bounded disk behavior.
|
|
|
|
### P0-5. Remove ClickHouse password exposure from process arguments
|
|
|
|
Status: addressed by TASK_068. Runtime ClickHouse/1C wrappers keep
|
|
`CLICKHOUSE_PASSWORD` in the environment/config path and no longer pass it in
|
|
process arguments.
|
|
|
|
Purpose: keep production credentials out of `ps`/process argv.
|
|
|
|
Reason: `rg` confirmed `clickhouse-1c/ops/run_*.sh` wrappers pass
|
|
`--password "${CLICKHOUSE_PASSWORD}"`.
|
|
|
|
Operational impact: improves secret handling for the 1C/ClickHouse contour.
|
|
|
|
Risk: high. Local process listing can reveal ClickHouse credentials.
|
|
|
|
Estimated effort: 2-4 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Runtime wrappers no longer pass password through argv.
|
|
- Existing environment-based deployment remains backward compatible.
|
|
- Logs redact authentication failures.
|
|
- `ps` smoke proves password absence.
|
|
|
|
Validation steps:
|
|
|
|
- `bash -n clickhouse-1c/ops/*.sh`
|
|
- Run affected wrapper against a test or dry-run configuration.
|
|
- Verify `ps` output during execution.
|
|
- Run secret-pattern scan.
|
|
|
|
Expected benefit: production secret exposure surface is reduced.
|
|
|
|
### P0-6. Portal/worktime hot-path load gate
|
|
|
|
Purpose: prevent Production 1.0 from regressing under report/prewarm load.
|
|
|
|
Reason: `docs/PROJECT_STATUS_RU.md` records that full report/snapshot prewarm
|
|
can still be CPU/IO expensive.
|
|
|
|
Operational impact: protects owner/operator portal, worktime reports and AW
|
|
query path.
|
|
|
|
Risk: high. More users or more history can produce slow portal, stale data or
|
|
AW datastore pressure.
|
|
|
|
Estimated effort: 1-2 weeks.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Synthetic 5/20/50 user fixtures exist without production data.
|
|
- Gate records p95 latency, max RSS, query count and stale-cache behavior.
|
|
- Disconnected RDP sessions do not false-fail.
|
|
- `AW_DLP_ENABLED=false` semantics remain valid.
|
|
- Heavy load job is scheduled/advisory; blocking smoke remains fast.
|
|
|
|
Validation steps:
|
|
|
|
- Run offline load harness.
|
|
- Confirm configured p95/RSS ceilings.
|
|
- Run existing operational maturity smoke.
|
|
|
|
Expected benefit: Production 1.0 has measurable performance safety.
|
|
|
|
## P1 - Strongly recommended for the first Production 1.0 release train
|
|
|
|
### P1-1. Align Rust toolchain across CI
|
|
|
|
Purpose: remove compiler drift from blocking workflows.
|
|
|
|
Reason: `rust-toolchain.toml` pins `1.94.0`, but several workflows install
|
|
floating `stable`.
|
|
|
|
Operational impact: improves reproducibility between local, CI and release
|
|
contours.
|
|
|
|
Risk: medium. Toolchain drift can create inconsistent warnings or binaries.
|
|
|
|
Estimated effort: 1-2 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
- `docs/QUALITY_STATUS_RU.md`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Blocking Rust workflows use the pinned toolchain.
|
|
- Nightly remains limited to advisory `cargo udeps`.
|
|
- Required check names do not change.
|
|
|
|
Validation steps:
|
|
|
|
- YAML syntax validation.
|
|
- Affected workflow dry review.
|
|
- Run relevant Rust checks if workflow commands change.
|
|
|
|
Expected benefit: CI becomes more deterministic.
|
|
|
|
### P1-2. Dependency warning baseline and future block policy
|
|
|
|
Purpose: make dependency hygiene fail closed for new risk while preserving
|
|
current compatibility.
|
|
|
|
Reason: `cargo deny` passes but reports 36 non-blocking `bans` warnings;
|
|
`cargo tree --duplicates --locked` reports duplicate roots; `serde_yaml` is
|
|
documented as deprecated in third-party license docs.
|
|
|
|
Operational impact: reduces future supply-chain drift.
|
|
|
|
Risk: medium. Uncontrolled duplicate/deprecated dependency growth increases
|
|
maintenance and security load.
|
|
|
|
Estimated effort: 4-8 days.
|
|
|
|
Affected modules:
|
|
|
|
- `adk-rust/Cargo.toml`
|
|
- `adk-rust/Cargo.lock`
|
|
- `deny.toml`
|
|
- `.github/workflows/dependency-hygiene.yml`
|
|
- `docs/THIRD_PARTY_LICENSES_RU.md`
|
|
- `docs/QUALITY_STATUS_RU.md`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Each existing warning is classified: keep, update, remove or defer.
|
|
- New duplicate/deprecated dependencies require documented exception.
|
|
- `cargo audit`, `cargo deny`, `cargo machete`, `cargo metadata` pass.
|
|
|
|
Validation steps:
|
|
|
|
- Run dependency hygiene pipeline.
|
|
- Verify policy failure on synthetic unapproved duplicate where practical.
|
|
|
|
Expected benefit: dependency hygiene remains controlled after 1.0.
|
|
|
|
### P1-3. Windows Rust validation parity
|
|
|
|
Purpose: prove Rust validation is equivalent to current PowerShell validation
|
|
before reducing fallback reliance.
|
|
|
|
Reason: `docs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.md` lists remaining fallback
|
|
and runtime PowerShell paths, including validation and Hayabusa upload.
|
|
|
|
Operational impact: keeps Windows/RDP production recoverable while reducing
|
|
runtime drift.
|
|
|
|
Risk: medium. Premature fallback removal can break localized Windows Server
|
|
2019 recovery paths.
|
|
|
|
Estimated effort: 1-2 weeks.
|
|
|
|
Affected modules:
|
|
|
|
- `adk-rust/crates/aw-windows-telemetry/`
|
|
- `windows/validate-deployment.ps1`
|
|
- `windows/ActivityWatch.Windows.Common.psm1`
|
|
- `windows/export-upload-hayabusa-to-aw-server.ps1`
|
|
- `ansible/deploy_aw_windows.yml`
|
|
- `docs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.md`
|
|
- `docs/POWERSHELL_TO_RUST_ROADMAP_RU.md`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Rust validation covers all current production validation sections.
|
|
- Localized Windows user/session handling is tested.
|
|
- Canary comparison between Rust and PowerShell reports is recorded.
|
|
- PowerShell remains documented rollback.
|
|
|
|
Validation steps:
|
|
|
|
- Run Rust validation against fixture and live canary.
|
|
- Run PowerShell validation against same host.
|
|
- Compare normalized reports.
|
|
|
|
Expected benefit: Windows runtime maturity improves without breaking rollback.
|
|
|
|
### P1-4. Install kit reproducibility and stale payload gate
|
|
|
|
Purpose: ensure Windows installer payloads match repository and release
|
|
artifacts.
|
|
|
|
Reason: repository contains install-kit tooling and large installer artifacts;
|
|
stale payloads can deploy old collectors while CI is green.
|
|
|
|
Operational impact: safer Windows upgrades and rollback.
|
|
|
|
Risk: medium. Mismatched install kit can create production drift.
|
|
|
|
Estimated effort: 5-8 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Installer manifest contains source commit and payload SHA256 values.
|
|
- Validation fails on stale collector payload.
|
|
- Existing Windows task names and config schema remain compatible.
|
|
|
|
Validation steps:
|
|
|
|
- Rebuild install kit on controlled runner.
|
|
- Run install-kit validators.
|
|
- Compare payload manifest with repository state.
|
|
|
|
Expected benefit: Windows deployments become reproducible.
|
|
|
|
### P1-5. Current-state documentation cleanup
|
|
|
|
Purpose: prevent operators and reviewers from following stale status text.
|
|
|
|
Reason: current docs include historical statuses, older required check names
|
|
and explicit pending sections that must be reconciled with active branch
|
|
protection and current workflows.
|
|
|
|
Operational impact: reduces release and support mistakes.
|
|
|
|
Risk: medium. Wrong runbook/status interpretation can cause incorrect release
|
|
decisions.
|
|
|
|
Estimated effort: 3-6 days.
|
|
|
|
Affected modules:
|
|
|
|
- `docs/PROJECT_STATUS_RU.md`
|
|
- `docs/QUALITY_STATUS_RU.md`
|
|
- `docs/ROADMAP_CONFORMANCE_AUDIT_RU.md`
|
|
- `docs/BRANCH_PROTECTION_POLICY_RU.md`
|
|
- `docs/BRANCH_PROTECTION_EVIDENCE_RU.md`
|
|
- `README.md`
|
|
- `ROADMAP.md`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Current docs list actual required check names.
|
|
- Historical docs are clearly marked historical.
|
|
- Registry/release claims remain conservative.
|
|
- No stale instructions contradict Production 1.0 guardrails.
|
|
|
|
Validation steps:
|
|
|
|
- Run registry readiness check.
|
|
- Run docs smoke/link validation.
|
|
- Run secret scan.
|
|
|
|
Expected benefit: release process is less error-prone.
|
|
|
|
### P1-6. Reviewed PR and release governance evidence
|
|
|
|
Purpose: prove review discipline before Production 1.0.
|
|
|
|
Reason: `docs/RESIDUAL_RISKS_RU.md` records first reviewed PR evidence as
|
|
pending even though CODEOWNERS, PR template and ruleset are present.
|
|
|
|
Operational impact: improves change control for production releases.
|
|
|
|
Risk: medium. Lack of review evidence weakens release governance.
|
|
|
|
Estimated effort: 1-3 days after reviewer availability.
|
|
|
|
Affected modules:
|
|
|
|
- `.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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- At least one PR is reviewed and merged without bypass.
|
|
- Evidence records checks, reviewer, approval and merge path.
|
|
- Release branch review policy is documented.
|
|
|
|
Validation steps:
|
|
|
|
- Verify PR history and ruleset evidence.
|
|
- Run registry readiness check after evidence update.
|
|
|
|
Expected benefit: Production 1.0 has visible governance evidence.
|
|
|
|
## P2 - Engineering improvements for post-1.0 hardening
|
|
|
|
### P2-1. Incremental decomposition of large modules
|
|
|
|
Purpose: reduce review risk in the largest files without behavior changes.
|
|
|
|
Reason: confirmed hotspots include `detmir-portal/src/main.rs` at 14200 lines,
|
|
`aw-windows-telemetry/src/main.rs` at 6411 lines,
|
|
`proxmox/tsj_guardian_bot.py` at 4610 lines,
|
|
`worktime-api/src/main.rs` at 3988 lines and
|
|
`ansible/deploy_aw_server.yml` at 3099 lines.
|
|
|
|
Operational impact: easier reviews and lower regression risk.
|
|
|
|
Risk: medium. Large files increase accidental coupling.
|
|
|
|
Estimated effort: 2-4 weeks in small PRs.
|
|
|
|
Affected modules:
|
|
|
|
- `adk-rust/crates/detmir-portal/`
|
|
- `adk-rust/crates/aw-windows-telemetry/`
|
|
- `adk-rust/crates/worktime-api/`
|
|
- `proxmox/tsj_guardian_bot.py`
|
|
- `ansible/deploy_aw_server.yml`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Only extract bounded domains.
|
|
- Public API, config, unit and task names remain unchanged.
|
|
- Tests before and after remain equivalent.
|
|
|
|
Validation steps:
|
|
|
|
- Targeted tests per extracted module.
|
|
- Full Rust pipeline for Rust changes.
|
|
- Ansible syntax/list-tasks parity for playbook changes.
|
|
|
|
Expected benefit: maintainability improves without architecture rewrite.
|
|
|
|
### P2-2. Consolidate exact duplicate diagnostic scripts
|
|
|
|
Purpose: prevent script drift.
|
|
|
|
Reason: SHA256 confirms exact duplicates:
|
|
`scripts/aw-contour-diag.sh` equals
|
|
`scripts/detmir-full-diagnostics/aw-contour-diag.sh`; and
|
|
`scripts/check_production_inventory_placeholders.sh` equals
|
|
`scripts/detmir-full-diagnostics/check_production_inventory_placeholders.sh`.
|
|
|
|
Operational impact: diagnostics remain consistent.
|
|
|
|
Risk: low-medium. Future fixes may land in one copy only.
|
|
|
|
Estimated effort: 1-2 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Existing paths continue to work.
|
|
- One implementation is canonical or drift check is enforced.
|
|
- Shell syntax and shellcheck pass.
|
|
|
|
Validation steps:
|
|
|
|
- `bash -n` on affected scripts.
|
|
- Run diagnostic wrapper in dry-run/smoke mode.
|
|
|
|
Expected benefit: lower maintenance overhead.
|
|
|
|
### P2-3. Bound 1C ingest memory profile
|
|
|
|
Purpose: make 1C ingest safer for larger files.
|
|
|
|
Reason: `adk-rust/crates/aw-1c-ingest/src/main.rs` reads rows into `Vec` and
|
|
builds large JSON batches; acceptable now, but risky as export volume grows.
|
|
|
|
Operational impact: improves ClickHouse ingestion predictability.
|
|
|
|
Risk: medium. Large files can create memory spikes and long insert windows.
|
|
|
|
Estimated effort: 1-2 weeks.
|
|
|
|
Affected modules:
|
|
|
|
- `adk-rust/crates/aw-1c-ingest/src/main.rs`
|
|
- `clickhouse-1c/etl/config.yml`
|
|
- `clickhouse-1c/etl/config.example.yml`
|
|
- `clickhouse-1c/sql/`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Oversized input fails closed with clear diagnostic.
|
|
- Batch size is bounded and configurable.
|
|
- Existing small DetMir files produce identical output.
|
|
|
|
Validation steps:
|
|
|
|
- Add synthetic large CSV/XLSX fixture.
|
|
- Run targeted Rust tests.
|
|
- Measure max RSS on fixture.
|
|
|
|
Expected benefit: safer scaling of 1C analytics.
|
|
|
|
### P2-4. Command execution boundary audit
|
|
|
|
Purpose: standardize shell/command execution safety.
|
|
|
|
Reason: `detmir-portal` already validates shell probe commands and tests
|
|
process-tree timeout cleanup, while other operational tools also execute
|
|
commands.
|
|
|
|
Operational impact: prevents future command injection or timeout regressions.
|
|
|
|
Risk: medium. Config-driven command execution must remain fail-closed.
|
|
|
|
Estimated effort: 4-7 days.
|
|
|
|
Affected modules:
|
|
|
|
- `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`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Runtime command sources are classified.
|
|
- Config-driven commands reject shell control operators where applicable.
|
|
- Timeout tests cover child/grandchild cleanup.
|
|
- Logs do not expose secrets.
|
|
|
|
Validation steps:
|
|
|
|
- Targeted Rust tests.
|
|
- Clippy for affected crates.
|
|
- Secret scan.
|
|
|
|
Expected benefit: stronger fail-closed security posture.
|
|
|
|
## P3 - Long-term improvements after Production 1.0
|
|
|
|
### P3-1. Russian OS compatibility matrix
|
|
|
|
Purpose: document supported and unsupported target OS combinations.
|
|
|
|
Reason: `ROADMAP.md` lists Russian OS compatibility validation as planned.
|
|
|
|
Operational impact: reduces deployment surprises for new customers.
|
|
|
|
Risk: low-medium for current DetMir, higher for wider distribution.
|
|
|
|
Estimated effort: 2-4 weeks depending on test hosts.
|
|
|
|
Affected modules:
|
|
|
|
- `docs/registry/`
|
|
- `docs/INSTALLATION.md`
|
|
- `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`
|
|
- `ansible/`
|
|
- `windows/`
|
|
- `windows/installkit/`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Matrix lists OS, role, test date, result and limitations.
|
|
- Unsupported combinations are explicit.
|
|
- No production defaults are changed just for claims.
|
|
|
|
Validation steps:
|
|
|
|
- Run install/deploy smoke per OS.
|
|
- Record evidence paths.
|
|
|
|
Expected benefit: clearer deployment support boundary.
|
|
|
|
### P3-2. Coverage threshold after baseline review
|
|
|
|
Purpose: prevent coverage decline after baseline stabilizes.
|
|
|
|
Reason: `docs/QUALITY_STATUS_RU.md` and `ROADMAP.md` state coverage threshold
|
|
is not enforced yet.
|
|
|
|
Operational impact: improves long-term regression resistance.
|
|
|
|
Risk: low for current production if kept advisory first.
|
|
|
|
Estimated effort: 1-2 weeks.
|
|
|
|
Affected modules:
|
|
|
|
- `.github/workflows/coverage.yml`
|
|
- `docs/QUALITY_STATUS_RU.md`
|
|
- `docs/REVIEW_CHECKLIST_RU.md`
|
|
- selected `adk-rust/` crates
|
|
|
|
Acceptance criteria:
|
|
|
|
- Initial threshold is based on measured baseline.
|
|
- Threshold starts advisory and becomes blocking only after stable history.
|
|
- Generated/fixture code exclusions are documented.
|
|
|
|
Validation steps:
|
|
|
|
- Run coverage workflow locally or in CI.
|
|
- Compare summary to baseline.
|
|
|
|
Expected benefit: gradual improvement in test discipline.
|
|
|
|
### P3-3. Capacity sizing guide from measured data
|
|
|
|
Purpose: provide measured sizing guidance beyond the current 5-user DetMir
|
|
deployment.
|
|
|
|
Reason: current production is small; future deployments need measured guidance
|
|
for AW SQLite, ClickHouse, Grafana, DLP light profile and Windows collector
|
|
load.
|
|
|
|
Operational impact: safer planning for larger deployments.
|
|
|
|
Risk: low for current production, medium for growth.
|
|
|
|
Estimated effort: 2-4 weeks after P0 load gate data exists.
|
|
|
|
Affected modules:
|
|
|
|
- `docs/SIZING_GUIDE_RU.md`
|
|
- `docs/DLP_RESOURCE_PROFILES_RU.md`
|
|
- `docs/OPERATIONS_VALIDATION_RUNBOOK_RU.md`
|
|
- `grafana/`
|
|
- `scripts/operational-maturity-check.mjs`
|
|
|
|
Acceptance criteria:
|
|
|
|
- Profiles exist for 5, 20, 50 and 100 users.
|
|
- Optional DLP/Hayabusa/Velociraptor resource costs are explicit.
|
|
- Guidance is based on measured harness output.
|
|
|
|
Validation steps:
|
|
|
|
- Run synthetic capacity scenarios.
|
|
- Update sizing doc with observed p95/RSS/storage data.
|
|
|
|
Expected benefit: production planning becomes evidence-based.
|
|
|
|
## Not Proposed Because Already Implemented
|
|
|
|
- Rust-first runtime direction.
|
|
- Public mirror CI, security scan and dependency review.
|
|
- `cargo audit`, `cargo deny`, `cargo machete`, `cargo tree --duplicates` and
|
|
advisory `cargo udeps` workflow coverage.
|
|
- DLP `core_only/disabled` production guardrails and load guard.
|
|
- Optional Security Finding Inbox / Hayabusa / Velociraptor separation from
|
|
Workforce hot path.
|
|
- Operational maturity offline harness.
|
|
- Branch protection, CODEOWNERS, PR template and review checklist mechanisms.
|
|
- Unused dependency cleanup: current `cargo machete --with-metadata` reports no
|
|
unused dependencies.
|