Conversation
osmaczko
force-pushed
the
repro/199
branch
2 times, most recently
from
August 19, 2026 19:29
af89659 to
d0f5d8b
Compare
A GroupV2 group forks on the first member added after a voted steward election: the joiner missed the election, keeps serving the steward list from before it, and rejects the elected steward's next commit, so the group splits into branches that never converge again. vacp2p/de-mls#147 closes that. The epoch steward re-shares the elected list once an election ends, a member left without a usable list asks for one, and a consensus session is freed as soon as its outcome is recorded.
A forked group keeps reporting a healthy roster, so a growth test that compares member counts walks straight past the split. What the members on either branch cannot do is read each other's posts. The tests grow a group the way people do, one member at a time and five at a time, and after every add require that every joined member reports the same roster and reads what the others post. The harness can now be told to keep a client running when it rejects an inbound payload, the way a production client does with `Event::InboundError`, so a split group reports who ended up on which branch instead of stopping at the first rejection.
osmaczko
marked this pull request as ready for review
August 21, 2026 07:07
Stable clippy rejects `chunks_exact` with a constant size in favour of `as_chunks`, which fails the lint job for the whole workspace, and reading fixed arrays out of the slice drops the length check the old code carried as an `expect`.
This was referenced Aug 21, 2026
Draft
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
chore(deps): bump de-mls to the join-time fork fix
A GroupV2 group forks on the first member added after a voted steward election: the joiner missed the election, keeps serving the steward list from before it, and rejects the elected steward's next commit, so the group splits into branches that never converge again.
vacp2p/de-mls#147 closes that. The epoch steward re-shares the elected list once an election ends, a member left without a usable list asks for one, and a consensus session is freed as soon as its outcome is recorded.
test: cover GroupV2 group growth against forks
A forked group keeps reporting a healthy roster, so a growth test that compares member counts walks straight past the split. What the members on either branch cannot do is read each other's posts.
The tests grow a group the way people do, one member at a time and five at a time, and after every add require that every joined member reports the same roster and reads what the others post.
The harness can now be told to keep a client running when it rejects an inbound payload, the way a production client does with
Event::InboundError, so a split group reports who ended up on which branch instead of stopping at the first rejection.chore: walk the device bundle in fixed-size chunks
Stable clippy rejects
chunks_exactwith a constant size in favour ofas_chunks, which fails the lint job for the whole workspace, and reading fixed arrays out of the slice drops the length check the old code carried as anexpect.Closes #199.