Skip to content

The one rule that matters

Available

A single execution contains two independent things:

Question Field
Did the agent finish its work? status
Did an effect occur in the outside world? operations[].status

They are not linked. The agent can reply successfully while the SMS never went out — and that is a normal outcome, not an error.

{
"status": "completed",
"operations": [
{ "capability_id": "notification.send_sms", "status": "UNKNOWN" }
]
}

In the response above: the agent replied, but whether the SMS arrived is unknown.

If the connector times out, the error is returned to the model. The model still writes its answer — it has to say something to the user. The operation stays UNKNOWN in the Ledger and reconciliation resolves it later.

Status Meaning What you do
VERIFIED Confirmed against the source. The only meaning of “done” Continue
ACKNOWLEDGED The connector replied — transport, not outcome Wait
UNKNOWN Outcome unknown ⛔ Do not retry. Wait
MANUAL_REVIEW Held for a human Resolved in the console
FAILED Explicit rejection — an effect is impossible Safe to retry

Wrong — the most common mistake:

n = dx.run(...)
if n.status == "completed":
print("SMS sent!") # ⛔ may be a LIE

Right:

n = dx.run(...)
if n.verified:
print("SMS delivered") # ✅ confirmed against the source
elif n.unknown:
print("Outcome unknown — wait, do not resend")
else:
print("Did not happen")

Many platforms treat HTTP 200 as “done”. That is wrong:

  • the connector accepted the request — that is transport;
  • the provider processed it — that is a different thing;
  • the effect actually occurred — that is a third thing.

Davirix marks only the third as VERIFIED, and proves it by reading back from the source. Without a read-back it stays ACKNOWLEDGED — and that is an honest answer.