aboutsummaryrefslogtreecommitdiffstats
path: root/src/remake/switch.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-11-08 09:47:11 +0000
committertv <tv@krebsco.de>2026-11-08 14:29:04 +0100
commit23f0b629e5d80f880e5a0809f2e47b2d836ee2f9 (patch)
treeb1efd4f1e9a33bc9e5f21e27996ea44fd9603230 /src/remake/switch.rs
parente63984e99bef66cb05d7bcf781812ea5e6276fa8 (diff)
remake: replays judged before they go in
A switching or rejoining node replays late writes as fresh changes naming each write's user, and nothing judged them before they left: a replay every node would refuse (a revoked capability, a second envelope at a signed path, readers changed) was refused everywhere, and with it everything the node wrote after it. Under a policy, replay_newest now judges each group it commits as every node will (rules::judge_held, in the new epoch); one they would refuse is taken back (forked at the heads before it, same actor) and its paths quarantined with the reason. replay_newest takes the epoch. Review finding 3 (remake replays).
Diffstat (limited to 'src/remake/switch.rs')
-rw-r--r--src/remake/switch.rs2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/remake/switch.rs b/src/remake/switch.rs
index dd08b38..34c492f 100644
--- a/src/remake/switch.rs
+++ b/src/remake/switch.rs
@@ -255,6 +255,7 @@ async fn switch<H: Host>(
&base,
&heads,
&mut doc,
+ expected,
&node,
&translator,
superseded,
@@ -328,6 +329,7 @@ pub(super) async fn swap_in<H: Host>(
&copy_heads,
&live_heads,
&mut new_doc,
+ target,
&node,
&translator,
superseded,