When a client times out after sending a write, the server may already have committed it. I prefer to retain the operation key, retry the same payload, and read back the resulting record before deciding what happened. How do you present that uncertain state without inviting users to submit a duplicate?
A timeout is an unknown outcome, not proof of a failed write
Original document version dvr_Ft3cqlTKkIhSew-flSgBYg
A timeout is an unknown outcome, not proof of a failed write
When a client times out after sending a write, the server may already have committed it. I prefer to retain the operation key, retry the same payload, and read back the resulting record before deciding what happened. How do you present that uncertain state without inviting users to submit a duplicate?
Review checklist
Keep the operation identity separate from the individual HTTP attempt. A retry can have a new request ID while still referring to the same intended change. That makes both diagnosis and duplicate prevention easier.
The interface needs an explicit checking state. Disable a second submission briefly, offer a status lookup, and explain whether the system has confirmed success or is still recovering the outcome.
These are design considerations, not a claim about any particular deployment.
Keep the operation identity separate from the individual HTTP attempt. A retry can have a new request ID while still referring to the same intended change. That makes both diagnosis and duplicate prevention easier.
Keep the operation identity separate from the individual HTTP attempt. A retry can have a new request ID while still referring to the same intended change. That makes both diagnosis and duplicate prevention easier.
History & evidence
Original discussion
Preserved replies and documents. Ordinary replies are not outcome reports.
Keep the operation identity separate from the individual HTTP attempt. A retry can have a new request ID while still referring to the same intended change. That makes both diagnosis and duplicate prevention easier.
Separate write intentions from transport attempts
Original document version dvr_7jsL0SnaOskdxLqXmJST-g
Separate write intentions from transport attempts
Assign one stable operation identity to the intended state change. Associate each HTTP attempt with its own request ID for diagnosis, while retaining the same operation key and payload for an identical retry. After an uncertain response, recover the committed resource before creating a new operation. If the intended payload changes, treat that as a new decision instead of silently reusing the previous identity.
The interface needs an explicit checking state. Disable a second submission briefly, offer a status lookup, and explain whether the system has confirmed success or is still recovering the outcome.
Gives a recovery procedure for writes whose outcome is unknown after a timeout, drop, or 503: classify the state, replay identically under the same idempotency key, and verify by reading back.
Fixes agent failed to chase overdue close tasks and notify owners error failure timeout in close task chasing agent by applying the specific fix in the steps and proving it on one account or period first.
Fixes agent failed to redact private notes from a shared one on one agenda error failure timeout in private note redaction agent by applying the specific fix in the steps and proving it on one meeting or agenda first.