Same-ID retry timeline with exactly-once money movement
Retries share one ID; money moves once
lost replies retry with the same key, the ledger dedups
attempts over time:
submit req-7
A to B, 200
commit ok
request + moves + log
reply LOST
client must retry
retry same id
same payload
stored result
no money moved
balance A stays flat after the commit:
balance A:
1000
800 at commit
800 after retry
flat line means exactly once
the three ID rules:
same id, same payload
stored result, dedup
same id, NEW payload
REJECT, never apply
NEW id, same payload
independent transfer
legend: yellow = submit, purple = the one commit, peach = lost reply, blue = retry, green = safe outcome
at-least-once delivery plus an INSERT-first ledger gives exactly-once effect