25 KiB
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/disabledby default;lightonly 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 fromadk-rust/crates/*/Cargo.toml. - Cargo state:
cargo metadata --locked --format-version 1returned 58 workspace members and 349 packages. - Dependency hygiene:
cargo audit --deny warningspassed;cargo machete --with-metadatafound no unused dependencies;cargo denypassed with non-blocking policy warnings;cargo tree --duplicates --lockedfound duplicate roots includingbitflags,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.shscripts/package_rust_release_binaries.pyscripts/detmir-full-diagnostics/adk-rust/crates/detmir-readiness/adk-rust/crates/aw-windows-telemetry/windows/validate-deployment.ps1docs/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.13and 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.mddocs/registry/BUILD_RUNNER_SETUP_RUNBOOK_RU.mddocs/registry/RELEASE_EVIDENCE_RUNBOOK_RU.mddocs/registry/RELEASE_EVIDENCE_MANIFEST_RU.mdscripts/build_release_evidence.shscripts/check_release_evidence.shscripts/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.shpasses 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.mddocs/registry/registry-evidence-manifest.jsonscripts/registry_readiness_check.shdocs/PROJECT_STATUS_RU.mddocs/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.shaw-server/logrotate.confwindows/validate-deployment.ps1adk-rust/crates/aw-windows-telemetry/docs/DLP_OPTIONAL_RUNTIME_RU.mddocs/DLP_RESOURCE_PROFILES_RU.mddocs/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.shclickhouse-1c/ops/run_manager_brief.shclickhouse-1c/ops/run_recovery_brief.shclickhouse-1c/ops/run_company_registry_bindings_refresh.shclickhouse-1c/ops/run_company_intelligence_refresh.shclickhouse-1c/ops/check_ingest_freshness.shclickhouse-1c/ai/*.pyclickhouse-1c/etl/*.pydocs/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.
pssmoke proves password absence.
Validation steps:
bash -n clickhouse-1c/ops/*.sh- Run affected wrapper against a test or dry-run configuration.
- Verify
psoutput 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.mjsscripts/awatch-production-hardening-smoke.mjsadk-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=falsesemantics 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.ymldocs/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.tomladk-rust/Cargo.lockdeny.toml.github/workflows/dependency-hygiene.ymldocs/THIRD_PARTY_LICENSES_RU.mddocs/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 metadatapass.
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.ps1windows/ActivityWatch.Windows.Common.psm1windows/export-upload-hayabusa-to-aw-server.ps1ansible/deploy_aw_windows.ymldocs/POWERSHELL_SCRIPT_STATUS_MATRIX_RU.mddocs/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.shdocs/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.mddocs/QUALITY_STATUS_RU.mddocs/ROADMAP_CONFORMANCE_AUDIT_RU.mddocs/BRANCH_PROTECTION_POLICY_RU.mddocs/BRANCH_PROTECTION_EVIDENCE_RU.mdREADME.mdROADMAP.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.mddocs/PR_REVIEW_WORKFLOW_RU.mddocs/PR_REVIEW_EVIDENCE_RU.mddocs/REVIEW_CHECKLIST_RU.mddocs/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.pyansible/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.shscripts/detmir-full-diagnostics/aw-contour-diag.shscripts/check_production_inventory_placeholders.shscripts/detmir-full-diagnostics/check_production_inventory_placeholders.shscripts/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 -non 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.rsclickhouse-1c/etl/config.ymlclickhouse-1c/etl/config.example.ymlclickhouse-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.rsadk-rust/crates/detmir-portal/src/production/limits.rsadk-rust/crates/aw-slo-monitor/src/main.rsadk-rust/crates/diag-and-manual-restart/src/main.rsadk-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.mddocs/OPERATIONS_VALIDATION_RUNBOOK_RU.mdansible/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.ymldocs/QUALITY_STATUS_RU.mddocs/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.mddocs/DLP_RESOURCE_PROFILES_RU.mddocs/OPERATIONS_VALIDATION_RUNBOOK_RU.mdgrafana/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 --duplicatesand advisorycargo udepsworkflow coverage.- DLP
core_only/disabledproduction 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-metadatareports no unused dependencies.