diff --git a/services/hermes/agent-deployment.yaml b/services/hermes/agent-deployment.yaml index 57611a51..85f563d6 100644 --- a/services/hermes/agent-deployment.yaml +++ b/services/hermes/agent-deployment.yaml @@ -903,8 +903,8 @@ spec: - /opt/coordinator/cli_lane_capabilities.py initialDelaySeconds: 2 periodSeconds: 5 - timeoutSeconds: 2 - failureThreshold: 1 + timeoutSeconds: 5 + failureThreshold: 3 resources: requests: {cpu: 100m, memory: 256Mi} limits: {cpu: "2", memory: 6Gi} diff --git a/services/hermes/oauth2-proxy.yaml b/services/hermes/oauth2-proxy.yaml index 24383b3a..52dea326 100644 --- a/services/hermes/oauth2-proxy.yaml +++ b/services/hermes/oauth2-proxy.yaml @@ -16,6 +16,9 @@ metadata: spec: selector: app: hermes-agent + # The agent dashboard and terminal must stay reachable while the + # cli-lane-runner readiness probe holds the shared pod NotReady. + publishNotReadyAddresses: true ports: - {name: http, port: 80, targetPort: auth-http} --- diff --git a/testing/quality_contract.json b/testing/quality_contract.json index cfcc0e43..e1dc7662 100644 --- a/testing/quality_contract.json +++ b/testing/quality_contract.json @@ -91,7 +91,6 @@ "junit": "build/junit-unit.xml", "coverage_sources": [ "ci/scripts", - "scripts.render.dashboards_render_atlas", "services/hermes/scripts", "services/mailu/scripts", "testing" diff --git a/testing/tests/test_hermes_agent_layout.py b/testing/tests/test_hermes_agent_layout.py index 72ab7f05..4f645d4f 100644 --- a/testing/tests/test_hermes_agent_layout.py +++ b/testing/tests/test_hermes_agent_layout.py @@ -285,6 +285,19 @@ def test_broker_services_survive_sibling_container_readiness_loss(): ): assert services[name]["spec"]["publishNotReadyAddresses"] is True + # The agent web endpoints route through this Service to the same pod the + # cli-lane-runner readiness probe gates; a deferred lane image must not + # take down the dashboard or terminal. + agent_auth = next( + item + for item in yaml.safe_load_all((HERMES / "oauth2-proxy.yaml").read_text()) + if item + and item["kind"] == "Service" + and item["metadata"]["name"] == "oauth2-proxy-hermes-agent" + ) + assert agent_auth["spec"]["selector"] == {"app": "hermes-agent"} + assert agent_auth["spec"]["publishNotReadyAddresses"] is True + def test_cli_lane_domain_modules_are_all_mounted_with_the_runner(): manifest = yaml.safe_load((HERMES / "kustomization.yaml").read_text()) @@ -354,8 +367,8 @@ def test_cli_lane_config_refresh_does_not_restart_active_work(): }, "initialDelaySeconds": 2, "periodSeconds": 5, - "timeoutSeconds": 2, - "failureThreshold": 1, + "timeoutSeconds": 5, + "failureThreshold": 3, } environment = {item["name"]: item["value"] for item in lane["env"]} assert environment["HERMES_CLI_HEALTH_MAX_AGE_SECONDS"] == "60"