Troubleshooting
Start with the symptom, then check the component that owns that state. The
optional stem_cli package must be configured with the application's adapter
context.
Producer succeeds, but no worker runs the task
Check: compare broker connection, namespace, queue, routing, task name, and serialization/registry configuration in both processes. Check worker heartbeats and broker connectivity.
Remedy: use the same configuration and register the task in the worker.
With the CLI, run stem worker ping, stem worker status, and
stem observe queues after configuring its context.
Tasks are repeatedly retried
Check: inspect the exception and task-retry signal. Determine whether the
failure is transient or permanent, and check the task retry policy and count.
Remedy: repair transient dependencies; otherwise bound the retry budget or let the task reach the DLQ. Make external effects idempotent because delivery is at least once.
A task is in the DLQ
Check: inspect payload, task name/version, decode/signature error, and the first failure. Malformed bytes are not repaired by retrying them.
Remedy: deploy a compatible handler or correct the producer, then replay a
small verified sample. Use stem dlq list and stem dlq show; confirm replay
or purge flags with the installed CLI's --help.
A workflow is waiting or does not resume
Check: inspect the run and waiter topic. The emitted topic must exactly
match the topic passed to awaitEvent; verify the run is still waiting and the
payload is serializable.
Remedy: emit the matching event through the workflow API/CLI, or cancel the run according to its policy. A suspended workflow is not necessarily failed. See workflow troubleshooting.
A worker is redelivering or duplicates appear
Check: compare broker visibility timeout, worker lease duration, renewal cadence, handler duration, and shutdown mode. Look for lease-renewal failures and process crashes.
Remedy: size leases for the operation, keep renewal ahead of expiry, and make side effects idempotent. Built-in terminal-result arbitration cannot make an external HTTP call, email, or mobile execution exactly once.
TLS or signing fails
Check: verify certificate paths and hostname validation, then verify
STEM_SIGNING_ALGORITHM, active key, and matching HMAC/Ed25519 key sets.
Remedy: deploy CA/public keys to verifiers and rotate with overlap. Use
STEM_TLS_ALLOW_INSECURE=true only for short local diagnosis, then remove it.
Never print secrets while debugging.
Namespace or backend state is missing
Check: compare namespace and adapter endpoint exactly, including database and schema. Confirm durable stores are reachable and migrated.
Remedy: correct shared configuration and run the adapter's documented migrations. Missing telemetry does not imply missing task state.