diff --git a/dune-project b/dune-project
index bd53414f..539173ee 100644
--- a/dune-project
+++ b/dune-project
@@ -51,10 +51,10 @@
    (>= v0.16))
   (ppx_sexp_conv
    (>= v0.16))
-  (ppx_sexp_value
-   (>= v0.16))
   (ppxlib
-   (>= 0.33))))
+   (>= 0.33))
+  (sexplib0
+   (>= v0.16))))
 
 (package
  (name volgo-base)
diff --git a/example/hello_error.ml b/example/hello_error.ml
index 5948e186..e217b81c 100644
--- a/example/hello_error.ml
+++ b/example/hello_error.ml
@@ -41,7 +41,7 @@ let%expect_test "hello error" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
@@ -59,7 +59,7 @@ let%expect_test "hello error" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
@@ -76,7 +76,7 @@ let%expect_test "hello error" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
@@ -94,7 +94,7 @@ let%expect_test "hello error" =
     {|
     (Vcs (
       (context
-        (Vcs.init ((path /invalid/path)))
+        (Vcs.init (path /invalid/path))
         ((prog git)
          (args (init .))
          (exit_status Unknown)
diff --git a/example/hello_git_cli.ml b/example/hello_git_cli.ml
index 546b0987..ae5306f3 100644
--- a/example/hello_git_cli.ml
+++ b/example/hello_git_cli.ml
@@ -107,7 +107,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog git)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -137,7 +137,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog git)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -163,7 +163,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog git)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -193,7 +193,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog git)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -227,7 +227,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root /bogus) (args (rev-parse --abbrev-ref HEAD))))
+       (Vcs.git (repo_root /bogus) (args (rev-parse --abbrev-ref HEAD)))
        ((prog git)
         (args (rev-parse --abbrev-ref HEAD))
         (exit_status Unknown)
@@ -263,7 +263,7 @@ let%expect_test "hello cli" =
     {|
     (Error (
       (context
-        (Vcs.git ((repo_root /bogus) (args (rev-parse --abbrev-ref HEAD))))
+        (Vcs.git (repo_root /bogus) (args (rev-parse --abbrev-ref HEAD)))
         ((prog git)
          (args (rev-parse --abbrev-ref HEAD))
          (exit_status Unknown)
@@ -285,7 +285,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse --abbrev-ref bogus))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse --abbrev-ref bogus)))
        ((prog git)
         (args (rev-parse --abbrev-ref bogus))
         (exit_status (Exited 128))
@@ -321,7 +321,7 @@ let%expect_test "hello cli" =
     {|
     (Error (
       (context
-        (Vcs.git ((repo_root /bogus) (args (rev-parse --abbrev-ref HEAD))))
+        (Vcs.git (repo_root /bogus) (args (rev-parse --abbrev-ref HEAD)))
         ((prog git)
          (args (rev-parse --abbrev-ref HEAD))
          (exit_status Unknown)
@@ -362,7 +362,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse --abbrev-ref HEAD))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse --abbrev-ref HEAD)))
        ((prog git)
         (args (rev-parse --abbrev-ref HEAD))
         (exit_status Unknown)
@@ -375,7 +375,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse --abbrev-ref bogus))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse --abbrev-ref bogus)))
        ((prog git)
         (args (rev-parse --abbrev-ref bogus))
         (exit_status (Exited 128))
diff --git a/example/hello_vcs_git_unix.ml b/example/hello_vcs_git_unix.ml
index c8f13d45..cf9af8bf 100644
--- a/example/hello_vcs_git_unix.ml
+++ b/example/hello_vcs_git_unix.ml
@@ -73,7 +73,7 @@ let%expect_test "hello commit" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root /invalid/path) (args ())))
+       (Vcs.git (repo_root /invalid/path) (args ()))
        ((prog <REDACTED>)
         (args ())
         (exit_status Unknown)
@@ -100,7 +100,7 @@ let%expect_test "hello commit" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
diff --git a/lib/vcs_test_helpers/test/test__vcs_test_helpers.ml b/lib/vcs_test_helpers/test/test__vcs_test_helpers.ml
index 6f41e058..96f3deb9 100644
--- a/lib/vcs_test_helpers/test/test__vcs_test_helpers.ml
+++ b/lib/vcs_test_helpers/test/test__vcs_test_helpers.ml
@@ -76,7 +76,7 @@ let%expect_test "redact_sexp" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
@@ -89,7 +89,7 @@ let%expect_test "redact_sexp" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
@@ -103,7 +103,7 @@ let%expect_test "redact_sexp" =
   [%expect
     {|
     ((context
-       (Vcs.init ((path /invalid/path)))
+       (Vcs.init (path /invalid/path))
        ((prog git)
         (args (init .))
         (exit_status Unknown)
diff --git a/lib/volgo/src/dune b/lib/volgo/src/dune
index dc63df46..20315de0 100644
--- a/lib/volgo/src/dune
+++ b/lib/volgo/src/dune
@@ -13,7 +13,14 @@
   Sexplib0
   -open
   Sexplib0.Sexp_conv)
- (libraries astring fpath fpath-sexp0 pp pplumbing.err pplumbing.pp-tty)
+ (libraries
+  astring
+  fpath
+  fpath-sexp0
+  pp
+  pplumbing.err
+  pplumbing.pp-tty
+  sexplib0)
  (modules
   (:standard \ stdlib_compat4xx stdlib_compat5xx))
  (instrumentation
@@ -27,11 +34,7 @@
   validated_string_intf
   vcs_intf)
  (preprocess
-  (pps
-   -unused-code-warnings=force
-   ppx_enumerate
-   ppx_sexp_conv
-   ppx_sexp_value)))
+  (pps -unused-code-warnings=force ppx_enumerate ppx_sexp_conv)))
 
 (rule
  (enabled_if
diff --git a/lib/volgo/src/graph.ml b/lib/volgo/src/graph.ml
index 9e77aca8..9d82cbfe 100644
--- a/lib/volgo/src/graph.ml
+++ b/lib/volgo/src/graph.ml
@@ -94,9 +94,11 @@ module T = struct
     type t = Node_kind.t array
 
     let sexp_of_t t =
-      Array.mapi t ~f:(fun i node -> i, node)
+      t
+      |> Array.mapi ~f:(fun node node_kind ->
+        Sexp.List [ node |> Node.sexp_of_t; node_kind |> Node_kind.sexp_of_t ])
       |> Array.rev
-      |> [%sexp_of: (Node.t * Node_kind.t) array]
+      |> Array.sexp_of_t Fun.id
     ;;
   end
 
@@ -107,8 +109,8 @@ module T = struct
       let revs = Rev_table.to_seq t |> Array.of_seq in
       Array.sort revs ~compare:(fun (_, n1) (_, n2) -> Int.compare n2 n1);
       revs
-      |> Array.map ~f:(fun (rev, index) -> index, rev)
-      |> [%sexp_of: (Node.t * Rev.t) array]
+      |> Array.sexp_of_t (fun (rev, index) ->
+        Sexp.List [ index |> Node.sexp_of_t; rev |> Rev.sexp_of_t ])
     ;;
   end
 
@@ -122,7 +124,10 @@ module T = struct
         |> Array.map ~f:(fun (n, refs) -> n, List.sort refs ~compare:Ref_kind.compare)
       in
       Array.sort revs ~compare:(fun (n1, _) (n2, _) -> Int.compare n2 n1);
-      revs |> [%sexp_of: (Node.t * Ref_kind.t list) array]
+      revs
+      |> Array.sexp_of_t (fun (node, ref_kinds) ->
+        Sexp.List
+          [ node |> Node.sexp_of_t; ref_kinds |> List.sexp_of_t Ref_kind.sexp_of_t ])
     ;;
   end
 
@@ -134,7 +139,11 @@ module T = struct
     }
 
   let sexp_of_t { nodes; revs; refs = _; reverse_refs } =
-    [%sexp { nodes : Nodes.t; revs : Revs.t; refs = (reverse_refs : Reverse_refs.t) }]
+    Sexp.List
+      [ sexp_field (module Nodes) "nodes" nodes
+      ; sexp_field (module Revs) "revs" revs
+      ; sexp_field (module Reverse_refs) "refs" reverse_refs
+      ]
   ;;
 end
 
@@ -234,7 +243,7 @@ let refs t =
 
 let set_ref t ~rev ~ref_kind =
   match Rev_table.find t.revs rev with
-  | None -> Err.raise [ Pp.text "Rev not found."; Err.sexp [%sexp (rev : Rev.t)] ]
+  | None -> Err.raise [ Pp.text "Rev not found."; Err.sexp (rev |> Rev.sexp_of_t) ]
   | Some index ->
     (match Ref_kind_table.find t.refs ref_kind with
      | None -> ()
@@ -283,7 +292,7 @@ let add_nodes t ~log =
       | Some node -> node
       | None ->
         Err.raise
-          [ Pp.text "Parent not found."; Err.sexp [%sexp (line : Log.Line.t)] ]
+          [ Pp.text "Parent not found."; Err.sexp (line |> Log.Line.sexp_of_t) ]
         [@coverage off]
     in
     match (line : Log.Line.t) with
@@ -316,7 +325,7 @@ let add_nodes t ~log =
       | None ->
         Err.raise
           [ Pp.text "Node not found during the building of new nodes (internal error)."
-          ; Err.sexp [%sexp { rev : Rev.t }]
+          ; Err.sexp (sexp_field (module Rev) "rev" rev)
           ] [@coverage off]
     in
     Queue.to_seq new_nodes
@@ -534,7 +543,11 @@ let check_index_exn t ~index =
   then
     Err.raise
       [ Pp.text "Node index out of bounds."
-      ; Err.sexp [%sexp { index : int; node_count : int }]
+      ; Err.sexp
+          (List
+             [ sexp_field (module Int) "index" index
+             ; sexp_field (module Int) "node_count" node_count
+             ])
       ]
 ;;
 
diff --git a/lib/volgo/src/import.ml b/lib/volgo/src/import.ml
index e673168f..935ae6a6 100644
--- a/lib/volgo/src/import.ml
+++ b/lib/volgo/src/import.ml
@@ -21,9 +21,24 @@
 
 open! Stdlib_compat
 
+module type To_sexpable = sig
+  type t
+
+  val sexp_of_t : t -> Sexp.t
+end
+
+let sexp_field' (type a) (sexp_of_a : a -> Sexp.t) field a =
+  Sexp.List [ Atom field; sexp_of_a a ]
+;;
+
+let sexp_field (type a) (module M : To_sexpable with type t = a) field a =
+  sexp_field' M.sexp_of_t field a
+;;
+
 module Array = struct
   include ArrayLabels
 
+  let sexp_of_t = Sexplib0.Sexp_conv.sexp_of_array
   let create ~len a = make len a
 
   let filter_mapi t ~f =
@@ -101,7 +116,13 @@ module Hashtbl = struct
 
     let add_exn t ~key ~data =
       if mem t key
-      then raise (E [%sexp "Hashtbl.add_exn: key already present", { key : H.t }])
+      then
+        raise
+          (E
+             (List
+                [ Atom "Hashtbl.add_exn: key already present"
+                ; sexp_field (module H) "key" key
+                ]))
       else add t ~key ~data
     ;;
 
@@ -158,11 +179,14 @@ module Int = struct
     aux 0 initial_skip_count;
     Buffer.contents buffer
   ;;
+
+  let sexp_of_t t = Sexp.Atom (to_string_hum t)
 end
 
 module List = struct
   include ListLabels
 
+  let sexp_of_t = Sexplib0.Sexp_conv.sexp_of_list
   let dedup_and_sort t ~compare = sort_uniq t ~cmp:compare
 
   let hd = function
@@ -179,6 +203,7 @@ end
 module Option = struct
   include Option
 
+  let sexp_of_t = Sexplib0.Sexp_conv.sexp_of_option
   let map t ~f = map f t
   let some_if cond a = if cond then Some a else None
 end
@@ -226,6 +251,7 @@ end
 module String = struct
   include StringLabels
 
+  let sexp_of_t = Sexplib0.Sexp_conv.sexp_of_string
   let to_string t = t
 
   let chop_prefix t ~prefix =
diff --git a/lib/volgo/src/import.mli b/lib/volgo/src/import.mli
index 52110901..ef245a90 100644
--- a/lib/volgo/src/import.mli
+++ b/lib/volgo/src/import.mli
@@ -24,6 +24,7 @@ open! Stdlib_compat
 module Array : sig
   include module type of ArrayLabels
 
+  val sexp_of_t : ('a -> Sexp.t) -> 'a t -> Sexp.t
   val create : len:int -> 'a -> 'a array
   val filter_mapi : 'a array -> f:(int -> 'a -> 'b option) -> 'b array
   val rev : 'a array -> 'a array
@@ -59,6 +60,7 @@ end
 module Int : sig
   include module type of Int
 
+  val sexp_of_t : t -> Sexp.t
   val incr : int ref -> unit
   val max_value : int
   val of_string : string -> int
@@ -69,6 +71,7 @@ end
 module List : sig
   include module type of ListLabels
 
+  val sexp_of_t : ('a -> Sexp.t) -> 'a t -> Sexp.t
   val dedup_and_sort : 'a list -> compare:('a -> 'a -> int) -> 'a list
   val filter_opt : 'a option list -> 'a list
   val find : 'a list -> f:('a -> bool) -> 'a option
@@ -80,6 +83,7 @@ end
 module Option : sig
   include module type of Option
 
+  val sexp_of_t : ('a -> Sexp.t) -> 'a t -> Sexp.t
   val map : 'a option -> f:('a -> 'b) -> 'b option
   val some_if : bool -> 'a -> 'a option
 end
@@ -117,6 +121,7 @@ end
 module String : sig
   include module type of StringLabels
 
+  val sexp_of_t : t -> Sexp.t
   val to_string : string -> string
   val chop_prefix : string -> prefix:string -> string option
   val chop_suffix : string -> suffix:string -> string option
@@ -138,3 +143,14 @@ val equal_int : int -> int -> bool
 val equal_string : string -> string -> bool
 val equal_list : ('a -> 'a -> bool) -> 'a list -> 'a list -> bool
 val hash_string : string -> int
+
+(** {1 Sexp helper} *)
+
+module type To_sexpable = sig
+  type t
+
+  val sexp_of_t : t -> Sexp.t
+end
+
+val sexp_field : (module To_sexpable with type t = 'a) -> string -> 'a -> Sexp.t
+val sexp_field' : ('a -> Sexp.t) -> string -> 'a -> Sexp.t
diff --git a/lib/volgo/src/process_output_handler.ml b/lib/volgo/src/process_output_handler.ml
index bc6bf847..2ecab130 100644
--- a/lib/volgo/src/process_output_handler.ml
+++ b/lib/volgo/src/process_output_handler.ml
@@ -44,7 +44,11 @@ module Result_impl = struct
       Error
         (Err.create
            [ Pp.text "Unexpected exit code."
-           ; Err.sexp [%sexp { accepted_codes : int list = List.map accept ~f:fst }]
+           ; Err.sexp
+               (sexp_field'
+                  (List.sexp_of_t Int.sexp_of_t)
+                  "accepted_codes"
+                  (List.map accept ~f:fst))
            ])
   ;;
 end
diff --git a/lib/volgo/src/vcs0.ml b/lib/volgo/src/vcs0.ml
index 765e605d..6d1c1226 100644
--- a/lib/volgo/src/vcs0.ml
+++ b/lib/volgo/src/vcs0.ml
@@ -30,31 +30,53 @@ let of_result ~step = function
   | Error err -> raise (Err.E (Err.add_context err [ Err.sexp (Lazy.force step) ]))
 ;;
 
+let step_trace fct fields = Sexp.List (Atom fct :: fields)
+
 let load_file (t : < Trait.file_system ; .. > t) ~path =
   t#load_file ~path
-  |> of_result ~step:(lazy [%sexp "Vcs.load_file", { path : Absolute_path.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace "Vcs.load_file" [ sexp_field (module Absolute_path) "path" path ]))
 ;;
 
 let save_file ?perms (t : < Trait.file_system ; .. > t) ~path ~file_contents =
   t#save_file ?perms () ~path ~file_contents
   |> of_result
        ~step:
-         (lazy [%sexp "Vcs.save_file", { perms : int option; path : Absolute_path.t }])
+         (lazy
+           (step_trace
+              "Vcs.save_file"
+              [ sexp_field' (Option.sexp_of_t Int.sexp_of_t) "perms" perms
+              ; sexp_field (module Absolute_path) "path" path
+              ]))
 ;;
 
 let read_dir (t : < Trait.file_system ; .. > t) ~dir =
   t#read_dir ~dir
-  |> of_result ~step:(lazy [%sexp "Vcs.read_dir", { dir : Absolute_path.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace "Vcs.read_dir" [ sexp_field (module Absolute_path) "dir" dir ]))
 ;;
 
 let add (t : < Trait.add ; .. > t) ~repo_root ~path =
   t#add ~repo_root ~path
   |> of_result
-       ~step:(lazy [%sexp "Vcs.add", { repo_root : Repo_root.t; path : Path_in_repo.t }])
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.add"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Path_in_repo) "path" path
+              ]))
 ;;
 
 let init (t : < Trait.init ; .. > t) ~path =
-  t#init ~path |> of_result ~step:(lazy [%sexp "Vcs.init", { path : Absolute_path.t }])
+  t#init ~path
+  |> of_result
+       ~step:
+         (lazy (step_trace "Vcs.init" [ sexp_field (module Absolute_path) "path" path ]))
 ;;
 
 let find_enclosing_repo_root t ~from ~store =
@@ -91,17 +113,32 @@ let current_branch (t : < Trait.current_branch ; .. > t) ~repo_root =
    | Error _ as err -> err
    | Ok (Some b) -> Ok b
    | Ok None -> Error (Err.create [ Pp.text "Not currently on any branch." ]))
-  |> of_result ~step:(lazy [%sexp "Vcs.current_branch", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.current_branch"
+              [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let current_branch_opt (t : < Trait.current_branch ; .. > t) ~repo_root =
   t#current_branch ~repo_root
-  |> of_result ~step:(lazy [%sexp "Vcs.current_branch_opt", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.current_branch_opt"
+              [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let current_revision (t : < Trait.current_revision ; .. > t) ~repo_root =
   t#current_revision ~repo_root
-  |> of_result ~step:(lazy [%sexp "Vcs.current_revision", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.current_revision"
+              [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let commit
@@ -112,7 +149,12 @@ let commit
   (let open Result.Monad_syntax in
    let* () = t#commit ~repo_root ~commit_message in
    t#current_revision ~repo_root)
-  |> of_result ~step:(lazy [%sexp "Vcs.commit", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.commit"
+              [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let ls_files (t : < Trait.ls_files ; .. > t) ~repo_root ~below =
@@ -120,7 +162,11 @@ let ls_files (t : < Trait.ls_files ; .. > t) ~repo_root ~below =
   |> of_result
        ~step:
          (lazy
-           [%sexp "Vcs.ls_files", { repo_root : Repo_root.t; below : Path_in_repo.t }])
+           (step_trace
+              "Vcs.ls_files"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Path_in_repo) "below" below
+              ]))
 ;;
 
 let rename_current_branch (t : < Trait.branch ; .. > t) ~repo_root ~to_ =
@@ -128,8 +174,11 @@ let rename_current_branch (t : < Trait.branch ; .. > t) ~repo_root ~to_ =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.rename_current_branch", { repo_root : Repo_root.t; to_ : Branch_name.t }])
+           (step_trace
+              "Vcs.rename_current_branch"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Branch_name) "to_" to_
+              ]))
 ;;
 
 let name_status (t : < Trait.name_status ; .. > t) ~repo_root ~changed =
@@ -137,9 +186,11 @@ let name_status (t : < Trait.name_status ; .. > t) ~repo_root ~changed =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.name_status"
-           , { repo_root : Repo_root.t; changed : Name_status.Changed.t }])
+           (step_trace
+              "Vcs.name_status"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Name_status.Changed) "changed" changed
+              ]))
 ;;
 
 let num_status (t : < Trait.num_status ; .. > t) ~repo_root ~changed =
@@ -147,18 +198,27 @@ let num_status (t : < Trait.num_status ; .. > t) ~repo_root ~changed =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.num_status", { repo_root : Repo_root.t; changed : Num_status.Changed.t }])
+           (step_trace
+              "Vcs.num_status"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Num_status.Changed) "changed" changed
+              ]))
 ;;
 
 let log (t : < Trait.log ; .. > t) ~repo_root =
   t#get_log_lines ~repo_root
-  |> of_result ~step:(lazy [%sexp "Vcs.log", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace "Vcs.log" [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let refs (t : < Trait.refs ; .. > t) ~repo_root =
   t#get_refs_lines ~repo_root
-  |> of_result ~step:(lazy [%sexp "Vcs.refs", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace "Vcs.refs" [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let graph (t : < Trait.log ; Trait.refs ; .. > t) ~repo_root =
@@ -169,7 +229,12 @@ let graph (t : < Trait.log ; Trait.refs ; .. > t) ~repo_root =
    Graph.add_nodes graph ~log;
    Graph.set_refs graph ~refs;
    Result.return graph)
-  |> of_result ~step:(lazy [%sexp "Vcs.graph", { repo_root : Repo_root.t }])
+  |> of_result
+       ~step:
+         (lazy
+           (step_trace
+              "Vcs.graph"
+              [ sexp_field (module Repo_root) "repo_root" repo_root ]))
 ;;
 
 let set_user_name (t : < Trait.config ; .. > t) ~repo_root ~user_name =
@@ -177,8 +242,11 @@ let set_user_name (t : < Trait.config ; .. > t) ~repo_root ~user_name =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.set_user_name", { repo_root : Repo_root.t; user_name : User_name.t }])
+           (step_trace
+              "Vcs.set_user_name"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module User_name) "user_name" user_name
+              ]))
 ;;
 
 let set_user_email (t : < Trait.config ; .. > t) ~repo_root ~user_email =
@@ -186,8 +254,11 @@ let set_user_email (t : < Trait.config ; .. > t) ~repo_root ~user_email =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.set_user_email", { repo_root : Repo_root.t; user_email : User_email.t }])
+           (step_trace
+              "Vcs.set_user_email"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module User_email) "user_email" user_email
+              ]))
 ;;
 
 let show_file_at_rev (t : < Trait.show ; .. > t) ~repo_root ~rev ~path =
@@ -195,29 +266,38 @@ let show_file_at_rev (t : < Trait.show ; .. > t) ~repo_root ~rev ~path =
   |> of_result
        ~step:
          (lazy
-           [%sexp
-             "Vcs.show_file_at_rev"
-           , { repo_root : Repo_root.t; rev : Rev.t; path : Path_in_repo.t }])
+           (step_trace
+              "Vcs.show_file_at_rev"
+              [ sexp_field (module Repo_root) "repo_root" repo_root
+              ; sexp_field (module Rev) "rev" rev
+              ; sexp_field (module Path_in_repo) "path" path
+              ]))
 ;;
 
 let make_git_err_step ?env ?run_in_subdir ~repo_root ~args () =
-  [%sexp
+  step_trace
     "Vcs.git"
-  , { repo_root : Repo_root.t
-    ; run_in_subdir : (Path_in_repo.t option[@sexp.option])
-    ; env : (string array option[@sexp.option])
-    ; args : string list
-    }]
+    (List.filter_opt
+       [ Some (sexp_field (module Repo_root) "repo_root" repo_root)
+       ; Option.map run_in_subdir ~f:(fun run_in_subdir ->
+           sexp_field (module Path_in_repo) "run_in_subdir" run_in_subdir)
+       ; Option.map env ~f:(fun env ->
+           sexp_field' (Array.sexp_of_t String.sexp_of_t) "env" env)
+       ; Some (sexp_field' (List.sexp_of_t String.sexp_of_t) "args" args)
+       ])
 ;;
 
 let make_hg_err_step ?env ?run_in_subdir ~repo_root ~args () =
-  [%sexp
+  step_trace
     "Vcs.hg"
-  , { repo_root : Repo_root.t
-    ; run_in_subdir : (Path_in_repo.t option[@sexp.option])
-    ; env : (string array option[@sexp.option])
-    ; args : string list
-    }]
+    (List.filter_opt
+       [ Some (sexp_field (module Repo_root) "repo_root" repo_root)
+       ; Option.map run_in_subdir ~f:(fun run_in_subdir ->
+           sexp_field (module Path_in_repo) "run_in_subdir" run_in_subdir)
+       ; Option.map env ~f:(fun env ->
+           sexp_field' (Array.sexp_of_t String.sexp_of_t) "env" env)
+       ; Some (sexp_field' (List.sexp_of_t String.sexp_of_t) "args" args)
+       ])
 ;;
 
 let non_raising_git
diff --git a/lib/volgo/test/test__git.ml b/lib/volgo/test/test__git.ml
index 393f62ff..be11d7fd 100644
--- a/lib/volgo/test/test__git.ml
+++ b/lib/volgo/test/test__git.ml
@@ -63,7 +63,7 @@ let%expect_test "exit_code" =
   [%expect {| (Ok other) |}];
   (* Same remark as in [exit0] regarding the error trace. *)
   test { exit_code = 1; stdout = ""; stderr = "" };
-  [%expect {| (Raised ("Unexpected exit code." ((accepted_codes (0 42))))) |}];
+  [%expect {| (Raised ("Unexpected exit code." (accepted_codes (0 42)))) |}];
   ()
 ;;
 
@@ -106,6 +106,6 @@ let%expect_test "exit_code" =
   [%expect {| (Ok other) |}];
   (* Same remark as in [exit0] regarding the error trace. *)
   test { exit_code = 1; stdout = ""; stderr = "" };
-  [%expect {| (Error ("Unexpected exit code." ((accepted_codes (0 42))))) |}];
+  [%expect {| (Error ("Unexpected exit code." (accepted_codes (0 42)))) |}];
   ()
 ;;
diff --git a/lib/volgo/test/test__import.ml b/lib/volgo/test/test__import.ml
index 278d066d..ad978346 100644
--- a/lib/volgo/test/test__import.ml
+++ b/lib/volgo/test/test__import.ml
@@ -125,7 +125,7 @@ let%expect_test "Int_table.add_exn" =
   Int_table.add_exn table ~key:1_234 ~data:"one";
   require_does_raise [%here] (fun () ->
     Int_table.add_exn table ~key:1_234 ~data:"one prime");
-  [%expect {| ("Hashtbl.add_exn: key already present" ((key 1_234))) |}];
+  [%expect {| ("Hashtbl.add_exn: key already present" (key 1_234)) |}];
   ()
 ;;
 
diff --git a/lib/volgo/test/test__mock_revs.ml b/lib/volgo/test/test__mock_revs.ml
index b1ce7b3a..1c42219f 100644
--- a/lib/volgo/test/test__mock_revs.ml
+++ b/lib/volgo/test/test__mock_revs.ml
@@ -45,8 +45,8 @@ let%expect_test "mock revs" =
     Vcs.Mock_revs.add_exn t ~rev:rev0 ~mock_rev:mock_rev1);
   [%expect
     {|
-    ("Hashtbl.add_exn: key already present" ((
-      key dd5aabd331a75b90cd61725223964e47dd5aabd3)))
+    ("Hashtbl.add_exn: key already present" (
+      key dd5aabd331a75b90cd61725223964e47dd5aabd3))
     |}];
   (* Finally, as a convenience we can generate mock revision on the fly with
      [to_mock]. *)
diff --git a/lib/volgo/test/test__trait.ml b/lib/volgo/test/test__trait.ml
index 32c754ca..14b0296a 100644
--- a/lib/volgo/test/test__trait.ml
+++ b/lib/volgo/test/test__trait.ml
@@ -35,9 +35,9 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.add (
-         (repo_root /path/to/repo)
-         (path      foo))))
+       Vcs.add
+       (repo_root /path/to/repo)
+       (path      foo)))
      (error
       "Trait [Vcs.Trait.add] method [add] is not available in this repository."))
     |}];
