Test Details Overview

Stabilise flaky active_elections.fork_replacement_tally (#5091)

The test gated on election->votes ().size () == max_blocks before counting
representative votes, and timed out (seen on macOS/Windows) once that size
exceeded max_blocks. votes () returns last_votes, keyed by account, not by
retained block: replace_by_weight evicts a fork via remove_block and erases
the votes present at that moment, but a fork's cached vote can be applied
after the fork has already been evicted, leaving an orphan vote that is never
cleaned. On slow runners these orphans accumulate, so votes ().size () settles
above max_blocks permanently and the equality never holds.

Count only representatives whose vote still points at a block retained in the
election, which is the stable quantity the test means to assert (the highest
-weight forks that survived replacement), and drop the votes ().size () gate;
election->blocks ().size () == max_blocks is already asserted separately.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

__________

Type: commit

Hash: 6acad638498d3f152ef6164f72bee7182aa32e35

Created: today

__________

gr0v1ty/nano-node:6acad638498d3f152ef6164f72bee7182aa32e35

Test Results

Test Case Status Duration Median Deviation Log Graph
5n4pr_conf_10k_bintree PASS 107 s -2.5 s - Show
5n4pr_conf_10k_change PASS 147 s -47.0 s - Show
5n4pr_conf_change_dependant PASS 118 s 8.5 s - -
5n4pr_conf_change_independant PASS 106 s -3.0 s - -
5n4pr_conf_send_dependant PASS 108 s -3.0 s - -
5n4pr_conf_send_independant PASS 110 s -1.0 s - -
5n4pr_rocks_10k_bintree PASS 112 s -1.5 s - -
5n4pr_rocks_10k_change PASS 217 s 50.0 s - -