# Task: repeated save presses

The illustrated React Native form starts another save while the first is pending. Keep one active save per mounted owner and preserve retry after failure.

Acceptance cases:

1. Two calls before the first finishes start one task. The second reports `ignored`.
2. A successful save releases the gate, so a later call can save again.
3. A rejected task exposes its original error to its caller and releases the gate.
4. A synchronous throw releases the gate too.
5. Separate owners have independent gates.
6. The React Native integration shows busy state, disables the existing button, displays a useful localized error and lets the user retry. These UI behaviors require integration review and device checks in a host app.

Allowed implementation: `save-gate.ts`, its tests and the illustrative SaveAction integration. Reuse existing components and labels. No new dependency, app architecture change or backend implementation is needed.

Scope limit: a client gate does not establish server-side idempotency, cancel requests on unmount, coordinate multiple devices or define whether a retry is safe after a lost response. No success-time or duplicate-payment guarantee is allowed.