@@ -46,9 +46,9 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.rename_current_branch (
-         (repo_root /path/to/repo)
-         (to_       foo))))
+       Vcs.rename_current_branch
+       (repo_root /path/to/repo)
+       (to_       foo)))
      (error
       "Trait [Vcs.Trait.branch] method [rename_current_branch] is not available in this repository."))
     |}];
@@ -56,7 +56,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.commit vcs ~repo_root ~commit_message:(Vcs.Commit_message.v "_"));
   [%expect
     {|
-    ((context (Vcs.commit ((repo_root /path/to/repo))))
+    ((context (Vcs.commit (repo_root /path/to/repo)))
      (error
       "Trait [Vcs.Trait.commit] method [commit] is not available in this repository."))
     |}];
@@ -65,9 +65,9 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.set_user_name (
-         (repo_root /path/to/repo)
-         (user_name user1))))
+       Vcs.set_user_name
+       (repo_root /path/to/repo)
+       (user_name user1)))
      (error
       "Trait [Vcs.Trait.config] method [set_user_name] is not available in this repository."))
     |}];
@@ -76,9 +76,9 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.set_user_email (
-         (repo_root  /path/to/repo)
-         (user_email user1@mail.com))))
+       Vcs.set_user_email
+       (repo_root  /path/to/repo)
+       (user_email user1@mail.com)))
      (error
       "Trait [Vcs.Trait.config] method [set_user_email] is not available in this repository."))
     |}];
