A unique Artifact (http://en.wikipedia.org/wiki/Artifact_(software_development)) in software engineering is identified by a composite key made up of the name of the artifact and also the version. Using this key you can safely identify two different artifacts. In Chef a Cookbook is an artifact.
It has been a common pattern to store your cookbooks in a single "Chef Repository" that resides in a version control system and this has been the authoritative source for all Cookbook s that enter your Chef Server. Using this pattern all cookbooks would be identified by the directory that they reside in since we were jamming all of our cookbooks into the same place.
With the introduction of Berkshelf and Test Kitchen we now have a common pattern emerging where Cookbooks are contained in their own version control repository and iterated on in isolation. This means that the directory containing our cookbook may or may not be the same name as the contents inside. This poses a problem because the name of the Cookbook is inferred by the name of the directory containing it at runtime.
We should make the 'name' attribute in a Cookbook's metadata file a required attribute. This will ensure that half of the composite key making up our artifact identifier is not dynamically generated at runtime based on the location of the cookbook on our file system.
This change would require all cookbooks to be updated that do not currently specify a value for the name attribute.