the specification points out that retention policies and holds may be applied
to any node in the repository. while i see a potential use case for this, i
think the specification is not sufficiently precise:
a) there is a distinction between nodes that are 'protected' according
to the child node definition applied and the version storage that is
defined to be read-only.
b) adding a mixin node type to a node is a transient write operation and
(as far is i know) can neither be applied to a protected node (->see
canAddMixin(String mixinName)) nor to any node in the version storage.
from my understanding applying a retention policy or a hold to a protected node
or to a node in the version storage is therefore only possible if the mixin type
mix:managedRetention forms part of the primary nodetype definition (i.e. is a
super type or an inherited super type). it would however not be possible to add
the mix:managedRetention manually by calling Node.addMixin(String).
and I am not totally sure if the following sentence of the specification is in
accordance with my understanding:
"Retention and hold may be applied to any node in any workspace (
including nodes in version and other system storage areas), subject
to implementation-specific restrictions on the assignment of node types."