@@ -86,7 +86,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.current_branch vcs ~repo_root);
   [%expect
     {|
-    ((context (Vcs.current_branch ((repo_root /path/to/repo))))
+    ((context (Vcs.current_branch (repo_root /path/to/repo)))
      (error
       "Trait [Vcs.Trait.current_branch] method [current_branch] is not available in this repository."))
     |}];
@@ -94,7 +94,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.current_revision vcs ~repo_root);
   [%expect
     {|
-    ((context (Vcs.current_revision ((repo_root /path/to/repo))))
+    ((context (Vcs.current_revision (repo_root /path/to/repo)))
      (error
       "Trait [Vcs.Trait.current_revision] method [current_revision] is not available in this repository."))
     |}];
@@ -102,7 +102,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.load_file vcs ~path:(Absolute_path.v "/path/to/file"));
   [%expect
     {|
-    ((context (Vcs.load_file ((path /path/to/file))))
+    ((context (Vcs.load_file (path /path/to/file)))
      (error
       "Trait [Vcs.Trait.file_system] method [load_file] is not available in this repository."))
     |}];
@@ -113,14 +113,14 @@ let%expect_test "unimplemented" =
       ~file_contents:(Vcs.File_contents.create "Hello"));
   [%expect
     {|
-    ((context (Vcs.save_file ((perms ()) (path /path/to/file))))
+    ((context (Vcs.save_file (perms ()) (path /path/to/file)))
      (error
       "Trait [Vcs.Trait.file_system] method [save_file] is not available in this repository."))
     |}];
   test (fun () -> Vcs.read_dir vcs ~dir:(Absolute_path.v "/path/to/dir"));
   [%expect
     {|
-    ((context (Vcs.read_dir ((dir /path/to/dir))))
+    ((context (Vcs.read_dir (dir /path/to/dir)))
      (error
       "Trait [Vcs.Trait.file_system] method [read_dir] is not available in this repository."))
     |}];
@@ -128,7 +128,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.git vcs ~repo_root ~args:[ "status" ] ~f:Vcs.Git.exit0);
   [%expect
     {|
-    ((context (Vcs.git ((repo_root /path/to/repo) (args (status)))))
+    ((context (Vcs.git (repo_root /path/to/repo) (args (status))))
      (error
       "Trait [Vcs.Trait.git] method [git] is not available in this repository."))
     |}];
@@ -136,7 +136,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.hg vcs ~repo_root ~args:[ "status" ] ~f:Vcs.Hg.exit0);
   [%expect
     {|
-    ((context (Vcs.hg ((repo_root /path/to/repo) (args (status)))))
+    ((context (Vcs.hg (repo_root /path/to/repo) (args (status))))
      (error
       "Trait [Vcs.Trait.hg] method [hg] is not available in this repository."))
     |}];
@@ -144,7 +144,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.init vcs ~path:(Absolute_path.v "/path/to/dir"));
   [%expect
     {|
-    ((context (Vcs.init ((path /path/to/dir))))
+    ((context (Vcs.init (path /path/to/dir)))
      (error
       "Trait [Vcs.Trait.init] method [init] is not available in this repository."))
     |}];
@@ -152,7 +152,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.log vcs ~repo_root);
   [%expect
     {|
-    ((context (Vcs.log ((repo_root /path/to/repo))))
+    ((context (Vcs.log (repo_root /path/to/repo)))
      (error
       "Trait [Vcs.Trait.log] method [get_log_lines] is not available in this repository."))
     |}];
@@ -161,9 +161,9 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.ls_files (
-         (repo_root /path/to/repo)
-         (below     ./))))
+       Vcs.ls_files
+       (repo_root /path/to/repo)
+       (below     ./)))
      (error
       "Trait [Vcs.Trait.ls_files] method [ls_files] is not available in this repository."))
     |}];
