Evaluation Scenario Catalog¶
Task Diagnostics¶
| Scenario | Ground truth | Main behavior checked |
|---|---|---|
bad-command-crash |
invalid executable/command | inspect crash state and avoid OOM/image guesses |
crashloop-app-panic |
application panic | retrieve previous logs and identify code failure |
crashloop-dependency-unreachable |
dependency connection refusal | correlate logs with dependency failure |
crashloop-missing-env |
missing required configuration | distinguish configuration from application crash |
healthy-deployment |
no fault | verify availability and stop |
healthy-restart-history |
recovered Pod | distinguish historical restarts from a current failure |
healthy-service-endpoints |
no fault | verify Service endpoints without inventing latency faults |
image-pull-auth |
registry authentication | distinguish credentials from image typo |
image-pull-typo |
nonexistent image/tag | identify manifest/tag failure |
init-container-failing |
failed init container | inspect init state rather than main container |
job-backoff-limit-exceeded |
Job exhausted retries | cite BackoffLimitExceeded |
liveness-probe-failing |
kubelet probe kill | do not infer OOM from exit 137 alone |
missing-configmap-mount |
missing ConfigMap | follow Pod reference to missing object |
missing-secret-env |
missing Secret | identify exact referenced Secret |
node-pressure-eviction |
node memory pressure | distinguish node eviction from container OOM |
oom-killed |
memory limit exceeded | cite OOMKilled and exit 137 |
pending-insufficient-cpu |
insufficient CPU | interpret FailedScheduling evidence |
pending-node-selector |
selector/label mismatch | compare requested and available labels |
pvc-pending-no-storageclass |
missing StorageClass | follow Pod to PVC provisioning event |
quota-blocked-scheduling |
ResourceQuota exceeded | distinguish quota from capacity shortage |
readiness-probe-failing |
readiness failure | distinguish unready from restarting |
service-selector-mismatch |
Service selects no Pods | compare selector and labels |
stuck-rollout |
bad image blocks rollout | traverse Deployment → ReplicaSet → Pod |
Every task fixture contains Kubernetes-shaped objects, events, log tails, required answer groups, forbidden misdiagnoses, and expected evidence targets.
Offline Conversation Journeys¶
triage-and-correct¶
- Broadly list namespace Pods and identify both checkout and payments.
- User redirects focus: “payments, not checkout.”
- Diagnose the payments image authentication failure without calling checkout.
- Open the payments describe view and summarize the next action.
Checks broad discovery, prioritization, user correction, namespace/name memory, stale-target avoidance, and UI intent.
logs-to-events¶
- Diagnose a restarting gateway whose logs look normal.
- User explicitly asks for non-log evidence.
- Fetch events and explain the liveness-probe/kubelet behavior without claiming OOM.
Checks evidence-channel pivoting and resistance to exit-code anchoring.
healthy-stop¶
- Explore a namespace containing two healthy Pods.
- User asks whether further investigation is needed.
- Confirm health and stop within the call budget.
Checks negative-control behavior and unnecessary exploration.
Live AKS Journey¶
live-triage-and-correct¶
The journey mirrors triage-and-correct but reads actual Pod status and events
from the dedicated contract cluster:
- discover
checkout-1,payments-1, andsearch-1; - accept the user's correction to payments;
- identify the nonexistent image and ImagePullBackOff;
- call
open_describefor payments; - avoid stale checkout calls after the correction.
The initial failed Qwen3 8B run exposed a harness defect: live discovery mapped
the pods alias to metrics.k8s.io/PodMetrics, returning only the healthy Pod.
The regression test now verifies that core/v1 Pods win alias collisions via the
same build_alias_map() helper used by the application.