I am not sure if "SPECIAL" (also know as "magic") words in the require="" variable are a good idea.
I see that we are creating requirements and thus it fits. Maybe I would already be happy with something like "PREVIOUSOBJECT" (which makes things a bit more clear), but I also consider using a different variable, so require="" does not get mixed up.

I am wondering what would be the best way to prevent clashes with possible existing type names. We all know that every cdist types starts with __, but we are not preventing any user to create a type named "CDIST_HONOR_MANIFEST_ORDER" or
"PREVIOUSOBJECT". It may sound stupid, but I try to foresee possible problems.

For me it is important to stay as clean and consistent as possible and to avoid breaking things beforehand.

Just some thoughts I want to make sure are included into this before merging.