@@ -173,12 +173,12 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.name_status (
-         (repo_root /path/to/repo)
-         (changed (
-           Between
-           (src 3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
-           (dst 8f2865699c137a14c65ae28b83fde96b8f286569))))))
+       Vcs.name_status
+       (repo_root /path/to/repo)
+       (changed (
+         Between
+         (src 3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
+         (dst 8f2865699c137a14c65ae28b83fde96b8f286569)))))
      (error
       "Trait [Vcs.Trait.name_status] method [name_status] is not available in this repository."))
     |}];
@@ -188,12 +188,12 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.num_status (
-         (repo_root /path/to/repo)
-         (changed (
-           Between
-           (src 3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
-           (dst 8f2865699c137a14c65ae28b83fde96b8f286569))))))
+       Vcs.num_status
+       (repo_root /path/to/repo)
+       (changed (
+         Between
+         (src 3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
+         (dst 8f2865699c137a14c65ae28b83fde96b8f286569)))))
      (error
       "Trait [Vcs.Trait.num_status] method [num_status] is not available in this repository."))
     |}];
@@ -201,7 +201,7 @@ let%expect_test "unimplemented" =
   test (fun () -> Vcs.refs vcs ~repo_root);
   [%expect
     {|
-    ((context (Vcs.refs ((repo_root /path/to/repo))))
+    ((context (Vcs.refs (repo_root /path/to/repo)))
      (error
       "Trait [Vcs.Trait.refs] method [get_refs_lines] is not available in this repository."))
     |}];
@@ -211,10 +211,10 @@ let%expect_test "unimplemented" =
   [%expect
     {|
     ((context (
-       Vcs.show_file_at_rev (
-         (repo_root /path/to/repo)
-         (rev       3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
-         (path      foo))))
+       Vcs.show_file_at_rev
+       (repo_root /path/to/repo)
+       (rev       3e8f3b8084fe4864ab5ecf955a8cf5093e8f3b80)
+       (path      foo)))
      (error
       "Trait [Vcs.Trait.show] method [show_file_at_rev] is not available in this repository."))
     |}];
