Abstract endpoint-specific mutation rejections

This commit is contained in:
ms2k 2026-07-13 18:36:32 +09:00
commit 78be27871c

View file

@ -7,7 +7,7 @@ EXTENDS Naturals, FiniteSets
CONSTANTS
OperationScopes, EligibilityClaims, OperationIds, MutationKinds,
Fingerprints, NoEligibility, NoRecord, NoObservation,
Accepted, PreconditionFailed,
Accepted, Rejected,
FirstObservation, ReplayObservation, ConflictObservation
ASSUME
@ -26,8 +26,10 @@ Requests ==
kind : MutationKinds,
fingerprint : Fingerprints]
\* Rejected abstracts endpoint-specific idempotency_conflict and
\* precondition_failed responses exercised by the executable contract.
Responses ==
[status : {Accepted, PreconditionFailed},
[status : {Accepted, Rejected},
revision : 0..Cardinality(Identities)]
Records == [request : Requests, response : Responses]
@ -60,7 +62,7 @@ FirstRequest(request) ==
accepted == Eligible(request)
nextRevision == IF accepted THEN revision + 1 ELSE revision
response ==
[status |-> IF accepted THEN Accepted ELSE PreconditionFailed,
[status |-> IF accepted THEN Accepted ELSE Rejected,
revision |-> nextRevision]
record == [request |-> request, response |-> response]
IN /\ records[identity] = NoRecord
@ -89,7 +91,7 @@ ConflictRequest(request) ==
LET identity == Identity(request)
record == records[identity]
response ==
[status |-> PreconditionFailed, revision |-> revision]
[status |-> Rejected, revision |-> revision]
IN /\ record # NoRecord
/\ record.request # request
/\ observation' =
@ -144,7 +146,7 @@ ObservationConsistent ==
/\ record.response = observation.response
[] observation.disposition = ConflictObservation ->
/\ record.request # observation.request
/\ observation.response.status = PreconditionFailed
/\ observation.response.status = Rejected
RecordsAppendOnlyAction ==
\A identity \in Identities :