Once the compilation has succeeded, the master hands out the catalog and the agent enters the catalog validation phase. Each resource type can define some Ruby methods that ensure that the passed values make sense. This happens on two levels of granularity: Each attribute can validate its input value, and then the resource as a whole can be checked for consistency.
One example of attribute value validation can be found in the ssh_authorized_key resource type. A resource of this type fails if its key value contains a whitespace character because SSH keys cannot comprise multiple strings.
Validation of whole resources happens with the cron type, for example. It makes sure that the time fields make sense together. The following resource would not pass, because special times, such as midgnight, cannot be combined with numeric fields...