(** Parsing commit messages and Conventional Commits metadata. *) type t = { summary : string; body : string } val parse : string option -> t (** Extract the summary line and body from a raw commit message. *) val parse_conventional : string -> string option * string (** Split a Conventional Commits subject into [(Some type, title)] or [(None, original)] when the prefix is unrecognised. *)