The whyrun stuff has lots of inline code docs starting here: https://github.com/opscode/chef/blob/master/lib/chef/mixin/why_run.rb#L63

Basically, the requirements stuff has two purposes: it can declare a requirement that needs to be met in order for `load_current_resource` to work, which usually refers to some sort of system state. For example, a service resource usually needs an init script to run in order to query the service status. If that script doesn't exist, then the service resource can't succeed, so in normal mode, this is an error. In whyrun mode, however, Chef is no-op-ing, so it could be the case that a package or file resource that appears earlier in your recipe would have created the init script and therefore your recipe would work fine in normal mode. The whyrun message explains to the user what requirement wasn't met. The other usage of the requirements stuff is to detect when a resource as specified couldn't ever possibly work (e.g., what you're addressing in this pull request). In this case we really want to raise an error even in whyrun mode because the resource as written is just wrong.