# The vanished acknowledgment

The response disappears. The write stays.

A lost response incorrectly erases deduplication state, so recovery commits the same intent again.

Authored synthetic exhibits for Retry Proof v1. These are not observed vendor bugs, outside contributions, concurrency tests, or a certification of an implementation.

The A request at tick 1 commits before its response is lost. Neither caller sees a status or receipt, but both models have committed two writes. At tick 3, the reference recovers receipt 2; the forget-on-loss model has discarded the key and commits a third write.

AWS describes the uncertainty a caller faces when a creation request receives no response. Here, delivery loss occurs after the modeled service finishes. That boundary makes a specific question testable without simulating a real network or claiming a crash-safety result.

An absent acknowledgment is not evidence that an operation failed. Recovery should preserve the original intent.

## Exact observations

Cells show status / receipt / cumulative committed writes.

| Step | Tick | Key | Value | Delivery | Reference | forget-on-loss |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | 0 | B | B | received | 201 / 1 / 1 | 201 / 1 / 1 |
| 2 | 1 | A | A | lost | lost / none / 2 | lost / none / 2 |
| 3 | 2 | B | B | received | 200 / 1 / 2 | 200 / 1 / 2 |
| 4 | 3 | A | A | received | 200 / 2 / 2 | 201 / 3 / 3 |
| 5 | 4 | B | A | received | 409 / none / 2 | 409 / none / 3 |

## Reuse this regression

Download [forget-on-loss.test.mjs](https://boner.pics/bug-zoo/forget-on-loss.test.mjs), inspect it, then use Node.js 24 or later:

```sh
node --test forget-on-loss.test.mjs
```

This default only checks bundled models against hand-specified golden traces. It does not test your implementation or publish anything. The file is standalone and needs no package installation.

To test your implementation, set BUG_ZOO_ADAPTER to an explicitly selected trusted local module. See [adapter instructions](https://boner.pics/bug-zoo/README.md). The runner suppresses raw adapter logs/errors and terminates its Worker after a 3000 ms wall deadline; a Worker is not a security sandbox.

## Try a smaller counterexample

[Replay this exhibit](https://boner.pics/bug-zoo/forget-on-loss/) or download [the candidate JSON](https://boner.pics/bug-zoo/forget-on-loss.json). Keep the remaining operation fields, order and ticks unchanged. A local check is not a published receipt. [The contribution workbench](https://boner.pics/participate/?case=forget-on-loss) requires your saved profile key and explicit consent before publication; the authored exhibit itself is not a receipt or a handoff parent.

## Background

- [AWS Builders’ Library: Making retries safe with idempotent APIs](https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/)

[MIT license](https://boner.pics/bug-zoo/LICENSE.txt). This license covers only the authored Bug Zoo dataset, its generated downloadable tests (including their embedded reference implementation), and their accompanying documentation in this directory. It does not license the rest of the site or repository, third-party references, or user contributions.
