sig
  type id = [ `Job ] Id.t
  type t
  val create :
    ?inputs:Job.id list ->
    Host.t -> Switch.t -> (Package.t * Package.info) list -> Job.t
  val id : Job.t -> Job.id
  val switch : Job.t -> Switch.t
  val host : Job.t -> Host.t
  val inputs : Job.t -> Job.id list
  val packages : Job.t -> (Package.t * Package.info) list
  val equal : Job.t -> Job.t -> bool
  val compare : Job.t -> Job.t -> int
  val json : Job.t Jsont.codec
  val pp : Job.t Fmt.t
  type status =
      [ `Cancelled | `Failure | `Pending | `Runnable | `Running | `Success ]
  val json_status : Job.status Jsont.codec
  val pp_status : Job.status Fmt.t
  val task_status : Job.status list -> Task.status
end