Diagnostic outcome
What you will accomplish
This guide helps you:
- Determine whether an incident is local, environment-wide, Organization-specific, or Agent-specific
- Collect useful diagnostics without exposing credentials
- Separate ingress failures from application failures
- Diagnose Helm hooks, migrations, pods, images, databases, and PVCs
- Trace Agent messages from the platform through the runtime and ingest API
- Diagnose LiteLLM, OpenRouter, Firecrawl, email, and messaging platforms
- Choose a recovery action appropriate to the failed component
Overview
Diagnose Agent Barn failures systematically across local development, Kubernetes, databases, networking, application services, Agent runtimes, providers, and monitoring.
Use this diagnostic sequence:
Begin with read-only inspection. Do not restart, redeploy, delete, rotate, or restore anything until you know which component failed and what state must be preserved.
Identify the blast radius
Use the smallest symptom that explains the incident.
| Symptom | Start with |
|---|---|
| One user cannot access an Agent | Agent Access, Membership, active Organization, and HTTP status |
| One Agent fails | Agent status, last_error, pod, health, logs, credentials, and runtime |
| All Agents on one platform fail | Platform credentials, provider availability, and platform configuration |
| Agents answer but Activity is empty | Ingest API, ingest URL, ingest key, and runtime telemetry plugin |
| Activity works but costs are empty | LiteLLM key identity and cost query path |
| UI loads but API calls fail | UI backend configuration, API Service, and ingress |
| UI and API are both unavailable | Ingress, API pod, database, DNS, and certificate |
| API is healthy but background work stops | Redis, worker, reconciliation CronJob, and Event Deliveries |
| Model requests fail | LiteLLM, OpenRouter, virtual keys, credit, and model allowlist |
| Firecrawl tools fail | Firecrawl API, browser service, RabbitMQ, Redis, and API key |
| Grafana is empty | Prometheus targets, Service discovery, and dashboard data source |
| Only production fails | Production namespace, secrets, hosts, images, and recent deployment |
| Only local development fails | Docker, .env, port conflicts, k3d, images, and host routing |
Interpret HTTP failures
| Status | Meaning |
|---|---|
400 | A business precondition or input failed |
401 | The request is not authenticated |
403 | The user is authenticated but lacks the required authority |
404 | The resource is absent or intentionally hidden because it is inaccessible |
409 | The request conflicts with current state |
422 | Request validation failed |
500 | An unexpected server failure occurred |
502 or 503 | A proxy, dependency, startup, or availability failure occurred |
Do not treat every 404 as missing data. Agent Barn uses inaccessible-resource responses to avoid exposing resources across authorization boundaries.
Collect diagnostics
Record the exact:
- Environment
- Namespace
- Time and timezone
- User-visible error
- HTTP status
- Affected Organization and Agent
- Last known successful action
- Recent deployment, migration, configuration, or credential change
- Whether the issue is repeatable
Verify the Kubernetes target
kubectl config current-contextConfirm namespace access:
kubectl auth can-i get pods \
--namespace agent-farmCapture workload state:
kubectl get pods,deployments,statefulsets,services,jobs,cronjobs,persistentvolumeclaims,ingress \
--namespace agent-farmCapture recent events:
kubectl get events \
--namespace agent-farm \
--sort-by=.lastTimestampCapture Helm state:
helm list --namespace agent-farmInspect a failed release:
helm status RELEASE_NAME \
--namespace agent-farm
helm history RELEASE_NAME \
--namespace agent-farmInspect a failing pod
kubectl describe pod POD_NAME \
--namespace agent-farmRead current logs:
kubectl logs POD_NAME \
--namespace agent-farm \
--all-containers \
--tail=200If the container restarted, read the terminated instance:
kubectl logs POD_NAME \
--namespace agent-farm \
--all-containers \
--previous \
--tail=200Troubleshoot local startup
The standard local command is:
./run.shIt performs these operations in order:
- Checks Docker.
- Validates required
.envvalues. - Starts local LiteLLM and its PostgreSQL database.
- Starts or adopts the k3d cluster.
- Writes host and container kubeconfigs.
- Loads Hermes and OpenClaw images into k3d.
- Starts application PostgreSQL and Redis.
- Applies Alembic migrations.
- Starts API, worker, and UI.
The first failed stage normally identifies the subsystem to inspect.
Docker is unavailable
Check the engine:
docker infoInspect Compose services:
docker compose -f compose.yml psRead local service logs:
docker compose -f compose.yml logs \
--tail=200 \
db redis api worker uiCommon causes include:
- Docker Desktop is not running
- Docker is in Windows-container mode instead of Linux-container mode
- The Docker VM lacks memory or disk space
- Another stack already owns ports
3000,8000,8001,7070, or16443 - Native
make dev-*services are running alongside the Compose stack
Do not run native API/UI services and the full containerized stack on the same ports.
.env is missing
If .env does not exist, run.sh copies .env.spec and exits. Fill the required values, then rerun it.
If startup reports missing values, correct each one instead of bypassing validation.
Keep these stable across restarts:
SECRET_SIGNING_KEY
AGENT_TOKEN_ENCRYPTION_KEY
LITELLM_MASTER_KEYAPI startup data initialization fails
A common startup error is:
500: Error while initializing startup dataRead the earlier API log lines for the underlying exception.
For a new database, confirm PLATFORM_ADMIN_CREDENTIALS uses:
email:passwordThe password must contain at least:
- Eight characters
- One uppercase letter
- One lowercase letter
- One digit
Verify local k3d
Use the host kubeconfig:
export KUBECONFIG=.k3d/kubeconfig-host.yaml
kubectl get nodes
kubectl get pods --all-namespacesThe default cluster is:
agentfarm-devHost tools use:
.k3d/kubeconfig-host.yamlThe containerized API uses:
/app/.k3d/kubeconfig-internal.yamlKubeconfig certificate error
A local cluster created before host.docker.internal was added to the API-server certificate can produce:
x509: certificate is valid for 127.0.0.1, not host.docker.internalConfirm the error is from the local containerized API. If so, recreate the local cluster:
./stop.sh --clean
./run.shInvalid kubeconfig path
If Agent start fails with:
Invalid kube-config file. No configuration found.Verify the mounted path inside the API container:
docker exec aai_api \
ls -l /app/.k3d/kubeconfig-internal.yamlFor native API development, K8S_KUBECONFIG_PATH must be absolute or resolve relative to api/, because make dev-api runs from that directory.
Native API creates an Agent that cannot answer
For native development, set the API’s LiteLLM URL:
LITELLM_BASE_URL=http://127.0.0.1:7070If it is empty, Agent creation can complete without minting a LiteLLM key, leaving the Agent unable to make model requests.
Agent pods must use the host-facing address:
AGENT_LITELLM_BASE_URL=http://host.docker.internal:7070A loopback address inside an Agent pod points back to that pod, not to the host.
Troubleshoot deployment and hooks
Start with:
helm list --namespace agent-farm
kubectl get jobs,pods --namespace agent-farmAgent Barn uses Helmfile release dependencies. A failed sync can leave earlier releases updated while later releases remain unchanged.
Inspect each affected release rather than assuming the entire platform rolled back.
API pre-upgrade hooks
The API release runs these important hooks:
- API and registry Secret resources
- LiteLLM virtual-key Job
- Alembic migration Job
- API and worker rollout
Successful hook Jobs are removed. Failed Jobs remain.
LiteLLM key hook fails
Inspect:
kubectl describe job agentbarn-api-litellm-key \
--namespace agent-farm
kubectl logs job/agentbarn-api-litellm-key \
--namespace agent-farmCheck:
- LiteLLM pod readiness
- LiteLLM master key
agent-farm-userServiceAccount permissions- Access to create or update
litellm-api-key - Network access to
http://litellm:4000 - The existing
agentbarn-apikey alias
The key Job deletes and recreates the API’s LiteLLM virtual key. If a later hook fails, existing API or worker pods may still hold the deleted key until they are replaced with pods that load the updated Secret.
Migration hook fails
Inspect:
kubectl describe job agentbarn-api-migrate \
--namespace agent-farm
kubectl logs job/agentbarn-api-migrate \
--namespace agent-farmCheck the current revision:
kubectl exec \
--namespace agent-farm \
deployment/agentbarn-api \
-- sh -c 'cd /app/api && alembic current'Do not retry until you know whether the migration transaction committed any schema or data changes.
A Helm rollback does not downgrade Alembic.
Deployment times out
Helmfile uses a 600-second timeout. Inspect:
- Jobs still running
- Pods waiting for readiness
- Image pulls
- PVC binding
- Database connectivity
- Certificate challenges
- Resource quota failures
- LiteLLM readiness
Preserve failed hook logs before another deployment. The next hook execution can remove the previous failed Job through its before-hook-creation policy.
Troubleshoot pods and images
List non-ready pods:
kubectl get pods \
--namespace agent-farmPending
Describe the pod:
kubectl describe pod POD_NAME \
--namespace agent-farmLook for:
- Unschedulable CPU or memory requests
- Namespace quota exhaustion
- Unbound PVCs
- Missing ServiceAccounts
- Missing Secrets
- Node selectors or taints
- Admission failures
ErrImagePull or ImagePullBackOff
Inspect the pod events and image reference:
kubectl get pod POD_NAME \
--namespace agent-farm \
-o jsonpath='{.spec.containers[*].image}{"\n"}'Confirm the registry Secret exists:
kubectl get secret agentbarn-api-registry-pull-secret \
--namespace agent-farmCheck:
- Image repository
- Image tag
- Registry hostname
- Registry credentials
- Pull Secret name
- Registry reachability
- Whether the image was published
Do not decode or share the pull Secret as part of ordinary diagnosis.
Local Agent image pull failure
Local Agent images use IfNotPresent and are normally imported into k3d.
Reload them:
bash docker/k3d/k3d-load-images.shOr reload one runtime:
TARGET=hermes bash docker/k3d/k3d-load-images.shTARGET=openclaw bash docker/k3d/k3d-load-images.shThe image tags in .env must match the respective runtime VERSION files.
A local warning about FailedToRetrieveImagePullSecret can be harmless when the image is already imported. It becomes material when accompanied by ErrImagePull or ImagePullBackOff.
Imported images can be garbage-collected when the Docker host is under disk pressure. Inspect:
docker system df
docker stats --no-streamThen reimport the runtime image.
CrashLoopBackOff
Read both current and previous logs:
kubectl logs POD_NAME \
--namespace agent-farm \
--all-containers \
--tail=200
kubectl logs POD_NAME \
--namespace agent-farm \
--all-containers \
--previous \
--tail=200Check termination state:
kubectl describe pod POD_NAME \
--namespace agent-farmIf the exit code is 137 or the reason is OOMKilled, inspect memory pressure.
For local development, the Docker VM may be exhausted even when the Agent pod has no explicit memory limit. Increase Docker Desktop memory or reduce the number of active workloads.
Troubleshoot database and storage
API health fails
Port-forward the API Service:
kubectl port-forward \
--namespace agent-farm \
service/agentbarn-api \
8000:8000Then request:
curl --fail http://localhost:8000/api/v1/healthIf this fails, inspect:
kubectl logs deployment/agentbarn-api \
--namespace agent-farm \
--tail=200Inspect application PostgreSQL:
kubectl get pod,service,endpoints,persistentvolumeclaim \
--namespace agent-farmkubectl logs statefulset/postgres-app \
--namespace agent-farm \
--tail=200The API health endpoint primarily verifies PostgreSQL connectivity. It does not prove that Redis, workers, Agents, LiteLLM, Firecrawl, or providers are healthy.
Authentication fails after a password change
Changing the PostgreSQL Secret does not change the password stored in an already initialized PostgreSQL data directory.
If a deployment value was changed accidentally:
- Restore the previous configured password
- Restart only the workloads that need to reload it
- Verify connectivity
For an intentional rotation, follow a coordinated database credential migration.
PVC remains Pending
Inspect:
kubectl describe persistentvolumeclaim PVC_NAME \
--namespace agent-farmCheck:
- StorageClass name
- Provisioner availability
- Access mode
- Requested capacity
- Namespace quota
- Node topology
Changing STORAGE_CLASS does not move data from an existing PVC. StatefulSet volume claim templates are not an in-place storage migration.
Database or Agent workspace data is missing
Stop state-changing operations and establish:
- Whether the original PVC still exists
- Whether a replacement PVC was created
- Which node or storage backend held the data
- Which backup corresponds to the failed environment
- Whether stable encryption keys are available
Troubleshoot networking and TLS
Use port-forwarding to separate application health from ingress health.
Test API without ingress
kubectl port-forward \
--namespace agent-farm \
service/agentbarn-api \
8000:8000curl --fail http://localhost:8000/api/v1/healthTest UI without ingress
kubectl port-forward \
--namespace agent-farm \
service/agentbarn-ui \
3000:3000Open:
http://localhost:3000If port-forwarding works but the public hostname does not, inspect DNS, Traefik, ingress, and TLS rather than the application container.
Inspect ingress and certificates
kubectl get ingress,certificate,challenge \
--namespace agent-farmkubectl describe ingress agentbarn-api \
--namespace agent-farm
kubectl describe ingress agentbarn-ui \
--namespace agent-farmCheck:
- DNS resolves to the ingress address
- Hostnames match the configured environment
- Traefik is available
- The configured ClusterIssuer exists
- HTTP-01 challenges can reach the cluster
- Certificate hostnames match the ingress
- TLS Secrets exist
The API ingress intentionally exposes only /api. A public request to /metrics should not work; Prometheus scrapes it through the internal Service.
Service has no endpoints
Inspect:
kubectl get service,endpoints \
--namespace agent-farmA Service without endpoints usually means:
- Its selector does not match a pod
- The expected pod does not exist
- The pod is not ready
- The target port name is incorrect
Troubleshoot API, UI, and authentication
UI loads but API calls fail
Check:
agentbarn-apiService and endpoints- UI server logs
- API logs
- UI backend URL used when the image was built
- Browser network response status
- The public API hostname and TLS
- Whether UI and API images belong to the same release
The UI proxies API traffic from inside the namespace. A browser-visible UI does not prove that the UI server can resolve or reach the API Service.
Login fails for every user
Check:
- API health
- Application database
SECRET_SIGNING_KEY- Browser cookies and configured application URL
- UI and API hostname consistency
- Recent key or domain changes
Changing SECRET_SIGNING_KEY invalidates assumptions behind existing signed sessions and tokens.
Initial Platform Administrator login fails
For a fresh database, inspect API bootstrap logs and verify:
PLATFORM_ADMIN_CREDENTIALS=email:passwordThe password requires eight or more characters with uppercase, lowercase, and a digit.
Do not expect changing the environment value to behave like an ordinary user password-reset workflow for an established deployment.
Password reset or invitation email does not arrive
Check:
CLOUDFLARE_ACCOUNT_IDCLOUDFLARE_API_TOKENSENDER_EMAIL- Email Sending permission
- Verified sending domain
- Provider quota
- API logs
When email configuration is absent, Agent Barn logs the condition and performs a no-op instead of making API health fail.
One user receives 403 or 404
Check:
- Active Organization
- Membership
- Organization Role
- Agent Access Role
- Explicit Agent Access
- Agent General Access
- Whether the resource belongs to another Organization
Platform Administrator status does not automatically provide Organization authority through ordinary Organization routes.
Troubleshoot workers and Event Deliveries
The main API can remain healthy while background delivery is unavailable.
Inspect the worker:
kubectl get deployment agentbarn-api-worker \
--namespace agent-farmkubectl logs deployment/agentbarn-api-worker \
--namespace agent-farm \
--tail=200Inspect Redis:
kubectl get pod,service,endpoints \
--namespace agent-farmkubectl logs deployment/redis \
--namespace agent-farm \
--tail=200Inspect reconciliation:
kubectl get cronjob agentbarn-api-event-reconciler \
--namespace agent-farmkubectl get jobs \
--namespace agent-farmPlatform Administrators can review Event Deliveries at:
/dashboard/platform/event-deliveriesInterpret Event Delivery state
| Status | Meaning |
|---|---|
PENDING | Committed but not yet successfully enqueued |
ENQUEUED | Published to the worker transport |
PROCESSING | Claimed by a worker |
SUCCEEDED | Handler completed |
DEAD_LETTERED | Terminal failure or retries exhausted |
Reconciliation republishes eligible pending and stale deliveries. It does not automatically replay DEAD_LETTERED deliveries.
Check:
- Worker readiness
- Redis connectivity
- Reconciliation schedule and last run
attempt_count- Bounded
last_error - Dead-letter reason
- Whether the handler supports the event name and schema version
Do not modify Event Delivery rows directly as a routine repair.
Troubleshoot Agent lifecycle
Begin in Agent Barn with:
- Agent status
last_error- Health
- Current logs
- Historical log snapshots
- Runtime
- Platform
- Selected model
- Template or Override version
- Skill versions
- Credentials
A successful Agent start clears the previous persisted error.
Inspect Agent Kubernetes resources
kubectl get deployments,services,persistentvolumeclaims \
--namespace agent-farm \
--selector agentbarn.io/component=agent \
--show-labelsInspect the selected Agent pod:
kubectl describe pod AGENT_POD \
--namespace agent-farmkubectl logs AGENT_POD \
--namespace agent-farm \
--all-containers \
--tail=200If it restarted:
kubectl logs AGENT_POD \
--namespace agent-farm \
--all-containers \
--previous \
--tail=200Agent status is RUNNING but no pod exists
Establish whether:
- The pod was manually deleted
- The Deployment was deleted
- The Agent resources exist in another namespace
- The API kubeconfig targets the wrong cluster
- The staging API created resources in production
- A release or cleanup operation removed the workload
After correcting the infrastructure boundary, stop and start the affected Agent deliberately so the API rebuilds its resources.
Agent remains STARTING
Check:
- Pod scheduling
- Image availability
- Runtime startup logs
- Health-server readiness
- Platform credentials
- LiteLLM reachability
- External platform reachability
Agent becomes ERROR
Read last_error before retrying. Common causes include:
- Invalid Slack, Telegram, Teams, or Discord credentials
- Unsupported runtime/platform pairing
- Kubernetes authorization failure
- Missing runtime image
- Invalid generated configuration
- Provider connectivity failure
- PVC or scheduling failure
Runtime and platform compatibility
| Runtime | Supported platforms |
|---|---|
| Hermes | Slack, Telegram, Discord |
| OpenClaw | Slack, Teams, Telegram, Discord |
A Teams Agent cannot use Hermes.
Agent does not respond in a shared channel
In groups, channels, guilds, and team conversations, the Agent requires a fresh mention on each message. A prior mention in the thread does not authorize later unmentioned messages.
Direct messages are exempt.
Also check:
- Bot membership in the channel
- Channel or guild allowlist
- User restrictions
- Bot scopes and permissions
- Whether the message was addressed to another bot
- Platform event subscriptions
Troubleshoot messages and telemetry
An Agent can answer successfully while conversations, messages, and Tool Calls remain absent from Agent Barn.
Agent runtimes push telemetry to the ingest API on port 8001. The main product API uses port 8000.
Test deployed ingest
Port-forward the ingest endpoint:
kubectl port-forward \
--namespace agent-farm \
service/agentbarn-api \
8001:8001Then request:
curl --fail http://localhost:8001/ingest/v1/openapi.jsonA successful response proves the process is reachable through the Service. Runtime event submission also requires the Agent’s per-start ingest key.
Check:
- Ingest process and Service endpoint
- Agent
INGEST_BASE_URL - Agent ingest Secret
- Runtime telemetry plugin
- API logs for ingest authentication failures
- Agent logs for event delivery failures
- Whether the Agent was restarted with current telemetry configuration
Test local ingest from an Agent-like pod
kubectl run ingest-check \
--rm \
--interactive \
--tty \
--restart=Never \
--image=curlimages/curl \
-- curl -sS -o /dev/null -w '%{http_code}\n' \
http://host.docker.internal:8001/ingest/v1/openapi.jsonExpected:
200If it cannot connect:
- Confirm
make dev-apiormake dev-ingestis running - Confirm ingest binds to
0.0.0.0 - Confirm
INGEST_BASE_URLuseshost.docker.internal - On native Linux, confirm CoreDNS and the host firewall allow the k3d bridge to reach port
8001
Activity exists but costs are empty
Costs use a separate path. The API queries LiteLLM and attributes spend through each Agent’s LiteLLM key identity.
Check:
- Agent LiteLLM key exists
- Key alias and Agent association
- LiteLLM database
- LiteLLM spend metrics
- Time range and Organization
- Cost permissions
- Whether the model request actually reached LiteLLM
Troubleshoot models and integrations
Model requests fail
Check LiteLLM:
kubectl get pod,service,endpoints \
--namespace agent-farmkubectl logs deployment/litellm \
--namespace agent-farm \
--tail=200Port-forward it:
kubectl port-forward \
--namespace agent-farm \
service/litellm \
4000:4000Check readiness:
curl --fail http://localhost:4000/health/readinessCommon model failures include:
| Response | Likely cause |
|---|---|
401 | Invalid or expired model key |
402 | OpenRouter credits exhausted |
403 | Provider access denied |
502 | LiteLLM or its upstream is unreachable |
Also verify:
LITELLM_MASTER_KEYremained stable- The API’s
litellm-api-keySecret exists - The Agent restarted after a runtime or key repair
- Selected model is allowed by
AGENT_MODEL_ALLOWLIST - Default model uses
litellm/openrouter/<model-slug> - OpenRouter supports the requested model
Firecrawl calls fail
Inspect:
- Firecrawl API pod
- Playwright service
- RabbitMQ
- Redis
- Firecrawl PostgreSQL
- Firecrawl API key
- Agent-level credential override
- Cluster egress
Use Agent logs and the Tool Call result to determine whether the failure occurred during authentication, scraping, browser execution, or result ingestion.
Google Workspace authentication fails
Check:
- Google client ID and secret
- Authorized redirect URI
- Exact
WEB_APP_URL - Callback:
<WEB_APP_URL>/api/v1/integrations/google/callback- Google consent-screen access
- Requested scopes
- Existing credential ownership
Platform credentials fail
Use the Agent configuration’s validation action and then inspect Agent health and logs.
Check:
- Slack bot and app tokens
- Telegram bot token
- Discord bot token and permissions
- Teams application configuration
- Channel, guild, chat, team, or user restrictions
- Whether the credential belongs to the configured platform account
Do not paste tokens directly into logs or diagnostic messages.
Stored credentials cannot decrypt
This usually indicates the application database and AGENT_TOKEN_ENCRYPTION_KEY do not belong to the same recovery set.
Restore the matching encryption key. Replacing provider credentials one by one does not repair other encrypted data.
Troubleshoot monitoring
If Grafana is available but empty, inspect Prometheus targets.
Port-forward Prometheus:
kubectl port-forward \
--namespace agent-farm \
service/monitoring-prometheus-server \
9090:80Open:
http://localhost:9090/targetsExpected jobs include:
agentbarn-api
litellm
agent
kube-state-metrics
Prometheus self-scrapeAgents are absent from monitoring
Agent discovery requires:
agentbarn.io/component=agentInspect:
kubectl get services \
--namespace agent-farm \
--selector agentbarn.io/component=agent \
--show-labelsAgents created before monitoring support may need to be stopped and started once.
If only the legacy component label is missing, patch Services without restarting:
kubectl label services \
--namespace agent-farm \
--selector agentfarm.io/component=agent \
agentbarn.io/component=agent \
--overwriteSlack alerts do not arrive
Inspect Alertmanager:
kubectl port-forward \
--namespace agent-farm \
service/monitoring-alertmanager \
9093:9093Open:
http://localhost:9093Check:
- Alert is firing in Prometheus
- Alertmanager received it
SLACK_ALERTS_WEBHOOK_URLis valid- The Secret is mounted
- The webhook can post to
#alerts - Environment label is correct
- No active silence suppresses it
Resource or certificate alert is missing
The built-in stack does not alert on:
- Node health
- CPU or memory capacity
- cAdvisor metrics
- PVC capacity
- Certificate expiry
- Backups
- Redis
- Worker readiness
Use external infrastructure, storage, certificate, backup, and synthetic monitoring for those signals.
Recovery and escalation
Use the least invasive recovery that addresses the confirmed cause.
Recovery ladder
- Correct a user, Organization, Agent, or provider configuration.
- Allow Kubernetes to recreate a failed stateless pod.
- Restart one identified stateless workload.
- Redeploy the same reviewed release and configuration.
- Stop and start one affected Agent.
- Deploy a forward corrective release.
- Restore a previous application image compatible with the current schema.
- Run a tested database downgrade.
- Restore the matching database, volume, and stable-key recovery set.
Before restarting a workload
Capture:
- Current and previous logs
- Pod description
- Events
- Image reference
- Helm revision
- Relevant configuration names
- Database revision when applicable
Before retrying a failed deployment
Capture failed hook Jobs. The next deployment may delete them.
Establish:
- Which Helm releases already changed
- Whether the LiteLLM virtual key rotated
- Whether the migration ran
- Whether the database revision changed
- Whether any new pods became ready
- Whether old pods still use previous Secret values
Before restoring data
Escalation package
Provide:
- Environment and namespace
- Incident start time and timezone
- Exact user-visible symptom
- Reproduction steps
- Affected Organization and Agent identifiers, appropriately redacted
- HTTP status
- Helm release status and revisions
- Workload and image inventory
- Pod state and relevant sanitized logs
- Kubernetes events
- Database migration revision
- Recent deployment or configuration change
- Actions already attempted
- Current user impact
Never include credentials or Secret contents.
Quick diagnostic checklist
Next steps
Once the platform is stable, use the development guides to understand the system boundaries, safely extend Agent Barn, and add regression coverage for recurring failures.
Develop and extend Agent Barn