diff --git a/lib/volgo_base/test/test__git.ml b/lib/volgo_base/test/test__git.ml
index 8b2d0a24..30dc3615 100644
--- a/lib/volgo_base/test/test__git.ml
+++ b/lib/volgo_base/test/test__git.ml
@@ -58,6 +58,6 @@ let%expect_test "exit_code" =
   [%expect {| (Ok other) |}];
   (* Same remark as in [exit0] regarding the error trace. *)
   test { exit_code = 1; stdout = ""; stderr = "" };
-  [%expect {| (Error ("Unexpected exit code." ((accepted_codes (0 42))))) |}];
+  [%expect {| (Error ("Unexpected exit code." (accepted_codes (0 42)))) |}];
   ()
 ;;
diff --git a/lib/volgo_git_backend/test/test__show.ml b/lib/volgo_git_backend/test/test__show.ml
index 720dd712..3f18857a 100644
--- a/lib/volgo_git_backend/test/test__show.ml
+++ b/lib/volgo_git_backend/test/test__show.ml
@@ -31,6 +31,6 @@ let%expect_test "show" =
   test { exit_code = 128; stdout = "contents"; stderr = "" };
   [%expect {| (Ok Absent) |}];
   test { exit_code = 1; stdout = "contents"; stderr = "" };
