sig
  type id = [ `Task ] Id.t
  type t
  type repo = string * Uri.t
  val pp_repo : Task.repo Fmt.t
  type pin = string * Uri.t option
  val pp_pin : Task.pin Fmt.t
  val id : Task.t -> Task.id
  val packages : Task.t -> Package.t list
  val create :
    ?repos:Task.repo list ->
    ?pins:Task.pin list ->
    ?switches:Switch.t list -> ?hosts:Host.t list -> Package.t list -> Task.t
  val equal : Task.t -> Task.t -> bool
  val compare : Task.t -> Task.t -> int
  val pp : Task.t Fmt.t
  val json : Task.t Jsont.codec
  type status = [ `Cancelled | `Failure | `New | `Pending | `Success ]
  val pp_status : Task.status Fmt.t
  val json_status : Task.status Jsont.codec
end