From 267c7f00a52dd11239491e6ec26669a42c056595 Mon Sep 17 00:00:00 2001 From: jenkins Date: Sat, 1 Aug 2026 23:18:49 -0300 Subject: [PATCH] ai(hermes): harden Atlas triage evidence guardrails --- .../skills/triage-titan-test-failures/SKILL.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/services/hermes/skills/triage-titan-test-failures/SKILL.md b/services/hermes/skills/triage-titan-test-failures/SKILL.md index a5c4eb6d2..b1600a9e6 100644 --- a/services/hermes/skills/triage-titan-test-failures/SKILL.md +++ b/services/hermes/skills/triage-titan-test-failures/SKILL.md @@ -15,7 +15,7 @@ Follow the established Titan evidence path. Keep the investigation read-only and curl -fsS "$ARIADNE_BASE_URL/api/internal/testing/triage/diagnosis/latest" ``` -2. Read the deterministic bundle when the diagnosis is missing, stale, unavailable, or lacks evidence: +2. Always read the deterministic bundle, even when the diagnosis looks complete: ```sh curl -fsS "$ARIADNE_BASE_URL/api/internal/testing/triage/latest" @@ -28,8 +28,19 @@ Follow the established Titan evidence path. Keep the investigation read-only and curl -fsS -X POST "$ARIADNE_BASE_URL/api/internal/testing/triage/diagnosis/run" ``` +Record the timestamps and status from both responses. Treat the diagnosis as stale when it predates the deterministic bundle, reports `unavailable`, or lacks concrete evidence. In any of those cases, continue the investigation from the deterministic bundle; do not stop at model availability. + Treat Ariadne's bundle as the evidence source of truth. A local-model diagnosis may be unavailable while Wolf owns titan-24; continue from the stored bundle using the active Hermes fallback model. +## Atlas facts and guardrails + +- Ariadne runs as the `ariadne` Deployment and Service in the `maintenance` namespace. +- Hermes local inference runs through `hermes-model-gate` in the `hermes` namespace. Ollama is the `hermes-ollama` Deployment and Service in that namespace. +- OpenClaw is not part of this inference path. Never suggest an `openclaw` resource unless a read-only query first proves one exists. +- A connection error recorded inside an older diagnosis proves only that the model request failed at that timestamp. It does not prove the service is currently down. +- Never invent a namespace, workload, container, port, URL, log line, metric, commit, or pod condition. Verify a target with a read-only query before presenting an exact follow-up command; otherwise state what must be discovered first. +- HTTP POST collection and diagnosis endpoints are state-changing operations. Put them only under `Approval required`; never describe them as read-only or include them in the read-only command list. + ## Narrow the failure Work in this order: @@ -41,6 +52,8 @@ Work in this order: 5. Check Pushgateway and Grafana evidence for branch gaps, stale metrics, aliases, or missing zero-state telemetry. 6. State unknowns explicitly. Never invent a log line, metric, commit, pod condition, or root cause. +If the latest diagnosis is unavailable, the minimum acceptable result still analyzes the deterministic bundle's failed suites, build/check evidence, freshness, and environment observations. Model unavailability is context, not the triage finding, unless the user's question is specifically about model health. + Use read-only commands such as `kubectl get`, `kubectl describe`, `kubectl logs`, and HTTP GET requests. Do not read Secret values or run mutating Kubernetes, Flux, Vault, Jenkins, or Git commands. ## Produce the triage result