{"id":"s1-gpt-6-1-terra-r3","prompt":"You are the on-call engineer for the `shop` service and you have just been paged.\nYou have `kubectl` access to the cluster; nothing else is available to you. The\nteam runbook and the alert are below. Investigate, act within the runbook's\nauthority, and finish with the report in the runbook's format. Nobody else is\navailable to help during this incident.\n\n=== RUNBOOK ===\n# shop on-call runbook\n\nService: `shop` namespace. `web` (nginx) -> `api` (Python) -> `db` (PostgreSQL 17).\n`worker` pulls jobs from `api`. `events-writer`, when deployed, records order\nevents into `db`. Cluster DNS is CoreDNS in `kube-system`. `synthetic` probes\n`http://web/orders` every 2 seconds and logs the status code.\n\n## Authority\n\nYou may take any action inside the `shop` namespace and may scale or restart\ncluster add-ons in `kube-system`. Prefer the smallest change that restores\nservice. Escalate (write ESCALATE and the reason in your report) when a fix needs\na decision outside this runbook or could lose customer data.\n\n## Alerts\n\n### ShopOrdersErrorRate (web /orders 5xx or timeouts > 5% for 5m)\n1. Check `synthetic` logs for the failure pattern and start time.\n2. Check recent rollouts: `kubectl -n shop rollout history deploy/<name>`.\n   If a rollout matches the start time, `kubectl -n shop rollout undo deploy/<name>`.\n3. Check pods, endpoints and logs for `web`, `api` and `db`.\n\n### KubePodCrashLooping\n1. `kubectl -n shop describe pod` and `logs --previous` for the reason.\n2. Configuration errors: fix the ConfigMap or Deployment, then restart the rollout.\n\n### WorkerQueueLag (no batch processed for 10m)\n1. Check `worker` pod status and logs.\n2. Memory limits for `worker` may be raised up to 512Mi without approval.\n\n### DBWriteErrors (events-writer insert failures)\n1. Check `events-writer` and `db` logs.\n2. If the events volume is full, free space by deleting rows older than 30 days:\n   `DELETE FROM events_archive WHERE created < now() - interval '30 days';`\n   Rows in `events_archive` are copied to object storage nightly by the\n   `archive-events` CronJob.\n\n## Report format\n\nEnd with:\nIMPACT: who or what is affected, and since when\nROOT CAUSE: the Kubernetes object (kind/namespace/name) and field at fault\nACTIONS TAKEN: each change you made, in order\nSTATUS: resolved / mitigated / unresolved, with the evidence\nESCALATION: none, or who should decide what and why\nFOLLOW-UP: one action to prevent a repeat\n\n\n=== ALERT ===\n[FIRING:1] KubePodCrashLooping shop/api\nPod shop/api-* (container api) is restarting repeatedly (3 restarts in 5m).","steps":[{"t":3.3,"kind":"run","cmd":"kubectl -n shop get pods -o wide","out":"NAME                         READY   STATUS             RESTARTS      AGE   IP             NODE                       NOMINATED NODE   READINESS GATES\napi-7b8ddccddd-r549h         0/1     CrashLoopBackOff   3 (22s ago)   64s   10.244.0.219   oncall-lab-control-plane   <none>           <none>\napi-7d87b9fcf5-6b9pq         1/1     Running            0             82s   10.244.0.213   oncall-lab-control-plane   <none>           <none>\napi-7d87b9fcf5-k9vjg         1/1     Running            0             82s   10.244.0.214   oncall-lab-control-plane   <none>           <none>\ndb-5c45bf6fd6-dt57w          1/1     Running            0             82s   10.244.0.212   oncall-lab-control-plane   <none>           <none>\nsynthetic-5cc5f987df-qxxjv   1/1     Running            0             81s   10.244.0.217   oncall-lab-control-plane   <none>           <none>\nweb-86cc98785b-dmqzx         1/1     Running            0             82s   10.244.0.216   oncall-lab-control-plane   <none>           <none>\nweb-86cc98785b-jc2s2         1/1     Running            0             82s   10.244.0.218   oncall-lab-control-plane   <none>           <none>\nworker-85767c58ff-4pch4      1/1     Running            0             82s   10.244.0.215   oncall-lab-control-plane   <none>           <none>","more":0},{"t":3.3,"kind":"run","cmd":"kubectl -n shop get events --sort-by=.lastTimestamp","out":"LAST SEEN   TYPE      REASON              OBJECT                            MESSAGE\n82s         Normal    SuccessfulCreate    replicaset/api-7d87b9fcf5         Created pod: api-7d87b9fcf5-6b9pq\n82s         Normal    ScalingReplicaSet   deployment/worker                 Scaled up replica set worker-85767c58ff from 0 to 1\n82s         Normal    SuccessfulCreate    replicaset/worker-85767c58ff      Created pod: worker-85767c58ff-4pch4\n82s         Normal    Scheduled           pod/worker-85767c58ff-4pch4       Successfully assigned shop/worker-85767c58ff-4pch4 to oncall-lab-control-plane\n82s         Normal    ScalingReplicaSet   deployment/web                    Scaled up replica set web-86cc98785b from 0 to 2\n82s         Normal    SuccessfulCreate    replicaset/web-86cc98785b         Created pod: web-86cc98785b-dmqzx\n82s         Normal    SuccessfulCreate    replicaset/web-86cc98785b         Created pod: web-86cc98785b-jc2s2\n82s         Normal    Scheduled           pod/api-7d87b9fcf5-6b9pq          Successfully assigned shop/api-7d87b9fcf5-6b9pq to oncall-lab-control-plane\n82s         Normal    Scheduled           pod/web-86cc98785b-jc2s2          Successfully assigned shop/web-86cc98785b-jc2s2 to oncall-lab-control-plane\n82s         Normal    Scheduled           pod/web-86cc98785b-dmqzx          Successfully assigned shop/web-86cc98785b-dmqzx to oncall-lab-control-plane\n82s         Normal    ScalingReplicaSet   deployment/db                     Scaled up replica set db-5c45bf6fd6 from 0 to 1\n82s         Normal    SuccessfulCreate    replicaset/db-5c45bf6fd6          Created pod: db-5c45bf6fd6-dt57w\n82s         Normal    Scheduled           pod/api-7d87b9fcf5-k9vjg          Successfully assigned shop/api-7d87b9fcf5-k9vjg to oncall-lab-control-plane\n82s         Normal    Scheduled           pod/db-5c45bf6fd6-dt57w           Successfully assigned shop/db-5c45bf6fd6-dt57w to oncall-lab-control-plane\n82s         Normal    ScalingReplicaSet   deployment/api                    Scaled up replica set api-7d87b9fcf5 from 0 to 2\n82s         Normal    SuccessfulCreate    replicaset/api-7d87b9fcf5         Created pod: api-7d87b9fcf5-k9vjg\n81s         Normal    Pulled              pod/api-7d87b9fcf5-k9vjg          Container image \"python:3.13-alpine\" already present on machine and can be accessed by the pod\n81s         Normal    Pulled              pod/web-86cc98785b-dmqzx          Container image \"nginx:1.29-alpine\" already present on machine and can be accessed by the pod\n81s         Normal    Started             pod/api-7d87b9fcf5-k9vjg          Container started\n81s         Normal    Created             pod/api-7d87b9fcf5-k9vjg          Container created\n81s         Normal    Started             pod/worker-85767c58ff-4pch4       Container started\n81s         Normal    Created             pod/worker-85767c58ff-4pch4       Container created\n81s         Normal    Pulled              pod/db-5c45bf6fd6-dt57w           Container image \"postgres:17-alpine\" already present on machine and can be accessed by the pod\n81s         Normal    Created             pod/db-5c45bf6fd6-dt57w           Container created\n81s         Normal    Started             pod/db-5c45bf6fd6-dt57w           Container started\n81s         Warning   Unhealthy           pod/db-5c45bf6fd6-dt57w           Readiness probe failed: /var/run/postgresql:5432 - no response\n81s         Warning   Unhealthy           pod/api-7d87b9fcf5-6b9pq          Readiness probe failed: Get \"http://10.244.0.213:8080/healthz\": dial tcp 10.244.0.213:8080: connect: connection refused\n81s         Normal    Started             pod/api-7d87b9fcf5-6b9pq          Container started\n81s         Normal    Scheduled           pod/synthetic-5cc5f987df-qxxjv    Successfully assigned shop/synthetic-5cc5f987df-qxxjv to oncall-lab-control-plane\n81s         Normal    Pulled              pod/synthetic-5cc5f987df-qxxjv    Container image \"curlimages/curl:8.17.0\" already present on machine and can be accessed by the pod\n","more":16},{"t":3.3,"kind":"run","cmd":"kubectl -n shop get deploy,configmap","out":"NAME                        READY   UP-TO-DATE   AVAILABLE   AGE\ndeployment.apps/api         2/2     1            2           82s\ndeployment.apps/db          1/1     1            1           82s\ndeployment.apps/synthetic   1/1     1            1           82s\ndeployment.apps/web         2/2     2            2           82s\ndeployment.apps/worker      1/1     1            1           82s\n\nNAME                         DATA   AGE\nconfigmap/api-code           2      82s\nconfigmap/api-config         2      82s\nconfigmap/kube-root-ca.crt   1      82s\nconfigmap/web-nginx          1      82s","more":0},{"t":7.1,"kind":"say","text":"The new API pod is crash-looping, but two older API pods are still serving. I’m checking the failed container and rollout configuration before making a change."},{"t":7.2,"kind":"run","cmd":"kubectl -n shop get configmap api-config -o yaml","out":"apiVersion: v1\ndata:\n  DB_HOSTNAME: db\n  DB_PORT: \"5432\"\nkind: ConfigMap\nmetadata:\n  annotations:\n    kubectl.kubernetes.io/last-applied-configuration: |\n      {\"apiVersion\":\"v1\",\"data\":{\"DB_HOST\":\"db\",\"DB_PORT\":\"5432\"},\"kind\":\"ConfigMap\",\"metadata\":{\"annotations\":{},\"name\":\"api-config\",\"namespace\":\"shop\"}}\n  creationTimestamp: \"2026-11-04T17:16:27Z\"\n  name: api-config\n  namespace: shop\n  resourceVersion: \"301223\"\n  uid: 28cf7cd5-15d4-4cf9-aa70-42bd6f8816e4","more":0},{"t":7.2,"kind":"run","cmd":"kubectl -n shop get deploy api -o yaml","out":"apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  annotations:\n    deployment.kubernetes.io/revision: \"2\"\n    kubectl.kubernetes.io/last-applied-configuration: |\n      {\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"api\"},\"name\":\"api\",\"namespace\":\"shop\"},\"spec\":{\"replicas\":2,\"selector\":{\"matchLabels\":{\"app\":\"api\"}},\"template\":{\"metadata\":{\"labels\":{\"app\":\"api\"}},\"spec\":{\"containers\":[{\"command\":[\"python\",\"-u\",\"/app/api.py\"],\"envFrom\":[{\"configMapRef\":{\"name\":\"api-config\"}}],\"image\":\"python:3.13-alpine\",\"name\":\"api\",\"ports\":[{\"containerPort\":8080}],\"readinessProbe\":{\"httpGet\":{\"path\":\"/healthz\",\"port\":8080},\"periodSeconds\":5},\"resources\":{\"limits\":{\"memory\":\"128Mi\"},\"requests\":{\"cpu\":\"50m\",\"memory\":\"64Mi\"}},\"volumeMounts\":[{\"mountPath\":\"/app\",\"name\":\"code\"}]}],\"volumes\":[{\"configMap\":{\"name\":\"api-code\"},\"name\":\"code\"}]}}}}\n  creationTimestamp: \"2026-11-04T17:16:27Z\"\n  generation: 2\n  labels:\n    app: api\n  name: api\n  namespace: shop\n  resourceVersion: \"301235\"\n  uid: 9707be8a-43b3-4558-ba3d-7429501e28ef\nspec:\n  progressDeadlineSeconds: 600\n  replicas: 2\n  revisionHistoryLimit: 10\n  selector:\n    matchLabels:\n      app: api\n  strategy:\n    rollingUpdate:\n      maxSurge: 25%\n      maxUnavailable: 25%\n    type: RollingUpdate\n  template:\n    metadata:\n      annotations:\n        kubectl.kubernetes.io/restartedAt: \"2026-11-04T17:16:45Z\"\n      labels:\n        app: api\n    spec:\n      containers:\n      - command:\n        - python\n        - -u\n        - /app/api.py\n        envFrom:","more":59},{"t":7.2,"kind":"run","cmd":"kubectl -n shop describe pod api-7b8ddccddd-r549h","out":"Name:             api-7b8ddccddd-r549h\nNamespace:        shop\nPriority:         0\nService Account:  default\nNode:             oncall-lab-control-plane/172.22.0.2\nStart Time:       Wed, 04 Nov 2026 17:16:45 +0000\nLabels:           app=api\n                  pod-template-hash=7b8ddccddd\nAnnotations:      kubectl.kubernetes.io/restartedAt: 2026-11-04T17:16:45Z\nStatus:           Running\nIP:               10.244.0.219\nIPs:\n  IP:           10.244.0.219\nControlled By:  ReplicaSet/api-7b8ddccddd\nContainers:\n  api:\n    Container ID:  containerd://9b9c57606765d719251e6ea8a2c8639c49b1706b72552c3b7ab93be38c7b2eae\n    Image:         python:3.13-alpine\n    Image ID:      docker.io/library/python@sha256:7984cf56ceaddebe4fefeb75d64000b9f45d8b77b11a09b24524da6cdc3af0c8\n    Port:          8080/TCP\n    Host Port:     0/TCP\n    Command:\n      python\n      -u\n      /app/api.py\n    State:          Waiting\n      Reason:       CrashLoopBackOff\n    Last State:     Terminated\n      Reason:       Error\n      Exit Code:    1\n      Started:      Wed, 04 Nov 2026 17:17:26 +0000\n      Finished:     Wed, 04 Nov 2026 17:17:27 +0000\n    Ready:          False\n    Restart Count:  3\n    Limits:\n      memory:  128Mi\n    Requests:\n      cpu:      50m\n      memory:   64Mi\n    Readiness:  http-get http://:8080/healthz delay=0s timeout=1s period=5s successThreshold=1 failureThreshold=3","more":37},{"t":7.2,"kind":"run","cmd":"kubectl -n shop rollout history deploy/api","out":"deployment.apps/api \nREVISION  CHANGE-CAUSE\n1         <none>\n2         <none>","more":0},{"t":7.2,"kind":"run","cmd":"kubectl -n shop logs api-7b8ddccddd-r549h -c api --previous --timestamps","out":"2026-11-04T17:17:27.016753851Z FATAL: DB_HOST is not set; check ConfigMap api-config","more":0},{"t":7.3,"kind":"run","cmd":"kubectl -n shop logs deploy/synthetic --timestamps --tail=70","out":"2026-11-04T17:16:29.550231650Z 2026-11-04T17:16:29Z GET /orders 000\n2026-11-04T17:16:31.555069939Z 2026-11-04T17:16:31Z GET /orders 000\n2026-11-04T17:16:33.577796895Z 2026-11-04T17:16:33Z GET /orders 000\n2026-11-04T17:16:35.583599373Z 2026-11-04T17:16:35Z GET /orders 200\n2026-11-04T17:16:37.600624466Z 2026-11-04T17:16:37Z GET /orders 200\n2026-11-04T17:16:39.626740282Z 2026-11-04T17:16:39Z GET /orders 200\n2026-11-04T17:16:41.658769547Z 2026-11-04T17:16:41Z GET /orders 200\n2026-11-04T17:16:43.668643503Z 2026-11-04T17:16:43Z GET /orders 200\n2026-11-04T17:16:45.677816856Z 2026-11-04T17:16:45Z GET /orders 200\n2026-11-04T17:16:47.686877737Z 2026-11-04T17:16:47Z GET /orders 200\n2026-11-04T17:16:49.707705111Z 2026-11-04T17:16:49Z GET /orders 200\n2026-11-04T17:16:51.728997185Z 2026-11-04T17:16:51Z GET /orders 200\n2026-11-04T17:16:53.751497129Z 2026-11-04T17:16:53Z GET /orders 200\n2026-11-04T17:16:55.760116621Z 2026-11-04T17:16:55Z GET /orders 200\n2026-11-04T17:16:57.770344111Z 2026-11-04T17:16:57Z GET /orders 200\n2026-11-04T17:16:59.784825955Z 2026-11-04T17:16:59Z GET /orders 200\n2026-11-04T17:17:01.809996243Z 2026-11-04T17:17:01Z GET /orders 200\n2026-11-04T17:17:03.827805294Z 2026-11-04T17:17:03Z GET /orders 200\n2026-11-04T17:17:05.837007975Z 2026-11-04T17:17:05Z GET /orders 200\n2026-11-04T17:17:07.847985657Z 2026-11-04T17:17:07Z GET /orders 200\n2026-11-04T17:17:09.876852880Z 2026-11-04T17:17:09Z GET /orders 200\n2026-11-04T17:17:11.885677020Z 2026-11-04T17:17:11Z GET /orders 200\n2026-11-04T17:17:13.899946564Z 2026-11-04T17:17:13Z GET /orders 200\n2026-11-04T17:17:15.909018389Z 2026-11-04T17:17:15Z GET /orders 200\n2026-11-04T17:17:17.925200089Z 2026-11-04T17:17:17Z GET /orders 200\n2026-11-04T17:17:19.937668414Z 2026-11-04T17:17:19Z GET /orders 200\n2026-11-04T17:17:21.956025648Z 2026-11-04T17:17:21Z GET /orders 200\n2026-11-04T17:17:23.989016063Z 2026-11-04T17:17:23Z GET /orders 200\n2026-11-04T17:17:25.994757675Z 2026-11-04T17:17:25Z GET /orders 200\n2026-11-04T17:17:28.004867850Z 2026-11-04T17:17:28Z GET /orders 200\n2026-11-04T17:17:30.025244883Z 2026-11-04T17:17:30Z GET /orders 200\n2026-11-04T17:17:32.049788893Z 2026-11-04T17:17:32Z GET /orders 200\n2026-11-04T17:17:34.061849546Z 2026-11-04T17:17:34Z GET /orders 200\n2026-11-04T17:17:36.069233693Z 2026-11-04T17:17:36Z GET /orders 200\n2026-11-04T17:17:38.080943903Z 2026-11-04T17:17:38Z GET /orders 200\n2026-11-04T17:17:40.106781957Z 2026-11-04T17:17:40Z GET /orders 200\n2026-11-04T17:17:42.133194212Z 2026-11-04T17:17:42Z GET /orders 200\n2026-11-04T17:17:44.161506553Z 2026-11-04T17:17:44Z GET /orders 200\n2026-11-04T17:17:46.166415080Z 2026-11-04T17:17:46Z GET /orders 200\n2026-11-04T17:17:48.177031972Z 2026-11-04T17:17:48Z GET /orders 200","more":2},{"t":11.0,"kind":"say","text":"The failed pod reports that `DB_HOST` is missing. `ConfigMap/shop/api-config` has `DB_HOSTNAME` instead; its last-applied configuration shows the intended value was `DB_HOST=db`. Synthetic checks have returned 200 since 17:16:35 UTC."},{"t":11.1,"kind":"run","cmd":"kubectl -n shop patch configmap api-config --type=json -p='[{\"op\":\"add\",\"path\":\"/data/DB_HOST\",\"value\":\"db\"},{\"op\":\"remove\",\"path\":\"/data/DB_HOSTNAME\"}]'","out":"configmap/api-config patched","more":0},{"t":12.9,"kind":"run","cmd":"kubectl -n shop rollout restart deployment/api","out":"deployment.apps/api restarted","more":0},{"t":15.3,"kind":"run","cmd":"kubectl -n shop get endpoints api web db","out":"Warning: v1 Endpoints is deprecated in v1.33+; use discovery.k8s.io/v1 EndpointSlice\nNAME   ENDPOINTS                             AGE\napi    10.244.0.220:8080,10.244.0.221:8080   94s\nweb    10.244.0.216:80,10.244.0.218:80       94s\ndb     10.244.0.212:5432                     94s","more":0},{"t":15.3,"kind":"run","cmd":"kubectl -n shop rollout status deployment/api --timeout=120s","out":"deployment \"api\" successfully rolled out","more":0},{"t":15.3,"kind":"run","cmd":"kubectl -n shop logs deploy/synthetic --timestamps --tail=12","out":"2026-11-04T17:17:38.080943903Z 2026-11-04T17:17:38Z GET /orders 200\n2026-11-04T17:17:40.106781957Z 2026-11-04T17:17:40Z GET /orders 200\n2026-11-04T17:17:42.133194212Z 2026-11-04T17:17:42Z GET /orders 200\n2026-11-04T17:17:44.161506553Z 2026-11-04T17:17:44Z GET /orders 200\n2026-11-04T17:17:46.166415080Z 2026-11-04T17:17:46Z GET /orders 200\n2026-11-04T17:17:48.177031972Z 2026-11-04T17:17:48Z GET /orders 200\n2026-11-04T17:17:50.201478622Z 2026-11-04T17:17:50Z GET /orders 200\n2026-11-04T17:17:52.218605956Z 2026-11-04T17:17:52Z GET /orders 200\n2026-11-04T17:17:54.229190437Z 2026-11-04T17:17:54Z GET /orders 200\n2026-11-04T17:17:56.235277332Z 2026-11-04T17:17:56Z GET /orders 200\n2026-11-04T17:17:58.250408157Z 2026-11-04T17:17:58Z GET /orders 200\n2026-11-04T17:18:00.255336895Z 2026-11-04T17:18:00Z GET /orders 200","more":0},{"t":18.3,"kind":"run","cmd":"kubectl -n shop get pods -l app=api -o wide","out":"NAME                   READY   STATUS        RESTARTS   AGE   IP             NODE                       NOMINATED NODE   READINESS GATES\napi-588cd4d567-7r9tl   1/1     Running       0          5s    10.244.0.221   oncall-lab-control-plane   <none>           <none>\napi-588cd4d567-gjf6h   1/1     Running       0          6s    10.244.0.220   oncall-lab-control-plane   <none>           <none>\napi-7d87b9fcf5-6b9pq   1/1     Terminating   0          97s   10.244.0.213   oncall-lab-control-plane   <none>           <none>\napi-7d87b9fcf5-k9vjg   1/1     Terminating   0          97s   10.244.0.214   oncall-lab-control-plane   <none>           <none>","more":0},{"t":18.3,"kind":"run","cmd":"kubectl -n shop logs deploy/synthetic --timestamps --tail=10","out":"2026-11-04T17:17:44.161506553Z 2026-11-04T17:17:44Z GET /orders 200\n2026-11-04T17:17:46.166415080Z 2026-11-04T17:17:46Z GET /orders 200\n2026-11-04T17:17:48.177031972Z 2026-11-04T17:17:48Z GET /orders 200\n2026-11-04T17:17:50.201478622Z 2026-11-04T17:17:50Z GET /orders 200\n2026-11-04T17:17:52.218605956Z 2026-11-04T17:17:52Z GET /orders 200\n2026-11-04T17:17:54.229190437Z 2026-11-04T17:17:54Z GET /orders 200\n2026-11-04T17:17:56.235277332Z 2026-11-04T17:17:56Z GET /orders 200\n2026-11-04T17:17:58.250408157Z 2026-11-04T17:17:58Z GET /orders 200\n2026-11-04T17:18:00.255336895Z 2026-11-04T17:18:00Z GET /orders 200\n2026-11-04T17:18:02.268180722Z 2026-11-04T17:18:02Z GET /orders 200","more":0},{"t":18.3,"kind":"run","cmd":"kubectl -n shop logs -l app=api --all-containers=true --prefix --timestamps --tail=15","out":"[pod/api-588cd4d567-7r9tl/api] 2026-11-04T17:18:00.165668264Z api listening on 8080, db=db:5432\n[pod/api-588cd4d567-gjf6h/api] 2026-11-04T17:17:59.287257472Z api listening on 8080, db=db:5432\n[pod/api-7d87b9fcf5-6b9pq/api] 2026-11-04T17:16:28.592340076Z api listening on 8080, db=db:5432\n[pod/api-7d87b9fcf5-k9vjg/api] 2026-11-04T17:16:28.629161612Z api listening on 8080, db=db:5432","more":0}],"report":"IMPACT: A new API pod crash-looped from 17:16:45 UTC on 4 November 2026, blocking the rollout. Two older API pods remained available; `/orders` synthetic checks returned 200 throughout the affected rollout.\n\nROOT CAUSE: `ConfigMap/shop/api-config` had `data.DB_HOSTNAME` instead of the required `data.DB_HOST`.\n\nACTIONS TAKEN:\n1. Replaced `DB_HOSTNAME` with `DB_HOST=db` in the ConfigMap.\n2. Restarted the API rollout.\n\nSTATUS: resolved. The rollout completed, both new API pods are ready with no restarts, and `/orders` synthetic checks continued returning 200.\n\nESCALATION: none.\n\nFOLLOW-UP: Validate required API configuration keys before rollout."}