Skip to content

Assert the leader domain in Sailfish - #242

Merged
lemmy merged 1 commit into
tlaplus:masterfrom
Qian-Cheng-nju:sailfish-leader-domain
Oct 21, 2026
Merged

lemmy merged 1 commit into
tlaplus:masterfrom
Qian-Cheng-nju:sailfish-leader-domain

Conversation

@Qian-Cheng-nju

Copy link
Copy Markdown
Contributor

LeadersAreNodes is declared in BlockDag, but INSTANCE BlockDag does not assert it in Sailfish. The two TLC wrappers already check it explicitly; the standalone specification does not.

A one-node instance shows the gap:

N == {a}
F == {}
R == 1..3
GST == 0
Leader(r) == b
IsQuorum(Q) == a \in Q
IsBlocking(B) == a \in B

With a and b distinct, this satisfies Sailfish's other assumptions. Node a reaches round 3 with an empty log, violating Liveness because the designated round-1 leader b never had a vertex.

Assert the existing LeadersAreNodes definition after the instance. TLC then rejects this configuration before initialization. Changing the leader to a still reaches round 3 and commits <<a,1>>; TLCSailfish1 also passes with unchanged state counts.

Signed-off-by: Qian-Cheng-nju <Qian-Cheng-nju@users.noreply.github.com>
@lemmy
lemmy merged commit 75a02bf into tlaplus:master Oct 21, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants