A valid signature still needs a trust decision
An Oprindo sample had a matching asset hash and a valid signature, alongside an untrusted credential result. The useful story is in those separate answers.
When a late supplier acknowledgement arrives after the customer asks to cancel, one status field is not enough to describe what the business knows and wants.
The application stops waiting after three seconds. The supplier accepted the order after one. To the person looking at the screen, the order is still unresolved; at the supplier, it may already be work to fulfil. This invented example starts in that gap because a timeout message can easily invite the customer to place the order again. The application needs to remember the first request even after it has stopped waiting for the reply.
Now let the customer ask to cancel before the acceptance finally arrives. The late reply cannot simply overwrite that request, but ignoring it would lose the information that an order exists. This is where one status field runs out of useful answers. The supplier has accepted something the customer no longer wants, and the integration has to keep both facts long enough to find out what can still be changed.
The order is O17, for two cartons. We will follow its delayed acceptance, the timeout and the later cancellation request, keeping each attached to the decision it concerns. These timings describe an illustrative case, not a particular supplier’s behaviour. An actual integration still depends on that provider’s submission, lookup and cancellation rules; those rules determine whether it can resolve O17 automatically or needs a person to investigate.
Before sending O17, store its identity and the intended order parameters durably. Without that record, a lost response can leave the application unable to connect a later result to the request that caused it. A customer’s second click then risks becoming a new order because the first attempt has no useful identity inside the application.
At the deadline, record the outcome as unknown unless the evidence establishes something stronger. A confirmed rejection and an unanswered request are different states. The AWS Builders’ Library explains why timeouts and retries need consideration alongside side effects, load and backoff. [1] Retrying can help with a transient failure, but it cannot be justified solely by replacing an uncomfortable unknown with the word failed.
The three-second interval in this example is a user-interaction choice. A real application needs an overall time budget covering its dependencies and any retries. If the caller has no time remaining for a useful answer, starting another expensive attempt may only leave more work running after the screen has moved on. Cancelling local waiting is helpful; it still says little about an external write already received.
The screen should leave the customer with a way to check O17. “We have not confirmed your order yet” describes the unresolved outcome more accurately than “Your order failed”. It also avoids making another order look like the obvious remedy. There is no need for alarming wording, but the interface should not ask the customer to decide whether to repeat a purchase while concealing the fact that the first one may already exist.
At t4, the customer asks to cancel. Store that as an intention: cancellation requested. Do not label the supplier order cancelled until the relevant evidence supports it. If the original outcome remains unknown, there may be no confirmed supplier reference to cancel yet. The application can explain that it is resolving the original request and will then establish whether cancellation is possible.
At t5, acceptance arrives. It updates the remote outcome to accepted and supplies the supplier reference. It must not erase the cancellation intention simply because it is the newest network message. Nor should it be discarded as irrelevant: the acknowledgement is exactly the information needed to pursue cancellation against the right order. The combined state is accepted, cancellation pending.
Once acceptance supplies the supplier reference, cancellation also needs a recoverable place in the work list. Suppose the process saves that reference, then stops before queuing the next attempt. On restart, it should find an accepted order with cancellation still requested, rather than wait for another acknowledgement to remind it. Repeated acknowledgements should lead back to that same cancellation operation. Giving the follow-up its own identity and outcome lets recovery distinguish finding unfinished work from authorising another fresh request.
When the cancellation response arrives, record its own result. It may confirm cancellation, reject it because fulfilment has progressed, or leave another unknown outcome. The next customer communication follows that evidence and the agreed business policy. Labelling the order cancelled when the customer merely requests it would skip the provider decision on which that statement depends, leaving the interface unable to explain a later delivery.
An illustrative supplier order is accepted remotely before the caller times out; the customer requests cancellation before the acknowledgement reaches the application.
Follow the labelled arrows. On a narrow screen, scroll sideways if needed.
t5 is accepted there, cancellation requested here; a cancellation acknowledgement is still needed.A useful operation record can hold original request identity, provider reference, remote outcome, current intention and the evidence last used to update each. The presentation can derive a short understandable state from those fields. For O17, accepted plus cancellation requested yields cancellation pending. That keeps the screen concise without forcing the stored history into one misleading word.
Protect updates with the expected operation version and permitted transition. PostgreSQL documents conditional updates and the rows they affect. [3] If a worker based on an older view tries to replace the record after the intention changed, a failed condition should make it reload and interpret the current combination. It should not strip away the condition and overwrite the cancellation request to finish its old task.
HTTP method semantics are another boundary to read carefully. RFC 9110 describes which methods are idempotent at the protocol level. [2] That does not mean an arbitrary supplier action is safe to repeat because the application chose a familiar method or received a server error. A business submission and a cancellation each need the provider’s actual rules about request identity, duplicate effects and outcome lookup.
A reply also needs to stay attached to the action it answers. If cancellation has already been confirmed, an old acceptance of the original submission does not reopen the order: it describes the earlier step. A global latest-message rule cannot recognise that history, and a local version check only detects an outdated write; the transition policy has to interpret the response. A late original rejection needs a different ending again. If the supplier never accepted O17, there may be nothing to cancel. Record that rejection and resolve the customer’s request without inventing a successful cancellation for an order that never existed. The interface can give the customer a clear answer while the stored history preserves how it was reached.
O17 keeps original submission outcome separate from the customer’s later cancellation intention.
Scroll sideways to see all columns.
| Evidence received | What it establishes | What it must preserve |
|---|---|---|
| Late original acceptance | Supplier accepted O17; reference now known | Cancellation remains requested |
| Confirmed cancellation | Cancellation action succeeded | Old acceptance is earlier history, not a reopening |
| Original rejection | No accepted order remains under that evidence | Resolve the request without inventing a cancellation success |
| Cancellation outcome unknown | The cancellation result is unresolved | Continue lookup or manual investigation |
An unknown outcome needs somewhere to go next. A provider lookup, a retry under the original identity, a notification or a manual investigation may resolve it, depending on the contract. Give the record an owner and a review time appropriate to the service. Otherwise a perfectly honest status can leave the order sitting indefinitely between the customer who asked for an answer and a worker that considers its timed-out attempt finished.
If the supplier offers no dependable lookup or duplicate protection, the automatic path may need to stop. Explain what an authorised operator should verify before submitting anything new. A telephone confirmation can be part of a legitimate manual process if its result is recorded against O17; a fresh order placed in a separate portal without reference to the uncertainty simply moves the risk to another interface.
Walk the late-response example through the interface before launch. Show a timeout, request cancellation, deliver the acceptance and inspect what remains visible. Then reverse the order of the final two messages. The screen and record should preserve both the known supplier state and the current intention, with the next action clear.
Stopping the wait was a reasonable decision at three seconds; pretending that it cancelled the order would not have been. O17 can continue through reconciliation after the screen has moved on, provided someone owns the remaining work. When the acceptance arrives, it needs to preserve the cancellation request as well as the supplier reference. That gives the next person enough information to pursue the customer’s intention and enough restraint to avoid claiming a result the supplier has not confirmed.
Working on a workflow like this? Hamsa helps finance and operations teams connect their tools and handle the exceptions, starting with one workflow.
See the Payment Operations PilotPrimary sources behind this article. Living documentation may change.

Practical engineering. A human perspective.
More about Hamsa Software and the person behind it. Editorial notes.