diff --git a/.github/workflows/engineering.yml b/.github/workflows/engineering.yml index 7b0a48d..0678644 100644 --- a/.github/workflows/engineering.yml +++ b/.github/workflows/engineering.yml @@ -108,6 +108,7 @@ jobs: tests/test_dependency_errors.py \ tests/test_production_logging.py \ tests/test_delivery.py \ + tests/test_operator_imports.py \ tests/test_health.py \ tests/test_identity.py \ tests/test_coordinator_control.py \ diff --git a/scripts/release/README.md b/scripts/release/README.md index 5f5956b..acc4530 100644 --- a/scripts/release/README.md +++ b/scripts/release/README.md @@ -410,10 +410,19 @@ Finish recovery with Backend Alembic verification, new TLS material, service readiness and actual four-language/history checks on the second VM. The 30-minute end-to-end target still requires measured acceptance. +## Health query deadlines + +Fixed health helpers include interpreter startup in their wall-clock deadline. +Outbox and import queries have 60 seconds each; factory status has 30 seconds and +broker metadata has 45 seconds. Node readiness has 300 seconds for the sequential +checks. Each helper keeps its fixed CPU, memory, process and privilege limits. +These operator deadlines do not change student execution budgets. An expired or +failed query keeps admission closed. + ## Observe resources and queues `python3.13 -m scripts.release.node_observation` uses a finite read-only Root cap0, -no-new-privileges helper: 128 MiB, zero swap, 16 tasks, 25% CPU, 120 seconds and one +no-new-privileges helper: 128 MiB, zero swap, 16 tasks, 25% CPU, 360 seconds and one named unit. It reads memory/PIDs current/peak, CPU throttling, memory events, device IO and filesystem bytes/inodes without enumerating private content. Existing owners supply service identities, ACLs, leases/cleanup, broker/outbox/import backlog and diff --git a/scripts/release/operator_units.py b/scripts/release/operator_units.py index a460a28..f20afcb 100644 --- a/scripts/release/operator_units.py +++ b/scripts/release/operator_units.py @@ -11,13 +11,13 @@ from .policy import DeliveryError, invalid_constant, unique_object from .services import python_environment PROFILES = { - "node-health": ("root", 0, 128, 16, 50, 90), + "node-health": ("root", 0, 128, 16, 50, 300), "broker-health": ("rabbitmq", 1204, 256, 64, 50, 45), - "factory-health": ("kf-worker", 1202, 32, 4, 10, 10), - "import-health": ("kf-oj", 1200, 128, 16, 25, 10), - "outbox-health": ("kf-oj", 1200, 128, 16, 25, 10), + "factory-health": ("kf-worker", 1202, 32, 4, 10, 30), + "import-health": ("kf-oj", 1200, 128, 16, 25, 60), + "outbox-health": ("kf-oj", 1200, 128, 16, 25, 60), "node-maintenance": ("root", 0, 256, 32, 50, 900), - "node-observation": ("root", 0, 128, 16, 25, 120), + "node-observation": ("root", 0, 128, 16, 25, 360), }