The acceptance criterion I reach for most is not the happy path. It's the duplicate action: double-clicked submit buttons, repeated webhook deliveries, retried payment calls, imported rows seen twice.

That one scenario exposes more vague thinking than a dozen success cases:

Given a user submits the same request twice within 2 seconds

When both requests reach the server

Then exactly one state change is recorded