sig
  type failure_reason
  type progress = [ `Changed_state | `No_change ]
  type 'a transition_callback =
      ?log:string ->
      '-> Ketrew_pure.Target.t * Ketrew_pure.Target.Automaton.progress
  type severity = [ `Fatal | `Try_again ]
  type bookkeeping = { plugin_name : string; run_parameters : string; }
  type long_running_failure =
      Ketrew_pure.Target.Automaton.severity * string *
      Ketrew_pure.Target.Automaton.bookkeeping
  type long_running_action =
      (Ketrew_pure.Target.Automaton.bookkeeping,
       Ketrew_pure.Target.Automaton.long_running_failure)
      Pvem.Result.t
  type process_check =
      [ `Still_running of Ketrew_pure.Target.Automaton.bookkeeping
      | `Successful of Ketrew_pure.Target.Automaton.bookkeeping ]
  type process_status_check =
      (Ketrew_pure.Target.Automaton.process_check,
       Ketrew_pure.Target.Automaton.long_running_failure)
      Pvem.Result.t
  type condition_evaluation =
      (bool, Ketrew_pure.Target.Automaton.severity * string) Pvem.Result.t
  type dependencies_status =
      [ `All_succeeded
      | `At_least_one_failed of Ketrew_pure.Target.id list
      | `Still_processing ]
  type transition =
      [ `Activate of
          Ketrew_pure.Target.id list *
          unit Ketrew_pure.Target.Automaton.transition_callback
      | `Check_and_activate_dependencies of
          Ketrew_pure.Target.Automaton.dependencies_status
          Ketrew_pure.Target.Automaton.transition_callback
      | `Check_process of
          Ketrew_pure.Target.Automaton.bookkeeping *
          Ketrew_pure.Target.Automaton.process_status_check
          Ketrew_pure.Target.Automaton.transition_callback
      | `Do_nothing of unit Ketrew_pure.Target.Automaton.transition_callback
      | `Eval_condition of
          Ketrew_pure.Target.Condition.t *
          Ketrew_pure.Target.Automaton.condition_evaluation
          Ketrew_pure.Target.Automaton.transition_callback
      | `Kill of
          Ketrew_pure.Target.Automaton.bookkeeping *
          Ketrew_pure.Target.Automaton.long_running_action
          Ketrew_pure.Target.Automaton.transition_callback
      | `Start_running of
          Ketrew_pure.Target.Automaton.bookkeeping *
          Ketrew_pure.Target.Automaton.long_running_action
          Ketrew_pure.Target.Automaton.transition_callback ]
  val transition :
    Ketrew_pure.Target.t -> Ketrew_pure.Target.Automaton.transition
end