-  [%expect {| (Error ("Unexpected exit code." ((accepted_codes (0 128))))) |}];
+  [%expect {| (Error ("Unexpected exit code." (accepted_codes (0 128)))) |}];
   ()
 ;;
diff --git a/lib/volgo_git_eio/test/test__file_system.ml b/lib/volgo_git_eio/test/test__file_system.ml
index 47526d45..155a7f7f 100644
--- a/lib/volgo_git_eio/test/test__file_system.ml
+++ b/lib/volgo_git_eio/test/test__file_system.ml
@@ -55,7 +55,7 @@ let%expect_test "read_dir" =
       print_s
         (Vcs_test_helpers.redact_sexp (Err.sexp_of_t err) ~fields:[ "dir"; "error" ])
   in
-  [%expect {| ((context (Vcs.read_dir ((dir <REDACTED>)))) (error <REDACTED>)) |}];
+  [%expect {| ((context (Vcs.read_dir (dir <REDACTED>))) (error <REDACTED>)) |}];
   let () =
     (* [Vcs.read_dir] errors out when called on an existing file rather than a
        directory. *)
@@ -70,6 +70,6 @@ let%expect_test "read_dir" =
       print_s
         (Vcs_test_helpers.redact_sexp (Err.sexp_of_t err) ~fields:[ "dir"; "error" ])
   in
