Actually acknowledgement happens in two ways (based on which ever happens first).
1. Based on the prefetch (or credit window)
2. Based on the ack-flusher thread
First of all, the current behaviour is incorrect as it's the same as DUPS ok.
The first method was to ack every time the number of unacked messages exceeded more than half the credit window (or prefetch value). I don't know the reasons behind why it was done this way. I am guessing performance.
The second method was added by myself as I found when there is a large prefetch window, but with very slow message flows, no acks are sent at all. And often when the client fails over all most all messages are replayed. The ack flusher thread prevented that from happening.
When we fix this issue, we would need to ensure we consider performance. We should also make some noise about this change in the release notes to ensure we don't catch any folks by surprise.