Skip to content

fix: bump de-mls to the join-time fork fix, with a scale regression test - #216

Open
osmaczko wants to merge 3 commits into
mainfrom
repro/199
Open

fix: bump de-mls to the join-time fork fix, with a scale regression test#216
osmaczko wants to merge 3 commits into
mainfrom
repro/199

Conversation

@osmaczko

@osmaczko osmaczko commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

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_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.

Closes #199.

@osmaczko
osmaczko force-pushed the repro/199 branch 2 times, most recently from af89659 to d0f5d8b Compare August 19, 2026 19:29
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.
@osmaczko osmaczko changed the title test: regression for the GroupV2 fork at scale (#199, do not merge) fix: bump de-mls to the join-time fork fix, with a scale regression test Aug 21, 2026
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
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`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GroupChats limited to 20 participants

2 participants