diff -pruN 2.8.3+dfsg-3/debian/changelog 2.8.3+dfsg-4/debian/changelog
--- 2.8.3+dfsg-3/debian/changelog	2025-09-10 10:33:13.000000000 +0000
+++ 2.8.3+dfsg-4/debian/changelog	2025-09-24 09:10:14.000000000 +0000
@@ -1,3 +1,10 @@
+bisect-ppx (2.8.3+dfsg-4) unstable; urgency=medium
+
+  * Team upload
+  * Update ppxlib 0.36.0 patch
+
+ -- Stéphane Glondu <glondu@debian.org>  Wed, 24 Sep 2025 11:10:14 +0200
+
 bisect-ppx (2.8.3+dfsg-3) unstable; urgency=medium
 
   * Team upload
diff -pruN 2.8.3+dfsg-3/debian/patches/0001-Add-ppxlib-0.36.0-support.patch 2.8.3+dfsg-4/debian/patches/0001-Add-ppxlib-0.36.0-support.patch
--- 2.8.3+dfsg-3/debian/patches/0001-Add-ppxlib-0.36.0-support.patch	1970-01-01 00:00:00.000000000 +0000
+++ 2.8.3+dfsg-4/debian/patches/0001-Add-ppxlib-0.36.0-support.patch	2025-09-24 09:10:14.000000000 +0000
@@ -0,0 +1,126 @@
+From: =?utf-8?q?St=C3=A9phane_Glondu?= <glondu@debian.org>
+Date: Wed, 24 Sep 2025 11:08:12 +0200
+Subject: Add ppxlib 0.36.0 support
+
+Origin: https://github.com/aantron/bisect_ppx/pull/448
+---
+ src/ppx/instrument.ml | 84 +++++++++++++++++++++++++++++++--------------------
+ 1 file changed, 51 insertions(+), 33 deletions(-)
+
+diff --git a/src/ppx/instrument.ml b/src/ppx/instrument.ml
+index 7a30033..884b2d2 100644
+--- a/src/ppx/instrument.ml
++++ b/src/ppx/instrument.ml
+@@ -1314,38 +1314,32 @@ class instrumenter =
+             instrument_expr ~use_loc_of:e ~post:true (Exp.assert_ e_new)
+ 
+           (* Expressions that have subexpressions that might not get visited. *)
+-          | Pexp_function cases ->
+-            traverse_cases ~is_in_tail_position:true cases
+-            >>| fun cases_new ->
+-            let cases, _, _, need_binding = instrument_cases cases_new in
+-            if need_binding then
+-              Exp.fun_ ~loc ~attrs
+-                Ppxlib.Nolabel None ([%pat? ___bisect_matched_value___])
+-                (Exp.match_ ~loc
+-                  ([%expr ___bisect_matched_value___]) cases)
+-            else
+-              Exp.function_ ~loc ~attrs cases
+-
+-          | Pexp_fun (label, default_value, p, e) ->
+-            begin match default_value with
+-            | None ->
+-              return None
+-            | Some e ->
+-              traverse ~is_in_tail_position:false e
+-              >>| fun e ->
+-              Some (instrument_expr e)
+-            end
+-            >>= fun default_value ->
+-            traverse ~is_in_tail_position:true e
+-            >>| fun e ->
+-            let e =
+-              match e.pexp_desc with
+-              | Pexp_function _ | Pexp_fun _ -> e
+-              | Pexp_constraint (e', t) ->
+-                {e with pexp_desc = Pexp_constraint (instrument_expr e', t)}
+-              | _ -> instrument_expr e
++          | Pexp_function (params, constraint_, body) ->
++            let open Parsetree in
++            let new_params =
++              List.map (function
++                | { pparam_desc = Pparam_val (lbl, Some default_value, c); _ } as p ->
++                  traverse ~is_in_tail_position:false default_value
++                  >>| fun e -> { p with pparam_desc = Pparam_val (lbl, Some (instrument_expr e), c) }
++                | e -> return e
++                ) params
+             in
+-            Exp.fun_ ~loc ~attrs label default_value p e
++            Ppxlib.With_errors.combine_errors new_params
++            >>= fun new_params ->
++
++            traverse_function_body ~is_in_tail_position:true ~params:new_params body
++            >>| fun (new_body, new_params) ->
++            let new_body =
++              match new_body with
++              | Pfunction_body { pexp_desc = Pexp_function _; _ } -> new_body
++              | Pfunction_body { pexp_desc = Pexp_constraint (e', t); _ } ->
++                Pfunction_body {e with pexp_desc = Pexp_constraint (instrument_expr e', t)}
++              | Pfunction_body e -> Pfunction_body (instrument_expr e)
++              | Pfunction_cases _ as cases -> cases
++            in
++
++            let e = Ast_builder.Default.pexp_function ~loc new_params constraint_ new_body in
++            { e with pexp_attributes = attrs }
+ 
+           | Pexp_match (e, cases) ->
+             traverse_cases ~is_in_tail_position cases
+@@ -1418,7 +1412,7 @@ class instrumenter =
+           | Pexp_lazy e ->
+             let rec is_trivial_syntactic_value e =
+               match e.Parsetree.pexp_desc with
+-              | Pexp_function _ | Pexp_fun _ | Pexp_poly _ | Pexp_ident _
++              | Pexp_function _ | Pexp_poly _ | Pexp_ident _
+               | Pexp_constant _ | Pexp_construct (_, None) ->
+                 true
+               | Pexp_constraint (e, _) | Pexp_coerce (e, _, _) ->
+@@ -1446,7 +1440,7 @@ class instrumenter =
+             >>| fun e ->
+             let e =
+               match e.pexp_desc with
+-              | Pexp_function _ | Pexp_fun _ -> e
++              | Pexp_function _ -> e
+               | _ -> instrument_expr e
+             in
+             Exp.poly ~loc ~attrs e t
+@@ -1654,6 +1648,30 @@ class instrumenter =
+         end
+         |> collect_errors
+ 
++      and traverse_function_body ~is_in_tail_position ~params body =
++        let open Ppxlib in
++        match body with
++        | Pfunction_body e ->
++          traverse ~is_in_tail_position e
++          >>| fun e -> (Pfunction_body e, params)
++        | Pfunction_cases (cases, loc, attrs) ->
++            traverse_cases ~is_in_tail_position:true cases
++            >>| fun cases_new ->
++            let cases, _, _, need_binding = instrument_cases cases_new in
++            if need_binding then
++              let extra_param =
++                Ast_builder.Default.pparam_val ~loc Nolabel None
++                  [%pat? ___bisect_matched_value___]
++              in
++              let body =
++                Pfunction_body
++                  (Exp.match_ ~loc
++                   ([%expr ___bisect_matched_value___]) cases)
++              in
++              (body, params @ [extra_param])
++            else
++              (Pfunction_cases (cases, loc, attrs), params)
++
+       in
+ 
+       traverse ~is_in_tail_position:false e
diff -pruN 2.8.3+dfsg-3/debian/patches/0001-Support-ppxlib.0.36.0.patch 2.8.3+dfsg-4/debian/patches/0001-Support-ppxlib.0.36.0.patch
--- 2.8.3+dfsg-3/debian/patches/0001-Support-ppxlib.0.36.0.patch	2025-09-10 10:33:13.000000000 +0000
+++ 2.8.3+dfsg-4/debian/patches/0001-Support-ppxlib.0.36.0.patch	1970-01-01 00:00:00.000000000 +0000
@@ -1,121 +0,0 @@
-From: Patrick Ferris <patrick@sirref.org>
-Date: Fri, 20 Jun 2025 12:21:20 +0100
-Subject: Support ppxlib.0.36.0
-
-Origin: https://github.com/aantron/bisect_ppx/pull/448
----
- src/ppx/instrument.ml | 79 ++++++++++++++++++++++++++++++---------------------
- 1 file changed, 46 insertions(+), 33 deletions(-)
-
-diff --git a/src/ppx/instrument.ml b/src/ppx/instrument.ml
-index 7a30033..bd72711 100644
---- a/src/ppx/instrument.ml
-+++ b/src/ppx/instrument.ml
-@@ -1314,38 +1314,32 @@ class instrumenter =
-             instrument_expr ~use_loc_of:e ~post:true (Exp.assert_ e_new)
- 
-           (* Expressions that have subexpressions that might not get visited. *)
--          | Pexp_function cases ->
--            traverse_cases ~is_in_tail_position:true cases
--            >>| fun cases_new ->
--            let cases, _, _, need_binding = instrument_cases cases_new in
--            if need_binding then
--              Exp.fun_ ~loc ~attrs
--                Ppxlib.Nolabel None ([%pat? ___bisect_matched_value___])
--                (Exp.match_ ~loc
--                  ([%expr ___bisect_matched_value___]) cases)
--            else
--              Exp.function_ ~loc ~attrs cases
--
--          | Pexp_fun (label, default_value, p, e) ->
--            begin match default_value with
--            | None ->
--              return None
--            | Some e ->
--              traverse ~is_in_tail_position:false e
--              >>| fun e ->
--              Some (instrument_expr e)
--            end
--            >>= fun default_value ->
--            traverse ~is_in_tail_position:true e
--            >>| fun e ->
--            let e =
--              match e.pexp_desc with
--              | Pexp_function _ | Pexp_fun _ -> e
--              | Pexp_constraint (e', t) ->
--                {e with pexp_desc = Pexp_constraint (instrument_expr e', t)}
--              | _ -> instrument_expr e
-+          | Pexp_function (params, constraint_, body) ->
-+            let open Parsetree in
-+            let new_params =
-+              List.map (function
-+                | { pparam_desc = Pparam_val (lbl, Some default_value, c); _ } as p ->
-+                  traverse ~is_in_tail_position:false default_value
-+                  >>| fun e -> { p with pparam_desc = Pparam_val (lbl, Some (instrument_expr e), c) }
-+                | e -> return e
-+                ) params
-+            in
-+            Ppxlib.With_errors.combine_errors new_params
-+            >>= fun new_params ->
-+
-+            traverse_function_body ~is_in_tail_position:true body
-+            >>| fun new_body ->
-+            let new_body =
-+              match new_body with
-+              | Pfunction_body { pexp_desc = Pexp_function _; _ } -> new_body
-+              | Pfunction_body { pexp_desc = Pexp_constraint (e', t); _ } ->
-+                Pfunction_body {e with pexp_desc = Pexp_constraint (instrument_expr e', t)}
-+              | Pfunction_body e -> Pfunction_body (instrument_expr e)
-+              | Pfunction_cases _ as cases -> cases
-             in
--            Exp.fun_ ~loc ~attrs label default_value p e
-+
-+            let e = Ast_builder.Default.pexp_function ~loc new_params constraint_ new_body in
-+            { e with pexp_attributes = attrs }
- 
-           | Pexp_match (e, cases) ->
-             traverse_cases ~is_in_tail_position cases
-@@ -1418,7 +1412,7 @@ class instrumenter =
-           | Pexp_lazy e ->
-             let rec is_trivial_syntactic_value e =
-               match e.Parsetree.pexp_desc with
--              | Pexp_function _ | Pexp_fun _ | Pexp_poly _ | Pexp_ident _
-+              | Pexp_function _ | Pexp_poly _ | Pexp_ident _
-               | Pexp_constant _ | Pexp_construct (_, None) ->
-                 true
-               | Pexp_constraint (e, _) | Pexp_coerce (e, _, _) ->
-@@ -1446,7 +1440,7 @@ class instrumenter =
-             >>| fun e ->
-             let e =
-               match e.pexp_desc with
--              | Pexp_function _ | Pexp_fun _ -> e
-+              | Pexp_function _ -> e
-               | _ -> instrument_expr e
-             in
-             Exp.poly ~loc ~attrs e t
-@@ -1654,6 +1648,25 @@ class instrumenter =
-         end
-         |> collect_errors
- 
-+      and traverse_function_body ~is_in_tail_position body =
-+        let open Ppxlib in
-+        match body with
-+        | Pfunction_body e ->
-+          traverse ~is_in_tail_position e
-+          >>| fun e -> Pfunction_body e
-+        | Pfunction_cases (cases, loc, attrs) ->
-+            traverse_cases ~is_in_tail_position:true cases
-+            >>| fun cases_new ->
-+            let cases, _, _, need_binding = instrument_cases cases_new in
-+            if need_binding then
-+              Pfunction_body
-+              (Exp.fun_ ~loc ~attrs
-+                Ppxlib.Nolabel None ([%pat? ___bisect_matched_value___])
-+                (Exp.match_ ~loc
-+                  ([%expr ___bisect_matched_value___]) cases))
-+            else
-+              Pfunction_cases (cases, loc, attrs)
-+
-       in
- 
-       traverse ~is_in_tail_position:false e
diff -pruN 2.8.3+dfsg-3/debian/patches/series 2.8.3+dfsg-4/debian/patches/series
--- 2.8.3+dfsg-3/debian/patches/series	2025-09-10 10:33:13.000000000 +0000
+++ 2.8.3+dfsg-4/debian/patches/series	2025-09-24 09:10:14.000000000 +0000
@@ -1 +1 @@
-0001-Support-ppxlib.0.36.0.patch
+0001-Add-ppxlib-0.36.0-support.patch
