A good analogy would be developing a Ruby app (puppet-skeleton) versus a Rubygem (puppet-module-skeleton):

["Do not check your Gemfile.lock into version control, since it enforces precision that does not exist in the gem command, which is used to install gems in practice"](http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/)

We also ensure that `Gemfile.lock` doesn't exist before each Travis CI run so that matrix builds with different versions work.