ModelObjects
This is the main build block for all objects, it contains a reference to the assosicated xml object (loaded from the metadata) and is also Annotatable, Workable, FileHolder, Stateful, Propogatable, Ownable.
NamedModelObject
Is a ModelObject that is unqiuely named (such as a workspace or module or project or repository or ...)
Annotatable
Can contain a list of 'info', 'warn', 'error' text messages.
Workable
Can be worked on (typically by launched commands)
FileHolder
Can contain a list of file references (directories or files).
Stateful
Holds 'state' (succeeded, failed) and 'reason' (if not Unset, e.g. 'build failed').
Propogatable
Can propogate state changes.
Ownable
Is owned by something, and knows who it's owner is