I think `playback!` here is problematic.  Besides updating the state so it knows the message has been received, it can also change how the object responds, right?  For example, I think this spec would fail:

``` ruby
expect_any_instance_of(Object).to receive(:foo)
object = Object.new
allow(object).to receive(:foo).and_return(3)
expect(object.foo).to eq(3)
expect(object.foo).to eq(3)
```

I haven't actually tried that against your branch but I think that `object.foo` will be changed to return `nil` due to the playback.  Would be good to add a failing spec like this and change this so that it notates the received message but doesn't do any playback.