-  [%expect {| ((context (Vcs.read_dir ((dir <REDACTED>)))) (error <REDACTED>)) |}];
+  [%expect {| ((context (Vcs.read_dir (dir <REDACTED>))) (error <REDACTED>)) |}];
   ()
 ;;
diff --git a/lib/volgo_git_unix/test/test__file_system.ml b/lib/volgo_git_unix/test/test__file_system.ml
index a937bc94..201bd683 100644
--- a/lib/volgo_git_unix/test/test__file_system.ml
+++ b/lib/volgo_git_unix/test/test__file_system.ml
@@ -51,7 +51,7 @@ let%expect_test "read_dir" =
   in
   [%expect
     {|
-    ((context (Vcs.read_dir ((dir <REDACTED>))))
+    ((context (Vcs.read_dir (dir <REDACTED>)))
      (error (Sys_error "/non-existing: No such file or directory")))
     |}];
   let () =
@@ -68,6 +68,6 @@ let%expect_test "read_dir" =
       print_s
         (Vcs_test_helpers.redact_sexp (Err.sexp_of_t err) ~fields:[ "dir"; "error" ])
   in
-  [%expect {| ((context (Vcs.read_dir ((dir <REDACTED>)))) (error <REDACTED>)) |}];
+  [%expect {| ((context (Vcs.read_dir (dir <REDACTED>))) (error <REDACTED>)) |}];
   ()
 ;;
diff --git a/lib/volgo_git_unix/test/test__hello_commit.ml b/lib/volgo_git_unix/test/test__hello_commit.ml
index 65b0cd8d..af9ea405 100644
--- a/lib/volgo_git_unix/test/test__hello_commit.ml
+++ b/lib/volgo_git_unix/test/test__hello_commit.ml
@@ -89,7 +89,7 @@ let%expect_test "read_dir" =
   in
   [%expect
     {|
-    ((context (Vcs.read_dir ((dir /invalid))))
+    ((context (Vcs.read_dir (dir /invalid)))
      (error (Sys_error "/invalid: No such file or directory")))
     |}];
   ()
diff --git a/lib/volgo_git_unix/test/test__path_resolution.ml b/lib/volgo_git_unix/test/test__path_resolution.ml
index bfd6d7e5..5c865284 100644
--- a/lib/volgo_git_unix/test/test__path_resolution.ml
+++ b/lib/volgo_git_unix/test/test__path_resolution.ml
@@ -81,7 +81,7 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -126,10 +126,10 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git (
+       (Vcs.git
          (repo_root <REDACTED>)
          (env       <REDACTED>)
-         (args (rev-parse INVALID-REF))))
+         (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -154,10 +154,10 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git (
+       (Vcs.git
          (repo_root <REDACTED>)
          (env       <REDACTED>)
-         (args (rev-parse INVALID-REF))))
+         (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    42))
@@ -177,10 +177,10 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git (
+       (Vcs.git
          (repo_root <REDACTED>)
          (env       <REDACTED>)
-         (args (rev-parse INVALID-REF))))
+         (args (rev-parse INVALID-REF)))
        ((prog git)
         (args (rev-parse INVALID-REF))
         (exit_status Unknown)
@@ -197,10 +197,10 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git (
+       (Vcs.git
          (repo_root <REDACTED>)
          (env       <REDACTED>)
-         (args (rev-parse INVALID-REF))))
+         (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    128))
@@ -217,7 +217,7 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog <REDACTED>)
         (args        (rev-parse INVALID-REF))
         (exit_status (Exited    42))
