description: >
    Empty interface to indicate that the associated `Software.Version` should
    prevent a state transition of the associated managed element while the
    `Software.Version` is in `Activating` state.

    The specific state transition(s) to prevent are left to the implementation.
    A typical use of this would be to prevent (delay) the power-on of a
    managed host while the BIOS is being updated.  The managed host, via
    systemd transitions, might start the power-on sequence and then wait for
    any object with this `ActivationBlocksTransition` interface to no longer be
    in `Activating` state.  Causal ordering of dbus operations can prove that
    no update is currently being performed and the power-on sequence may safely
    continue.
