feat: add presence-gated session leases (#7)
quality-gate / quality (push) Successful in 55s
quality-gate / quality (push) Successful in 55s
Closes #7
This commit is contained in:
@@ -41,11 +41,12 @@ observe the store.
|
||||
|
||||
### Concurrency and idempotency
|
||||
|
||||
- Listing registration and join-attempt creation use an owner-scoped idempotency
|
||||
- Listing registration and join-attempt creation use a tenant-and-owner-scoped idempotency
|
||||
key plus a canonical request fingerprint. An exact duplicate returns the
|
||||
original live result; reuse with different input returns `Conflict`; replay
|
||||
after the resource has expired returns `Expired` until the bounded idempotency
|
||||
record itself expires.
|
||||
record itself expires. Configuration requires idempotency retention to cover
|
||||
every listing and attempt lifetime, preventing a live duplicate after eviction.
|
||||
- Lease renewal is compare-and-swap by version. A stale renewal returns the latest
|
||||
version as `Conflict`. Renew/delete races are serialized: renewal either commits
|
||||
before deletion or observes the listing as absent.
|
||||
|
||||
Reference in New Issue
Block a user