@@ -235,7 +235,7 @@ let%expect_test "hello path" =
   [%expect
     {|
     ((context
-       (Vcs.git ((repo_root <REDACTED>) (args (rev-parse INVALID-REF))))
+       (Vcs.git (repo_root <REDACTED>) (args (rev-parse INVALID-REF)))
        ((prog git)
         (args (rev-parse INVALID-REF))
         (exit_status Unknown)
diff --git a/lib/volgo_hg_unix/test/test__hello_cli.ml b/lib/volgo_hg_unix/test/test__hello_cli.ml
index 6b737000..98c7243d 100644
--- a/lib/volgo_hg_unix/test/test__hello_cli.ml
+++ b/lib/volgo_hg_unix/test/test__hello_cli.ml
@@ -93,7 +93,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.hg ((repo_root <REDACTED>) (args (bogus))))
+       (Vcs.hg (repo_root <REDACTED>) (args (bogus)))
        ((prog <REDACTED>)
         (args (bogus))
         (exit_status (Exited 255))
@@ -114,7 +114,7 @@ let%expect_test "hello cli" =
   [%expect
     {|
     ((context
-       (Vcs.hg ((repo_root <REDACTED>) (args (bogus))))
+       (Vcs.hg (repo_root <REDACTED>) (args (bogus)))
        ((prog <REDACTED>)
         (args (bogus))
         (exit_status (Exited 255))
diff --git a/test/expect/detached_head.ml b/test/expect/detached_head.ml
index 0c07516c..93349fc5 100644
--- a/test/expect/detached_head.ml
+++ b/test/expect/detached_head.ml
@@ -72,7 +72,7 @@ let%expect_test "detached-head" =
   in
   [%expect
     {|
-    ((context (Vcs.current_branch ((repo_root <REDACTED>))))
+    ((context (Vcs.current_branch (repo_root <REDACTED>)))
      (error "Not currently on any branch."))
     |}];
   let current_branch_opt = Vcs.Result.current_branch_opt vcs ~repo_root in
diff --git a/test/expect/small_graph.ml b/test/expect/small_graph.ml
index b6072c92..80863b6d 100644
--- a/test/expect/small_graph.ml
+++ b/test/expect/small_graph.ml
@@ -68,9 +68,9 @@ let%expect_test "small graph" =
   [%expect
     {|
     ((context
-       (Vcs.add (
+       (Vcs.add
          (repo_root <REDACTED>)
-         (path      unknown-file.txt)))
+         (path      unknown-file.txt))
        ((prog git)
         (args        (add    unknown-file.txt))
         (exit_status (Exited 128))
@@ -96,7 +96,7 @@ let%expect_test "small graph" =
   [%expect
     {|
     ((context
-       (Vcs.commit ((repo_root <REDACTED>)))
+       (Vcs.commit (repo_root <REDACTED>))
        ((prog git)
         (args (commit -m "Nothing to commit"))
         (exit_status (Exited 1))
@@ -181,9 +181,9 @@ let%expect_test "small graph" =
   [%expect
     {|
     ((context
-       (Vcs.ls_files (
+       (Vcs.ls_files
          (repo_root <REDACTED>)
-         (below     dir)))
+         (below     dir))
        ((prog git)
         (args (ls-files --full-name))
         (exit_status Unknown)
diff --git a/volgo.opam b/volgo.opam
index a9b37033..03230be8 100644
--- a/volgo.opam
+++ b/volgo.opam
@@ -17,8 +17,8 @@ depends: [
   "pplumbing" {>= "0.0.14"}
   "ppx_enumerate" {>= "v0.16"}
   "ppx_sexp_conv" {>= "v0.16"}
-  "ppx_sexp_value" {>= "v0.16"}
   "ppxlib" {>= "0.33"}
+  "sexplib0" {>= "v0.16"}
   "odoc" {with-doc}
 ]
 build: [
