feat(verify): expand formal verification to 7 specs, add versioning, CI integration
Added 3 new TLA+ specs: - gossip.tla — SWIM gossip membership & failure detection - deadlock.tla — wait-for graph deadlock detection - sharding.tla — consistent hashing shard assignment Improved existing 4 specs: - raft.tla: added CommittedIndexValid invariant - twopc.tla: added CoordinatorConsistency, NoDecideWithoutConsensus, ParticipantStateValid; increased to MaxTxnId=3 - mvcc.tla: added CommittedMustStart, CommittedVersionsUnique - replication.tla: added AppliedLteCurrent, SemiSyncQuorum Infrastructure: - VERSION file (1.0.0) - CHANGELOG.md - ANALYSIS.md (weak spots & improvement plan) - run_all.sh script for batch TLC verification - CI verify job in GitHub Actions - Updated README with new specs and properties Total: 7 specs, 26 invariants, 11.6M states checked, 0 errors
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
CONSTANTS
|
||||
TxnIds = {t1, t2, t3, t4, t5}
|
||||
MaxEdges = 8
|
||||
Nil = Nil
|
||||
|
||||
INIT Init
|
||||
NEXT Next
|
||||
|
||||
CHECK_DEADLOCK FALSE
|
||||
|
||||
INVARIANTS
|
||||
TypeOk
|
||||
GraphIntegrity
|
||||
NoSelfLoops
|
||||
@@ -0,0 +1,15 @@
|
||||
CONSTANTS
|
||||
Nodes = {n1, n2, n3}
|
||||
Nil = Nil
|
||||
MaxIncarnation = 3
|
||||
|
||||
INIT Init
|
||||
NEXT Next
|
||||
|
||||
CHECK_DEADLOCK FALSE
|
||||
|
||||
INVARIANTS
|
||||
TypeOk
|
||||
AliveNotFalselyDead
|
||||
IncarnationMonotonic
|
||||
DeadConsistency
|
||||
@@ -14,3 +14,5 @@ INVARIANTS
|
||||
NoDirtyReads
|
||||
ReadOwnWrites
|
||||
WriteWriteConflict
|
||||
CommittedMustStart
|
||||
CommittedVersionsUnique
|
||||
|
||||
@@ -12,4 +12,6 @@ CHECK_DEADLOCK FALSE
|
||||
INVARIANTS
|
||||
TypeOk
|
||||
ElectionSafety
|
||||
LeaderAppendOnly
|
||||
StateMachineSafety
|
||||
CommittedIndexValid
|
||||
|
||||
@@ -12,6 +12,7 @@ INVARIANTS
|
||||
TypeOk
|
||||
AcksRemovePending
|
||||
PendingAreKnown
|
||||
AppliedLteCurrent
|
||||
|
||||
PROPERTIES
|
||||
MonotonicLsn
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
CONSTANTS
|
||||
Shards = {s1, s2, s3}
|
||||
Vnodes = {1, 2, 3, 4, 5}
|
||||
Nodes = {n1, n2}
|
||||
MaxVnode = 5
|
||||
Nil = Nil
|
||||
|
||||
INIT Init
|
||||
NEXT Next
|
||||
|
||||
CHECK_DEADLOCK FALSE
|
||||
|
||||
INVARIANTS
|
||||
TypeOk
|
||||
VirtualNodeMapping
|
||||
NodeAssignmentConsistency
|
||||
VnodeOrdering
|
||||
@@ -1,7 +1,7 @@
|
||||
CONSTANTS
|
||||
Participants = {p1, p2, p3}
|
||||
Nil = Nil
|
||||
MaxTxnId = 2
|
||||
MaxTxnId = 3
|
||||
|
||||
INIT Init
|
||||
NEXT Next
|
||||
@@ -12,3 +12,6 @@ INVARIANTS
|
||||
TypeOk
|
||||
Atomicity
|
||||
NoOrphanBlocks
|
||||
CoordinatorConsistency
|
||||
NoDecideWithoutConsensus
|
||||
ParticipantStateValid
|
||||
|
||||
Reference in New Issue
Block a user