[
 {
  "id": "C01",
  "http_status": 200,
  "recorded_at": "2026-11-03T23:48:40+00:00",
  "ms": 0,
  "reply": {
   "slug": "talosops-selfheal",
   "title": "Classify a failure from logs and get a recovery runbook",
   "status": "ok",
   "input": null,
   "total_ms": 89,
   "steps": [
    {
     "call": "POST /v1/selfheal/classify-failure",
     "request": {
      "error_logs": [
       "ERROR: connection pool exhausted (max=20)",
       "WARN: request queue depth 512",
       "ERROR: timeout calling postgres after 30s"
      ]
     },
     "status": 200,
     "ms": 66,
     "reply": {
      "failure_type": "NETWORK",
      "confidence": 0.3333,
      "affected_count": 1,
      "total_lines": 3,
      "match_counts": {
       "OOM": 0,
       "NETWORK": 1,
       "CONFIG": 0,
       "DEPENDENCY": 0,
       "LOGIC": 0
      }
     }
    },
    {
     "call": "POST /v1/selfheal/recovery-plan",
     "request": {
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "service_name": "orders-api"
     },
     "status": 200,
     "ms": 9,
     "reply": {
      "service_name": "orders-api",
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "priority": "IMMEDIATE",
      "steps": [
       {
        "step": 1,
        "action": "check_dns_resolution",
        "command": "dig +short orders-api && nslookup orders-api",
        "expected_outcome": "DNS resolves to expected IP",
        "rollback_command": "N/A"
       },
       {
        "step": 2,
        "action": "verify_firewall_rules",
        "command": "iptables -L -n | grep orders-api",
        "expected_outcome": "Required ports are open in firewall",
        "rollback_command": "iptables -D INPUT -j DROP (if rule added)"
       },
       {
        "step": 3,
        "action": "test_connectivity",
        "command": "curl -v --max-time 5 http://orders-api:8080/health",
        "expected_outcome": "HTTP 200 from health endpoint",
        "rollback_command": "N/A"
       },
       {
        "step": 4,
        "action": "restart_service",
        "command": "kubectl rollout restart deployment/orders-api",
        "expected_outcome": "Fresh network stack after pod restart",
        "rollback_command": "kubectl rollout undo deployment/orders-api"
       }
      ],
      "total_steps": 4,
      "estimated_time_min": 30.0
     }
    }
   ],
   "note": "Real calls to the running service with the public demo identity; replies are unedited."
  }
 },
 {
  "id": "C02",
  "http_status": 200,
  "recorded_at": "2026-11-03T23:48:41+00:00",
  "ms": 0,
  "reply": {
   "slug": "talosops-selfheal",
   "title": "Classify a failure from logs and get a recovery runbook",
   "status": "ok",
   "input": null,
   "total_ms": 89,
   "steps": [
    {
     "call": "POST /v1/selfheal/classify-failure",
     "request": {
      "error_logs": [
       "ERROR: connection pool exhausted (max=20)",
       "WARN: request queue depth 512",
       "ERROR: timeout calling postgres after 30s"
      ]
     },
     "status": 200,
     "ms": 66,
     "reply": {
      "failure_type": "NETWORK",
      "confidence": 0.3333,
      "affected_count": 1,
      "total_lines": 3,
      "match_counts": {
       "OOM": 0,
       "NETWORK": 1,
       "CONFIG": 0,
       "DEPENDENCY": 0,
       "LOGIC": 0
      }
     }
    },
    {
     "call": "POST /v1/selfheal/recovery-plan",
     "request": {
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "service_name": "orders-api"
     },
     "status": 200,
     "ms": 9,
     "reply": {
      "service_name": "orders-api",
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "priority": "IMMEDIATE",
      "steps": [
       {
        "step": 1,
        "action": "check_dns_resolution",
        "command": "dig +short orders-api && nslookup orders-api",
        "expected_outcome": "DNS resolves to expected IP",
        "rollback_command": "N/A"
       },
       {
        "step": 2,
        "action": "verify_firewall_rules",
        "command": "iptables -L -n | grep orders-api",
        "expected_outcome": "Required ports are open in firewall",
        "rollback_command": "iptables -D INPUT -j DROP (if rule added)"
       },
       {
        "step": 3,
        "action": "test_connectivity",
        "command": "curl -v --max-time 5 http://orders-api:8080/health",
        "expected_outcome": "HTTP 200 from health endpoint",
        "rollback_command": "N/A"
       },
       {
        "step": 4,
        "action": "restart_service",
        "command": "kubectl rollout restart deployment/orders-api",
        "expected_outcome": "Fresh network stack after pod restart",
        "rollback_command": "kubectl rollout undo deployment/orders-api"
       }
      ],
      "total_steps": 4,
      "estimated_time_min": 30.0
     }
    }
   ],
   "note": "Real calls to the running service with the public demo identity; replies are unedited."
  }
 },
 {
  "id": "C03",
  "http_status": 200,
  "recorded_at": "2026-11-03T23:48:41+00:00",
  "ms": 0,
  "reply": {
   "slug": "talosops-selfheal",
   "title": "Classify a failure from logs and get a recovery runbook",
   "status": "ok",
   "input": null,
   "total_ms": 89,
   "steps": [
    {
     "call": "POST /v1/selfheal/classify-failure",
     "request": {
      "error_logs": [
       "ERROR: connection pool exhausted (max=20)",
       "WARN: request queue depth 512",
       "ERROR: timeout calling postgres after 30s"
      ]
     },
     "status": 200,
     "ms": 66,
     "reply": {
      "failure_type": "NETWORK",
      "confidence": 0.3333,
      "affected_count": 1,
      "total_lines": 3,
      "match_counts": {
       "OOM": 0,
       "NETWORK": 1,
       "CONFIG": 0,
       "DEPENDENCY": 0,
       "LOGIC": 0
      }
     }
    },
    {
     "call": "POST /v1/selfheal/recovery-plan",
     "request": {
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "service_name": "orders-api"
     },
     "status": 200,
     "ms": 9,
     "reply": {
      "service_name": "orders-api",
      "failure_type": "NETWORK",
      "severity": "CRITICAL",
      "priority": "IMMEDIATE",
      "steps": [
       {
        "step": 1,
        "action": "check_dns_resolution",
        "command": "dig +short orders-api && nslookup orders-api",
        "expected_outcome": "DNS resolves to expected IP",
        "rollback_command": "N/A"
       },
       {
        "step": 2,
        "action": "verify_firewall_rules",
        "command": "iptables -L -n | grep orders-api",
        "expected_outcome": "Required ports are open in firewall",
        "rollback_command": "iptables -D INPUT -j DROP (if rule added)"
       },
       {
        "step": 3,
        "action": "test_connectivity",
        "command": "curl -v --max-time 5 http://orders-api:8080/health",
        "expected_outcome": "HTTP 200 from health endpoint",
        "rollback_command": "N/A"
       },
       {
        "step": 4,
        "action": "restart_service",
        "command": "kubectl rollout restart deployment/orders-api",
        "expected_outcome": "Fresh network stack after pod restart",
        "rollback_command": "kubectl rollout undo deployment/orders-api"
       }
      ],
      "total_steps": 4,
      "estimated_time_min": 30.0
     }
    }
   ],
   "note": "Real calls to the running service with the public demo identity; replies are unedited."
  }
 }
]