push commit into a run loop to avoid isDirty strangeness