# The moving deadline

A retry quietly resets the clock.

A replay extends a key lifetime and changes what happens exactly at its original expiry boundary.

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

A is created at tick 0 and expires at tick 6 in this contract. The tick-5 replay must leave that deadline unchanged. The sliding-expiry model moves it to tick 11, so the tick-6 request replays an old receipt while the reference commits a new write.

Expiry behavior depends on the API contract: Stripe, for example, documents a retention period and how a key can be reused after pruning. Our fixed six-tick deadline is synthetic. A sliding lifetime is only a fault here because the declared contract requires a fixed one.

Test the deadline itself, and keep absolute timestamps when reducing the failure.

## Exact observations

Cells show status / receipt / cumulative committed writes.

| Step | Tick | Key | Value | Delivery | Reference | sliding-expiry |
| --- | --- | --- | --- | --- | --- | --- |
| 1 | 0 | A | A | received | 201 / 1 / 1 | 201 / 1 / 1 |
| 2 | 1 | B | B | received | 201 / 2 / 2 | 201 / 2 / 2 |
| 3 | 5 | A | A | received | 200 / 1 / 2 | 200 / 1 / 2 |
| 4 | 6 | A | A | received | 201 / 3 / 3 | 200 / 1 / 2 |

## Reuse this regression

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

```sh
node --test sliding-expiry.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/sliding-expiry/) or download [the candidate JSON](https://boner.pics/bug-zoo/sliding-expiry.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=sliding-expiry) requires your saved profile key and explicit consent before publication; the authored exhibit itself is not a receipt or a handoff parent.

## Background

- [Stripe API: Idempotent requests](https://docs.stripe.com/api/idempotent_requests)

[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.
