Firebase child_added + limit() + transaction() behaving unexpectedly

I have a worker queue that waits for items and processes them as they come in. Here is a simplified version that creates 3 pieces of work and processes them:

firebaseRef = '_fiddle1';
data = new Firebase('https://fiddles.firebaseIO.com/HQyac/' + firebaseRef + '/data');
workers = new Firebase('https://fiddles.firebaseIO.com/HQyac/' + firebaseRef + '/workers');

// clear all data
data.remove();
workers.remove();

// listen for new work
workers.limit(1).on('child_added', function (snapshot) {
    var workerName = snapshot.name();
    var workerVal = snapshot.val();
    console.log('INVOKED: ', workerVal + ' [' + workerName + ']');

    // increment counter as example work
    data.child(workerVal).transaction(function (tran) {
        return tran + 1;
    }, function (error, committed, snapshot2) {
        console.log('COMMITTED: ', snapshot2.name() + ' = ' + snapshot2.val() + ' [' + workerName + ']');
        workers.child(workerName).remove();
    }, false);
});

// create work
workers.push('WORKER1');
workers.push('WORKER2');
workers.push('WORKER3');

Here is a fiddle of the same code. If you run it, however, work is performed 4 times, rather than the expected 3 times, with 'WORKER2' always being processed twice (see console). If you open the firebase you can see the same.

There is a simple fix/workaround for this: simply omit "limit(1)" from the work listener:

workers.on('child_added', function (snapshot) {

If you run it with that modification, workers run 3 times as expected.

Is this a bug?