sig
  type t = Project.t
  val v :
    ?exists:bool Conf.value ->
    ?args:Args.t ->
    ?schemes:Conf.scheme list ->
    string -> parts:[< part_kind ] part list -> project
  val name : project -> string
  val exists : Assemblage.project -> bool Assemblage.Private.Conf.value
  val args : Assemblage.project -> Assemblage.Private.Args.t
  val schemes : Assemblage.project -> Assemblage.Private.Conf.scheme list
  val parts : Assemblage.project -> Assemblage.part_kind Assemblage.part list
  val deps : Assemblage.project -> Assemblage.Private.Conf.Key.Set.t
  val conf : Assemblage.project -> Assemblage.Private.Conf.t
  val with_conf :
    Assemblage.project -> Assemblage.Private.Conf.t -> Assemblage.project
  val eval : Assemblage.project -> 'Assemblage.Private.Conf.value -> 'a
  val eval_key : Assemblage.project -> 'Assemblage.Private.Conf.key -> 'a
  val version : Assemblage.project -> string
  val products :
    ?kind:[ `Any | `Input | `Output | `Source ] ->
    Assemblage.project -> Assemblage.Path.Set.t
  val watermark_string : ?suffix:string -> t -> string
  val pp_signature : Format.formatter -> t -> unit
  val list : unit -> Assemblage.project list
end