Maybe it's something as dumb as the difference in filemtime between Gemfile and Gemfile.lock?
I thought that initially, but as I noted in my response to Fred that
is not sufficient as it would appear that it needs to remember the
version spec for each gem. See my reply to Fred for my current
As far as I know, here's how it works (all supposition, BTW):
First bundle install, you get a new Gemfile.lock, which includes the actual installed versions of all the gems. At this point the Gemfile.lock is definitely newer (in filesystem age) than the Gemfile. Now you update your Gemfile, and the next time you try to run, the bundler notices that the Gemfile is newer than the Gemfile.lock. So it bugs you to run bundle install. That replaces the Gemfile.lock with a new copy, which at that time is now newer than the Gemfile, and the circle is complete.