mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
Test 29 asserted that wn reaches amy's post-disband epoch within one fixed window. That is stricter than the protocol promises, and it failed on a full-suite run for a case `group-lifecycle-v1.md` explicitly allows. MDK rotates its own leaf shortly after joining, so it can commit between the epoch-agreement gate and amy's disband — and then the two have forked. What the spec guarantees from there is not "the disband lands first time" but that the REQUEST survives, is regenerated against whichever branch was selected, and lands eventually. The old assertion could only pass in the race-free case, and a busier machine widens the race. The loop now re-reads AMY's epoch each round, because regeneration advances it, and drives amy's own sync, which is what carries a pass to settlement and re-issues a disband that lost. It also adds a check the old version lacked: once the two agree, amy must still read the group as disbanded. "Epochs agree but the group is live" is the outcome actually worth catching, and counting epochs alone never would have. Evidence this is a race and not a regression from the audit fixes: the two commits in the failing window carry different `h` tags, so they are commits in two different groups rather than a fork, and the test passes in isolation (`epoch 1 -> 2, wn at 2`). A full run with this change is the confirmation and is not in yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016kCuA6tc4JQzHPCDd39GHq