{ "task_id": "DEV-000039", "task_revision": 1, "architecture_revision": "ADR-0004", "base_repo_revision": "4016820541229544aae81240cb2e12513fb2ce12", "risk_tier": "E", "intent": "Add transition-aware local Windows notifications to the external Domovoy production health monitor without external services, canonical Monitor semantics, or docker-test.", "requirement_ids": ["CONSTITUTION-1.3.11", "CONSTITUTION-1.3.31", "USER-DOCKER-PROD-ONLY"], "allowed_change_scope": { "modules": [], "paths": [ "deploy/windows/Send-DomovoyHealthNotification.ps1", "deploy/windows/Invoke-DomovoyProductionMonitoring.ps1", "deploy/windows/Register-DomovoyProductionHealthTask.ps1", "docs/DEPLOYMENT.md", "dev/ACTIVE_TASK.json", "dev/tasks/DEV-000039-production-health-notifications.json" ] }, "forbidden_change_scope": { "paths": [ "architecture/**", "ci/**", ".gitea/**", "cmd/**", "contracts/**", "modules/**", "database/**", "security/**", "deploy/docker-compose*.yml" ] }, "allowed_architecture_delta": { "new_cross_module_dependencies": 0, "new_canonical_owners": 0, "new_privileges": 0, "new_third_party_dependencies": 0 }, "contracts": { "consume": ["DEV-000038 local production health status JSON", "Windows interactive notification area", "Windows Scheduled Tasks"], "may_change": [] }, "semantic_owner": "none; external rebuildable operational projection", "canonical_state": ["none; notification suppression state is non-canonical and may be regenerated"], "state_transitions": ["first degraded observation -> degraded notification", "healthy to degraded -> degraded notification", "degraded to healthy -> recovery notification", "continued degraded after reminder interval -> reminder notification"], "side_effects_and_privileges": ["display a local Windows notification for the current interactive user", "atomically write local non-canonical notification state", "update the current-user scheduled task action"], "persistence_and_migrations": ["no database migration", "single local notification state JSON; no history or retention deletion"], "failure_retry_restart": ["health collection runs in a child process and publishes status before notification evaluation", "duplicate degraded observations are suppressed for six hours", "notification failure is distinct from health degradation", "the scheduled task returns the health exit code unless notification delivery itself fails"], "assumptions": [ "The scheduled task runs for an interactive Windows user so notification balloons are visible", "The DEV-000038 status schema remains version 1 with overall and checks fields", "Local notification state is not authoritative and can be deleted safely", "docker-test remains prohibited" ], "acceptance_scenarios": [ "an initial healthy observation records state without notifying", "a transition to degraded sends one notification naming failed checks", "a repeated degraded observation within six hours is suppressed", "a transition back to healthy sends one recovery notification", "the wrapper evaluates notifications even when the health child exits nonzero", "the registered task invokes the wrapper every 15 minutes and at logon", "exact diff validation observes only declared paths" ], "required_tests": [ "PowerShell parser", "architecture preflight", "exact diff scope", "synthetic healthy/degraded/repeated/recovered notification transitions", "healthy live wrapper run", "scheduled task registration and manual invocation", "go test", "go vet", "CI" ], "terminal_gap_states": [ "BLOCKED_BY_MISSING_CAPABILITY", "BLOCKED_BY_CONFLICT" ] }