> Ok, but it that case the :wait_for_delay is not really a good arguments name, right? 
> Re-poping only once after the delay looks fine with :wait_for_delay name, if it's not enough you should just increase the delay no?

So you're saying we should do another nested loop?

    until any changes, wait X
    then until no changes, wait Y

> I'm not a big fan of the _smoosh_changes method, looks to complex for me. 

It's complex because the data structure is pretty weird -- we keep going back and forth between arrays and hashes and arrays-of-hashes. I thought I'd convert from array to hash right at the end before calling the callback, which allows us to say `changes.empty?` instead of `changes.all? { |_,v| v.empty? }` (which I for one found difficult to understand at first).

I'd be ok with changing it back but, silly name aside, I think the "smoosh" method makes things clearer.

> Updating _pop_changes() with _pop_changes(changes = { modified: [], added: [], removed: [] }) should be good no?

Yeah, this too -- I personally find `_pop_changes()` much clearer than `_pop_changes(changes = { modified: [], added: [], removed: [] })` :-)