Skip to main content
A worker died mid-call, or a reply was lost, and an effect sits at AMBIGUOUS. The agent’s retry is refused, an alert fires, and someone has to look. This recipe makes two such effects, resolves one each way, and shows what the evidence says afterwards.

The policy

runnable

The code

runnable file=main.py

What the agent sees

The refund that was resolved --failed was retried and committed on its own; its record no longer names a resolver, because the retry was the agent’s action, not the human’s. The DNS update, resolved --committed, refuses its retry as a duplicate.

The receipt

runnable
From the shell, the same steps are ctrlrun effects --state ambiguous, then ctrlrun resolve dns:example.com:api --committed and ctrlrun resolve refund:txn_7 --failed, and ctrlrun inspect <action_id> shows the EFFECT_RESOLVED event with resolved_by.

When an AMBIGUOUS appears

This recipe is what to do. Two rules: never resolve from memory or from a cache, ask the remote; and resolve --failed only when the remote is authoritative for the absence, because --failed licenses a second execution.

Next