Summary
This issue lists liveness and recovery defects in the keyshare and aggregator actors. Each item was checked against main at 29fbd7152 on 2026-09-30. Unless noted, the same code is in v0.17.0 and v0.18.0.
Expulsions
Aggregator failover
Error handling
Restart
Summary
This issue lists liveness and recovery defects in the keyshare and aggregator actors. Each item was checked against
mainat29fbd7152on 2026-09-30. Unless noted, the same code is in v0.17.0 and v0.18.0.Expulsions
crates/keyshare/src/threshold_keyshare/effects/coordinate_collectors.rs:34) and the encryption-key collector (:109) start with every party still to do.:220). A collector created after an expulsion therefore waits for the expelled party until its cutoff.effects/recovery.rs:306).effects/recovery.rs:188). But it compares them with the saved batch, which still includes those parties (:194):available.len() <= current.len() || !current.is_subset(&available).:110.effects/coordinate_roster.rs:50), but the extension check compares against the whole previously published Ready (:87).candidate.len() > existing.len() && existing.iter().all(|d| candidate.contains(d))(:499).:194).roster.rs:95).Aggregator failover
crates/sortition/src/ciphernode_selection/actor.rs:89;failover.rs:148,:170,:234).crates/aggregator/src/public_key_aggregation/handlers.rs:202,:221,:259).crates/evm/src/ciphernode_registry/handlers.rs:513,:533).plaintext_aggregation/actor.rs:208). The public-key path needs the same treatment in the actor and in both writer gates.Error handling
Results are discarded (medium).effects/route_events.rs:23drops the result of saving the aggregated public key and the decryption domain.:34,:71,:75and:78drop the share, encryption-key, C1-signing and DKG-proof handler results.coordinate_collectors.rs:205drops the result of saving the expelled and honest parties.crates/data/src/persistable.rs:174-231) also skips the in-memory update. Decryption later needs the saved public key and domain (create_decryption_share.rs:140).trapwith their event context, and make intentional no-ops returnOkexplicitly.Restart
mainonly).remember_decryption_share(crates/net/src/network_sync/effects/rebroadcast.rs:192). That function does not check whether the E3 has ended (:38).:77) of up to 8 hours (actor.rs:82).