SettleMint
DeploymentRunbooks

Runbooks

Diagnose and fix the readiness, indexing, and delivery problems platform operators run into most on a DALP instance.

Every runbook in this family opens from a symptom you can observe directly: kubectl output, a Console screen, or a delivery log, and ends with what actually fixes it. None of the three asks you to diagnose the cause before you start; each narrows to it through checks that name a signal and the value that means healthy. Start from what you are seeing, not from a guess.

A DALP instance runs three backend roles: one serves Console and API traffic, one indexes chains into Ledger Data, and one executes durable workflows, including webhook delivery. The indexer writes each webhook event as part of the same transaction that advances its indexed state, and the runner reads that queue on its own cadence to deliver it, so a stalled indexer starves webhook deliveries too. All three answer the same /readyz endpoint with the same status words, and all three write into one PostgreSQL database, so a symptom on one surface sometimes traces back to another. Each runbook names the moment its own checks point somewhere else, and links straight there.

Three roles run one instance, and they share one database.Three cards inside one instance boundary show the backend roles. The indexer reads chains into Ledger Data and publishes a servable schema once it is caught up. The Platform API serves Console and API traffic, and its readiness waits on that schema being bound. The runner, the Workflow Engine role, owns durable execution and sends webhook deliveries. An accent arrow carries the schema bind from the indexer into the Platform API's readiness, which is why a readiness symptom can turn out to be an indexing fault. A second accent arrow runs from the indexer to the runner, carrying the webhook queue the indexer writes as part of the same transaction that advances its indexed state, which is why a stalled indexer starves webhook deliveries too. Below the instance boundary, a connector leads to one PostgreSQL database that holds durable execution state, chain positions, and webhook delivery history for every role, which is why a database problem can surface as more than one symptom at once.Three roles run one instance, and they share one database.The same instance map as the desktop variant, drawn portrait. The indexer reads chains into Ledger Data and publishes a servable schema, feeding the schema bind to the Platform API's readiness, which is why a readiness symptom can turn out to be an indexing fault. The runner, the Workflow Engine role, owns durable execution and delivers webhooks. A second arrow runs from the indexer past the Platform API to the runner, carrying the webhook queue the indexer writes as part of the same transaction as its indexed state, so a stalled indexer starves deliveries too. Below the boundary, one PostgreSQL database holds durable execution state, chain positions, and delivery history for every role, which is why a database problem can surface as more than one symptom at once.

The indexer publishes a servable schema that the Platform API's readiness waits on, which is why a readiness symptom can turn out to be an indexing fault. The runner, the Workflow Engine role, owns durable execution and delivers webhooks from a queue the indexer writes in the same transaction as its indexed state, so a stalled indexer starves deliveries too. All three write down into one PostgreSQL database, so a database problem can surface as more than one symptom at once.

Match the symptom to a runbook

What you observeOpenWhy this one
kubectl get pods shows a pod Running but not 1/1 Ready, or Console and API calls fail with connection errors or 503s while every pod shows Running.Platform API not readyThe pod is out of rotation; check the readiness of the other replicas.
Console, the API, or reports stop reflecting new on-chain activity while the pods themselves report Ready.Ledger indexing stalledThe pod is healthy; only the chain data behind it has stopped advancing.
A registered webhook endpoint stops receiving events, alone or while sibling endpoints on the same instance keep working, or its status in Console flips to Disabled on its own.Webhook deliveries failingStart with that endpoint's delivery history and breaker state.
Every registered webhook endpoint on the instance goes quiet at the same time, not just one.Ledger indexing stalledThe indexer writes each webhook event in the same transaction that advances its indexed state, so a stalled indexer can stop new chain events across endpoints. Also inspect the shared delivery runner.

An indexer pod answers /healthz and /readyz with 200 while its process runs. A non-reorg chain ingest failure logs one Chain <verdict>; exiting: <failure> error in category didx.host, with chain_id and outcome annotations, then exits with status 1. Kubernetes restarts the pod. Operators read pod restarts and that log line. On a Platform API pod, readiness still reports whether its servable schema is bound, and its Actions point to diagnosing the indexer pod.

Open a runbook

Platform API not ready

A pod stays out of Ready. Tell a slow boot from a real wedge, and check the pod status and logs before you restart it.

Ledger indexing stalled

Indexed chain data stops advancing. Check pod restarts and the chain exit log before you touch anything.

Webhook deliveries failing

A webhook endpoint goes quiet. Read the retry schedule, the automatic circuit breaker, and how deliveries recover on their own.

When nothing here matches

If the pod is Ready, Ledger Data is current, and webhook deliveries are flowing, but you are still looking at a failure none of these three name, capture the evidence before you touch anything. Take the pod's logs and kubectl describe pod output, the delivery history, or whatever error your own integration returned. Every runbook in this family says the same thing about its own domain: a restart or a resend without evidence trades a diagnosis for a guess, and the wedge or the failure reason you needed does not survive it. Escalate with what you captured; each runbook's own closing step names the specific fields the platform team needs, and the same principle holds even when none of the three fits.

On this page