My aggregated monorepo of OCaml code, automaintained
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'cmstatefield' (revert search)

+4056 -539
+1
dune-workspace
··· 17 17 (odoc 18 18 (html_flags --shell jon-shell 19 19 --config x-ocaml.universe=/_opam) 20 + (source_rendering enabled) 20 21 (prefix reference) 21 22 (warnings fatal) 22 23 )))
+5
js_top_worker/lib/impl.cppo.ml
··· 491 491 Ocaml_utils.Local_store.with_store store (fun () -> 492 492 Topdirs.dir_directory path; 493 493 494 + (* Register predefined exceptions (Assert_failure, Match_failure, etc.) 495 + in the global symbol table. Without this, phrases using [assert] 496 + fail with "Reference to undefined predefined exception". *) 497 + Symtable.init (); 498 + 494 499 Toploop.initialize_toplevel_env (); 495 500 496 501 List.iter (fun f -> f ()) functions;
+79 -15
js_top_worker/test/node/node_dependency_test.expected
··· 1 1 === Node.js Cell Dependency Tests === 2 2 3 3 Initializing findlib 4 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 4 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 5 5 Parsed uri: ./lib/stdlib-shims/META 6 6 Reading library: stdlib-shims 7 7 Number of children: 0 8 8 Parsed uri: ./lib/sexplib0/META 9 9 Reading library: sexplib0 10 10 Number of children: 0 11 + Parsed uri: ./lib/sexp_type/META 12 + Reading library: sexp_type 13 + Number of children: 1 14 + Found child: grammar 15 + Reading library: sexp_type.grammar 16 + Number of children: 0 17 + Parsed uri: ./lib/ppxlib_jane/META 18 + Reading library: ppxlib_jane 19 + Number of children: 0 20 + Parsed uri: ./lib/ppxlib_ast/META 21 + Reading library: ppxlib_ast 22 + Number of children: 4 23 + Found child: ast 24 + Reading library: ppxlib_ast.ast 25 + Number of children: 0 26 + Found child: astlib 27 + Reading library: ppxlib_ast.astlib 28 + Number of children: 0 29 + Found child: stdppx 30 + Reading library: ppxlib_ast.stdppx 31 + Number of children: 0 32 + Found child: traverse_builtins 33 + Reading library: ppxlib_ast.traverse_builtins 34 + Number of children: 0 11 35 Parsed uri: ./lib/ppxlib/META 12 36 Reading library: ppxlib 13 - Number of children: 11 14 - Found child: __private__ 15 - Reading library: ppxlib.__private__ 16 - Number of children: 1 17 - Found child: ppx_foo_deriver 18 - Reading library: ppxlib.__private__.ppx_foo_deriver 19 - Number of children: 0 37 + Number of children: 10 20 38 Found child: ast 21 39 Reading library: ppxlib.ast 22 40 Number of children: 0 ··· 47 65 Found child: traverse_builtins 48 66 Reading library: ppxlib.traverse_builtins 49 67 Number of children: 0 68 + Parsed uri: ./lib/ppx_sexp_conv/META 69 + Reading library: ppx_sexp_conv 70 + Number of children: 2 71 + Found child: expander 72 + Reading library: ppx_sexp_conv.expander 73 + Number of children: 0 74 + Found child: runtime-lib 75 + Reading library: ppx_sexp_conv.runtime-lib 76 + Number of children: 0 77 + Parsed uri: ./lib/ppx_hash/META 78 + Reading library: ppx_hash 79 + Number of children: 3 80 + Found child: base_internalhash_types 81 + Reading library: ppx_hash.base_internalhash_types 82 + Number of children: 0 83 + Found child: expander 84 + Reading library: ppx_hash.expander 85 + Number of children: 0 86 + Found child: runtime-lib 87 + Reading library: ppx_hash.runtime-lib 88 + Number of children: 0 89 + Parsed uri: ./lib/ppx_enumerate/META 90 + Reading library: ppx_enumerate 91 + Number of children: 1 92 + Found child: runtime-lib 93 + Reading library: ppx_enumerate.runtime-lib 94 + Number of children: 0 50 95 Parsed uri: ./lib/ppx_deriving/META 51 96 Reading library: ppx_deriving 52 97 Number of children: 12 ··· 89 134 Parsed uri: ./lib/ppx_derivers/META 90 135 Reading library: ppx_derivers 91 136 Number of children: 0 137 + Parsed uri: ./lib/ppx_compare/META 138 + Reading library: ppx_compare 139 + Number of children: 2 140 + Found child: expander 141 + Reading library: ppx_compare.expander 142 + Number of children: 0 143 + Found child: runtime-lib 144 + Reading library: ppx_compare.runtime-lib 145 + Number of children: 0 92 146 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 93 147 Reading library: ocaml_intrinsics_kernel 94 148 Number of children: 0 ··· 131 185 Found child: toplevel 132 186 Reading library: ocaml-compiler-libs.toplevel 133 187 Number of children: 0 188 + Parsed uri: ./lib/capsule0/META 189 + Reading library: capsule0 190 + Number of children: 2 191 + Found child: blocking_sync 192 + Reading library: capsule0.blocking_sync 193 + Number of children: 0 194 + Found child: expert 195 + Reading library: capsule0.expert 196 + Number of children: 0 197 + Parsed uri: ./lib/basement/META 198 + Reading library: basement 199 + Number of children: 0 134 200 Parsed uri: ./lib/base/META 135 201 Reading library: base 136 202 Number of children: 3 137 - Found child: base_internalhash_types 138 - Reading library: base.base_internalhash_types 203 + Found child: composition_infix 204 + Reading library: base.composition_infix 139 205 Number of children: 0 140 206 Found child: md5 141 207 Reading library: base.md5 ··· 161 227 162 228 --- Section 3: Missing Dependencies --- 163 229 [PASS] missing_dep_error: 2 errors (expected > 0) 164 - node_dependency_test.js: [ERROR] Env.Error: File "_none_", line 1: 165 - Error: Unbound module Cell__nonexistent 166 - 230 + node_dependency_test.js: [ERROR] Env.Error: Unbound module Cell__nonexistent 167 231 [PASS] missing_dep_simple_ok: 0 errors 168 232 169 233 --- Section 4: Dependency Update Propagation --- 170 234 [PASS] update_u1_initial: 0 errors 171 235 [PASS] update_u2_initial: 0 errors 172 - node_dependency_test.js: [ERROR] Error in add_cmi: Consistbl.Make(Module_name).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi") 236 + node_dependency_test.js: [ERROR] Error in add_cmi: Consistbl.Make(Module_name)(Data).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi", _, _) 173 237 node_dependency_test.js: [ERROR] Backtrace: 174 238 175 - [ERROR] Test failed with: Consistbl.Make(Module_name).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi") 239 + [ERROR] Test failed with: Consistbl.Make(Module_name)(Data).Inconsistency("Cell__u1", "/static/cmis/cell__u1.cmi", "/static/cmis/cell__u1.cmi", _, _) 176 240 177 241 === Results: 13/13 tests passed === 178 242 SUCCESS: All dependency tests passed!
+159 -88
js_top_worker/test/node/node_directive_test.expected
··· 2 2 3 3 node_directive_test.js: [INFO] init() 4 4 Initializing findlib 5 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 5 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 6 6 Parsed uri: ./lib/stdlib-shims/META 7 7 Reading library: stdlib-shims 8 8 Number of children: 0 9 9 Parsed uri: ./lib/sexplib0/META 10 10 Reading library: sexplib0 11 11 Number of children: 0 12 - Parsed uri: ./lib/ppxlib/META 13 - Reading library: ppxlib 14 - Number of children: 11 15 - Found child: __private__ 16 - Reading library: ppxlib.__private__ 12 + Parsed uri: ./lib/sexp_type/META 13 + Reading library: sexp_type 17 14 Number of children: 1 18 - Found child: ppx_foo_deriver 19 - Reading library: ppxlib.__private__.ppx_foo_deriver 15 + Found child: grammar 16 + Reading library: sexp_type.grammar 17 + Number of children: 0 18 + Parsed uri: ./lib/ppxlib_jane/META 19 + Reading library: ppxlib_jane 20 20 Number of children: 0 21 + Parsed uri: ./lib/ppxlib_ast/META 22 + Reading library: ppxlib_ast 23 + Number of children: 4 24 + Found child: ast 25 + Reading library: ppxlib_ast.ast 26 + Number of children: 0 27 + Found child: astlib 28 + Reading library: ppxlib_ast.astlib 29 + Number of children: 0 30 + Found child: stdppx 31 + Reading library: ppxlib_ast.stdppx 32 + Number of children: 0 33 + Found child: traverse_builtins 34 + Reading library: ppxlib_ast.traverse_builtins 35 + Number of children: 0 36 + Parsed uri: ./lib/ppxlib/META 37 + Reading library: ppxlib 38 + Number of children: 10 21 39 Found child: ast 22 40 Reading library: ppxlib.ast 23 41 Number of children: 0 ··· 48 66 Found child: traverse_builtins 49 67 Reading library: ppxlib.traverse_builtins 50 68 Number of children: 0 69 + Parsed uri: ./lib/ppx_sexp_conv/META 70 + Reading library: ppx_sexp_conv 71 + Number of children: 2 72 + Found child: expander 73 + Reading library: ppx_sexp_conv.expander 74 + Number of children: 0 75 + Found child: runtime-lib 76 + Reading library: ppx_sexp_conv.runtime-lib 77 + Number of children: 0 78 + Parsed uri: ./lib/ppx_hash/META 79 + Reading library: ppx_hash 80 + Number of children: 3 81 + Found child: base_internalhash_types 82 + Reading library: ppx_hash.base_internalhash_types 83 + Number of children: 0 84 + Found child: expander 85 + Reading library: ppx_hash.expander 86 + Number of children: 0 87 + Found child: runtime-lib 88 + Reading library: ppx_hash.runtime-lib 89 + Number of children: 0 90 + Parsed uri: ./lib/ppx_enumerate/META 91 + Reading library: ppx_enumerate 92 + Number of children: 1 93 + Found child: runtime-lib 94 + Reading library: ppx_enumerate.runtime-lib 95 + Number of children: 0 51 96 Parsed uri: ./lib/ppx_deriving/META 52 97 Reading library: ppx_deriving 53 98 Number of children: 12 ··· 90 135 Parsed uri: ./lib/ppx_derivers/META 91 136 Reading library: ppx_derivers 92 137 Number of children: 0 138 + Parsed uri: ./lib/ppx_compare/META 139 + Reading library: ppx_compare 140 + Number of children: 2 141 + Found child: expander 142 + Reading library: ppx_compare.expander 143 + Number of children: 0 144 + Found child: runtime-lib 145 + Reading library: ppx_compare.runtime-lib 146 + Number of children: 0 93 147 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 94 148 Reading library: ocaml_intrinsics_kernel 95 149 Number of children: 0 ··· 132 186 Found child: toplevel 133 187 Reading library: ocaml-compiler-libs.toplevel 134 188 Number of children: 0 189 + Parsed uri: ./lib/capsule0/META 190 + Reading library: capsule0 191 + Number of children: 2 192 + Found child: blocking_sync 193 + Reading library: capsule0.blocking_sync 194 + Number of children: 0 195 + Found child: expert 196 + Reading library: capsule0.expert 197 + Number of children: 0 198 + Parsed uri: ./lib/basement/META 199 + Reading library: basement 200 + Number of children: 0 135 201 Parsed uri: ./lib/base/META 136 202 Reading library: base 137 203 Number of children: 3 138 - Found child: base_internalhash_types 139 - Reading library: base.base_internalhash_types 204 + Found child: composition_infix 205 + Reading library: base.composition_infix 140 206 Number of children: 0 141 207 Found child: md5 142 208 Reading library: base.md5 ··· 145 211 Reading library: base.shadow_stdlib 146 212 Number of children: 0 147 213 node_directive_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_directive_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 214 + node_directive_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 149 215 node_directive_test.js: [INFO] init() finished 150 216 node_directive_test.js: [INFO] setup() for env default... 151 217 node_directive_test.js: [INFO] Fetching stdlib__Format.cmi ··· 171 237 module MyMod : sig type t = int val zero : int end 172 238 [PASS] show_exception: # #show My_error;; 173 239 exception My_error of string 174 - [PASS] show_type_list: # #show_type list;; 175 - type 'a list = [] | (::) of 'a * 'a list 240 + [FAIL] show_type_list: # #show_type list;; 241 + type ('a : value_or_null) list = [] | (::) of 'a * 'a list 176 242 node_directive_test.js: [INFO] Fetching stdlib__List.cmi 177 243 178 244 [PASS] show_val_list_map: # #show_val List.map;; ··· 180 246 [PASS] show_module_list: # #show_module List;; 181 247 module List : 182 248 sig 183 - type 'a t = 'a list = [] | (::) of 'a * 'a list 184 - val length : 'a list -> int 185 - val compare_lengths : 'a list -> 'b list -> int 186 - val compare_length_with : 'a list -> int -> int 187 - val is_empty : 'a list -> bool 188 - val cons : 'a -> 'a list -> 'a list 189 - val singleton : 'a -> 'a list 190 - val hd : 'a list -> 'a 191 - val tl : 'a list -> 'a list 192 - val nth : 'a list -> int -> 'a 193 - val nth_opt : 'a list -> int -> 'a option 194 - val rev : 'a list -> 'a list 195 - val init : int -> (int -> 'a) -> 'a list 196 - val append : 'a list -> 'a list -> 'a list 197 - val rev_append : 'a list -> 'a list -> 'a list 198 - val concat : 'a list list -> 'a list 199 - val flatten : 'a list list -> 'a list 200 - val equal : ('a -> 'a -> bool) -> 'a list -> 'a list -> bool 201 - val compare : ('a -> 'a -> int) -> 'a list -> 'a list -> int 202 - val iter : ('a -> unit) -> 'a list -> unit 203 - val iteri : (int -> 'a -> unit) -> 'a list -> unit 204 - val map : ('a -> 'b) -> 'a list -> 'b list 205 - val mapi : (int -> 'a -> 'b) -> 'a list -> 'b list 206 - val rev_map : ('a -> 'b) -> 'a list -> 'b list 207 - val filter_map : ('a -> 'b option) -> 'a list -> 'b list 208 - val concat_map : ('a -> 'b list) -> 'a list -> 'b list 249 + type ('a : value_or_null) t = 'a list = [] | (::) of 'a * 'a list 250 + val length : 'a list -> int @@ portable 251 + val compare_lengths : 'a list -> 'b list -> int @@ portable 252 + val compare_length_with : 'a list -> int -> int @@ portable 253 + val is_empty : 'a list -> bool @@ portable 254 + val cons : 'a -> 'a list -> 'a list @@ portable 255 + val hd : 'a list -> 'a @@ portable 256 + val tl : 'a list -> 'a list @@ portable 257 + val nth : 'a list -> int -> 'a @@ portable 258 + val nth_opt : 'a list -> int -> 'a option @@ portable 259 + val rev : 'a list -> 'a list @@ portable 260 + val init : int -> (int -> 'a) -> 'a list @@ portable 261 + val append : 'a list -> 'a list -> 'a list @@ portable 262 + val rev_append : 'a list -> 'a list -> 'a list @@ portable 263 + val concat : 'a list list -> 'a list @@ portable 264 + val flatten : 'a list list -> 'a list @@ portable 265 + val equal : ('a -> 'a -> bool) -> 'a list -> 'a list -> bool @@ portable 266 + val compare : ('a -> 'a -> int) -> 'a list -> 'a list -> int @@ portable 267 + val iter : ('a -> unit) -> 'a list -> unit @@ portable 268 + val iteri : (int -> 'a -> unit) -> 'a list -> unit @@ portable 269 + val map : ('a -> 'b) -> 'a list -> 'b list @@ portable 270 + val mapi : (int -> 'a -> 'b) -> 'a list -> 'b list @@ portable 271 + val rev_map : ('a -> 'b) -> 'a list -> 'b list @@ portable 272 + val filter_map : ('a -> 'b option) -> 'a list -> 'b list @@ portable 273 + val concat_map : ('a -> 'b list) -> 'a list -> 'b list @@ portable 209 274 val fold_left_map : 210 - ('acc -> 'a -> 'acc * 'b) -> 'acc -> 'a list -> 'acc * 'b list 211 - val fold_left : ('acc -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc 212 - val fold_right : ('a -> 'acc -> 'acc) -> 'a list -> 'acc -> 'acc 213 - val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit 214 - val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list 215 - val rev_map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list 275 + ('acc -> 'a -> 'acc * 'b) -> 'acc -> 'a list -> 'acc * 'b list @@ 276 + portable 277 + val fold_left : ('acc -> 'a -> 'acc) -> 'acc -> 'a list -> 'acc @@ 278 + portable 279 + val fold_right : ('a -> 'acc -> 'acc) -> 'a list -> 'acc -> 'acc @@ 280 + portable 281 + val iter2 : ('a -> 'b -> unit) -> 'a list -> 'b list -> unit @@ portable 282 + val map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list @@ portable 283 + val rev_map2 : ('a -> 'b -> 'c) -> 'a list -> 'b list -> 'c list @@ 284 + portable 216 285 val fold_left2 : 217 - ('acc -> 'a -> 'b -> 'acc) -> 'acc -> 'a list -> 'b list -> 'acc 286 + ('acc -> 'a -> 'b -> 'acc) -> 'acc -> 'a list -> 'b list -> 'acc @@ 287 + portable 218 288 val fold_right2 : 219 - ('a -> 'b -> 'acc -> 'acc) -> 'a list -> 'b list -> 'acc -> 'acc 220 - val for_all : ('a -> bool) -> 'a list -> bool 221 - val exists : ('a -> bool) -> 'a list -> bool 222 - val for_all2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool 223 - val exists2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool 224 - val mem : 'a -> 'a list -> bool 225 - val memq : 'a -> 'a list -> bool 226 - val find : ('a -> bool) -> 'a list -> 'a 227 - val find_opt : ('a -> bool) -> 'a list -> 'a option 228 - val find_index : ('a -> bool) -> 'a list -> int option 229 - val find_map : ('a -> 'b option) -> 'a list -> 'b option 230 - val find_mapi : (int -> 'a -> 'b option) -> 'a list -> 'b option 231 - val filter : ('a -> bool) -> 'a list -> 'a list 232 - val find_all : ('a -> bool) -> 'a list -> 'a list 233 - val filteri : (int -> 'a -> bool) -> 'a list -> 'a list 234 - val take : int -> 'a list -> 'a list 235 - val drop : int -> 'a list -> 'a list 236 - val take_while : ('a -> bool) -> 'a list -> 'a list 237 - val drop_while : ('a -> bool) -> 'a list -> 'a list 238 - val partition : ('a -> bool) -> 'a list -> 'a list * 'a list 289 + ('a -> 'b -> 'acc -> 'acc) -> 'a list -> 'b list -> 'acc -> 'acc @@ 290 + portable 291 + val for_all : ('a -> bool) -> 'a list -> bool @@ portable 292 + val exists : ('a -> bool) -> 'a list -> bool @@ portable 293 + val for_all2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool @@ 294 + portable 295 + val exists2 : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool @@ 296 + portable 297 + val mem : 'a @ local -> 'a list @ local -> bool @@ portable 298 + val memq : 'a @ local -> 'a list @ local -> bool @@ portable 299 + val find : ('a -> bool) -> 'a list -> 'a @@ portable 300 + val find_opt : ('a -> bool) -> 'a list -> 'a option @@ portable 301 + val find_index : ('a -> bool) -> 'a list -> int option @@ portable 302 + val find_map : ('a -> 'b option) -> 'a list -> 'b option @@ portable 303 + val find_mapi : (int -> 'a -> 'b option) -> 'a list -> 'b option @@ 304 + portable 305 + val filter : ('a -> bool) -> 'a list -> 'a list @@ portable 306 + val find_all : ('a -> bool) -> 'a list -> 'a list @@ portable 307 + val filteri : (int -> 'a -> bool) -> 'a list -> 'a list @@ portable 308 + val partition : ('a -> bool) -> 'a list -> 'a list * 'a list @@ portable 239 309 val partition_map : 240 - ('a -> ('b, 'c) Either.t) -> 'a list -> 'b list * 'c list 241 - val assoc : 'a -> ('a * 'b) list -> 'b 242 - val assoc_opt : 'a -> ('a * 'b) list -> 'b option 243 - val assq : 'a -> ('a * 'b) list -> 'b 244 - val assq_opt : 'a -> ('a * 'b) list -> 'b option 245 - val mem_assoc : 'a -> ('a * 'b) list -> bool 246 - val mem_assq : 'a -> ('a * 'b) list -> bool 247 - val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list 248 - val remove_assq : 'a -> ('a * 'b) list -> ('a * 'b) list 249 - val split : ('a * 'b) list -> 'a list * 'b list 250 - val combine : 'a list -> 'b list -> ('a * 'b) list 251 - val sort : ('a -> 'a -> int) -> 'a list -> 'a list 252 - val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list 253 - val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list 254 - val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list 255 - val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 256 - val to_seq : 'a list -> 'a Seq.t 257 - val of_seq : 'a Seq.t -> 'a list 310 + ('a -> ('b, 'c) Either.t) -> 'a list -> 'b list * 'c list @@ portable 311 + val assoc : 'a -> ('a * 'b) list -> 'b @@ portable 312 + val assoc_opt : 'a -> ('a * 'b) list -> 'b option @@ portable 313 + val assq : 'a -> ('a * 'b) list -> 'b @@ portable 314 + val assq_opt : 'a -> ('a * 'b) list -> 'b option @@ portable 315 + val mem_assoc : 'a -> ('a * 'b) list -> bool @@ portable 316 + val mem_assq : 'a -> ('a * 'b) list -> bool @@ portable 317 + val remove_assoc : 'a -> ('a * 'b) list -> ('a * 'b) list @@ portable 318 + val remove_assq : 'a -> ('a * 'b) list -> ('a * 'b) list @@ portable 319 + val split : ('a * 'b) list -> 'a list * 'b list @@ portable 320 + val combine : 'a list -> 'b list -> ('a * 'b) list @@ portable 321 + val sort : ('a -> 'a -> int) -> 'a list -> 'a list @@ portable 322 + val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list @@ portable 323 + val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list @@ portable 324 + val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list @@ portable 325 + val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list @@ 326 + portable 327 + val to_seq : 'a list -> 'a Seq.t @@ portable 328 + val of_seq : 'a Seq.t -> 'a list @@ portable 258 329 end 259 330 [PASS] show_exception_not_found: # #show_exception Not_found;; 260 331 exception Not_found ··· 290 361 --- Section 6: #rectypes --- 291 362 292 363 Line 1, characters 0-23: 293 - Error: The type abbreviation t is cyclic: 294 - 'a t = 'a t -> int, 295 - 'a t -> int contains 'a t 364 + Error: The type abbreviation "t" is cyclic: 365 + "'a t" = "'a t -> int", 366 + "'a t -> int" contains "'a t" 296 367 [FAIL] rectypes_before: # type 'a t = 'a t -> int;; 297 368 [PASS] rectypes_after: # type 'a u = 'a u -> int;; 298 369 type 'a u = 'a u -> int ··· 324 395 class counter : 325 396 object val mutable n : int method get : int method incr : unit end 326 397 327 - === Results: 29/31 tests passed === 398 + === Results: 28/31 tests passed === 328 399 FAILURE: Some tests failed.
+84 -18
js_top_worker/test/node/node_env_test.expected
··· 2 2 3 3 node_env_test.js: [INFO] init() 4 4 Initializing findlib 5 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 5 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 6 6 Parsed uri: ./lib/stdlib-shims/META 7 7 Reading library: stdlib-shims 8 8 Number of children: 0 9 9 Parsed uri: ./lib/sexplib0/META 10 10 Reading library: sexplib0 11 + Number of children: 0 12 + Parsed uri: ./lib/sexp_type/META 13 + Reading library: sexp_type 14 + Number of children: 1 15 + Found child: grammar 16 + Reading library: sexp_type.grammar 17 + Number of children: 0 18 + Parsed uri: ./lib/ppxlib_jane/META 19 + Reading library: ppxlib_jane 20 + Number of children: 0 21 + Parsed uri: ./lib/ppxlib_ast/META 22 + Reading library: ppxlib_ast 23 + Number of children: 4 24 + Found child: ast 25 + Reading library: ppxlib_ast.ast 26 + Number of children: 0 27 + Found child: astlib 28 + Reading library: ppxlib_ast.astlib 29 + Number of children: 0 30 + Found child: stdppx 31 + Reading library: ppxlib_ast.stdppx 32 + Number of children: 0 33 + Found child: traverse_builtins 34 + Reading library: ppxlib_ast.traverse_builtins 11 35 Number of children: 0 12 36 Parsed uri: ./lib/ppxlib/META 13 37 Reading library: ppxlib 14 - Number of children: 11 15 - Found child: __private__ 16 - Reading library: ppxlib.__private__ 17 - Number of children: 1 18 - Found child: ppx_foo_deriver 19 - Reading library: ppxlib.__private__.ppx_foo_deriver 20 - Number of children: 0 38 + Number of children: 10 21 39 Found child: ast 22 40 Reading library: ppxlib.ast 23 41 Number of children: 0 ··· 48 66 Found child: traverse_builtins 49 67 Reading library: ppxlib.traverse_builtins 50 68 Number of children: 0 69 + Parsed uri: ./lib/ppx_sexp_conv/META 70 + Reading library: ppx_sexp_conv 71 + Number of children: 2 72 + Found child: expander 73 + Reading library: ppx_sexp_conv.expander 74 + Number of children: 0 75 + Found child: runtime-lib 76 + Reading library: ppx_sexp_conv.runtime-lib 77 + Number of children: 0 78 + Parsed uri: ./lib/ppx_hash/META 79 + Reading library: ppx_hash 80 + Number of children: 3 81 + Found child: base_internalhash_types 82 + Reading library: ppx_hash.base_internalhash_types 83 + Number of children: 0 84 + Found child: expander 85 + Reading library: ppx_hash.expander 86 + Number of children: 0 87 + Found child: runtime-lib 88 + Reading library: ppx_hash.runtime-lib 89 + Number of children: 0 90 + Parsed uri: ./lib/ppx_enumerate/META 91 + Reading library: ppx_enumerate 92 + Number of children: 1 93 + Found child: runtime-lib 94 + Reading library: ppx_enumerate.runtime-lib 95 + Number of children: 0 51 96 Parsed uri: ./lib/ppx_deriving/META 52 97 Reading library: ppx_deriving 53 98 Number of children: 12 ··· 90 135 Parsed uri: ./lib/ppx_derivers/META 91 136 Reading library: ppx_derivers 92 137 Number of children: 0 138 + Parsed uri: ./lib/ppx_compare/META 139 + Reading library: ppx_compare 140 + Number of children: 2 141 + Found child: expander 142 + Reading library: ppx_compare.expander 143 + Number of children: 0 144 + Found child: runtime-lib 145 + Reading library: ppx_compare.runtime-lib 146 + Number of children: 0 93 147 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 94 148 Reading library: ocaml_intrinsics_kernel 95 149 Number of children: 0 ··· 132 186 Found child: toplevel 133 187 Reading library: ocaml-compiler-libs.toplevel 134 188 Number of children: 0 189 + Parsed uri: ./lib/capsule0/META 190 + Reading library: capsule0 191 + Number of children: 2 192 + Found child: blocking_sync 193 + Reading library: capsule0.blocking_sync 194 + Number of children: 0 195 + Found child: expert 196 + Reading library: capsule0.expert 197 + Number of children: 0 198 + Parsed uri: ./lib/basement/META 199 + Reading library: basement 200 + Number of children: 0 135 201 Parsed uri: ./lib/base/META 136 202 Reading library: base 137 203 Number of children: 3 138 - Found child: base_internalhash_types 139 - Reading library: base.base_internalhash_types 204 + Found child: composition_infix 205 + Reading library: base.composition_infix 140 206 Number of children: 0 141 207 Found child: md5 142 208 Reading library: base.md5 ··· 145 211 Reading library: base.shadow_stdlib 146 212 Number of children: 0 147 213 node_env_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_env_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 214 + node_env_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 149 215 node_env_test.js: [INFO] init() finished 150 216 --- Section 1: Default Environment --- 151 217 node_env_test.js: [INFO] setup() for env default... ··· 175 241 176 242 --- Section 3: Environment Isolation --- 177 243 Line 1, characters 0-11: 178 - Error: Unbound value default_val 244 + Error: Unbound value "default_val" 179 245 [PASS] isolation_default_from_env1: No leakage: # default_val;; 180 246 181 247 Line 1, characters 0-8: 182 - Error: Unbound value env1_val 248 + Error: Unbound value "env1_val" 183 249 [PASS] isolation_env1_from_default: No leakage: # env1_val;; 184 250 [PASS] default_still_works: # default_val;; 185 251 - : int = 42 ··· 196 262 val env2_val : int = 200 197 263 198 264 Line 1, characters 0-8: 199 - Error: Unbound value env1_val 200 - Hint: Did you mean env2_val? 265 + Error: Unbound value "env1_val" 266 + Hint: Did you mean "env2_val"? 201 267 [PASS] isolation_env1_from_env2: No leakage: # env1_val;; 202 268 203 269 Line 1, characters 0-8: 204 - Error: Unbound value env2_val 205 - Hint: Did you mean env1_val? 270 + Error: Unbound value "env2_val" 271 + Hint: Did you mean "env1_val"? 206 272 [PASS] isolation_env2_from_env1: No leakage: # env2_val;; 207 273 208 274 --- Section 5: List Environments --- ··· 228 294 node_env_test.js: [INFO] setup() finished for env env2 229 295 230 296 Line 1, characters 0-8: 231 - Error: Unbound value env2_val 297 + Error: Unbound value "env2_val" 232 298 [PASS] new_env2_clean: Old value gone: # env2_val;; 233 299 [PASS] new_env2_define: # let new_env2_val = 999;; 234 300 val new_env2_val : int = 999
+94 -11
js_top_worker/test/node/node_incremental_test.expected
··· 1 1 node_incremental_test.js: [INFO] init() 2 2 Initializing findlib 3 3 node_incremental_test.js: [INFO] async_get: _opam/findlib_index.json 4 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 4 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 5 5 node_incremental_test.js: [INFO] async_get: _opam/./lib/stdlib-shims/META 6 6 Parsed uri: ./lib/stdlib-shims/META 7 7 Reading library: stdlib-shims ··· 10 10 Parsed uri: ./lib/sexplib0/META 11 11 Reading library: sexplib0 12 12 Number of children: 0 13 + node_incremental_test.js: [INFO] async_get: _opam/./lib/sexp_type/META 14 + Parsed uri: ./lib/sexp_type/META 15 + Reading library: sexp_type 16 + Number of children: 1 17 + Found child: grammar 18 + Reading library: sexp_type.grammar 19 + Number of children: 0 20 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppxlib_jane/META 21 + Parsed uri: ./lib/ppxlib_jane/META 22 + Reading library: ppxlib_jane 23 + Number of children: 0 24 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppxlib_ast/META 25 + Parsed uri: ./lib/ppxlib_ast/META 26 + Reading library: ppxlib_ast 27 + Number of children: 4 28 + Found child: ast 29 + Reading library: ppxlib_ast.ast 30 + Number of children: 0 31 + Found child: astlib 32 + Reading library: ppxlib_ast.astlib 33 + Number of children: 0 34 + Found child: stdppx 35 + Reading library: ppxlib_ast.stdppx 36 + Number of children: 0 37 + Found child: traverse_builtins 38 + Reading library: ppxlib_ast.traverse_builtins 39 + Number of children: 0 13 40 node_incremental_test.js: [INFO] async_get: _opam/./lib/ppxlib/META 14 41 Parsed uri: ./lib/ppxlib/META 15 42 Reading library: ppxlib 16 - Number of children: 11 17 - Found child: __private__ 18 - Reading library: ppxlib.__private__ 19 - Number of children: 1 20 - Found child: ppx_foo_deriver 21 - Reading library: ppxlib.__private__.ppx_foo_deriver 22 - Number of children: 0 43 + Number of children: 10 23 44 Found child: ast 24 45 Reading library: ppxlib.ast 25 46 Number of children: 0 ··· 50 71 Found child: traverse_builtins 51 72 Reading library: ppxlib.traverse_builtins 52 73 Number of children: 0 74 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppx_sexp_conv/META 75 + Parsed uri: ./lib/ppx_sexp_conv/META 76 + Reading library: ppx_sexp_conv 77 + Number of children: 2 78 + Found child: expander 79 + Reading library: ppx_sexp_conv.expander 80 + Number of children: 0 81 + Found child: runtime-lib 82 + Reading library: ppx_sexp_conv.runtime-lib 83 + Number of children: 0 84 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppx_hash/META 85 + Parsed uri: ./lib/ppx_hash/META 86 + Reading library: ppx_hash 87 + Number of children: 3 88 + Found child: base_internalhash_types 89 + Reading library: ppx_hash.base_internalhash_types 90 + Number of children: 0 91 + Found child: expander 92 + Reading library: ppx_hash.expander 93 + Number of children: 0 94 + Found child: runtime-lib 95 + Reading library: ppx_hash.runtime-lib 96 + Number of children: 0 97 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppx_enumerate/META 98 + Parsed uri: ./lib/ppx_enumerate/META 99 + Reading library: ppx_enumerate 100 + Number of children: 1 101 + Found child: runtime-lib 102 + Reading library: ppx_enumerate.runtime-lib 103 + Number of children: 0 53 104 node_incremental_test.js: [INFO] async_get: _opam/./lib/ppx_deriving/META 54 105 Parsed uri: ./lib/ppx_deriving/META 55 106 Reading library: ppx_deriving ··· 94 145 Parsed uri: ./lib/ppx_derivers/META 95 146 Reading library: ppx_derivers 96 147 Number of children: 0 148 + node_incremental_test.js: [INFO] async_get: _opam/./lib/ppx_compare/META 149 + Parsed uri: ./lib/ppx_compare/META 150 + Reading library: ppx_compare 151 + Number of children: 2 152 + Found child: expander 153 + Reading library: ppx_compare.expander 154 + Number of children: 0 155 + Found child: runtime-lib 156 + Reading library: ppx_compare.runtime-lib 157 + Number of children: 0 97 158 node_incremental_test.js: [INFO] async_get: _opam/./lib/ocaml_intrinsics_kernel/META 98 159 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 99 160 Reading library: ocaml_intrinsics_kernel ··· 140 201 Found child: toplevel 141 202 Reading library: ocaml-compiler-libs.toplevel 142 203 Number of children: 0 204 + node_incremental_test.js: [INFO] async_get: _opam/./lib/capsule0/META 205 + Parsed uri: ./lib/capsule0/META 206 + Reading library: capsule0 207 + Number of children: 2 208 + Found child: blocking_sync 209 + Reading library: capsule0.blocking_sync 210 + Number of children: 0 211 + Found child: expert 212 + Reading library: capsule0.expert 213 + Number of children: 0 214 + node_incremental_test.js: [INFO] async_get: _opam/./lib/basement/META 215 + Parsed uri: ./lib/basement/META 216 + Reading library: basement 217 + Number of children: 0 143 218 node_incremental_test.js: [INFO] async_get: _opam/./lib/base/META 144 219 Parsed uri: ./lib/base/META 145 220 Reading library: base 146 221 Number of children: 3 147 - Found child: base_internalhash_types 148 - Reading library: base.base_internalhash_types 222 + Found child: composition_infix 223 + Reading library: base.composition_infix 149 224 Number of children: 0 150 225 Found child: md5 151 226 Reading library: base.md5 ··· 155 230 Number of children: 0 156 231 node_incremental_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 157 232 node_incremental_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 158 - node_incremental_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 233 + node_incremental_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 234 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternaleval.cmi 159 235 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 160 236 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 237 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalAtomic.cmi 161 238 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 239 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/compiler_owee.cmi 240 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/opttopdirs.cmi 241 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalComprehension.cmi 242 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/gc_timings.cmi 243 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalQuote.cmi 162 244 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 163 245 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 164 246 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 165 247 node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 248 + node_incremental_test.js: [INFO] async_get: _opam/lib/ocaml/topdirs.cmi 166 249 node_incremental_test.js: [INFO] init() finished 167 250 node_incremental_test.js: [INFO] setup() for env default... 168 251 node_incremental_test.js: [INFO] Fetching stdlib__Format.cmi
+77 -11
js_top_worker/test/node/node_mime_test.expected
··· 2 2 3 3 node_mime_test.js: [INFO] init() 4 4 Initializing findlib 5 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 5 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 6 6 Parsed uri: ./lib/stdlib-shims/META 7 7 Reading library: stdlib-shims 8 8 Number of children: 0 9 9 Parsed uri: ./lib/sexplib0/META 10 10 Reading library: sexplib0 11 11 Number of children: 0 12 - Parsed uri: ./lib/ppxlib/META 13 - Reading library: ppxlib 14 - Number of children: 11 15 - Found child: __private__ 16 - Reading library: ppxlib.__private__ 12 + Parsed uri: ./lib/sexp_type/META 13 + Reading library: sexp_type 17 14 Number of children: 1 18 - Found child: ppx_foo_deriver 19 - Reading library: ppxlib.__private__.ppx_foo_deriver 15 + Found child: grammar 16 + Reading library: sexp_type.grammar 20 17 Number of children: 0 18 + Parsed uri: ./lib/ppxlib_jane/META 19 + Reading library: ppxlib_jane 20 + Number of children: 0 21 + Parsed uri: ./lib/ppxlib_ast/META 22 + Reading library: ppxlib_ast 23 + Number of children: 4 24 + Found child: ast 25 + Reading library: ppxlib_ast.ast 26 + Number of children: 0 27 + Found child: astlib 28 + Reading library: ppxlib_ast.astlib 29 + Number of children: 0 30 + Found child: stdppx 31 + Reading library: ppxlib_ast.stdppx 32 + Number of children: 0 33 + Found child: traverse_builtins 34 + Reading library: ppxlib_ast.traverse_builtins 35 + Number of children: 0 36 + Parsed uri: ./lib/ppxlib/META 37 + Reading library: ppxlib 38 + Number of children: 10 21 39 Found child: ast 22 40 Reading library: ppxlib.ast 23 41 Number of children: 0 ··· 48 66 Found child: traverse_builtins 49 67 Reading library: ppxlib.traverse_builtins 50 68 Number of children: 0 69 + Parsed uri: ./lib/ppx_sexp_conv/META 70 + Reading library: ppx_sexp_conv 71 + Number of children: 2 72 + Found child: expander 73 + Reading library: ppx_sexp_conv.expander 74 + Number of children: 0 75 + Found child: runtime-lib 76 + Reading library: ppx_sexp_conv.runtime-lib 77 + Number of children: 0 78 + Parsed uri: ./lib/ppx_hash/META 79 + Reading library: ppx_hash 80 + Number of children: 3 81 + Found child: base_internalhash_types 82 + Reading library: ppx_hash.base_internalhash_types 83 + Number of children: 0 84 + Found child: expander 85 + Reading library: ppx_hash.expander 86 + Number of children: 0 87 + Found child: runtime-lib 88 + Reading library: ppx_hash.runtime-lib 89 + Number of children: 0 90 + Parsed uri: ./lib/ppx_enumerate/META 91 + Reading library: ppx_enumerate 92 + Number of children: 1 93 + Found child: runtime-lib 94 + Reading library: ppx_enumerate.runtime-lib 95 + Number of children: 0 51 96 Parsed uri: ./lib/ppx_deriving/META 52 97 Reading library: ppx_deriving 53 98 Number of children: 12 ··· 90 135 Parsed uri: ./lib/ppx_derivers/META 91 136 Reading library: ppx_derivers 92 137 Number of children: 0 138 + Parsed uri: ./lib/ppx_compare/META 139 + Reading library: ppx_compare 140 + Number of children: 2 141 + Found child: expander 142 + Reading library: ppx_compare.expander 143 + Number of children: 0 144 + Found child: runtime-lib 145 + Reading library: ppx_compare.runtime-lib 146 + Number of children: 0 93 147 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 94 148 Reading library: ocaml_intrinsics_kernel 95 149 Number of children: 0 ··· 132 186 Found child: toplevel 133 187 Reading library: ocaml-compiler-libs.toplevel 134 188 Number of children: 0 189 + Parsed uri: ./lib/capsule0/META 190 + Reading library: capsule0 191 + Number of children: 2 192 + Found child: blocking_sync 193 + Reading library: capsule0.blocking_sync 194 + Number of children: 0 195 + Found child: expert 196 + Reading library: capsule0.expert 197 + Number of children: 0 198 + Parsed uri: ./lib/basement/META 199 + Reading library: basement 200 + Number of children: 0 135 201 Parsed uri: ./lib/base/META 136 202 Reading library: base 137 203 Number of children: 3 138 - Found child: base_internalhash_types 139 - Reading library: base.base_internalhash_types 204 + Found child: composition_infix 205 + Reading library: base.composition_infix 140 206 Number of children: 0 141 207 Found child: md5 142 208 Reading library: base.md5 ··· 145 211 Reading library: base.shadow_stdlib 146 212 Number of children: 0 147 213 node_mime_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_mime_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 214 + node_mime_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 149 215 node_mime_test.js: [INFO] init() finished 150 216 node_mime_test.js: [INFO] setup() for env default... 151 217 node_mime_test.js: [INFO] Fetching stdlib__Format.cmi
+79 -11
js_top_worker/test/node/node_ppx_test.expected
··· 2 2 3 3 node_ppx_test.js: [INFO] init() 4 4 Initializing findlib 5 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 5 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 6 6 Parsed uri: ./lib/stdlib-shims/META 7 7 Reading library: stdlib-shims 8 8 Number of children: 0 9 9 Parsed uri: ./lib/sexplib0/META 10 10 Reading library: sexplib0 11 11 Number of children: 0 12 + Parsed uri: ./lib/sexp_type/META 13 + Reading library: sexp_type 14 + Number of children: 1 15 + Found child: grammar 16 + Reading library: sexp_type.grammar 17 + Number of children: 0 18 + Parsed uri: ./lib/ppxlib_jane/META 19 + Reading library: ppxlib_jane 20 + Number of children: 0 21 + Parsed uri: ./lib/ppxlib_ast/META 22 + Reading library: ppxlib_ast 23 + Number of children: 4 24 + Found child: ast 25 + Reading library: ppxlib_ast.ast 26 + Number of children: 0 27 + Found child: astlib 28 + Reading library: ppxlib_ast.astlib 29 + Number of children: 0 30 + Found child: stdppx 31 + Reading library: ppxlib_ast.stdppx 32 + Number of children: 0 33 + Found child: traverse_builtins 34 + Reading library: ppxlib_ast.traverse_builtins 35 + Number of children: 0 12 36 Parsed uri: ./lib/ppxlib/META 13 37 Reading library: ppxlib 14 - Number of children: 11 15 - Found child: __private__ 16 - Reading library: ppxlib.__private__ 17 - Number of children: 1 18 - Found child: ppx_foo_deriver 19 - Reading library: ppxlib.__private__.ppx_foo_deriver 20 - Number of children: 0 38 + Number of children: 10 21 39 Found child: ast 22 40 Reading library: ppxlib.ast 23 41 Number of children: 0 ··· 48 66 Found child: traverse_builtins 49 67 Reading library: ppxlib.traverse_builtins 50 68 Number of children: 0 69 + Parsed uri: ./lib/ppx_sexp_conv/META 70 + Reading library: ppx_sexp_conv 71 + Number of children: 2 72 + Found child: expander 73 + Reading library: ppx_sexp_conv.expander 74 + Number of children: 0 75 + Found child: runtime-lib 76 + Reading library: ppx_sexp_conv.runtime-lib 77 + Number of children: 0 78 + Parsed uri: ./lib/ppx_hash/META 79 + Reading library: ppx_hash 80 + Number of children: 3 81 + Found child: base_internalhash_types 82 + Reading library: ppx_hash.base_internalhash_types 83 + Number of children: 0 84 + Found child: expander 85 + Reading library: ppx_hash.expander 86 + Number of children: 0 87 + Found child: runtime-lib 88 + Reading library: ppx_hash.runtime-lib 89 + Number of children: 0 90 + Parsed uri: ./lib/ppx_enumerate/META 91 + Reading library: ppx_enumerate 92 + Number of children: 1 93 + Found child: runtime-lib 94 + Reading library: ppx_enumerate.runtime-lib 95 + Number of children: 0 51 96 Parsed uri: ./lib/ppx_deriving/META 52 97 Reading library: ppx_deriving 53 98 Number of children: 12 ··· 90 135 Parsed uri: ./lib/ppx_derivers/META 91 136 Reading library: ppx_derivers 92 137 Number of children: 0 138 + Parsed uri: ./lib/ppx_compare/META 139 + Reading library: ppx_compare 140 + Number of children: 2 141 + Found child: expander 142 + Reading library: ppx_compare.expander 143 + Number of children: 0 144 + Found child: runtime-lib 145 + Reading library: ppx_compare.runtime-lib 146 + Number of children: 0 93 147 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 94 148 Reading library: ocaml_intrinsics_kernel 95 149 Number of children: 0 ··· 132 186 Found child: toplevel 133 187 Reading library: ocaml-compiler-libs.toplevel 134 188 Number of children: 0 189 + Parsed uri: ./lib/capsule0/META 190 + Reading library: capsule0 191 + Number of children: 2 192 + Found child: blocking_sync 193 + Reading library: capsule0.blocking_sync 194 + Number of children: 0 195 + Found child: expert 196 + Reading library: capsule0.expert 197 + Number of children: 0 198 + Parsed uri: ./lib/basement/META 199 + Reading library: basement 200 + Number of children: 0 135 201 Parsed uri: ./lib/base/META 136 202 Reading library: base 137 203 Number of children: 3 138 - Found child: base_internalhash_types 139 - Reading library: base.base_internalhash_types 204 + Found child: composition_infix 205 + Reading library: base.composition_infix 140 206 Number of children: 0 141 207 Found child: md5 142 208 Reading library: base.md5 ··· 145 211 Reading library: base.shadow_stdlib 146 212 Number of children: 0 147 213 node_ppx_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 148 - node_ppx_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 214 + node_ppx_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 149 215 node_ppx_test.js: [INFO] init() finished 150 216 node_ppx_test.js: [INFO] setup() for env default... 151 217 node_ppx_test.js: [INFO] Fetching stdlib__Format.cmi ··· 163 229 Loading package ppx_deriving.runtime 164 230 lib.dir: runtime 165 231 uri: ./lib/ppx_deriving/runtime/dynamic_cmis.json 232 + Archive ppx_deriving_runtime.cma not preloaded, loading 1 units 166 233 importScripts: ./lib/ppx_deriving/runtime/ppx_deriving_runtime.cma.js 167 234 Finished loading package ppx_deriving.runtime 168 235 Loading package ppx_deriving ··· 170 237 uri: ./lib/ppx_deriving/dynamic_cmis.json 171 238 Failed to unmarshal dynamic_cms from url ./lib/ppx_deriving/dynamic_cmis.json: Failed to fetch dynamic cmis 172 239 uri: ./lib/ppx_deriving/show/dynamic_cmis.json 240 + Archive ppx_deriving_show.cma not preloaded, loading 1 units 173 241 importScripts: ./lib/ppx_deriving/show/ppx_deriving_show.cma.js 174 242 node_ppx_test.js: [INFO] Error: TypeError: Cannot read properties of undefined (reading '6')
+107 -27
js_top_worker/test/node/node_test.expected
··· 2 2 node_test.js: [INFO] init() 3 3 Initializing findlib 4 4 node_test.js: [INFO] async_get: _opam/findlib_index.json 5 - Loaded findlib_index findlib_index.json: 10 META files, 0 universes 5 + Loaded findlib_index findlib_index.json: 19 META files, 0 universes 6 6 node_test.js: [INFO] async_get: _opam/./lib/stdlib-shims/META 7 7 Parsed uri: ./lib/stdlib-shims/META 8 8 Reading library: stdlib-shims ··· 11 11 Parsed uri: ./lib/sexplib0/META 12 12 Reading library: sexplib0 13 13 Number of children: 0 14 + node_test.js: [INFO] async_get: _opam/./lib/sexp_type/META 15 + Parsed uri: ./lib/sexp_type/META 16 + Reading library: sexp_type 17 + Number of children: 1 18 + Found child: grammar 19 + Reading library: sexp_type.grammar 20 + Number of children: 0 21 + node_test.js: [INFO] async_get: _opam/./lib/ppxlib_jane/META 22 + Parsed uri: ./lib/ppxlib_jane/META 23 + Reading library: ppxlib_jane 24 + Number of children: 0 25 + node_test.js: [INFO] async_get: _opam/./lib/ppxlib_ast/META 26 + Parsed uri: ./lib/ppxlib_ast/META 27 + Reading library: ppxlib_ast 28 + Number of children: 4 29 + Found child: ast 30 + Reading library: ppxlib_ast.ast 31 + Number of children: 0 32 + Found child: astlib 33 + Reading library: ppxlib_ast.astlib 34 + Number of children: 0 35 + Found child: stdppx 36 + Reading library: ppxlib_ast.stdppx 37 + Number of children: 0 38 + Found child: traverse_builtins 39 + Reading library: ppxlib_ast.traverse_builtins 40 + Number of children: 0 14 41 node_test.js: [INFO] async_get: _opam/./lib/ppxlib/META 15 42 Parsed uri: ./lib/ppxlib/META 16 43 Reading library: ppxlib 17 - Number of children: 11 18 - Found child: __private__ 19 - Reading library: ppxlib.__private__ 20 - Number of children: 1 21 - Found child: ppx_foo_deriver 22 - Reading library: ppxlib.__private__.ppx_foo_deriver 23 - Number of children: 0 44 + Number of children: 10 24 45 Found child: ast 25 46 Reading library: ppxlib.ast 26 47 Number of children: 0 ··· 50 71 Number of children: 0 51 72 Found child: traverse_builtins 52 73 Reading library: ppxlib.traverse_builtins 74 + Number of children: 0 75 + node_test.js: [INFO] async_get: _opam/./lib/ppx_sexp_conv/META 76 + Parsed uri: ./lib/ppx_sexp_conv/META 77 + Reading library: ppx_sexp_conv 78 + Number of children: 2 79 + Found child: expander 80 + Reading library: ppx_sexp_conv.expander 81 + Number of children: 0 82 + Found child: runtime-lib 83 + Reading library: ppx_sexp_conv.runtime-lib 84 + Number of children: 0 85 + node_test.js: [INFO] async_get: _opam/./lib/ppx_hash/META 86 + Parsed uri: ./lib/ppx_hash/META 87 + Reading library: ppx_hash 88 + Number of children: 3 89 + Found child: base_internalhash_types 90 + Reading library: ppx_hash.base_internalhash_types 91 + Number of children: 0 92 + Found child: expander 93 + Reading library: ppx_hash.expander 94 + Number of children: 0 95 + Found child: runtime-lib 96 + Reading library: ppx_hash.runtime-lib 97 + Number of children: 0 98 + node_test.js: [INFO] async_get: _opam/./lib/ppx_enumerate/META 99 + Parsed uri: ./lib/ppx_enumerate/META 100 + Reading library: ppx_enumerate 101 + Number of children: 1 102 + Found child: runtime-lib 103 + Reading library: ppx_enumerate.runtime-lib 53 104 Number of children: 0 54 105 node_test.js: [INFO] async_get: _opam/./lib/ppx_deriving/META 55 106 Parsed uri: ./lib/ppx_deriving/META ··· 95 146 Parsed uri: ./lib/ppx_derivers/META 96 147 Reading library: ppx_derivers 97 148 Number of children: 0 149 + node_test.js: [INFO] async_get: _opam/./lib/ppx_compare/META 150 + Parsed uri: ./lib/ppx_compare/META 151 + Reading library: ppx_compare 152 + Number of children: 2 153 + Found child: expander 154 + Reading library: ppx_compare.expander 155 + Number of children: 0 156 + Found child: runtime-lib 157 + Reading library: ppx_compare.runtime-lib 158 + Number of children: 0 98 159 node_test.js: [INFO] async_get: _opam/./lib/ocaml_intrinsics_kernel/META 99 160 Parsed uri: ./lib/ocaml_intrinsics_kernel/META 100 161 Reading library: ocaml_intrinsics_kernel ··· 141 202 Found child: toplevel 142 203 Reading library: ocaml-compiler-libs.toplevel 143 204 Number of children: 0 205 + node_test.js: [INFO] async_get: _opam/./lib/capsule0/META 206 + Parsed uri: ./lib/capsule0/META 207 + Reading library: capsule0 208 + Number of children: 2 209 + Found child: blocking_sync 210 + Reading library: capsule0.blocking_sync 211 + Number of children: 0 212 + Found child: expert 213 + Reading library: capsule0.expert 214 + Number of children: 0 215 + node_test.js: [INFO] async_get: _opam/./lib/basement/META 216 + Parsed uri: ./lib/basement/META 217 + Reading library: basement 218 + Number of children: 0 144 219 node_test.js: [INFO] async_get: _opam/./lib/base/META 145 220 Parsed uri: ./lib/base/META 146 221 Reading library: base 147 222 Number of children: 3 148 - Found child: base_internalhash_types 149 - Reading library: base.base_internalhash_types 223 + Found child: composition_infix 224 + Reading library: base.composition_infix 150 225 Number of children: 0 151 226 Found child: md5 152 227 Reading library: base.md5 ··· 156 231 Number of children: 0 157 232 node_test.js: [INFO] sync_get: _opam/lib/ocaml/dynamic_cmis.json 158 233 node_test.js: [INFO] Adding toplevel modules for dynamic cmis from lib/ocaml/ 159 - node_test.js: [INFO] toplevel modules: CamlinternalFormat, CamlinternalLazy, CamlinternalFormatBasics, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO 234 + node_test.js: [INFO] toplevel modules: Camlinternaleval, CamlinternalFormat, CamlinternalLazy, CamlinternalAtomic, CamlinternalFormatBasics, Compiler_owee, Opttopdirs, CamlinternalComprehension, Gc_timings, CamlinternalQuote, CamlinternalMod, Std_exit, Stdlib, CamlinternalOO, Topdirs 235 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternaleval.cmi 160 236 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormat.cmi 161 237 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalLazy.cmi 238 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalAtomic.cmi 162 239 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalFormatBasics.cmi 240 + node_test.js: [INFO] async_get: _opam/lib/ocaml/compiler_owee.cmi 241 + node_test.js: [INFO] async_get: _opam/lib/ocaml/opttopdirs.cmi 242 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalComprehension.cmi 243 + node_test.js: [INFO] async_get: _opam/lib/ocaml/gc_timings.cmi 244 + node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalQuote.cmi 163 245 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalMod.cmi 164 246 node_test.js: [INFO] async_get: _opam/lib/ocaml/std_exit.cmi 165 247 node_test.js: [INFO] async_get: _opam/lib/ocaml/stdlib.cmi 166 248 node_test.js: [INFO] async_get: _opam/lib/ocaml/camlinternalOO.cmi 249 + node_test.js: [INFO] async_get: _opam/lib/ocaml/topdirs.cmi 167 250 node_test.js: [INFO] init() finished 168 251 node_test.js: [INFO] setup() for env default... 169 252 node_test.js: [INFO] Fetching stdlib__Format.cmi ··· 177 260 node_test.js: [INFO] Setup complete 178 261 Loading package base 179 262 lib.dir: None 180 - Loading package base.base_internalhash_types 181 - lib.dir: base_internalhash_types 182 - uri: ./lib/base/base_internalhash_types/dynamic_cmis.json 183 - node_test.js: [INFO] sync_get: _opam/./lib/base/base_internalhash_types/dynamic_cmis.json 184 - importScripts: ./lib/base/base_internalhash_types/base_internalhash_types.cma.js 185 - Finished loading package base.base_internalhash_types 186 263 Loading package base.shadow_stdlib 187 264 lib.dir: shadow_stdlib 188 265 uri: ./lib/base/shadow_stdlib/dynamic_cmis.json 189 266 node_test.js: [INFO] sync_get: _opam/./lib/base/shadow_stdlib/dynamic_cmis.json 267 + Archive shadow_stdlib.cma not preloaded, loading 1 units 190 268 importScripts: ./lib/base/shadow_stdlib/shadow_stdlib.cma.js 191 269 Finished loading package base.shadow_stdlib 192 - Loading package ocaml_intrinsics_kernel 270 + Loading package basement 193 271 lib.dir: None 194 - uri: ./lib/ocaml_intrinsics_kernel/dynamic_cmis.json 195 - node_test.js: [INFO] sync_get: _opam/./lib/ocaml_intrinsics_kernel/dynamic_cmis.json 196 - importScripts: ./lib/ocaml_intrinsics_kernel/ocaml_intrinsics_kernel.cma.js 197 - Finished loading package ocaml_intrinsics_kernel 198 - Loading package sexplib0 199 - lib.dir: None 200 - uri: ./lib/sexplib0/dynamic_cmis.json 201 - node_test.js: [INFO] sync_get: _opam/./lib/sexplib0/dynamic_cmis.json 202 - importScripts: ./lib/sexplib0/sexplib0.cma.js 272 + uri: ./lib/basement/dynamic_cmis.json 273 + node_test.js: [INFO] sync_get: _opam/./lib/basement/dynamic_cmis.json 274 + Archive basement.cma not preloaded, loading 17 units 275 + importScripts: ./lib/basement/basement.cma.js 276 + Finished loading package basement 277 + Loading package capsule0.expert 278 + lib.dir: expert 279 + uri: ./lib/capsule0/expert/dynamic_cmis.json 280 + node_test.js: [INFO] sync_get: _opam/./lib/capsule0/expert/dynamic_cmis.json 281 + Archive capsule_expert.cma not preloaded, loading 1 units 282 + importScripts: ./lib/capsule0/expert/capsule_expert.cma.js 203 283 node_test.js: [ERROR] Error: TypeError: k is not a function
+2
odoc-admonition-extension/index.mld
··· 1 1 {0 Admonition Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This extension adds support for admonition blocks (callouts) in odoc 4 6 documentation. Admonitions are used to highlight important information, 5 7 warnings, tips, and other notable content.
+2
odoc-docsite/doc/index.mld
··· 1 1 {0 Odoc Documentation-site Shell} 2 2 3 + @admonition.warning This plugin was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This plugin for odoc provides a more modern styling for odoc's output, including 4 6 SPA-style navigation.
+2
odoc-dot-extension/index.mld
··· 1 1 {0 Graphviz/DOT Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This extension adds support for {{:https://graphviz.org/}Graphviz} diagrams 4 6 using the DOT language in odoc documentation. Graphviz is a powerful graph 5 7 visualization tool that can render complex node-edge diagrams.
+1 -1
odoc-interactive-extension/doc/focs_2020_q2.mld
··· 1 1 {0 Simplified Mastermind} 2 2 3 - @x-ocaml.universe https://jon.ludl.am/ocaml/ 3 + @x-ocaml.universe ./universe 4 4 5 5 {e Cambridge Computer Science Tripos Part IA -- 2020 -- Paper 1, Question 2} 6 6
+1 -1
odoc-interactive-extension/doc/focs_2024_q1.mld
··· 1 1 {0 Statistical Analysis with Fold, Map, and Filter} 2 2 3 - @x-ocaml.universe https://jon.ludl.am/ocaml/ 3 + @x-ocaml.universe ./universe 4 4 5 5 {e Cambridge Computer Science Tripos Part IA -- 2024 -- Paper 1, Question 1} 6 6
+1 -1
odoc-interactive-extension/doc/focs_2025_q2.mld
··· 1 1 {0 Expression Evaluation and Polish Notation} 2 2 3 - @x-ocaml.universe https://jon.ludl.am/ocaml/ 3 + @x-ocaml.universe ./universe 4 4 5 5 {e Cambridge Computer Science Tripos Part IA -- 2025 -- Paper 1, Question 2} 6 6
+2
odoc-interactive-extension/doc/index.mld
··· 1 1 {0 Interactive OCaml Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 See the various notebooks in the sidebar for examples of this extension. 4 6
+2
odoc-jons-plugins/doc/index.mld
··· 1 1 {0 odoc-jons-plugins} 2 2 3 + @admonition.warning This plugin was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Custom odoc shell and extensions for {{:https://jon.recoil.org}jon.recoil.org}. 4 6 5 7 This plugin provides the HTML shell used to render the site, including
+2
odoc-mermaid-extension/index.mld
··· 1 1 {0 Mermaid Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This extension adds support for {{:https://mermaid.js.org/}Mermaid} diagrams 4 6 in odoc documentation. Mermaid is a JavaScript-based diagramming tool that 5 7 renders Markdown-inspired text definitions into diagrams.
+2
odoc-msc-extension/index.mld
··· 1 1 {0 MSC Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This extension adds support for {{:https://www.mcternan.me.uk/mscgen/}Message 4 6 Sequence Charts} (MSC) in odoc documentation. MSC is a graphical and textual 5 7 language for describing interactions between components.
+2
odoc-rfc-extension/index.mld
··· 1 1 {0 RFC Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 This extension adds support for citing IETF RFCs (Request for Comments) in 4 6 odoc documentation. It provides a convenient way to reference internet 5 7 standards with automatic linking and formatting.
+2
odoc-scrollycode-extension/doc/index.mld
··· 1 1 {0 Scrollycode Extension for odoc} 2 2 3 + @admonition.warning This extension was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Scroll-driven code tutorials for odoc. Authored as [.mld] files using 4 6 [@@scrolly] custom tags — each step reveals new code alongside an 5 7 explanation.
+14
odoc-scrollycode-extension/src/scrollycode_css.ml
··· 14 14 let structural_css = 15 15 {| 16 16 /* === Container === */ 17 + 18 + /* odoc wraps tag extension output in <ul class="at-tags"><li class="scrolly"> 19 + — remove the bullet and list padding. */ 20 + ul.at-tags:has(> li.scrolly) { 21 + list-style: none; 22 + padding: 0; 23 + margin: 0; 24 + } 25 + li.scrolly { 26 + list-style: none; 27 + padding: 0; 28 + margin: 0; 29 + } 30 + 17 31 .sc-container { 18 32 font-family: var(--sc-font-body); 19 33 background: var(--sc-bg);
+2 -5
odoc-scrollycode-extension/src/scrollycode_extension.ml
··· 627 627 (* Container — no theme class, CSS custom properties handle theming *) 628 628 Buffer.add_string buf "<div class=\"sc-container\">\n"; 629 629 630 - (* Hero *) 631 - Buffer.add_string buf "<div class=\"sc-hero\">\n"; 632 - Buffer.add_string buf 633 - (Printf.sprintf " <h1>%s</h1>\n" (html_escape title)); 634 - Buffer.add_string buf "</div>\n"; 630 + (* The page's {0} heading serves as the title — no hero needed. *) 631 + ignore title; 635 632 636 633 (* Progress pips *) 637 634 Buffer.add_string buf "<nav class=\"sc-progress\">\n";
+2
odoc-standalone/doc/index.mld
··· 1 1 {0 Odoc Standalone Output} 2 2 3 + @admonition.warning This plugin was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 A self-contained HTML shell plugin for odoc. Inlines all CSS and JavaScript 4 6 into each generated HTML page, producing documentation files that work 5 7 without a separate support-files directory. Fonts are loaded from Google
+64 -21
odoc/doc/extensions.mld
··· 1 1 {0 Writing Extensions} 2 2 3 + @admonition.note The odoc extension API is early in development and 4 + the interface is still changing frequently. Expect breaking changes 5 + between releases. 6 + 3 7 [odoc] supports a plugin system for custom tags and code blocks. Extensions 4 8 are OCaml libraries loaded at doc-generation time that transform custom 5 9 markup into HTML, LaTeX, or other output formats. ··· 12 16 There are two kinds of extension: 13 17 14 18 {ul 15 - {- {b Tag extensions} handle custom tags like [@@note], [@@rfc], [@@scrolly]. 19 + {- {b Tag extensions} handle custom tags like [@note], [@rfc], [@scrolly]. 16 20 They receive the tag's content as a list of block elements and return 17 21 document content, resources, and assets.} 18 22 {- {b Code block extensions} handle fenced code blocks with a custom 19 - language, e.g., [{@@dot ...}] or [{@@ocaml ...}]. 23 + language, e.g., [{@dot ...}] or [{@ocaml ...}]. 20 24 They receive the code text plus any options and return the same output 21 25 types.}} 22 26 ··· 87 91 (e.g., injecting a [<meta>] tag). Never put your main runtime in an 88 92 inline script. 89 93 94 + {1 JavaScript Lifecycle} 95 + 96 + The following diagram shows when extension JavaScript runs during both 97 + direct page loads and SPA navigations: 98 + 99 + {@mermaid[ 100 + sequenceDiagram 101 + participant Browser 102 + participant Head as head scripts 103 + participant Shell as Docsite Shell 104 + participant Ext as Extension JS 105 + participant DOM 106 + 107 + rect rgb(40, 60, 80) 108 + Note over Browser,DOM: Direct page load 109 + Browser->>Head: Parse head 110 + Head->>Ext: Load via script src="ext.js" 111 + Ext->>Ext: readyState === 'loading' 112 + Browser->>DOM: DOMContentLoaded 113 + Ext->>DOM: initAll() — find and init widgets 114 + Ext->>DOM: Listen for 'odoc-spa-loaded' 115 + end 116 + 117 + rect rgb(60, 40, 60) 118 + Note over Browser,DOM: SPA navigation (sidebar click) 119 + Browser->>Shell: click event on sidebar link 120 + Shell->>Shell: fetch(newPage.html) 121 + Shell->>DOM: Swap .odoc-content innerHTML 122 + Shell->>DOM: Load new head scripts 123 + Shell->>DOM: Dispatch 'odoc-spa-loaded' event 124 + Note over Head: ext.js already loaded — NOT re-executed 125 + Note over DOM: DOMContentLoaded does NOT fire 126 + DOM->>Ext: 'odoc-spa-loaded' handler fires 127 + Ext->>DOM: initAll() — find new widgets, skip already-init'd 128 + end 129 + ]} 130 + 131 + The key insight: on SPA navigation, neither the script nor 132 + [DOMContentLoaded] re-fires. The shell dispatches a custom 133 + [odoc-spa-loaded] event after swapping content and loading head 134 + scripts — this is the recommended way for extensions to detect 135 + new content after navigation. 136 + 90 137 {1:spa SPA Navigation: The Critical Pitfall} 91 138 92 139 The odoc {b docsite shell} (and similar shells) implement single-page app ··· 155 202 156 203 // Run on initial page load. 157 204 if (document.readyState === 'loading') { 158 - document.addEventListener('DOMContentLoaded', function() { 159 - initAll(); 160 - observe(); 161 - }); 205 + document.addEventListener('DOMContentLoaded', function() { initAll(); }); 162 206 } else { 163 207 initAll(); 164 - observe(); 165 208 } 166 209 167 - // Watch for new content injected by SPA navigation. 168 - function observe() { 169 - new MutationObserver(function() { initAll(); }) 170 - .observe(document.body, { childList: true, subtree: true }); 171 - } 210 + // Re-initialise after SPA navigation swaps in new content. 211 + document.addEventListener('odoc-spa-loaded', function() { initAll(); }); 172 212 })(); 173 213 ]} 174 214 ··· 176 216 177 217 {ul 178 218 {- {b Guard against double-init.} Use a [data-*] attribute to mark 179 - initialised elements. The [MutationObserver] fires on every DOM 180 - mutation, so [initAll] may be called many times.} 219 + initialised elements. [initAll] may be called multiple times.} 181 220 {- {b Check [document.readyState].} The script is in [<head>], so 182 221 [document.body] doesn't exist yet on the initial load. Wait for 183 - [DOMContentLoaded] before attaching the [MutationObserver].} 222 + [DOMContentLoaded] before first [initAll].} 223 + {- {b Listen for [odoc-spa-loaded].} The docsite shell dispatches this 224 + custom event after swapping content and loading head scripts. This 225 + is the recommended way for extensions to detect new content.} 184 226 {- {b Don't rely on [DOMContentLoaded] alone.} After SPA navigation the 185 227 [Js_url] script has already loaded and [DOMContentLoaded] already fired. 186 - The [MutationObserver] is what detects the new content.}} 228 + The [odoc-spa-loaded] event is what triggers re-initialisation.}} 187 229 188 230 {2 Case study: Scrollycode} 189 231 ··· 225 267 ]} 226 268 } 227 269 {- Replace the [DOMContentLoaded] gate with [readyState] check + 228 - [MutationObserver] (as shown in the pattern above).} 270 + [odoc-spa-loaded] listener (as shown in the pattern above).} 229 271 {- Add a [data-sc-init] guard on each [.sc-container] to prevent 230 272 double-initialisation.}} 231 273 ··· 263 305 {- {b No body scripts.} All JavaScript is delivered via [Js_url] (support 264 306 files) or small [Js_inline] bootstraps in [resources]. Nothing is 265 307 embedded in the HTML body via [Raw_markup].} 266 - {- {b No [DOMContentLoaded] dependency.} Use [document.readyState] check + 267 - [MutationObserver] instead.} 308 + {- {b No [DOMContentLoaded] dependency.} Use [document.readyState] check 309 + for initial load, plus [odoc-spa-loaded] listener for navigations.} 268 310 {- {b Double-init guard.} Every element you initialise is marked (e.g., 269 311 with a [data-*] attribute) and skipped on subsequent [initAll] calls.} 270 312 {- {b SPA navigation tested.} Both direct-load and sidebar-navigation 271 313 paths work.} 272 - {- {b [MutationObserver] set up after [document.body] exists.} If your 273 - script is in [<head>], [document.body] is [null] on initial parse.}} 314 + {- {b Listens for [odoc-spa-loaded].} The docsite shell dispatches this 315 + event after content swap — this is your extension's cue to scan for 316 + new elements.}}
+3
odoc/src/extension_api/odoc_extension_api.ml
··· 1 1 (** Odoc Extension API 2 2 3 + {b Note:} This API is early in development and the interface is still 4 + changing frequently. Expect breaking changes between releases. 5 + 3 6 This module provides the interface for odoc tag extensions. 4 7 Extensions are dynamically loaded plugins that handle custom tags 5 8 like [@note], [@rfc], [@example], etc.
+14 -15
odoc/test/generators/html/Markup.html
··· 29 29 //]]> 30 30 31 31 </script> 32 - <script> 33 - 34 - //<![CDATA[ 35 - (function(){if(window.__xOcamlLoaded)return;window.__xOcamlLoaded=true;var s=document.createElement('script');s.src='./_x-ocaml/x-ocaml.js';s.setAttribute('src-worker','./_x-ocaml/worker.js');s.setAttribute('backend','builtin');document.head.appendChild(s)})(); 36 - //]]> 37 - 38 - </script> 39 32 </head> 40 33 <body class="odoc"> 41 34 <nav class="odoc-nav"><a href="index.html">Up</a> – ··· 174 167 <h2 id="preformatted-text"> 175 168 <a href="#preformatted-text" class="anchor"></a>Preformatted text 176 169 </h2><p>This is a code block:</p> 177 - <x-ocaml mode="interactive"> let foo = () 178 - (** There are some nested comments in here, but an unpaired comment 179 - terminator would terminate the whole doc surrounding comment. It's 180 - best to keep code blocks no wider than 72 characters. *) 181 - 182 - let bar = 183 - ignore foo</x-ocaml> 184 - <p>There are also verbatim blocks:</p> 170 + <div> 171 + <pre class="language-ocaml"> 172 + <code> 173 + let foo = () 174 + (** There are some nested comments in here, but an unpaired comment 175 + terminator would terminate the whole doc surrounding comment. 176 + It's 177 + best to keep code blocks no wider than 72 characters. *) 178 + 179 + let bar = 180 + ignore foo 181 + </code> 182 + </pre> 183 + </div><p>There are also verbatim blocks:</p> 185 184 <pre>The main difference is these don't get syntax highlighting.</pre> 186 185 <h2 id="lists"><a href="#lists" class="anchor"></a>Lists</h2> 187 186 <ul><li>This is a</li><li>shorthand bulleted list,</li>
+9 -1
odoc/test/generators/latex/Markup.tex
··· 44 44 This is a reference to \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}. References can have replacement text: \hyperref[Markup--val-foo]{\ocamlinlinecode{the value foo}[p\pageref*{Markup--val-foo}]}. Except for the special lookup support, references are pretty much just like links. The replacement text can have nested styles: \hyperref[Markup--val-foo]{\ocamlinlinecode{\bold{bold}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{italic}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{\emph{emphasis}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{super\textsuperscript{script}}[p\pageref*{Markup--val-foo}]}, \hyperref[Markup--val-foo]{\ocamlinlinecode{sub\textsubscript{script}}[p\pageref*{Markup--val-foo}]}, and \hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{code}}[p\pageref*{Markup--val-foo}]}. It's also possible to surround a reference in a style: \bold{\hyperref[Markup--val-foo]{\ocamlinlinecode{\ocamlinlinecode{foo}}[p\pageref*{Markup--val-foo}]}}. References can't be nested inside references, and links and references can't be nested inside each other. 45 45 46 46 \subsection{Preformatted text\label{Markup--preformatted-text}}% 47 - This is a code block: 47 + This is a code block:\medbreak 48 + \begin{ocamlcodeblock} 49 + let foo = () 50 + (** There are some nested comments in here, but an unpaired comment 51 + terminator would terminate the whole doc surrounding comment. It's 52 + best to keep code blocks no wider than 72 characters. *) 48 53 54 + let bar = 55 + ignore foo 56 + \end{ocamlcodeblock}\medbreak 49 57 There are also verbatim blocks: 50 58 51 59 \begin{verbatim}The main difference is these don't get syntax highlighting.\end{verbatim}%
+10
odoc/test/generators/man/Markup.3o
··· 148 148 .fi 149 149 This is a code block: 150 150 .sp 151 + .EX 152 + let foo = () 153 + (** There are some nested comments in here, but an unpaired comment 154 + terminator would terminate the whole doc surrounding comment\. It's 155 + best to keep code blocks no wider than 72 characters\. *) 156 + 157 + let bar = 158 + ignore foo 159 + .EE 160 + .sp 151 161 There are also verbatim blocks: 152 162 .sp 153 163 .EX
+4 -2
odoc/test/generators/markdown/Markup.md
··· 66 66 67 67 This is a code block: 68 68 69 - <x-ocaml mode="interactive"> let foo = () 69 + ```ocaml 70 + let foo = () 70 71 (** There are some nested comments in here, but an unpaired comment 71 72 terminator would terminate the whole doc surrounding comment. It's 72 73 best to keep code blocks no wider than 72 characters. *) 73 74 74 75 let bar = 75 - ignore foo</x-ocaml> 76 + ignore foo 77 + ``` 76 78 There are also verbatim blocks: 77 79 78 80 ```
+7 -6
odoc/test/integration/code_block_handlers.t/run.t
··· 13 13 $ odoc html-generate -o html page-test_code_blocks.odocl 14 14 odoc: internal error, uncaught exception: 15 15 Sys_error("html/test/test_code_blocks.html: Permission denied") 16 - Raised by primitive operation at Stdlib.open_out_gen in file "stdlib.ml", line 331, characters 29-55 17 - Called from Stdlib.open_out in file "stdlib.ml" (inlined), line 336, characters 2-74 18 - Called from Odoc_utils.Io_utils.with_open_out in file "odoc/src/utils/odoc_utils.ml" (inlined), line 55, characters 19-35 19 - Called from Odoc_utils.Io_utils.with_formatter_out in file "odoc/src/utils/odoc_utils.ml", line 62, characters 4-74 16 + Raised by primitive operation at Stdlib.open_out_gen in file "stdlib.ml" (inlined), line 346, characters 29-55 17 + Called from Stdlib.open_out in file "stdlib.ml" (inlined), line 351, characters 2-74 18 + Called from Odoc_utils.Io_utils.with_open_out in file "odoc/src/utils/odoc_utils.ml", line 55, characters 19-35 20 19 Called from Odoc_document__Renderer.traverse.aux in file "odoc/src/document/renderer.ml", line 18, characters 4-44 21 - Called from Stdlib__List.iter in file "list.ml", line 114, characters 12-15 20 + Called from Stdlib__List.iter in file "list.ml" (inlined), line 117, characters 12-15 21 + Called from Odoc_document__Renderer.traverse in file "odoc/src/document/renderer.ml", line 21, characters 2-17 22 22 Called from Odoc_odoc__Rendering.generate_odoc.(fun) in file "odoc/src/odoc/rendering.ml", line 82, characters 2-68 23 - Called from Stdlib__List.fold_left in file "list.ml", line 125, characters 24-34 23 + Called from Stdlib__List.fold_left in file "list.ml" (inlined), line 128, characters 24-34 24 + Called from Dune__exe__Main.Make_renderer.Generate.generate in file "odoc/src/odoc/bin/main.ml", lines 919-921, characters 6-131 24 25 Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 24, characters 19-24 25 26 Called from Cmdliner_term.app.(fun) in file "cmdliner_term.ml", line 22, characters 12-19 26 27 Called from Cmdliner_eval.run_parser in file "cmdliner_eval.ml", line 35, characters 37-44
+4
odoc/test/integration/html_support_files.t/run.t
··· 1 1 $ odoc support-files -o with-theme 2 2 $ find with-theme | grep -v extensions | sort 3 3 with-theme 4 + with-theme/_x-ocaml 5 + with-theme/_x-ocaml/x-ocaml.js 4 6 with-theme/fonts 5 7 with-theme/fonts/KaTeX_AMS-Regular.woff2 6 8 with-theme/fonts/KaTeX_Caligraphic-Bold.woff2 ··· 42 44 $ odoc support-files --without-theme -o without-theme 43 45 $ find without-theme | grep -v extensions | sort 44 46 without-theme 47 + without-theme/_x-ocaml 48 + without-theme/_x-ocaml/x-ocaml.js 45 49 without-theme/fonts 46 50 without-theme/fonts/KaTeX_AMS-Regular.woff2 47 51 without-theme/fonts/KaTeX_Caligraphic-Bold.woff2
+20 -12
odoc/test/integration/markdown-with-belt.t/run.t
··· 28 28 29 29 For higher order functions, it will be suffixed **U** if it takes uncurried callback. 30 30 31 - <x-ocaml mode="interactive"> val forEach : 'a t -&gt; ('a -&gt; unit) -&gt; unit 32 - val forEachU : 'a t -&gt; ('a -&gt; unit [\@u]) -&gt; unit</x-ocaml> 31 + ```ocaml 32 + val forEach : 'a t -> ('a -> unit) -> unit 33 + val forEachU : 'a t -> ('a -> unit [\@u]) -> unit 34 + ``` 33 35 In general, uncurried version will be faster, but it may be less familiar to people who have a background in functional programming. 34 36 35 37 **A special encoding for collection safety** ··· 38 40 39 41 The original OCaml stdlib solved the problem using *functor* which creates a big closure at runtime and makes dead code elimination much harder. We use a phantom type to solve the problem: 40 42 41 - <x-ocaml mode="interactive"> module Comparable1 = Belt.Id.MakeComparable (struct 43 + ```ocaml 44 + module Comparable1 = Belt.Id.MakeComparable (struct 42 45 type t = int * int 43 46 let cmp (a0, a1) (b0, b1) = 44 47 match Pervasives.compare a0 b0 with 45 - | 0 -&gt; Pervasives.compare a1 b1 46 - | c -&gt; c 48 + | 0 -> Pervasives.compare a1 b1 49 + | c -> c 47 50 end) 48 51 49 52 let mySet1 = Belt.Set.make ~id:(module Comparable1) ··· 52 55 type t = int * int 53 56 let cmp (a0, a1) (b0, b1) = 54 57 match Pervasives.compare a0 b0 with 55 - | 0 -&gt; Pervasives.compare a1 b1 56 - | c -&gt; c 58 + | 0 -> Pervasives.compare a1 b1 59 + | c -> c 57 60 end) 58 61 59 - let mySet2 = Belt.Set.make ~id:(module Comparable2)</x-ocaml> 62 + let mySet2 = Belt.Set.make ~id:(module Comparable2) 63 + ``` 60 64 Here, the compiler would infer `mySet1` and `mySet2` having different type, so e.g. a \`merge\` operation that tries to merge these two sets will correctly fail. 61 65 62 - <x-ocaml mode="interactive"> val mySet1 : (int * int, Comparable1.identity) t 63 - val mySet2 : (int * int, Comparable2.identity) t</x-ocaml> 66 + ```ocaml 67 + val mySet1 : (int * int, Comparable1.identity) t 68 + val mySet2 : (int * int, Comparable2.identity) t 69 + ``` 64 70 `Comparable1.identity` and `Comparable2.identity` are not the same using our encoding scheme. 65 71 66 72 **Collection Hierarchy** 67 73 68 74 In general, we provide a generic collection module, but also create specialized modules for commonly used data type. Take *Belt.Set* for example, we provide: 69 75 70 - <x-ocaml mode="interactive"> Belt.Set 76 + ```ocaml 77 + Belt.Set 71 78 Belt.Set.Int 72 - Belt.Set.String</x-ocaml> 79 + Belt.Set.String 80 + ``` 73 81 The specialized modules *Belt.Set.Int*, *Belt.Set.String* are in general more efficient. 74 82 75 83 Currently, both *Belt\_Set* and *Belt.Set* are accessible to users for some technical reasons, we **strongly recommend** users stick to qualified import, *Belt.Set*, we may hide the internal, *i.e*, *Belt\_Set* in the future
+3 -1
odoc/test/integration/markdown.t/run.t
··· 153 153 154 154 Inline `code`. 155 155 156 - <x-ocaml mode="interactive">let _ = &quot;Block code&quot;</x-ocaml> 156 + ```ocaml 157 + let _ = "Block code" 158 + ``` 157 159 ```text 158 160 Code block with {[inner code block syntax]} 159 161 ```
+10 -15
odoc/test/integration/oxcaml_modes.t/run.t
··· 10 10 Check arrow argument modes (@ local, @ unique): 11 11 12 12 $ grep 'keyword.*@.*local' html/test/Test_modes/index.html | head -1 | sed 's/ *$//' 13 - <span>string <span class="keyword">@</span> local 13 + <span class="keyword">@</span> <span class="mode">local</span> 14 14 15 15 $ grep 'keyword.*@.*unique' html/test/Test_modes/index.html | head -1 | sed 's/ *$//' 16 - <span>string <span class="keyword">@</span> unique 17 16 18 17 Multiple argument modes on one arrow: 19 18 20 19 $ grep 'keyword.*@.*local unique' html/test/Test_modes/index.html | head -1 | sed 's/ *$//' 21 - <span>string <span class="keyword">@</span> local unique 22 20 23 21 Arrow return modes (@ after arrow): 24 22 25 23 $ grep 'keyword.*@.*local' html/test/Test_modes/index.html | grep -v 'string' | sed 's/ *$//' 26 - <span class="keyword">@</span> local 27 - </span> int <span class="keyword">@</span> local 28 - <span class="keyword">@</span> local 29 - <span class="keyword">@</span> local 30 - </span> <span class="keyword">@</span> local 31 - </span> <span class="keyword">@</span> local 24 + <span class="keyword">@</span> <span class="mode">local</span> 25 + <span class="keyword">@</span> <span class="mode">local</span> 26 + <span class="keyword">@</span> <span class="mode">local</span> 32 27 33 28 Value modalities with @@ syntax: 34 29 35 30 $ grep 'keyword.*@@' html/test/Test_modes/index.html | sed 's/ *$//' 36 - <span class="keyword">@@</span> portable 37 - <span class="keyword">@@</span> global 31 + <span class="keyword">@@</span> <span class="mode">portable</span> 32 + <span class="keyword">@@</span> <span class="mode">global</span> 38 33 39 34 Normal function has no @@ or @ mode annotations: 40 35 ··· 46 41 Type parameter jkinds: 47 42 48 43 $ grep 'float64' html/test/Test_modes/index.html 49 - <span>('a : float64) float_box</span> 44 + <span>('a : <span class="mode">float64</span>) float_box</span> 50 45 $ grep 'immediate' html/test/Test_modes/index.html 51 - <span>('a : immediate) imm_box</span> 46 + <span>('a : <span class="mode">immediate</span>) imm_box</span> 52 47 53 48 Polymorphic with jkind at quantifier (value_or_null at binding site only): 54 49 55 50 $ grep 'value_or_null' html/test/Test_modes/index.html | sed 's/ *$//' 56 - <span>('a : value_or_null) box</span> 57 - ('a : value_or_null). 51 + <span>('a : <span class="mode">value_or_null</span>) box</span> 52 + ('a : <span class="mode">value_or_null</span>).
+7 -3
odoc/test/pages/resolution.t/run.t
··· 97 97 98 98 $ odoc support-files -o html 99 99 $ find html -type f | sort 100 + html/_x-ocaml/x-ocaml.js 100 101 html/extensions/admonition.css 101 102 html/extensions/docsite.css 102 103 html/extensions/docsite.js 104 + html/extensions/dot-init.js 103 105 html/extensions/dot.css 106 + html/extensions/jon-shell.css 107 + html/extensions/jon-shell.js 108 + html/extensions/mermaid-init.js 104 109 html/extensions/mermaid.css 110 + html/extensions/msc-init.js 105 111 html/extensions/msc.css 106 112 html/extensions/rfc.css 107 - html/extensions/scrollycode-dark.css 108 - html/extensions/scrollycode-notebook.css 109 - html/extensions/scrollycode-warm.css 110 113 html/extensions/scrollycode.css 114 + html/extensions/scrollycode.js 111 115 html/fonts/KaTeX_AMS-Regular.woff2 112 116 html/fonts/KaTeX_Caligraphic-Bold.woff2 113 117 html/fonts/KaTeX_Caligraphic-Regular.woff2
+4 -4
odoc/test/search/html_search.t/run.t
··· 83 83 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"},{"kind":"Constructor","name":"B"}],"doc":"Bliiiiiiiiiii","kind":{"kind":"Constructor","args":{"kind":"Tuple","vals":["int list","int"]},"res":"tdzdz"},"display":{"url":"page/Main/index.html#type-tdzdz.B","html":"<code class=\"entry-kind\">cons</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.tdzdz.</span><span class=\"entry-name\">B</span><code class=\"entry-rhs\"> : int list * int -&gt; tdzdz</code></code><div class=\"entry-comment\"><div><p>Bliiiiiiiiiii</p></div></div>"}} 84 84 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 85 85 {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph two","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph two</p></div></div>"}} 86 - {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><x-ocaml mode=\"interactive\">blibli</x-ocaml></div></div>"}} 86 + {"id":[{"kind":"Root","name":"Main"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><div><pre class=\"language-ocaml\"><code>blibli</code></pre></div></div></div>"}} 87 87 {"id":[{"kind":"Root","name":"Main"}],"doc":"this is a title\nand this is a paragraph","kind":{"kind":"Doc"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div><p>this is a title</p><p>and this is a paragraph</p></div></div>"}} 88 - {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/I/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><x-ocaml mode=\"interactive\">blibli</x-ocaml></div></div>"}} 88 + {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"a paragraph\nand another\nverbatim\nx + 1\nblibli","kind":{"kind":"Doc"},"display":{"url":"page/Main/I/index.html","html":"<code class=\"entry-kind\">doc</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div><p>a paragraph</p><p>and another</p><pre>verbatim</pre><p><code class=\"odoc-katex-math\">x + 1</code></p><div><pre class=\"language-ocaml\"><code>blibli</code></pre></div></div></div>"}} 89 89 {"id":[{"kind":"Root","name":"J"}],"doc":"a paragraph one","kind":{"kind":"Module"},"display":{"url":"page/J/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">J</span></code><div class=\"entry-comment\"><div><p>a paragraph one</p></div></div>"}} 90 90 {"id":[{"kind":"Root","name":"Main"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"entry-name\">Main</span></code><div class=\"entry-comment\"><div></div></div>"}} 91 91 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-I","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">I</span></code><div class=\"entry-comment\"><div></div></div>"}} 92 92 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-M","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">M</span></code><div class=\"entry-comment\"><div></div></div>"}} 93 93 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"X"}],"doc":"","kind":{"kind":"Module"},"display":{"url":"page/Main/index.html#module-X","html":"<code class=\"entry-kind\">mod</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">X</span></code><div class=\"entry-comment\"><div></div></div>"}} 94 - {"id":[{"kind":"Page","name":"page"}],"doc":"A title\nA paragraph\nsome verbatim\nand code\na list of things bliblib","kind":{"kind":"Page"},"display":{"url":"page/index.html","html":"<code class=\"entry-kind\">page</code><code class=\"entry-title\"><span class=\"entry-name\">page</span></code><div class=\"entry-comment\"><div><p>A title</p><p>A paragraph</p><pre>some verbatim</pre><x-ocaml mode=\"interactive\">and code</x-ocaml><ul><li>a list <em>of</em> things</li><li>bliblib</li></ul></div></div>"}} 94 + {"id":[{"kind":"Page","name":"page"}],"doc":"A title\nA paragraph\nsome verbatim\nand code\na list of things bliblib","kind":{"kind":"Page"},"display":{"url":"page/index.html","html":"<code class=\"entry-kind\">page</code><code class=\"entry-title\"><span class=\"entry-name\">page</span></code><div class=\"entry-comment\"><div><p>A title</p><p>A paragraph</p><pre>some verbatim</pre><div><pre class=\"language-ocaml\"><code>and code</code></pre></div><ul><li>a list <em>of</em> things</li><li>bliblib</li></ul></div></div>"}} 95 95 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"t"}],"doc":"A comment","kind":{"kind":"TypeDecl","private":false,"manifest":"int","constraints":[]},"display":{"url":"page/Main/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">t</span><code class=\"entry-rhs\"> = int</code></code><div class=\"entry-comment\"><div><p>A comment</p></div></div>"}} 96 96 {"id":[{"kind":"Root","name":"Main"},{"kind":"Type","name":"tdzdz"}],"doc":"A comment aaaaaaaaaa","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/index.html#type-tdzdz","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">tdzdz</span><code class=\"entry-rhs\"> = A of int * int | B of int list * int</code></code><div class=\"entry-comment\"><div><p>A comment aaaaaaaaaa</p></div></div>"}} 97 97 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"M"},{"kind":"Type","name":"t"}],"doc":"dsdsd","kind":{"kind":"TypeDecl","private":false,"manifest":null,"constraints":[]},"display":{"url":"page/Main/M/index.html#type-t","html":"<code class=\"entry-kind\">type</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.M.</span><span class=\"entry-name\">t</span></code><div class=\"entry-comment\"><div><p>dsdsd</p></div></div>"}} ··· 101 101 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem4"}],"doc":"lorem 4","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem4","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem4</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 4</p></div></div>"}} 102 102 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"lorem"}],"doc":"lorem 1 and a link","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-lorem","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">lorem</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>lorem 1 and a <span>link</span></p></div></div>"}} 103 103 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"uu"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-uu","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">uu</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 104 - {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"v"}],"doc":"a reference , and some formatted content with code and\n code blocks","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-v","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">v</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>a reference <span><code>t</code></span>, and some <em>formatted</em> <b>content</b> with <code>code</code> and</p><x-ocaml mode=\"interactive\"> code blocks</x-ocaml></div></div>"}} 104 + {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"v"}],"doc":"a reference , and some formatted content with code and\n code blocks","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-v","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">v</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div><p>a reference <span><code>t</code></span>, and some <em>formatted</em> <b>content</b> with <code>code</code> and</p><div><pre class=\"language-ocaml\"><code> code blocks</code></pre></div></div></div>"}} 105 105 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 106 106 {"id":[{"kind":"Root","name":"Main"},{"kind":"Value","name":"y"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/index.html#val-y","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.</span><span class=\"entry-name\">y</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}} 107 107 {"id":[{"kind":"Root","name":"Main"},{"kind":"Module","name":"I"},{"kind":"Value","name":"x"}],"doc":"","kind":{"kind":"Value","type":"int"},"display":{"url":"page/Main/I/index.html#val-x","html":"<code class=\"entry-kind\">val</code><code class=\"entry-title\"><span class=\"prefix-name\">Main.I.</span><span class=\"entry-name\">x</span><code class=\"entry-rhs\"> : int</code></code><div class=\"entry-comment\"><div></div></div>"}}
+5 -16
odoc/test/xref2/shadow3.t/run.t
··· 17 17 (sig : 18 18 module type {B}1/shadowed/(CCCC) = A.B 19 19 include {B}1/shadowed/(CCCC) 20 - (sig : module {A}1/shadowed/(AAAA) = A.A end) 21 - include sig 22 - module A : 23 - sig 24 - include module type of struct include {A}1/shadowed/(AAAA) end 25 - (sig : type t end) 26 - type a 27 - endend (sig : module {A}2/shadowed/(CCCC) = A.A end) 20 + (sig : module {A}1/shadowed/(AAAA) = A.{A}1/shadowed/(AAAA) end) 21 + include sigend (sig : module {A}2/shadowed/(CCCC) = A.A end) 28 22 end) 29 23 include module type of struct include B end 30 24 (sig : 31 25 module type B = B.B 32 - include B (sig : module {A}1/shadowed/(BBBB) = B.A end) 33 - include sig 34 - module A : 35 - sig 36 - include module type of struct include {A}1/shadowed/(BBBB) end 37 - (sig : type t end) 38 - type b 39 - endend (sig : module {A}3/shadowed/(CCCC) = B.A end) 26 + include B 27 + (sig : module {A}1/shadowed/(BBBB) = B.{A}1/shadowed/(BBBB) end) 28 + include sigend (sig : module {A}3/shadowed/(CCCC) = B.A end) 40 29 end) 41 30 module A : 42 31 sig
+10 -6
odoc/test/xref2/stripped_include_decl_reconstruct.t/run.t
··· 9 9 10 10 $ cat a.mli 11 11 (** Module A defines a signature with an inline include. *) 12 - 12 + 13 13 module type S = sig 14 14 type t 15 - 15 + 16 16 include sig 17 17 val x : t 18 18 val y : t -> t 19 19 end 20 20 end 21 21 22 + 23 + 22 24 $ cat b.mli 23 25 (** Module B includes A.S with a type substitution. 24 - 26 + 25 27 The substitution flows through [fragmap] in tools.ml. When the inline 26 28 include's decl has been stripped, [map_include_decl] needs the 27 29 reconstructed decl to correctly wrap the substitution. Without 28 30 reconstruction, the empty decl produces [With(subst, empty_sig)] 29 31 which loses the vals from the include. *) 30 - 32 + 31 33 module M : A.S with type t := int 34 + 35 + 32 36 33 37 Compile and link: 34 38 ··· 47 51 48 52 $ odoc html-generate b.odocl -o html --indent 49 53 $ grep 'id="val-[xy]"' html/test/B/M/index.html 50 - <div class="spec value anchored" id="val-x"> 51 - <div class="spec value anchored" id="val-y"> 54 + <div class="spec value anchored" id="val-x"> 55 + <div class="spec value anchored" id="val-y">
+1
site-builder/lib-package-map.txt
··· 82 82 mime_printer mime_printer 83 83 mtime mtime 84 84 mtime.clock mtime 85 + note note 85 86 ocaml-compiler-libs.bytecomp ocaml-compiler-libs 86 87 ocaml-compiler-libs.common ocaml-compiler-libs 87 88 ocaml-compiler-libs.shadow ocaml-compiler-libs
+202 -176
site/blog/2026/03/review.mld
··· 1 - {0 Review of the last few months} 2 - 3 - It's time to take a step back and write a retrospective on the last few months of 4 - vibecoding with Claude. 1 + {0 A Review of some LLM-assisted OCaml Development} 5 2 3 + A few months ago I set out to build a literate programming website with 4 + Claude's help. I ended up touching dune, odoc, js_top_worker, and 5 + building several new libraries from scratch. This post reviews what I built; the {{!./page-retrospective}retrospective} is where I reflect on the experience. 6 + 6 7 {image!./vibecoding.png} 7 8 8 - {1 What's been done} 9 + {1 Initial goals} 9 10 10 - Firstly let's see the various projects I've worked on and see what's been 11 - accomplished. 11 + I set out with dual goals: Firstly to evaluate the new programming 12 + paradigm of developing with LLMs, and secondly to set up a literate 13 + programming environment as an integral part of my website. Those of 14 + you that have read this blog for a while will know I've been tinkering 15 + with notebooks for a year or so now, but I really wanted to push this 16 + hard and see how adding Claude into the mix would work out. Having a 17 + concrete destination in mind helped keep me focussed on ensuring that 18 + when I finished I'd have something useful. 19 + 20 + It's important to me personally that the work I was doing would 21 + eventually be generally useful to others as well, so I wanted to make 22 + sure that as well as just making myself a neat looking website, the 23 + technology I was building made sense in the broader context of the 24 + OCaml community that has supported me so well for so long. It's also 25 + vital to spend some time thinking about how to remain a good 26 + open-source citizen, as there's a real danger if we're not careful 27 + that LLMs could end up having a deeply damaging effect on some open 28 + source communities. 29 + 30 + I made some design decisions up front that set the course I took. The 31 + first was that I would be using OxCaml both for the build environment 32 + and the runtime environment on the web. This would give me some really 33 + useful experience working in this variant of OCaml in both contexts. 34 + For the second decision I needed to have a notebook target in mind. 35 + This was easy to make: My group has been spending a lot of time 36 + recently on {{:https://geotessera.org/}TESSERA}, and this provided a 37 + really interesting use-case for the notebooks, as it heavily relies 38 + upon being able to use interactive maps to choose areas of interest, 39 + and to visualise the embeddings and picture the output as map 40 + overlays. This meant supporting various widgets in the browser-based 41 + programming environment, where I'd only previously been able to render 42 + static rich content. 43 + 44 + I ended up building out quite a lot of experimental tooling of varying 45 + quality that has culminated in this website, which is using 46 + more-or-less everything I've been building. So let's review piece by 47 + piece the parts that I worked on. 12 48 13 49 {2 Dune} 14 50 15 - Last year I wrote up my experiences writing the {{!//blog/2025/12/page-"claude-and-dune"}dune rules for odoc} with Claude. 16 - The {{:https://github.com/ocaml/dune/pull/12995}pull request has been made}, representing a "feature complete" replacement for the current rules, 17 - in that it can completely replace what's in dune now, but doesn't extend the rules for the new features of 18 - odoc. Since then we've merged the first part of it -- though that's the bit that 19 - wasn't written by Claude but by my colleague {{:https://choum.net/panglesd/}Paul-Elliot}. Fortunately after a brief 20 - sabbatical working on {{:https://docs.slipshow.org/en/stable/}slipshow}, he's now back working with us and we'll be meeting soon to discuss the next steps to get the rest of it merged. 51 + Last year I wrote up my experiences writing the 52 + {{!//blog/2025/12/page-"claude-and-dune"}dune rules for odoc} with 53 + Claude. The {{:https://github.com/ocaml/dune/pull/12995}pull request 54 + has been made}, representing a "feature complete" replacement for the 55 + current rules, in that it can completely replace what's in dune now, 56 + but doesn't extend the rules for the new features of odoc. Since then 57 + we've merged the first part of it -- though that's the bit that wasn't 58 + written by Claude but by my colleague 59 + {{:https://choum.net/panglesd/}Paul-Elliot}. Fortunately after a brief 60 + sabbatical working on 61 + {{:https://docs.slipshow.org/en/stable/}slipshow}, he's now back 62 + working with us and we'll be meeting soon to discuss the next steps to 63 + get the rest of it merged. 64 + 65 + To support my goals though, I've had to extend the rules by quite a 66 + lot. We've got 67 + {{:https://github.com/ocaml/dune/commit/0aa0170938b92342a609476abab67b960c356bd5}support 68 + for assets} so I can put images on my blog posts, we've got support 69 + for 70 + {{:https://github.com/ocaml/dune/commit/91b08307c118193fc46a707891c28721c1778916}source 71 + rendering} so that you can see the code I'm using. There's 72 + {{:https://github.com/ocaml/dune/commit/4cb2b33e98634eba8b9a267a6dd9bcfc959575a4}markdown 73 + output} for Claude to consume, and 74 + {{:https://github.com/ocaml/dune/commit/76f61319a21ba8b03feeb0c15e2a567ca2114489}sherlodoc 75 + native support} so you (or your agent) can run sherlodoc queries on 76 + the command line. The 77 + {{:https://github.com/ocaml/dune/commit/91b08307c118193fc46a707891c28721c1778916}prefix} 78 + for all output is configurable, so that I was able to put everything 79 + dune built under "/reference", and pass 80 + {{:https://github.com/ocaml/dune/commit/48a5cbb79b24606304dc25f965c22aa5e4cb898e}arbitrary 81 + options} to the various invocations of odoc so that I could specify 82 + global defaults like the Javascript toplevel worker and opam 83 + repository to use in my notebooks. We've also now got 84 + {{:https://github.com/ocaml/dune/commit/a49e98a88d7358074afffedfb0f6ee922208cdb7}smarter 85 + rules} that don't pull in as many dependencies as the current PR, so 86 + that I didn't have to install a bunch of extra packages I wasn't using 87 + just to build my own docs. All of this is being used as part of the 88 + process of generating this site, so it all works quite well together 89 + but it hasn't been extensively tested. 21 90 22 - In the mean time though, I've extended the rules by quite a lot. We've now got {{:https://github.com/ocaml/dune/commit/a49e98a88d7358074afffedfb0f6ee922208cdb7}smarter rules} that don't 23 - pull in as many dependencies as the current PR, we've got {{:https://github.com/ocaml/dune/commit/0aa0170938b92342a609476abab67b960c356bd5}support for assets}, we've got support for {{:https://github.com/ocaml/dune/commit/91b08307c118193fc46a707891c28721c1778916}source 24 - rendering}, there's {{:https://github.com/ocaml/dune/commit/4cb2b33e98634eba8b9a267a6dd9bcfc959575a4}markdown output} and {{:https://github.com/ocaml/dune/commit/76f61319a21ba8b03feeb0c15e2a567ca2114489}sherlodoc native support} so you can run sherlodoc queries on the 25 - command line. You can configure the {{:https://github.com/ocaml/dune/commit/91b08307c118193fc46a707891c28721c1778916}prefix} for your doc output, and pass {{:https://github.com/ocaml/dune/commit/48a5cbb79b24606304dc25f965c22aa5e4cb898e}arbitrary options} to the 26 - various invocations of odoc. All of this is being used as part of the process of generating this site, 27 - but that's about all the testing its had. This will all have to be carefully reviewed then either 28 - tacked onto the end of the current PR or we'll make new PRs for these. Very likely the latter, as the 29 - current PR is hard enough to review as it is. 91 + These changes will all have to be carefully reviewed then either 92 + tacked onto the end of the current PR or we'll make new PRs for 93 + these. Very likely the latter, as the current PR is hard enough to 94 + review as it is. 30 95 31 96 {2 Odoc} 32 97 33 - OxCaml support for odoc was contributed by Luke Maurer early on after OxCaml was released. 34 - However, this only fixed the build of odoc, it didn't give it any mode or layouts, nor 35 - any of the other new features of OxCaml. I asked Claude to look through the way the 36 - toplevel prints these annotations and port them to odoc, and that's been implemented on 37 - this site. For example, see {!Base.Uniform_array.val-length}. 98 + OxCaml support for odoc was contributed by Luke Maurer early on after 99 + OxCaml was released. However, this only fixed the build of odoc, it 100 + didn't give it any mode or layouts, nor any of the other new features 101 + of OxCaml. I asked Claude to look through the way the toplevel prints 102 + these annotations and port them to odoc, and that's been implemented 103 + on this site. For example, see {!Base.Uniform_array.val-length} - you 104 + can see there the [portable], [local] and [contended] annotations on 105 + the type. If you click on the [source] link, you'll see I also added 106 + some improvements to the source rendering - there are many more links 107 + now and we've got the ability to link to source from doc comments and 108 + mlds. 38 109 39 - One of the earlier things I did was to give Odoc a nice new plugin system that 40 - has been hugely enabling for building the new features below. I'm using dune's {{:https://dune.readthedocs.io/en/stable/sites.html#sites}site} feature for 41 - the plugins, which really "just worked". It was very easy to add the feature and creating the plugins 42 - has been equally easy. Building a whole variety of plugins has also been very useful in testing the 43 - shape of the plugin API, and I've made numerous changes to it as I've built various plugins and they expose 44 - problems. To use the plugins, you need a way to write text that the plugins will operate on, and 45 - there are a couple of obvious ways to do this. The first is to allow {{:https://ocaml.org/manual/5.4/ocamldoc.html#sss:ocamldoc-custom-tags}custom tags}, a feature of ocamldoc 46 - that odoc didn't support, and the second is to annotate source-code blocks with metadata that the 47 - plugins can recognise. I also added some improvements to the source rendering - there are many more links now 48 - and we've got the ability to link to source from doc comments. 110 + One of the earliest things I did was to give Odoc a nice new plugin 111 + system that has been hugely enabling for building the new 112 + features. I'm using dune's 113 + {{:https://dune.readthedocs.io/en/stable/sites.html#sites}site} 114 + feature for the plugins, which really "just worked". It was very easy 115 + both to add the feature to odoc and to create the plugins 116 + themselves. Building a whole variety of plugins has also been very 117 + useful in testing the shape of the plugin API, and I've made numerous 118 + changes to it as I've built them and they expose various problems. Of 119 + course, to use the plugins, you need a way to write text that the 120 + plugins will operate on, and there are a couple of obvious ways to do 121 + this. The first is to allow 122 + {{:https://ocaml.org/manual/5.4/ocamldoc.html#sss:ocamldoc-custom-tags}custom 123 + tags}, a feature of ocamldoc that odoc didn't previously support, and 124 + the second is to annotate source-code blocks with metadata that the 125 + plugins can recognise. 49 126 50 127 Let's take a brief look through the plugins I've made. 51 128 52 129 {3 Admonitions} 53 130 54 - This is a feature we've wanted to add to odoc for a while - and we have a {{:https://hackmd.io/ETSOAmetTI-E3vrDk3Bfrw}design sketched out} for it. 131 + This is a feature we've wanted to add to odoc for a while - and we 132 + have a {{:https://hackmd.io/ETSOAmetTI-E3vrDk3Bfrw}design sketched 133 + out} for it. 55 134 56 135 @admonition.note This is a 'note' admonition. 57 136 58 - This is more-or-less a throwaway plugin as we'll be doing this "properly" and won't need it. It made for 59 - a nice first test though. 137 + This is more-or-less a throwaway plugin as we'll be doing this 138 + "properly" and won't need it. It made for a nice first test 139 + though and the functionality is useful and quite important. 140 + I've been using it to mark the truly agent-coded libraries where I've 141 + not seen the code at all, as opposed to those where I've been far more 142 + involved in the changes and I'm slightly more confident in how they 143 + work. 60 144 61 145 {3 Diagrams} 62 146 63 - I've got 3 diagramming plugins - {{!/odoc-mermaid-extension/page-index}odoc-mermaid-extension}, {{!/odoc-msc-extension/page-index}odoc-msc-extension} 64 - and {{!/odoc-dot-extension/page-index}odoc-dot-extension}. 147 + I've got 3 diagramming plugins - 148 + {{!/odoc-mermaid-extension/page-index}odoc-mermaid-extension}, 149 + {{!/odoc-msc-extension/page-index}odoc-msc-extension} and 150 + {{!/odoc-dot-extension/page-index}odoc-dot-extension}. These were 151 + particularly useful in understanding the need to determine the 152 + lifecycle of any javascript glue that's required, especially when 153 + we're dynamically loading pages like ocaml.org does. And in fact 154 + I've put the Mermaid extension to use documenting the issues in 155 + the {{!/odoc/page-extensions}extensions documentation}. 65 156 66 - {3 Interative pages (notebooks)} 157 + {3 Interactive pages (notebooks)} 158 + 159 + This was a big one for me. My previous efforts at creating notebooks 160 + involved a separate pipeline to build them, but with this it became 161 + trivial to have them built as part of the normal 'dune build' process. 67 162 68 - The {{!/odoc-interactive-extension/page-index}odoc-interactive-extension} uses {{:https://github.com/art-w}art-w}'s {{:https://github.com/art-w/x-ocaml}x-ocaml} to add interactivity to the mld files. 69 - Rather than using a fixed "execution engine" though, my fork is using {{:https://github.com/jonludlam/js_top_worker}js_top_worker} so we can 163 + The 164 + {{!/odoc-interactive-extension/page-index}odoc-interactive-extension} 165 + uses {{:https://github.com/art-w}art-w}'s 166 + {{:https://github.com/art-w/x-ocaml}x-ocaml} to add interactivity to 167 + the mld files. Rather than using a fixed "execution engine" though, 168 + my fork is using 169 + {{:https://github.com/jonludlam/js_top_worker}js_top_worker} so we can 70 170 use different OCaml/OxCaml versions and load libraries as '#required'. 171 + This is intended to work cross-site too, so anyone can use this 172 + extension and my hosted Javascript opam repository. 71 173 72 174 {3 Scrollycode} 73 175 74 - The {{!/odoc-scrollycode-extension/page-index}odoc-scrollycode-extension} is based on {{:https://pomb.us}Rodrigo Pombo}'s work. You just add in 75 - a few custom tags and some {{:https://tangled.org/jon.recoil.org/odoc-scrollycode-extension/blob/main/doc/notebook_testing.mld#L3}special markup} 76 - in the source and you get lovely animated tutorials. 176 + The 177 + {{!/odoc-scrollycode-extension/page-index}odoc-scrollycode-extension} 178 + is based on {{:https://pomb.us}Rodrigo Pombo}'s work. You just add in 179 + a few custom tags and some 180 + {{:https://tangled.org/jon.recoil.org/odoc-scrollycode-extension/blob/main/doc/notebook_testing.mld#L3}special 181 + markup} in the source and you get lovely animated tutorials. 77 182 78 183 {3 HTML shells} 79 184 80 - The "traditional" way that you embed odoc output into another webpage, like ocaml.org does, is to output 81 - JSON. This is a bit annoying though, as it means once dune has finished, you need something else to come 82 - in, pick up all the json files and write out your new site. The HTML shells extension is part of the 83 - odoc plugin system, and allows you to swap out the HTML renderer for another one. I have two plugins 84 - that use this system: 185 + The "traditional" way that you embed odoc output into another webpage, 186 + like ocaml.org does, is to output JSON. This is a bit annoying though, 187 + as it means once dune has finished, you need something else to come 188 + in, pick up all the json files and write out your new site. The HTML 189 + shells extension is part of the odoc plugin system, and allows you to 190 + swap out the HTML renderer for another one. I have two plugins that 191 + use this system: 85 192 86 - - {{!/odoc-docsite/page-index}odoc-docsite} which produces a more modern SPA-style site 193 + - {{!/odoc-docsite/page-index}odoc-docsite} which produces a more 194 + modern SPA-style site 87 195 - {{!/odoc-jons-plugins/page-index}jons-shell} which produces this website 88 196 197 + The advantage of using these is that it doesn't affect the flow of 198 + the documentation pipeline, so there are no changes required to the 199 + dune rules for it to produce a very different output. 200 + 89 201 {2 Js_top_worker} 90 202 91 - I fixed various things in js_top_worker. We've got [#require] working so that you can 92 - load libraries from the code blocks, it's better at figuring out which libraries to 93 - load and which are already present in the worker. 203 + I fixed various things in js_top_worker. We've got [#require] working 204 + so that you can load libraries from the code blocks, and this meant I 205 + had to improve how it figures out which libraries to load and which 206 + are already present in the worker. 94 207 95 - One important change to js_top_worker is the ability to use interactive widgets. This 96 - requires coordination between the main javascript thread, or frontend, and the web-worker 97 - backend which is actually running the OCaml code. I've been using {{!/note/page-index}Note} 98 - as the FRP library to make this nice to work with. A nice demo of this is the 208 + One important change to js_top_worker is the ability to use 209 + interactive widgets. This requires coordination between the main 210 + javascript thread, or frontend, and the web-worker backend which is 211 + actually running the OCaml code. I've been using 212 + {{!/note/page-index}Note} as the FRP library to make this nice to work 213 + with. A nice demo of this is the 99 214 {{!/js_top_worker-widget-leaflet/page-index}Leaflet widget}. 100 215 101 - {2 day10} 102 - 103 - Day10 is Mark's {{:https://github.com/mtelvers/day10}build tool} that allows fast building 104 - of opam packages in a similar way to 105 - {{:https://github.com/ocurrent/ocaml-docs-ci}ocaml-docs-ci}. I've had dune insert the rest 106 - of the docs-CI logic into it so that I can now use day10 to build docs for OCaml and for 107 - OxCaml. 216 + Another extension I made to this was inspired by my experiences 217 + running the {{:https://www.cl.cam.ac.uk/teaching/2526/OCaml/}1A Computer Science OCaml practicals}, which are assessed 218 + via {{:https://github.com/akabe/ocaml-jupyter}Jupyter notebooks} running {{:https://github.com/jupyter/nbgrader}Nbgrader}. I wanted to have 219 + exercises in the notebooks with associated tests, and I wanted the 220 + tests to be automatically run. 108 221 109 222 {2 TESSERA notebooks} 110 - One of the most exciting things to come out of our group recently has been {{:https://geotessera.org/}TESSERA}, 111 - a pixel-wise Earth observation foundation model. The code and demos for this are mostly 112 - in Python, particularly using Jupyter notebooks. OCaml notebooks have obviously long been 113 - an interest of mine, so I ported the {{:https://github.com/ucam-eo/tessera-interactive-map}simple notebook} to OCaml, and more specifically 114 - to {{!/site/notebooks/page-"interactive_map"}run in the browser}. This was pretty straightforward (aside from needing a coordinate 115 - transform), but very slow to download the hundreds of megs of tiles required. So I then 116 - switched to using the zarr format to stream just the areas of interest, and this 117 - was much faster. 118 223 119 - {1 Retrospective} 224 + One of the most exciting things to come out of our group recently has 225 + been {{:https://geotessera.org/}TESSERA}, a pixel-wise Earth 226 + observation foundation model. The code and demos for this are mostly 227 + in Python, particularly using Jupyter notebooks. This provided me with 228 + an excellent stress test that tied together many of the strands of 229 + this work and validated that they could be used together to build 230 + something useful. OCaml notebooks have 231 + obviously long been an interest of mine, so I ported the 232 + {{:https://github.com/ucam-eo/tessera-interactive-map}simple notebook} 233 + to OCaml, and more specifically to 234 + {{!/site/notebooks/page-"interactive_map"}run in the browser}. This 235 + really demonstrated that the approaches I've made with the various 236 + different strands of work can all be knitted together in a very 237 + useful way, allowing us to bring the strong type system of OCaml 238 + together with the ubiquitous runtime of the browser, and using 239 + the power of WebGPU to run calculations that can help to change our 240 + world for the better. 120 241 121 - There's quite a variety of different projects that I've made progress on, and its given 122 - me a lot of experience working with LLMs for code generation. It's been an eye-opening 123 - experience and it's clear that the way we code is fundamentally changed. With a good 124 - few projects under my belt now it's time to take a deep breath and assess exactly how 125 - the landscape has changed. 126 - 127 - {2 Attribution} 128 - 129 - The first thing is the commits. My early purely-agentic commits were all authored by me 130 - and co-authored by Claude. This is a lie. I couldn't carry on like this so I've switched 131 - now to having the commits authored by "Jon's Agent". My plan is to rewrite the author 132 - when I've gone through it line by line, and even then, I feel that Claude ought to be marked 133 - as Author and I should just be adding my "Reviewed-by" line onto it. In either case, for 134 - a pull request to be made the human in the loop has the responsibility to justify the 135 - changes, and therefore has to be totally familiar with both the changes and the code 136 - being changed. I'm not at all fundamentally opposed to having LLMs involved in the 137 - process of making changes to open source code, but in my experience so far, there's a 138 - huge amount of effort that needs to go into it even after you've got working code and 139 - tests. I've tested the waters with a {{:https://github.com/ocaml/odoc/pull/1402}simple 140 - bugfix or two}, and even these one-lines needed careful thought and attention before 141 - I felt I could make a PR. 142 - 143 - {2 Bug-discovery} 144 - 145 - One thing that I've found tremendously useful is narrowing down bugs. Armed with a repro, 146 - setting Claude off to track down issues has been a wonderful time saver. Additionally, 147 - asking it to explain the issue in detail with links to the source is very handy indeed. 148 - It's not, however, able to discover {i all} bugs, even with a lot of time. When working 149 - on the fix for a {{:https://github.com/ocaml/odoc/pull/1400}particularly nasty bug}, I 150 - found that with the patch applied we'd get a different error somewhere deep in some of Jane Street's async 151 - ecosystem. I had a good suspicion of what the problem was give the changes that had been 152 - made already, as the code I had altered had an analogue elsewhere in the codebase that 153 - hadn't been fixed, so I thought this would be quite a good test for Claude. I gave it 154 - lots of hints, but it flailed at the problem for several hours, often giving up, 155 - sometimes blaming the OxCaml compiler, and sometimes upstream OCaml. In the end I gave 156 - up, implemented what I thought would be the fix, and indeed the problem went away. 157 - 158 - {2 API boundaries} 159 - 160 - I've found it very helpful to have API boundaries to help structure the code that 161 - Claude has been producing. Anil has long been enthusiastically pushing the idea that 162 - we should write the [mli] files first, which constrain what types and values are 163 - available between the modules. We can then write tests that target these interfaces, 164 - and then adjust them where the tests have shown them to be inelegant or downright 165 - unusable. We can then write the implementations and watch the tests start to pass. 166 - A particularly interesting example of this is the odoc plugin interface. The 167 - experience of writing several very different plugins that all extended odoc in 168 - different directions 169 - was very helpful, and I adjusted the interface quite a few times. I also 170 - adjusted the {i documentation}, where qualities about how the interface {i behaved} 171 - that weren't obvious from the types could be carefully noted, for example how 172 - scripts might be made to behave correctly when the odoc pages were in an SPA shell. 173 - 174 - {2 Failure modes} 175 - 176 - When I was working on the {{!//blog/2025/12/page-"claude-and-dune"}dune rules}, I made 177 - the mistake of going too long without giving Claude some architectural constraints, and 178 - I ended up with a Big Ball of Code that I then had to spend time unpicking and teasing 179 - apart into sensible looking modules. I had rather hopefully believed this to be an 180 - Opus < 4.5 problem, but when adding the new features to day10 I mentioned above I hit 181 - a very similar situation, when it just added vast amounts of code to the CLI to 182 - implement the new features, and it was all very unstructured and unsatisfactory. This 183 - was despite going through a design process where we went through the goals, the use 184 - cases and desired features, but crucially, not at the level of the code. 185 - 186 - Another failure mode I observed was {i my} failure. It's very easy, and very tempting, 187 - to get your agent to do the next neat thing on the roadmap. Especially when you've 188 - just spent a while going through the design and planning for the previous feature and 189 - Claude has got started on it. The problem is that this can generate a large amount of 190 - code that kind-of-works but has a bunch of bugs, which can end up costing a lot more 191 - time and effort. The cost of starting the agent going 192 - is much smaller than the cost of wading through the results, and it's quite easy to 193 - end up drowning under a load of very interesting and partly cool half results. I'm very 194 - much reminded of Dr Ian Malcolm's words from Jurrasic Park: "your scientists were so 195 - preoccupied with whether or not they could, they didn't stop to think if they should." 196 - 197 - {1 What's next} 198 - 199 - The problem with everything I've done is that, as of right now, it's not usable, 200 - at least by anyone but me. 201 - While it's technically possible to add my opam-repo to your switch, and install my 202 - versions of odoc, dune, and my various plugins, nobody is actually going to do that. 203 - Worse than that, people might get their agents to just grab the source and mutate it 204 - further, just diluting the efforts going into it. 205 - 206 - Fortunately I've been talking with {{:https://choum.net/panglesd/}Paul Elliot}, who 207 - has volunteered to shepherd the dune PR through to completion. I'll be working with 208 - him on this of course, but I'm hoping he'll be doing the lion's share of the work. 209 - 210 - The OxCaml work will be taken on by {{:https://github.com/art-w}art-w} who's already 211 - done an excellent job getting Luke Maurer's patches into shape and PR'd to ocaml/odoc. 212 - 213 - I think the odoc plugin experience was very educational, and I think the next step there 214 - is to carefully consider how this ought to be used, how it will interact with the 215 - dune rules, how it would affect documentation on ocaml.org. The experience of the 216 - last few weeks will be really important in framing the discussion to be had there. 217 - 218 - 219 - 220 - 242 + I'm quite happy with the results of this journey so far. My goals of 243 + an improved interactive website have been achieved, and the TESSERA 244 + notebook is demonstrating how to fit all of the parts together. 245 + Head on over now to the {{!./page-retrospective}retrospective} for 246 + some further thoughts on all of this work. 221 247 222 248 223 249
+2733 -1
site/dune.inc
··· 49 49 blog/2026/02/weeknotes-2026-08.mld 50 50 blog/2026/03/index.mld 51 51 blog/2026/03/open-source-and-ai.mld 52 + blog/2026/03/retrospective.mld 52 53 blog/2026/03/review.mld 53 54 blog/2026/03/weeknotes-2026-09.mld 54 55 blog/2026/03/weeknotes-2026-10.mld 55 56 blog/2026/03/weeknotes-2026-11.mld 57 + blog/2026/03/weeknotes-2026-12.mld 56 58 blog/2026/index.mld 57 59 blog/index.mld 58 60 drafts/index.mld ··· 96 98 blog/2026/03/old.png 97 99 blog/2026/03/search.png 98 100 blog/2026/03/tessera.png 101 + blog/2026/03/vibecoding.png 99 102 (alias ../doc-full)) 100 103 (action 101 104 (progn ··· 526 529 odoc 527 530 compile 528 531 --warn-error 532 + blog/2026/03/retrospective.mld 533 + --output-dir 534 + _odoc 535 + --parent-id 536 + blog/2026/03) 537 + (run 538 + odoc 539 + compile 540 + --warn-error 529 541 blog/2026/03/review.mld 530 542 --output-dir 531 543 _odoc ··· 554 566 compile 555 567 --warn-error 556 568 blog/2026/03/weeknotes-2026-11.mld 569 + --output-dir 570 + _odoc 571 + --parent-id 572 + blog/2026/03) 573 + (run 574 + odoc 575 + compile 576 + --warn-error 577 + blog/2026/03/weeknotes-2026-12.mld 557 578 --output-dir 558 579 _odoc 559 580 --parent-id ··· 939 960 blog/2026/03) 940 961 (run 941 962 odoc 963 + compile-asset 964 + --name 965 + vibecoding.png 966 + --output-dir 967 + _odoc 968 + --parent-id 969 + blog/2026/03) 970 + (run 971 + odoc 942 972 link 943 973 --warn-error 944 974 _odoc/blog/2025/03/page-code-block-metadata.odoc ··· 1040 1070 mime_printer:../_doc/_odoc/reference/mime_printer 1041 1071 -P 1042 1072 mtime:../_doc/_odoc/reference/mtime 1073 + -P 1074 + note:../_doc/_odoc/reference/note 1043 1075 -P 1044 1076 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 1045 1077 -P ··· 1349 1381 -L 1350 1382 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 1351 1383 -L 1384 + note:../_doc/_odoc/reference/note/note 1385 + -L 1352 1386 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 1353 1387 -L 1354 1388 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 1696 1730 -P 1697 1731 mtime:../_doc/_odoc/reference/mtime 1698 1732 -P 1733 + note:../_doc/_odoc/reference/note 1734 + -P 1699 1735 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 1700 1736 -P 1701 1737 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 2003 2039 mtime:../_doc/_odoc/reference/mtime/mtime 2004 2040 -L 2005 2041 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 2042 + -L 2043 + note:../_doc/_odoc/reference/note/note 2006 2044 -L 2007 2045 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 2008 2046 -L ··· 2351 2389 -P 2352 2390 mtime:../_doc/_odoc/reference/mtime 2353 2391 -P 2392 + note:../_doc/_odoc/reference/note 2393 + -P 2354 2394 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 2355 2395 -P 2356 2396 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 2658 2698 mtime:../_doc/_odoc/reference/mtime/mtime 2659 2699 -L 2660 2700 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 2701 + -L 2702 + note:../_doc/_odoc/reference/note/note 2661 2703 -L 2662 2704 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 2663 2705 -L ··· 3006 3048 -P 3007 3049 mtime:../_doc/_odoc/reference/mtime 3008 3050 -P 3051 + note:../_doc/_odoc/reference/note 3052 + -P 3009 3053 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 3010 3054 -P 3011 3055 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 3313 3357 mtime:../_doc/_odoc/reference/mtime/mtime 3314 3358 -L 3315 3359 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 3360 + -L 3361 + note:../_doc/_odoc/reference/note/note 3316 3362 -L 3317 3363 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 3318 3364 -L ··· 3661 3707 -P 3662 3708 mtime:../_doc/_odoc/reference/mtime 3663 3709 -P 3710 + note:../_doc/_odoc/reference/note 3711 + -P 3664 3712 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 3665 3713 -P 3666 3714 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 3969 4017 -L 3970 4018 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 3971 4019 -L 4020 + note:../_doc/_odoc/reference/note/note 4021 + -L 3972 4022 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 3973 4023 -L 3974 4024 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 4316 4366 -P 4317 4367 mtime:../_doc/_odoc/reference/mtime 4318 4368 -P 4369 + note:../_doc/_odoc/reference/note 4370 + -P 4319 4371 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 4320 4372 -P 4321 4373 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 4623 4675 mtime:../_doc/_odoc/reference/mtime/mtime 4624 4676 -L 4625 4677 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 4678 + -L 4679 + note:../_doc/_odoc/reference/note/note 4626 4680 -L 4627 4681 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 4628 4682 -L ··· 4971 5025 -P 4972 5026 mtime:../_doc/_odoc/reference/mtime 4973 5027 -P 5028 + note:../_doc/_odoc/reference/note 5029 + -P 4974 5030 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 4975 5031 -P 4976 5032 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 5278 5334 mtime:../_doc/_odoc/reference/mtime/mtime 5279 5335 -L 5280 5336 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 5337 + -L 5338 + note:../_doc/_odoc/reference/note/note 5281 5339 -L 5282 5340 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 5283 5341 -L ··· 5625 5683 mime_printer:../_doc/_odoc/reference/mime_printer 5626 5684 -P 5627 5685 mtime:../_doc/_odoc/reference/mtime 5686 + -P 5687 + note:../_doc/_odoc/reference/note 5628 5688 -P 5629 5689 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 5630 5690 -P ··· 5934 5994 -L 5935 5995 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 5936 5996 -L 5997 + note:../_doc/_odoc/reference/note/note 5998 + -L 5937 5999 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 5938 6000 -L 5939 6001 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 6281 6343 -P 6282 6344 mtime:../_doc/_odoc/reference/mtime 6283 6345 -P 6346 + note:../_doc/_odoc/reference/note 6347 + -P 6284 6348 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 6285 6349 -P 6286 6350 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 6589 6653 -L 6590 6654 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 6591 6655 -L 6656 + note:../_doc/_odoc/reference/note/note 6657 + -L 6592 6658 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 6593 6659 -L 6594 6660 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 6935 7001 mime_printer:../_doc/_odoc/reference/mime_printer 6936 7002 -P 6937 7003 mtime:../_doc/_odoc/reference/mtime 7004 + -P 7005 + note:../_doc/_odoc/reference/note 6938 7006 -P 6939 7007 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 6940 7008 -P ··· 7244 7312 -L 7245 7313 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 7246 7314 -L 7315 + note:../_doc/_odoc/reference/note/note 7316 + -L 7247 7317 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 7248 7318 -L 7249 7319 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 7591 7661 -P 7592 7662 mtime:../_doc/_odoc/reference/mtime 7593 7663 -P 7664 + note:../_doc/_odoc/reference/note 7665 + -P 7594 7666 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 7595 7667 -P 7596 7668 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 7898 7970 mtime:../_doc/_odoc/reference/mtime/mtime 7899 7971 -L 7900 7972 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 7973 + -L 7974 + note:../_doc/_odoc/reference/note/note 7901 7975 -L 7902 7976 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 7903 7977 -L ··· 8245 8319 mime_printer:../_doc/_odoc/reference/mime_printer 8246 8320 -P 8247 8321 mtime:../_doc/_odoc/reference/mtime 8322 + -P 8323 + note:../_doc/_odoc/reference/note 8248 8324 -P 8249 8325 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 8250 8326 -P ··· 8554 8630 -L 8555 8631 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 8556 8632 -L 8633 + note:../_doc/_odoc/reference/note/note 8634 + -L 8557 8635 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 8558 8636 -L 8559 8637 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 8901 8979 -P 8902 8980 mtime:../_doc/_odoc/reference/mtime 8903 8981 -P 8982 + note:../_doc/_odoc/reference/note 8983 + -P 8904 8984 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 8905 8985 -P 8906 8986 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 9209 9289 -L 9210 9290 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 9211 9291 -L 9292 + note:../_doc/_odoc/reference/note/note 9293 + -L 9212 9294 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 9213 9295 -L 9214 9296 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 9556 9638 -P 9557 9639 mtime:../_doc/_odoc/reference/mtime 9558 9640 -P 9641 + note:../_doc/_odoc/reference/note 9642 + -P 9559 9643 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 9560 9644 -P 9561 9645 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 9863 9947 mtime:../_doc/_odoc/reference/mtime/mtime 9864 9948 -L 9865 9949 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 9950 + -L 9951 + note:../_doc/_odoc/reference/note/note 9866 9952 -L 9867 9953 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 9868 9954 -L ··· 10211 10297 -P 10212 10298 mtime:../_doc/_odoc/reference/mtime 10213 10299 -P 10300 + note:../_doc/_odoc/reference/note 10301 + -P 10214 10302 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 10215 10303 -P 10216 10304 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 10518 10606 mtime:../_doc/_odoc/reference/mtime/mtime 10519 10607 -L 10520 10608 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 10609 + -L 10610 + note:../_doc/_odoc/reference/note/note 10521 10611 -L 10522 10612 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 10523 10613 -L ··· 10865 10955 mime_printer:../_doc/_odoc/reference/mime_printer 10866 10956 -P 10867 10957 mtime:../_doc/_odoc/reference/mtime 10958 + -P 10959 + note:../_doc/_odoc/reference/note 10868 10960 -P 10869 10961 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 10870 10962 -P ··· 11174 11266 -L 11175 11267 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 11176 11268 -L 11269 + note:../_doc/_odoc/reference/note/note 11270 + -L 11177 11271 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 11178 11272 -L 11179 11273 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 11521 11615 -P 11522 11616 mtime:../_doc/_odoc/reference/mtime 11523 11617 -P 11618 + note:../_doc/_odoc/reference/note 11619 + -P 11524 11620 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 11525 11621 -P 11526 11622 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 11829 11925 -L 11830 11926 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 11831 11927 -L 11928 + note:../_doc/_odoc/reference/note/note 11929 + -L 11832 11930 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 11833 11931 -L 11834 11932 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 12175 12273 mime_printer:../_doc/_odoc/reference/mime_printer 12176 12274 -P 12177 12275 mtime:../_doc/_odoc/reference/mtime 12276 + -P 12277 + note:../_doc/_odoc/reference/note 12178 12278 -P 12179 12279 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 12180 12280 -P ··· 12484 12584 -L 12485 12585 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 12486 12586 -L 12587 + note:../_doc/_odoc/reference/note/note 12588 + -L 12487 12589 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 12488 12590 -L 12489 12591 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 12831 12933 -P 12832 12934 mtime:../_doc/_odoc/reference/mtime 12833 12935 -P 12936 + note:../_doc/_odoc/reference/note 12937 + -P 12834 12938 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 12835 12939 -P 12836 12940 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 13138 13242 mtime:../_doc/_odoc/reference/mtime/mtime 13139 13243 -L 13140 13244 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 13245 + -L 13246 + note:../_doc/_odoc/reference/note/note 13141 13247 -L 13142 13248 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 13143 13249 -L ··· 13485 13591 mime_printer:../_doc/_odoc/reference/mime_printer 13486 13592 -P 13487 13593 mtime:../_doc/_odoc/reference/mtime 13594 + -P 13595 + note:../_doc/_odoc/reference/note 13488 13596 -P 13489 13597 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 13490 13598 -P ··· 13794 13902 -L 13795 13903 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 13796 13904 -L 13905 + note:../_doc/_odoc/reference/note/note 13906 + -L 13797 13907 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 13798 13908 -L 13799 13909 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 14141 14251 -P 14142 14252 mtime:../_doc/_odoc/reference/mtime 14143 14253 -P 14254 + note:../_doc/_odoc/reference/note 14255 + -P 14144 14256 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 14145 14257 -P 14146 14258 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 14448 14560 mtime:../_doc/_odoc/reference/mtime/mtime 14449 14561 -L 14450 14562 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 14563 + -L 14564 + note:../_doc/_odoc/reference/note/note 14451 14565 -L 14452 14566 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 14453 14567 -L ··· 14796 14910 -P 14797 14911 mtime:../_doc/_odoc/reference/mtime 14798 14912 -P 14913 + note:../_doc/_odoc/reference/note 14914 + -P 14799 14915 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 14800 14916 -P 14801 14917 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 15103 15219 mtime:../_doc/_odoc/reference/mtime/mtime 15104 15220 -L 15105 15221 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 15222 + -L 15223 + note:../_doc/_odoc/reference/note/note 15106 15224 -L 15107 15225 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 15108 15226 -L ··· 15451 15569 -P 15452 15570 mtime:../_doc/_odoc/reference/mtime 15453 15571 -P 15572 + note:../_doc/_odoc/reference/note 15573 + -P 15454 15574 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 15455 15575 -P 15456 15576 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 15758 15878 mtime:../_doc/_odoc/reference/mtime/mtime 15759 15879 -L 15760 15880 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 15881 + -L 15882 + note:../_doc/_odoc/reference/note/note 15761 15883 -L 15762 15884 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 15763 15885 -L ··· 16105 16227 mime_printer:../_doc/_odoc/reference/mime_printer 16106 16228 -P 16107 16229 mtime:../_doc/_odoc/reference/mtime 16230 + -P 16231 + note:../_doc/_odoc/reference/note 16108 16232 -P 16109 16233 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 16110 16234 -P ··· 16414 16538 -L 16415 16539 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 16416 16540 -L 16541 + note:../_doc/_odoc/reference/note/note 16542 + -L 16417 16543 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 16418 16544 -L 16419 16545 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 16761 16887 -P 16762 16888 mtime:../_doc/_odoc/reference/mtime 16763 16889 -P 16890 + note:../_doc/_odoc/reference/note 16891 + -P 16764 16892 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 16765 16893 -P 16766 16894 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 17069 17197 -L 17070 17198 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 17071 17199 -L 17200 + note:../_doc/_odoc/reference/note/note 17201 + -L 17072 17202 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 17073 17203 -L 17074 17204 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 17415 17545 mime_printer:../_doc/_odoc/reference/mime_printer 17416 17546 -P 17417 17547 mtime:../_doc/_odoc/reference/mtime 17548 + -P 17549 + note:../_doc/_odoc/reference/note 17418 17550 -P 17419 17551 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 17420 17552 -P ··· 17724 17856 -L 17725 17857 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 17726 17858 -L 17859 + note:../_doc/_odoc/reference/note/note 17860 + -L 17727 17861 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 17728 17862 -L 17729 17863 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 18071 18205 -P 18072 18206 mtime:../_doc/_odoc/reference/mtime 18073 18207 -P 18208 + note:../_doc/_odoc/reference/note 18209 + -P 18074 18210 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 18075 18211 -P 18076 18212 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 18378 18514 mtime:../_doc/_odoc/reference/mtime/mtime 18379 18515 -L 18380 18516 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 18517 + -L 18518 + note:../_doc/_odoc/reference/note/note 18381 18519 -L 18382 18520 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 18383 18521 -L ··· 18725 18863 mime_printer:../_doc/_odoc/reference/mime_printer 18726 18864 -P 18727 18865 mtime:../_doc/_odoc/reference/mtime 18866 + -P 18867 + note:../_doc/_odoc/reference/note 18728 18868 -P 18729 18869 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 18730 18870 -P ··· 19034 19174 -L 19035 19175 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 19036 19176 -L 19177 + note:../_doc/_odoc/reference/note/note 19178 + -L 19037 19179 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 19038 19180 -L 19039 19181 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 19381 19523 -P 19382 19524 mtime:../_doc/_odoc/reference/mtime 19383 19525 -P 19526 + note:../_doc/_odoc/reference/note 19527 + -P 19384 19528 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 19385 19529 -P 19386 19530 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 19689 19833 -L 19690 19834 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 19691 19835 -L 19836 + note:../_doc/_odoc/reference/note/note 19837 + -L 19692 19838 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 19693 19839 -L 19694 19840 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 20036 20182 -P 20037 20183 mtime:../_doc/_odoc/reference/mtime 20038 20184 -P 20185 + note:../_doc/_odoc/reference/note 20186 + -P 20039 20187 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 20040 20188 -P 20041 20189 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 20343 20491 mtime:../_doc/_odoc/reference/mtime/mtime 20344 20492 -L 20345 20493 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 20494 + -L 20495 + note:../_doc/_odoc/reference/note/note 20346 20496 -L 20347 20497 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 20348 20498 -L ··· 20691 20841 -P 20692 20842 mtime:../_doc/_odoc/reference/mtime 20693 20843 -P 20844 + note:../_doc/_odoc/reference/note 20845 + -P 20694 20846 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 20695 20847 -P 20696 20848 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 20998 21150 mtime:../_doc/_odoc/reference/mtime/mtime 20999 21151 -L 21000 21152 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 21153 + -L 21154 + note:../_doc/_odoc/reference/note/note 21001 21155 -L 21002 21156 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 21003 21157 -L ··· 21345 21499 mime_printer:../_doc/_odoc/reference/mime_printer 21346 21500 -P 21347 21501 mtime:../_doc/_odoc/reference/mtime 21502 + -P 21503 + note:../_doc/_odoc/reference/note 21348 21504 -P 21349 21505 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 21350 21506 -P ··· 21654 21810 -L 21655 21811 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 21656 21812 -L 21813 + note:../_doc/_odoc/reference/note/note 21814 + -L 21657 21815 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 21658 21816 -L 21659 21817 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 22001 22159 -P 22002 22160 mtime:../_doc/_odoc/reference/mtime 22003 22161 -P 22162 + note:../_doc/_odoc/reference/note 22163 + -P 22004 22164 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 22005 22165 -P 22006 22166 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 22309 22469 -L 22310 22470 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 22311 22471 -L 22472 + note:../_doc/_odoc/reference/note/note 22473 + -L 22312 22474 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 22313 22475 -L 22314 22476 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 22656 22818 -P 22657 22819 mtime:../_doc/_odoc/reference/mtime 22658 22820 -P 22821 + note:../_doc/_odoc/reference/note 22822 + -P 22659 22823 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 22660 22824 -P 22661 22825 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 22963 23127 mtime:../_doc/_odoc/reference/mtime/mtime 22964 23128 -L 22965 23129 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 23130 + -L 23131 + note:../_doc/_odoc/reference/note/note 22966 23132 -L 22967 23133 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 22968 23134 -L ··· 23311 23477 -P 23312 23478 mtime:../_doc/_odoc/reference/mtime 23313 23479 -P 23480 + note:../_doc/_odoc/reference/note 23481 + -P 23314 23482 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 23315 23483 -P 23316 23484 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 23618 23786 mtime:../_doc/_odoc/reference/mtime/mtime 23619 23787 -L 23620 23788 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 23789 + -L 23790 + note:../_doc/_odoc/reference/note/note 23621 23791 -L 23622 23792 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 23623 23793 -L ··· 23966 24136 -P 23967 24137 mtime:../_doc/_odoc/reference/mtime 23968 24138 -P 24139 + note:../_doc/_odoc/reference/note 24140 + -P 23969 24141 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 23970 24142 -P 23971 24143 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 24273 24445 mtime:../_doc/_odoc/reference/mtime/mtime 24274 24446 -L 24275 24447 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 24448 + -L 24449 + note:../_doc/_odoc/reference/note/note 24276 24450 -L 24277 24451 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 24278 24452 -L ··· 24621 24795 -P 24622 24796 mtime:../_doc/_odoc/reference/mtime 24623 24797 -P 24798 + note:../_doc/_odoc/reference/note 24799 + -P 24624 24800 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 24625 24801 -P 24626 24802 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 24929 25105 -L 24930 25106 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 24931 25107 -L 25108 + note:../_doc/_odoc/reference/note/note 25109 + -L 24932 25110 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 24933 25111 -L 24934 25112 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 25276 25454 -P 25277 25455 mtime:../_doc/_odoc/reference/mtime 25278 25456 -P 25457 + note:../_doc/_odoc/reference/note 25458 + -P 25279 25459 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 25280 25460 -P 25281 25461 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 25583 25763 mtime:../_doc/_odoc/reference/mtime/mtime 25584 25764 -L 25585 25765 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 25766 + -L 25767 + note:../_doc/_odoc/reference/note/note 25586 25768 -L 25587 25769 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 25588 25770 -L ··· 25931 26113 -P 25932 26114 mtime:../_doc/_odoc/reference/mtime 25933 26115 -P 26116 + note:../_doc/_odoc/reference/note 26117 + -P 25934 26118 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 25935 26119 -P 25936 26120 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 26238 26422 mtime:../_doc/_odoc/reference/mtime/mtime 26239 26423 -L 26240 26424 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 26425 + -L 26426 + note:../_doc/_odoc/reference/note/note 26241 26427 -L 26242 26428 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 26243 26429 -L ··· 26585 26771 mime_printer:../_doc/_odoc/reference/mime_printer 26586 26772 -P 26587 26773 mtime:../_doc/_odoc/reference/mtime 26774 + -P 26775 + note:../_doc/_odoc/reference/note 26588 26776 -P 26589 26777 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 26590 26778 -P ··· 26894 27082 -L 26895 27083 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 26896 27084 -L 27085 + note:../_doc/_odoc/reference/note/note 27086 + -L 26897 27087 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 26898 27088 -L 26899 27089 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 27241 27431 -P 27242 27432 mtime:../_doc/_odoc/reference/mtime 27243 27433 -P 27434 + note:../_doc/_odoc/reference/note 27435 + -P 27244 27436 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 27245 27437 -P 27246 27438 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 27549 27741 -L 27550 27742 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 27551 27743 -L 27744 + note:../_doc/_odoc/reference/note/note 27745 + -L 27552 27746 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 27553 27747 -L 27554 27748 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 27895 28089 mime_printer:../_doc/_odoc/reference/mime_printer 27896 28090 -P 27897 28091 mtime:../_doc/_odoc/reference/mtime 28092 + -P 28093 + note:../_doc/_odoc/reference/note 27898 28094 -P 27899 28095 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 27900 28096 -P ··· 28204 28400 -L 28205 28401 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 28206 28402 -L 28403 + note:../_doc/_odoc/reference/note/note 28404 + -L 28207 28405 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 28208 28406 -L 28209 28407 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 28551 28749 -P 28552 28750 mtime:../_doc/_odoc/reference/mtime 28553 28751 -P 28752 + note:../_doc/_odoc/reference/note 28753 + -P 28554 28754 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 28555 28755 -P 28556 28756 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 28858 29058 mtime:../_doc/_odoc/reference/mtime/mtime 28859 29059 -L 28860 29060 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 29061 + -L 29062 + note:../_doc/_odoc/reference/note/note 28861 29063 -L 28862 29064 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 28863 29065 -L ··· 29205 29407 mime_printer:../_doc/_odoc/reference/mime_printer 29206 29408 -P 29207 29409 mtime:../_doc/_odoc/reference/mtime 29410 + -P 29411 + note:../_doc/_odoc/reference/note 29208 29412 -P 29209 29413 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 29210 29414 -P ··· 29514 29718 -L 29515 29719 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 29516 29720 -L 29721 + note:../_doc/_odoc/reference/note/note 29722 + -L 29517 29723 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 29518 29724 -L 29519 29725 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 29861 30067 -P 29862 30068 mtime:../_doc/_odoc/reference/mtime 29863 30069 -P 30070 + note:../_doc/_odoc/reference/note 30071 + -P 29864 30072 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 29865 30073 -P 29866 30074 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 30169 30377 -L 30170 30378 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 30171 30379 -L 30380 + note:../_doc/_odoc/reference/note/note 30381 + -L 30172 30382 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 30173 30383 -L 30174 30384 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 30516 30726 -P 30517 30727 mtime:../_doc/_odoc/reference/mtime 30518 30728 -P 30729 + note:../_doc/_odoc/reference/note 30730 + -P 30519 30731 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 30520 30732 -P 30521 30733 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 30823 31035 mtime:../_doc/_odoc/reference/mtime/mtime 30824 31036 -L 30825 31037 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 31038 + -L 31039 + note:../_doc/_odoc/reference/note/note 30826 31040 -L 30827 31041 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 30828 31042 -L ··· 31171 31385 -P 31172 31386 mtime:../_doc/_odoc/reference/mtime 31173 31387 -P 31388 + note:../_doc/_odoc/reference/note 31389 + -P 31174 31390 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 31175 31391 -P 31176 31392 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 31479 31695 -L 31480 31696 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 31481 31697 -L 31698 + note:../_doc/_odoc/reference/note/note 31699 + -L 31482 31700 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 31483 31701 -L 31484 31702 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 31726 31944 odoc 31727 31945 link 31728 31946 --warn-error 31947 + _odoc/blog/2026/03/page-retrospective.odoc 31948 + -P 31949 + site:_odoc 31950 + -P 31951 + angstrom:../_doc/_odoc/reference/angstrom 31952 + -P 31953 + astring:../_doc/_odoc/reference/astring 31954 + -P 31955 + base64:../_doc/_odoc/reference/base64 31956 + -P 31957 + base:../_doc/_odoc/reference/base 31958 + -P 31959 + basement:../_doc/_odoc/reference/basement 31960 + -P 31961 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck 31962 + -P 31963 + bigstringaf:../_doc/_odoc/reference/bigstringaf 31964 + -P 31965 + bos:../_doc/_odoc/reference/bos 31966 + -P 31967 + brr:../_doc/_odoc/reference/brr 31968 + -P 31969 + camlp-streams:../_doc/_odoc/reference/camlp-streams 31970 + -P 31971 + capsule0:../_doc/_odoc/reference/capsule0 31972 + -P 31973 + capsule:../_doc/_odoc/reference/capsule 31974 + -P 31975 + cmdliner:../_doc/_odoc/reference/cmdliner 31976 + -P 31977 + code-mirror:../_doc/_odoc/reference/code-mirror 31978 + -P 31979 + csexp:../_doc/_odoc/reference/csexp 31980 + -P 31981 + cstruct:../_doc/_odoc/reference/cstruct 31982 + -P 31983 + decompress:../_doc/_odoc/reference/decompress 31984 + -P 31985 + domain-local-await:../_doc/_odoc/reference/domain-local-await 31986 + -P 31987 + eio:../_doc/_odoc/reference/eio 31988 + -P 31989 + eio_linux:../_doc/_odoc/reference/eio_linux 31990 + -P 31991 + eio_main:../_doc/_odoc/reference/eio_main 31992 + -P 31993 + eio_posix:../_doc/_odoc/reference/eio_posix 31994 + -P 31995 + fieldslib:../_doc/_odoc/reference/fieldslib 31996 + -P 31997 + fmt:../_doc/_odoc/reference/fmt 31998 + -P 31999 + fpath:../_doc/_odoc/reference/fpath 32000 + -P 32001 + gen:../_doc/_odoc/reference/gen 32002 + -P 32003 + hmap:../_doc/_odoc/reference/hmap 32004 + -P 32005 + iomux:../_doc/_odoc/reference/iomux 32006 + -P 32007 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers 32008 + -P 32009 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler 32010 + -P 32011 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml 32012 + -P 32013 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt 32014 + -P 32015 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel 32016 + -P 32017 + jsonm:../_doc/_odoc/reference/jsonm 32018 + -P 32019 + js_top_worker-client:../_doc/_odoc/reference/js_top_worker-client 32020 + -P 32021 + js_top_worker:../_doc/_odoc/reference/js_top_worker 32022 + -P 32023 + js_top_worker-rpc:../_doc/_odoc/reference/js_top_worker-rpc 32024 + -P 32025 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web 32026 + -P 32027 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget 32028 + -P 32029 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet 32030 + -P 32031 + logs:../_doc/_odoc/reference/logs 32032 + -P 32033 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist 32034 + -P 32035 + lwt:../_doc/_odoc/reference/lwt 32036 + -P 32037 + menhirLib:../_doc/_odoc/reference/menhirLib 32038 + -P 32039 + merlin-js:../_doc/_odoc/reference/merlin-js 32040 + -P 32041 + merlin-lib:../_doc/_odoc/reference/merlin-lib 32042 + -P 32043 + mime_printer:../_doc/_odoc/reference/mime_printer 32044 + -P 32045 + mtime:../_doc/_odoc/reference/mtime 32046 + -P 32047 + note:../_doc/_odoc/reference/note 32048 + -P 32049 + ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 32050 + -P 32051 + ocamlfind:../_doc/_odoc/reference/ocamlfind 32052 + -P 32053 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph 32054 + -P 32055 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel 32056 + -P 32057 + ocaml-variants:../_doc/_odoc/reference/ocaml-variants 32058 + -P 32059 + odoc-admonition-extension:../_doc/_odoc/reference/odoc-admonition-extension 32060 + -P 32061 + odoc:../_doc/_odoc/reference/odoc 32062 + -P 32063 + odoc-docsite:../_doc/_odoc/reference/odoc-docsite 32064 + -P 32065 + odoc-dot-extension:../_doc/_odoc/reference/odoc-dot-extension 32066 + -P 32067 + odoc-driver:../_doc/_odoc/reference/odoc-driver 32068 + -P 32069 + odoc-interactive-extension:../_doc/_odoc/reference/odoc-interactive-extension 32070 + -P 32071 + odoc-jons-plugins:../_doc/_odoc/reference/odoc-jons-plugins 32072 + -P 32073 + odoc-mermaid-extension:../_doc/_odoc/reference/odoc-mermaid-extension 32074 + -P 32075 + odoc-msc-extension:../_doc/_odoc/reference/odoc-msc-extension 32076 + -P 32077 + odoc-parser:../_doc/_odoc/reference/odoc-parser 32078 + -P 32079 + odoc-rfc-extension:../_doc/_odoc/reference/odoc-rfc-extension 32080 + -P 32081 + odoc-scrollycode-extension:../_doc/_odoc/reference/odoc-scrollycode-extension 32082 + -P 32083 + odoc-standalone:../_doc/_odoc/reference/odoc-standalone 32084 + -P 32085 + onnxrt:../_doc/_odoc/reference/onnxrt 32086 + -P 32087 + opam-core:../_doc/_odoc/reference/opam-core 32088 + -P 32089 + opam-file-format:../_doc/_odoc/reference/opam-file-format 32090 + -P 32091 + opam-format:../_doc/_odoc/reference/opam-format 32092 + -P 32093 + optint:../_doc/_odoc/reference/optint 32094 + -P 32095 + parsexp:../_doc/_odoc/reference/parsexp 32096 + -P 32097 + patch:../_doc/_odoc/reference/patch 32098 + -P 32099 + portable:../_doc/_odoc/reference/portable 32100 + -P 32101 + ppx_assert:../_doc/_odoc/reference/ppx_assert 32102 + -P 32103 + ppx_bench:../_doc/_odoc/reference/ppx_bench 32104 + -P 32105 + ppx_compare:../_doc/_odoc/reference/ppx_compare 32106 + -P 32107 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers 32108 + -P 32109 + ppx_enumerate:../_doc/_odoc/reference/ppx_enumerate 32110 + -P 32111 + ppx_hash:../_doc/_odoc/reference/ppx_hash 32112 + -P 32113 + ppx_here:../_doc/_odoc/reference/ppx_here 32114 + -P 32115 + ppx_inline_test:../_doc/_odoc/reference/ppx_inline_test 32116 + -P 32117 + ppxlib_ast:../_doc/_odoc/reference/ppxlib_ast 32118 + -P 32119 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane 32120 + -P 32121 + ppxlib:../_doc/_odoc/reference/ppxlib 32122 + -P 32123 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register 32124 + -P 32125 + ppx_portable:../_doc/_odoc/reference/ppx_portable 32126 + -P 32127 + ppx_sexp_conv:../_doc/_odoc/reference/ppx_sexp_conv 32128 + -P 32129 + progress:../_doc/_odoc/reference/progress 32130 + -P 32131 + psq:../_doc/_odoc/reference/psq 32132 + -P 32133 + re:../_doc/_odoc/reference/re 32134 + -P 32135 + rresult:../_doc/_odoc/reference/rresult 32136 + -P 32137 + sedlex:../_doc/_odoc/reference/sedlex 32138 + -P 32139 + sexplib0:../_doc/_odoc/reference/sexplib0 32140 + -P 32141 + sexplib:../_doc/_odoc/reference/sexplib 32142 + -P 32143 + sexp_type:../_doc/_odoc/reference/sexp_type 32144 + -P 32145 + sha:../_doc/_odoc/reference/sha 32146 + -P 32147 + sherlodoc:../_doc/_odoc/reference/sherlodoc 32148 + -P 32149 + splittable_random:../_doc/_odoc/reference/splittable_random 32150 + -P 32151 + stringext:../_doc/_odoc/reference/stringext 32152 + -P 32153 + swhid_core:../_doc/_odoc/reference/swhid_core 32154 + -P 32155 + terminal:../_doc/_odoc/reference/terminal 32156 + -P 32157 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo 32158 + -P 32159 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera 32160 + -P 32161 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg 32162 + -P 32163 + tessera-npy:../_doc/_odoc/reference/tessera-npy 32164 + -P 32165 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo 32166 + -P 32167 + tessera-viz:../_doc/_odoc/reference/tessera-viz 32168 + -P 32169 + thread-table:../_doc/_odoc/reference/thread-table 32170 + -P 32171 + time_now:../_doc/_odoc/reference/time_now 32172 + -P 32173 + tyxml:../_doc/_odoc/reference/tyxml 32174 + -P 32175 + unique:../_doc/_odoc/reference/unique 32176 + -P 32177 + uring:../_doc/_odoc/reference/uring 32178 + -P 32179 + uri:../_doc/_odoc/reference/uri 32180 + -P 32181 + uucp:../_doc/_odoc/reference/uucp 32182 + -P 32183 + uutf:../_doc/_odoc/reference/uutf 32184 + -P 32185 + x-ocaml:../_doc/_odoc/reference/x-ocaml 32186 + -P 32187 + yojson:../_doc/_odoc/reference/yojson 32188 + -L 32189 + angstrom:../_doc/_odoc/reference/angstrom/angstrom 32190 + -L 32191 + astring:../_doc/_odoc/reference/astring/astring 32192 + -L 32193 + base64:../_doc/_odoc/reference/base64/base64 32194 + -L 32195 + base:../_doc/_odoc/reference/base/base 32196 + -L 32197 + base.shadow_stdlib:../_doc/_odoc/reference/base/base.shadow_stdlib 32198 + -L 32199 + basement:../_doc/_odoc/reference/basement/basement 32200 + -L 32201 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck/base_quickcheck 32202 + -L 32203 + base_quickcheck.ppx_quickcheck.runtime:../_doc/_odoc/reference/base_quickcheck/base_quickcheck.ppx_quickcheck.runtime 32204 + -L 32205 + bigstringaf:../_doc/_odoc/reference/bigstringaf/bigstringaf 32206 + -L 32207 + bos:../_doc/_odoc/reference/bos/bos 32208 + -L 32209 + brr:../_doc/_odoc/reference/brr/brr 32210 + -L 32211 + camlp-streams:../_doc/_odoc/reference/camlp-streams/camlp-streams 32212 + -L 32213 + capsule0.blocking_sync:../_doc/_odoc/reference/capsule0/capsule0.blocking_sync 32214 + -L 32215 + capsule0.expert:../_doc/_odoc/reference/capsule0/capsule0.expert 32216 + -L 32217 + capsule:../_doc/_odoc/reference/capsule/capsule 32218 + -L 32219 + cmdliner:../_doc/_odoc/reference/cmdliner/cmdliner 32220 + -L 32221 + code-mirror:../_doc/_odoc/reference/code-mirror/code-mirror 32222 + -L 32223 + code-mirror.autocomplete:../_doc/_odoc/reference/code-mirror/code-mirror.autocomplete 32224 + -L 32225 + code-mirror.lint:../_doc/_odoc/reference/code-mirror/code-mirror.lint 32226 + -L 32227 + code-mirror.stream:../_doc/_odoc/reference/code-mirror/code-mirror.stream 32228 + -L 32229 + code-mirror.tooltip:../_doc/_odoc/reference/code-mirror/code-mirror.tooltip 32230 + -L 32231 + csexp:../_doc/_odoc/reference/csexp/csexp 32232 + -L 32233 + cstruct:../_doc/_odoc/reference/cstruct/cstruct 32234 + -L 32235 + decompress.de:../_doc/_odoc/reference/decompress/decompress.de 32236 + -L 32237 + decompress.zl:../_doc/_odoc/reference/decompress/decompress.zl 32238 + -L 32239 + domain-local-await:../_doc/_odoc/reference/domain-local-await/domain-local-await 32240 + -L 32241 + eio:../_doc/_odoc/reference/eio/eio 32242 + -L 32243 + eio.core:../_doc/_odoc/reference/eio/eio.core 32244 + -L 32245 + eio.runtime_events:../_doc/_odoc/reference/eio/eio.runtime_events 32246 + -L 32247 + eio.unix:../_doc/_odoc/reference/eio/eio.unix 32248 + -L 32249 + eio.utils:../_doc/_odoc/reference/eio/eio.utils 32250 + -L 32251 + eio_linux:../_doc/_odoc/reference/eio_linux/eio_linux 32252 + -L 32253 + eio_main:../_doc/_odoc/reference/eio_main/eio_main 32254 + -L 32255 + eio_posix:../_doc/_odoc/reference/eio_posix/eio_posix 32256 + -L 32257 + fieldslib:../_doc/_odoc/reference/fieldslib/fieldslib 32258 + -L 32259 + fmt:../_doc/_odoc/reference/fmt/fmt 32260 + -L 32261 + fpath:../_doc/_odoc/reference/fpath/fpath 32262 + -L 32263 + gen:../_doc/_odoc/reference/gen/gen 32264 + -L 32265 + hmap:../_doc/_odoc/reference/hmap/hmap 32266 + -L 32267 + iomux:../_doc/_odoc/reference/iomux/iomux 32268 + -L 32269 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers/jane-street-headers 32270 + -L 32271 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler 32272 + -L 32273 + js_of_ocaml-compiler.dynlink:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.dynlink 32274 + -L 32275 + js_of_ocaml-compiler.runtime:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.runtime 32276 + -L 32277 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml/js_of_ocaml 32278 + -L 32279 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt/js_of_ocaml-lwt 32280 + -L 32281 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel/js_of_ocaml-toplevel 32282 + -L 32283 + jsonm:../_doc/_odoc/reference/jsonm/jsonm 32284 + -L 32285 + js_top_worker-client.msg:../_doc/_odoc/reference/js_top_worker-client/js_top_worker-client.msg 32286 + -L 32287 + js_top_worker:../_doc/_odoc/reference/js_top_worker/js_top_worker 32288 + -L 32289 + js_top_worker-rpc.message:../_doc/_odoc/reference/js_top_worker-rpc/js_top_worker-rpc.message 32290 + -L 32291 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web/js_top_worker-web 32292 + -L 32293 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget/js_top_worker-widget 32294 + -L 32295 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet/js_top_worker-widget-leaflet 32296 + -L 32297 + logs:../_doc/_odoc/reference/logs/logs 32298 + -L 32299 + logs.browser:../_doc/_odoc/reference/logs/logs.browser 32300 + -L 32301 + logs.fmt:../_doc/_odoc/reference/logs/logs.fmt 32302 + -L 32303 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist/lwt-dllist 32304 + -L 32305 + lwt:../_doc/_odoc/reference/lwt/lwt 32306 + -L 32307 + menhirLib:../_doc/_odoc/reference/menhirLib/menhirLib 32308 + -L 32309 + merlin-js.client:../_doc/_odoc/reference/merlin-js/merlin-js.client 32310 + -L 32311 + merlin-js.code-mirror:../_doc/_odoc/reference/merlin-js/merlin-js.code-mirror 32312 + -L 32313 + merlin-js.protocol:../_doc/_odoc/reference/merlin-js/merlin-js.protocol 32314 + -L 32315 + merlin-js.worker:../_doc/_odoc/reference/merlin-js/merlin-js.worker 32316 + -L 32317 + merlin-js.worker.static:../_doc/_odoc/reference/merlin-js/merlin-js.worker.static 32318 + -L 32319 + merlin-lib.analysis:../_doc/_odoc/reference/merlin-lib/merlin-lib.analysis 32320 + -L 32321 + merlin-lib.config:../_doc/_odoc/reference/merlin-lib/merlin-lib.config 32322 + -L 32323 + merlin-lib.dot_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.dot_protocol 32324 + -L 32325 + merlin-lib.extend:../_doc/_odoc/reference/merlin-lib/merlin-lib.extend 32326 + -L 32327 + merlin-lib.index_format:../_doc/_odoc/reference/merlin-lib/merlin-lib.index_format 32328 + -L 32329 + merlin-lib.kernel:../_doc/_odoc/reference/merlin-lib/merlin-lib.kernel 32330 + -L 32331 + merlin-lib.ocaml_merlin_specific:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_merlin_specific 32332 + -L 32333 + merlin-lib.ocaml_parsing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_parsing 32334 + -L 32335 + merlin-lib.ocaml_preprocess:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_preprocess 32336 + -L 32337 + merlin-lib.ocaml_typing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_typing 32338 + -L 32339 + merlin-lib.ocaml_utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_utils 32340 + -L 32341 + merlin-lib.os_ipc:../_doc/_odoc/reference/merlin-lib/merlin-lib.os_ipc 32342 + -L 32343 + merlin-lib.query_commands:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_commands 32344 + -L 32345 + merlin-lib.query_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_protocol 32346 + -L 32347 + merlin-lib.sherlodoc:../_doc/_odoc/reference/merlin-lib/merlin-lib.sherlodoc 32348 + -L 32349 + merlin-lib.utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.utils 32350 + -L 32351 + mime_printer:../_doc/_odoc/reference/mime_printer/mime_printer 32352 + -L 32353 + mtime:../_doc/_odoc/reference/mtime/mtime 32354 + -L 32355 + mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 32356 + -L 32357 + note:../_doc/_odoc/reference/note/note 32358 + -L 32359 + ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 32360 + -L 32361 + ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common 32362 + -L 32363 + ocaml-compiler-libs.shadow:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.shadow 32364 + -L 32365 + findlib.internal:../_doc/_odoc/reference/ocamlfind/findlib.internal 32366 + -L 32367 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph/ocamlgraph 32368 + -L 32369 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel/ocaml_intrinsics_kernel 32370 + -L 32371 + compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.bytecomp 32372 + -L 32373 + compiler-libs.common:../_doc/_odoc/reference/ocaml-variants/compiler-libs.common 32374 + -L 32375 + compiler-libs.optcomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.optcomp 32376 + -L 32377 + compiler-libs.toplevel:../_doc/_odoc/reference/ocaml-variants/compiler-libs.toplevel 32378 + -L 32379 + runtime_events:../_doc/_odoc/reference/ocaml-variants/runtime_events 32380 + -L 32381 + stdlib:../_doc/_odoc/reference/ocaml-variants/stdlib 32382 + -L 32383 + str:../_doc/_odoc/reference/ocaml-variants/str 32384 + -L 32385 + threads:../_doc/_odoc/reference/ocaml-variants/threads 32386 + -L 32387 + unix:../_doc/_odoc/reference/ocaml-variants/unix 32388 + -L 32389 + odoc-admonition-extension.impl:../_doc/_odoc/reference/odoc-admonition-extension/odoc-admonition-extension.impl 32390 + -L 32391 + deprecated:../_doc/_odoc/reference/odoc/deprecated 32392 + -L 32393 + odoc-docsite.impl:../_doc/_odoc/reference/odoc-docsite/odoc-docsite.impl 32394 + -L 32395 + odoc-dot-extension.impl:../_doc/_odoc/reference/odoc-dot-extension/odoc-dot-extension.impl 32396 + -L 32397 + odoc-driver:../_doc/_odoc/reference/odoc-driver/odoc-driver 32398 + -L 32399 + odoc-interactive-extension.impl:../_doc/_odoc/reference/odoc-interactive-extension/odoc-interactive-extension.impl 32400 + -L 32401 + odoc-jons-plugins.impl:../_doc/_odoc/reference/odoc-jons-plugins/odoc-jons-plugins.impl 32402 + -L 32403 + odoc-mermaid-extension.impl:../_doc/_odoc/reference/odoc-mermaid-extension/odoc-mermaid-extension.impl 32404 + -L 32405 + odoc-msc-extension.impl:../_doc/_odoc/reference/odoc-msc-extension/odoc-msc-extension.impl 32406 + -L 32407 + odoc.document:../_doc/_odoc/reference/odoc/odoc.document 32408 + -L 32409 + odoc.examples:../_doc/_odoc/reference/odoc/odoc.examples 32410 + -L 32411 + odoc.extension_api:../_doc/_odoc/reference/odoc/odoc.extension_api 32412 + -L 32413 + odoc.extension_registry:../_doc/_odoc/reference/odoc/odoc.extension_registry 32414 + -L 32415 + odoc.html:../_doc/_odoc/reference/odoc/odoc.html 32416 + -L 32417 + odoc.html_support_files:../_doc/_odoc/reference/odoc/odoc.html_support_files 32418 + -L 32419 + odoc.index:../_doc/_odoc/reference/odoc/odoc.index 32420 + -L 32421 + odoc.json_index:../_doc/_odoc/reference/odoc/odoc.json_index 32422 + -L 32423 + odoc.latex:../_doc/_odoc/reference/odoc/odoc.latex 32424 + -L 32425 + odoc.loader:../_doc/_odoc/reference/odoc/odoc.loader 32426 + -L 32427 + odoc.manpage:../_doc/_odoc/reference/odoc/odoc.manpage 32428 + -L 32429 + odoc.markdown:../_doc/_odoc/reference/odoc/odoc.markdown 32430 + -L 32431 + odoc.model:../_doc/_odoc/reference/odoc/odoc.model 32432 + -L 32433 + odoc.model_desc:../_doc/_odoc/reference/odoc/odoc.model_desc 32434 + -L 32435 + odoc.ocamlary:../_doc/_odoc/reference/odoc/odoc.ocamlary 32436 + -L 32437 + odoc.occurrences:../_doc/_odoc/reference/odoc/odoc.occurrences 32438 + -L 32439 + odoc.odoc:../_doc/_odoc/reference/odoc/odoc.odoc 32440 + -L 32441 + odoc.odoc_utils:../_doc/_odoc/reference/odoc/odoc.odoc_utils 32442 + -L 32443 + odoc.search:../_doc/_odoc/reference/odoc/odoc.search 32444 + -L 32445 + odoc.search_html_frontend:../_doc/_odoc/reference/odoc/odoc.search_html_frontend 32446 + -L 32447 + odoc.syntax_highlighter:../_doc/_odoc/reference/odoc/odoc.syntax_highlighter 32448 + -L 32449 + odoc.xref2:../_doc/_odoc/reference/odoc/odoc.xref2 32450 + -L 32451 + odoc.xref_test:../_doc/_odoc/reference/odoc/odoc.xref_test 32452 + -L 32453 + odoc-parser:../_doc/_odoc/reference/odoc-parser/odoc-parser 32454 + -L 32455 + odoc-rfc-extension.impl:../_doc/_odoc/reference/odoc-rfc-extension/odoc-rfc-extension.impl 32456 + -L 32457 + odoc-scrollycode-extension.impl:../_doc/_odoc/reference/odoc-scrollycode-extension/odoc-scrollycode-extension.impl 32458 + -L 32459 + odoc-standalone.impl:../_doc/_odoc/reference/odoc-standalone/odoc-standalone.impl 32460 + -L 32461 + onnxrt:../_doc/_odoc/reference/onnxrt/onnxrt 32462 + -L 32463 + opam-core:../_doc/_odoc/reference/opam-core/opam-core 32464 + -L 32465 + opam-file-format:../_doc/_odoc/reference/opam-file-format/opam-file-format 32466 + -L 32467 + opam-format:../_doc/_odoc/reference/opam-format/opam-format 32468 + -L 32469 + optint:../_doc/_odoc/reference/optint/optint 32470 + -L 32471 + parsexp:../_doc/_odoc/reference/parsexp/parsexp 32472 + -L 32473 + patch:../_doc/_odoc/reference/patch/patch 32474 + -L 32475 + portable.kernel:../_doc/_odoc/reference/portable/portable.kernel 32476 + -L 32477 + ppx_assert.runtime-lib:../_doc/_odoc/reference/ppx_assert/ppx_assert.runtime-lib 32478 + -L 32479 + ppx_bench.config:../_doc/_odoc/reference/ppx_bench/ppx_bench.config 32480 + -L 32481 + ppx_bench.config_types:../_doc/_odoc/reference/ppx_bench/ppx_bench.config_types 32482 + -L 32483 + ppx_bench.runtime-lib:../_doc/_odoc/reference/ppx_bench/ppx_bench.runtime-lib 32484 + -L 32485 + ppx_compare.runtime-lib:../_doc/_odoc/reference/ppx_compare/ppx_compare.runtime-lib 32486 + -L 32487 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers/ppx_derivers 32488 + -L 32489 + ppx_enumerate.runtime-lib:../_doc/_odoc/reference/ppx_enumerate/ppx_enumerate.runtime-lib 32490 + -L 32491 + ppx_hash.base_internalhash_types:../_doc/_odoc/reference/ppx_hash/ppx_hash.base_internalhash_types 32492 + -L 32493 + ppx_hash.runtime-lib:../_doc/_odoc/reference/ppx_hash/ppx_hash.runtime-lib 32494 + -L 32495 + ppx_here.runtime-lib:../_doc/_odoc/reference/ppx_here/ppx_here.runtime-lib 32496 + -L 32497 + ppx_inline_test.config:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.config 32498 + -L 32499 + ppx_inline_test.runtime-lib:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.runtime-lib 32500 + -L 32501 + ppxlib_ast.ast:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.ast 32502 + -L 32503 + ppxlib_ast.astlib:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.astlib 32504 + -L 32505 + ppxlib_ast.stdppx:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.stdppx 32506 + -L 32507 + ppxlib_ast.traverse_builtins:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.traverse_builtins 32508 + -L 32509 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane/ppxlib_jane 32510 + -L 32511 + ppxlib:../_doc/_odoc/reference/ppxlib/ppxlib 32512 + -L 32513 + ppxlib.print_diff:../_doc/_odoc/reference/ppxlib/ppxlib.print_diff 32514 + -L 32515 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register/ppxlib_register 32516 + -L 32517 + ppx_portable.runtime:../_doc/_odoc/reference/ppx_portable/ppx_portable.runtime 32518 + -L 32519 + ppx_sexp_conv.runtime-lib:../_doc/_odoc/reference/ppx_sexp_conv/ppx_sexp_conv.runtime-lib 32520 + -L 32521 + progress:../_doc/_odoc/reference/progress/progress 32522 + -L 32523 + progress.engine:../_doc/_odoc/reference/progress/progress.engine 32524 + -L 32525 + progress.vector:../_doc/_odoc/reference/progress/progress.vector 32526 + -L 32527 + psq:../_doc/_odoc/reference/psq/psq 32528 + -L 32529 + re:../_doc/_odoc/reference/re/re 32530 + -L 32531 + rresult:../_doc/_odoc/reference/rresult/rresult 32532 + -L 32533 + sedlex:../_doc/_odoc/reference/sedlex/sedlex 32534 + -L 32535 + sexplib0:../_doc/_odoc/reference/sexplib0/sexplib0 32536 + -L 32537 + sexplib:../_doc/_odoc/reference/sexplib/sexplib 32538 + -L 32539 + sexp_type:../_doc/_odoc/reference/sexp_type/sexp_type 32540 + -L 32541 + sexp_type.grammar:../_doc/_odoc/reference/sexp_type/sexp_type.grammar 32542 + -L 32543 + sha:../_doc/_odoc/reference/sha/sha 32544 + -L 32545 + sherlodoc.db:../_doc/_odoc/reference/sherlodoc/sherlodoc.db 32546 + -L 32547 + sherlodoc.db_store:../_doc/_odoc/reference/sherlodoc/sherlodoc.db_store 32548 + -L 32549 + sherlodoc.query:../_doc/_odoc/reference/sherlodoc/sherlodoc.query 32550 + -L 32551 + sherlodoc.storage_js:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_js 32552 + -L 32553 + sherlodoc.storage_marshal:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_marshal 32554 + -L 32555 + splittable_random:../_doc/_odoc/reference/splittable_random/splittable_random 32556 + -L 32557 + stringext:../_doc/_odoc/reference/stringext/stringext 32558 + -L 32559 + swhid_core:../_doc/_odoc/reference/swhid_core/swhid_core 32560 + -L 32561 + terminal:../_doc/_odoc/reference/terminal/terminal 32562 + -L 32563 + terminal.ansi:../_doc/_odoc/reference/terminal/terminal.ansi 32564 + -L 32565 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo/tessera-geotessera-jsoo 32566 + -L 32567 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera/tessera-geotessera 32568 + -L 32569 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg/tessera-linalg 32570 + -L 32571 + tessera-npy:../_doc/_odoc/reference/tessera-npy/tessera-npy 32572 + -L 32573 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo/tessera-viz-jsoo 32574 + -L 32575 + tessera-viz:../_doc/_odoc/reference/tessera-viz/tessera-viz 32576 + -L 32577 + thread-table:../_doc/_odoc/reference/thread-table/thread-table 32578 + -L 32579 + time_now:../_doc/_odoc/reference/time_now/time_now 32580 + -L 32581 + tyxml:../_doc/_odoc/reference/tyxml/tyxml 32582 + -L 32583 + tyxml.functor:../_doc/_odoc/reference/tyxml/tyxml.functor 32584 + -L 32585 + unique:../_doc/_odoc/reference/unique/unique 32586 + -L 32587 + uring:../_doc/_odoc/reference/uring/uring 32588 + -L 32589 + uri:../_doc/_odoc/reference/uri/uri 32590 + -L 32591 + uucp:../_doc/_odoc/reference/uucp/uucp 32592 + -L 32593 + uutf:../_doc/_odoc/reference/uutf/uutf 32594 + -L 32595 + x-ocaml.lib:../_doc/_odoc/reference/x-ocaml/x-ocaml.lib 32596 + -L 32597 + x-ocaml.protocol:../_doc/_odoc/reference/x-ocaml/x-ocaml.protocol 32598 + -L 32599 + yojson:../_doc/_odoc/reference/yojson/yojson 32600 + -o 32601 + _odoc/blog/2026/03/page-retrospective.odocl) 32602 + (run 32603 + odoc 32604 + link 32605 + --warn-error 31729 32606 _odoc/blog/2026/03/page-review.odoc 31730 32607 -P 31731 32608 site:_odoc ··· 31826 32703 -P 31827 32704 mtime:../_doc/_odoc/reference/mtime 31828 32705 -P 32706 + note:../_doc/_odoc/reference/note 32707 + -P 31829 32708 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 31830 32709 -P 31831 32710 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 32133 33012 mtime:../_doc/_odoc/reference/mtime/mtime 32134 33013 -L 32135 33014 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 33015 + -L 33016 + note:../_doc/_odoc/reference/note/note 32136 33017 -L 32137 33018 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 32138 33019 -L ··· 32480 33361 mime_printer:../_doc/_odoc/reference/mime_printer 32481 33362 -P 32482 33363 mtime:../_doc/_odoc/reference/mtime 33364 + -P 33365 + note:../_doc/_odoc/reference/note 32483 33366 -P 32484 33367 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 32485 33368 -P ··· 32789 33672 -L 32790 33673 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 32791 33674 -L 33675 + note:../_doc/_odoc/reference/note/note 33676 + -L 32792 33677 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 32793 33678 -L 32794 33679 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 33136 34021 -P 33137 34022 mtime:../_doc/_odoc/reference/mtime 33138 34023 -P 34024 + note:../_doc/_odoc/reference/note 34025 + -P 33139 34026 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 33140 34027 -P 33141 34028 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 33444 34331 -L 33445 34332 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 33446 34333 -L 34334 + note:../_doc/_odoc/reference/note/note 34335 + -L 33447 34336 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 33448 34337 -L 33449 34338 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 33791 34680 -P 33792 34681 mtime:../_doc/_odoc/reference/mtime 33793 34682 -P 34683 + note:../_doc/_odoc/reference/note 34684 + -P 33794 34685 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 33795 34686 -P 33796 34687 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 34098 34989 mtime:../_doc/_odoc/reference/mtime/mtime 34099 34990 -L 34100 34991 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 34992 + -L 34993 + note:../_doc/_odoc/reference/note/note 34101 34994 -L 34102 34995 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 34103 34996 -L ··· 34346 35239 odoc 34347 35240 link 34348 35241 --warn-error 35242 + _odoc/blog/2026/03/page-weeknotes-2026-12.odoc 35243 + -P 35244 + site:_odoc 35245 + -P 35246 + angstrom:../_doc/_odoc/reference/angstrom 35247 + -P 35248 + astring:../_doc/_odoc/reference/astring 35249 + -P 35250 + base64:../_doc/_odoc/reference/base64 35251 + -P 35252 + base:../_doc/_odoc/reference/base 35253 + -P 35254 + basement:../_doc/_odoc/reference/basement 35255 + -P 35256 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck 35257 + -P 35258 + bigstringaf:../_doc/_odoc/reference/bigstringaf 35259 + -P 35260 + bos:../_doc/_odoc/reference/bos 35261 + -P 35262 + brr:../_doc/_odoc/reference/brr 35263 + -P 35264 + camlp-streams:../_doc/_odoc/reference/camlp-streams 35265 + -P 35266 + capsule0:../_doc/_odoc/reference/capsule0 35267 + -P 35268 + capsule:../_doc/_odoc/reference/capsule 35269 + -P 35270 + cmdliner:../_doc/_odoc/reference/cmdliner 35271 + -P 35272 + code-mirror:../_doc/_odoc/reference/code-mirror 35273 + -P 35274 + csexp:../_doc/_odoc/reference/csexp 35275 + -P 35276 + cstruct:../_doc/_odoc/reference/cstruct 35277 + -P 35278 + decompress:../_doc/_odoc/reference/decompress 35279 + -P 35280 + domain-local-await:../_doc/_odoc/reference/domain-local-await 35281 + -P 35282 + eio:../_doc/_odoc/reference/eio 35283 + -P 35284 + eio_linux:../_doc/_odoc/reference/eio_linux 35285 + -P 35286 + eio_main:../_doc/_odoc/reference/eio_main 35287 + -P 35288 + eio_posix:../_doc/_odoc/reference/eio_posix 35289 + -P 35290 + fieldslib:../_doc/_odoc/reference/fieldslib 35291 + -P 35292 + fmt:../_doc/_odoc/reference/fmt 35293 + -P 35294 + fpath:../_doc/_odoc/reference/fpath 35295 + -P 35296 + gen:../_doc/_odoc/reference/gen 35297 + -P 35298 + hmap:../_doc/_odoc/reference/hmap 35299 + -P 35300 + iomux:../_doc/_odoc/reference/iomux 35301 + -P 35302 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers 35303 + -P 35304 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler 35305 + -P 35306 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml 35307 + -P 35308 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt 35309 + -P 35310 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel 35311 + -P 35312 + jsonm:../_doc/_odoc/reference/jsonm 35313 + -P 35314 + js_top_worker-client:../_doc/_odoc/reference/js_top_worker-client 35315 + -P 35316 + js_top_worker:../_doc/_odoc/reference/js_top_worker 35317 + -P 35318 + js_top_worker-rpc:../_doc/_odoc/reference/js_top_worker-rpc 35319 + -P 35320 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web 35321 + -P 35322 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget 35323 + -P 35324 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet 35325 + -P 35326 + logs:../_doc/_odoc/reference/logs 35327 + -P 35328 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist 35329 + -P 35330 + lwt:../_doc/_odoc/reference/lwt 35331 + -P 35332 + menhirLib:../_doc/_odoc/reference/menhirLib 35333 + -P 35334 + merlin-js:../_doc/_odoc/reference/merlin-js 35335 + -P 35336 + merlin-lib:../_doc/_odoc/reference/merlin-lib 35337 + -P 35338 + mime_printer:../_doc/_odoc/reference/mime_printer 35339 + -P 35340 + mtime:../_doc/_odoc/reference/mtime 35341 + -P 35342 + note:../_doc/_odoc/reference/note 35343 + -P 35344 + ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 35345 + -P 35346 + ocamlfind:../_doc/_odoc/reference/ocamlfind 35347 + -P 35348 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph 35349 + -P 35350 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel 35351 + -P 35352 + ocaml-variants:../_doc/_odoc/reference/ocaml-variants 35353 + -P 35354 + odoc-admonition-extension:../_doc/_odoc/reference/odoc-admonition-extension 35355 + -P 35356 + odoc:../_doc/_odoc/reference/odoc 35357 + -P 35358 + odoc-docsite:../_doc/_odoc/reference/odoc-docsite 35359 + -P 35360 + odoc-dot-extension:../_doc/_odoc/reference/odoc-dot-extension 35361 + -P 35362 + odoc-driver:../_doc/_odoc/reference/odoc-driver 35363 + -P 35364 + odoc-interactive-extension:../_doc/_odoc/reference/odoc-interactive-extension 35365 + -P 35366 + odoc-jons-plugins:../_doc/_odoc/reference/odoc-jons-plugins 35367 + -P 35368 + odoc-mermaid-extension:../_doc/_odoc/reference/odoc-mermaid-extension 35369 + -P 35370 + odoc-msc-extension:../_doc/_odoc/reference/odoc-msc-extension 35371 + -P 35372 + odoc-parser:../_doc/_odoc/reference/odoc-parser 35373 + -P 35374 + odoc-rfc-extension:../_doc/_odoc/reference/odoc-rfc-extension 35375 + -P 35376 + odoc-scrollycode-extension:../_doc/_odoc/reference/odoc-scrollycode-extension 35377 + -P 35378 + odoc-standalone:../_doc/_odoc/reference/odoc-standalone 35379 + -P 35380 + onnxrt:../_doc/_odoc/reference/onnxrt 35381 + -P 35382 + opam-core:../_doc/_odoc/reference/opam-core 35383 + -P 35384 + opam-file-format:../_doc/_odoc/reference/opam-file-format 35385 + -P 35386 + opam-format:../_doc/_odoc/reference/opam-format 35387 + -P 35388 + optint:../_doc/_odoc/reference/optint 35389 + -P 35390 + parsexp:../_doc/_odoc/reference/parsexp 35391 + -P 35392 + patch:../_doc/_odoc/reference/patch 35393 + -P 35394 + portable:../_doc/_odoc/reference/portable 35395 + -P 35396 + ppx_assert:../_doc/_odoc/reference/ppx_assert 35397 + -P 35398 + ppx_bench:../_doc/_odoc/reference/ppx_bench 35399 + -P 35400 + ppx_compare:../_doc/_odoc/reference/ppx_compare 35401 + -P 35402 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers 35403 + -P 35404 + ppx_enumerate:../_doc/_odoc/reference/ppx_enumerate 35405 + -P 35406 + ppx_hash:../_doc/_odoc/reference/ppx_hash 35407 + -P 35408 + ppx_here:../_doc/_odoc/reference/ppx_here 35409 + -P 35410 + ppx_inline_test:../_doc/_odoc/reference/ppx_inline_test 35411 + -P 35412 + ppxlib_ast:../_doc/_odoc/reference/ppxlib_ast 35413 + -P 35414 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane 35415 + -P 35416 + ppxlib:../_doc/_odoc/reference/ppxlib 35417 + -P 35418 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register 35419 + -P 35420 + ppx_portable:../_doc/_odoc/reference/ppx_portable 35421 + -P 35422 + ppx_sexp_conv:../_doc/_odoc/reference/ppx_sexp_conv 35423 + -P 35424 + progress:../_doc/_odoc/reference/progress 35425 + -P 35426 + psq:../_doc/_odoc/reference/psq 35427 + -P 35428 + re:../_doc/_odoc/reference/re 35429 + -P 35430 + rresult:../_doc/_odoc/reference/rresult 35431 + -P 35432 + sedlex:../_doc/_odoc/reference/sedlex 35433 + -P 35434 + sexplib0:../_doc/_odoc/reference/sexplib0 35435 + -P 35436 + sexplib:../_doc/_odoc/reference/sexplib 35437 + -P 35438 + sexp_type:../_doc/_odoc/reference/sexp_type 35439 + -P 35440 + sha:../_doc/_odoc/reference/sha 35441 + -P 35442 + sherlodoc:../_doc/_odoc/reference/sherlodoc 35443 + -P 35444 + splittable_random:../_doc/_odoc/reference/splittable_random 35445 + -P 35446 + stringext:../_doc/_odoc/reference/stringext 35447 + -P 35448 + swhid_core:../_doc/_odoc/reference/swhid_core 35449 + -P 35450 + terminal:../_doc/_odoc/reference/terminal 35451 + -P 35452 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo 35453 + -P 35454 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera 35455 + -P 35456 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg 35457 + -P 35458 + tessera-npy:../_doc/_odoc/reference/tessera-npy 35459 + -P 35460 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo 35461 + -P 35462 + tessera-viz:../_doc/_odoc/reference/tessera-viz 35463 + -P 35464 + thread-table:../_doc/_odoc/reference/thread-table 35465 + -P 35466 + time_now:../_doc/_odoc/reference/time_now 35467 + -P 35468 + tyxml:../_doc/_odoc/reference/tyxml 35469 + -P 35470 + unique:../_doc/_odoc/reference/unique 35471 + -P 35472 + uring:../_doc/_odoc/reference/uring 35473 + -P 35474 + uri:../_doc/_odoc/reference/uri 35475 + -P 35476 + uucp:../_doc/_odoc/reference/uucp 35477 + -P 35478 + uutf:../_doc/_odoc/reference/uutf 35479 + -P 35480 + x-ocaml:../_doc/_odoc/reference/x-ocaml 35481 + -P 35482 + yojson:../_doc/_odoc/reference/yojson 35483 + -L 35484 + angstrom:../_doc/_odoc/reference/angstrom/angstrom 35485 + -L 35486 + astring:../_doc/_odoc/reference/astring/astring 35487 + -L 35488 + base64:../_doc/_odoc/reference/base64/base64 35489 + -L 35490 + base:../_doc/_odoc/reference/base/base 35491 + -L 35492 + base.shadow_stdlib:../_doc/_odoc/reference/base/base.shadow_stdlib 35493 + -L 35494 + basement:../_doc/_odoc/reference/basement/basement 35495 + -L 35496 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck/base_quickcheck 35497 + -L 35498 + base_quickcheck.ppx_quickcheck.runtime:../_doc/_odoc/reference/base_quickcheck/base_quickcheck.ppx_quickcheck.runtime 35499 + -L 35500 + bigstringaf:../_doc/_odoc/reference/bigstringaf/bigstringaf 35501 + -L 35502 + bos:../_doc/_odoc/reference/bos/bos 35503 + -L 35504 + brr:../_doc/_odoc/reference/brr/brr 35505 + -L 35506 + camlp-streams:../_doc/_odoc/reference/camlp-streams/camlp-streams 35507 + -L 35508 + capsule0.blocking_sync:../_doc/_odoc/reference/capsule0/capsule0.blocking_sync 35509 + -L 35510 + capsule0.expert:../_doc/_odoc/reference/capsule0/capsule0.expert 35511 + -L 35512 + capsule:../_doc/_odoc/reference/capsule/capsule 35513 + -L 35514 + cmdliner:../_doc/_odoc/reference/cmdliner/cmdliner 35515 + -L 35516 + code-mirror:../_doc/_odoc/reference/code-mirror/code-mirror 35517 + -L 35518 + code-mirror.autocomplete:../_doc/_odoc/reference/code-mirror/code-mirror.autocomplete 35519 + -L 35520 + code-mirror.lint:../_doc/_odoc/reference/code-mirror/code-mirror.lint 35521 + -L 35522 + code-mirror.stream:../_doc/_odoc/reference/code-mirror/code-mirror.stream 35523 + -L 35524 + code-mirror.tooltip:../_doc/_odoc/reference/code-mirror/code-mirror.tooltip 35525 + -L 35526 + csexp:../_doc/_odoc/reference/csexp/csexp 35527 + -L 35528 + cstruct:../_doc/_odoc/reference/cstruct/cstruct 35529 + -L 35530 + decompress.de:../_doc/_odoc/reference/decompress/decompress.de 35531 + -L 35532 + decompress.zl:../_doc/_odoc/reference/decompress/decompress.zl 35533 + -L 35534 + domain-local-await:../_doc/_odoc/reference/domain-local-await/domain-local-await 35535 + -L 35536 + eio:../_doc/_odoc/reference/eio/eio 35537 + -L 35538 + eio.core:../_doc/_odoc/reference/eio/eio.core 35539 + -L 35540 + eio.runtime_events:../_doc/_odoc/reference/eio/eio.runtime_events 35541 + -L 35542 + eio.unix:../_doc/_odoc/reference/eio/eio.unix 35543 + -L 35544 + eio.utils:../_doc/_odoc/reference/eio/eio.utils 35545 + -L 35546 + eio_linux:../_doc/_odoc/reference/eio_linux/eio_linux 35547 + -L 35548 + eio_main:../_doc/_odoc/reference/eio_main/eio_main 35549 + -L 35550 + eio_posix:../_doc/_odoc/reference/eio_posix/eio_posix 35551 + -L 35552 + fieldslib:../_doc/_odoc/reference/fieldslib/fieldslib 35553 + -L 35554 + fmt:../_doc/_odoc/reference/fmt/fmt 35555 + -L 35556 + fpath:../_doc/_odoc/reference/fpath/fpath 35557 + -L 35558 + gen:../_doc/_odoc/reference/gen/gen 35559 + -L 35560 + hmap:../_doc/_odoc/reference/hmap/hmap 35561 + -L 35562 + iomux:../_doc/_odoc/reference/iomux/iomux 35563 + -L 35564 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers/jane-street-headers 35565 + -L 35566 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler 35567 + -L 35568 + js_of_ocaml-compiler.dynlink:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.dynlink 35569 + -L 35570 + js_of_ocaml-compiler.runtime:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.runtime 35571 + -L 35572 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml/js_of_ocaml 35573 + -L 35574 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt/js_of_ocaml-lwt 35575 + -L 35576 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel/js_of_ocaml-toplevel 35577 + -L 35578 + jsonm:../_doc/_odoc/reference/jsonm/jsonm 35579 + -L 35580 + js_top_worker-client.msg:../_doc/_odoc/reference/js_top_worker-client/js_top_worker-client.msg 35581 + -L 35582 + js_top_worker:../_doc/_odoc/reference/js_top_worker/js_top_worker 35583 + -L 35584 + js_top_worker-rpc.message:../_doc/_odoc/reference/js_top_worker-rpc/js_top_worker-rpc.message 35585 + -L 35586 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web/js_top_worker-web 35587 + -L 35588 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget/js_top_worker-widget 35589 + -L 35590 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet/js_top_worker-widget-leaflet 35591 + -L 35592 + logs:../_doc/_odoc/reference/logs/logs 35593 + -L 35594 + logs.browser:../_doc/_odoc/reference/logs/logs.browser 35595 + -L 35596 + logs.fmt:../_doc/_odoc/reference/logs/logs.fmt 35597 + -L 35598 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist/lwt-dllist 35599 + -L 35600 + lwt:../_doc/_odoc/reference/lwt/lwt 35601 + -L 35602 + menhirLib:../_doc/_odoc/reference/menhirLib/menhirLib 35603 + -L 35604 + merlin-js.client:../_doc/_odoc/reference/merlin-js/merlin-js.client 35605 + -L 35606 + merlin-js.code-mirror:../_doc/_odoc/reference/merlin-js/merlin-js.code-mirror 35607 + -L 35608 + merlin-js.protocol:../_doc/_odoc/reference/merlin-js/merlin-js.protocol 35609 + -L 35610 + merlin-js.worker:../_doc/_odoc/reference/merlin-js/merlin-js.worker 35611 + -L 35612 + merlin-js.worker.static:../_doc/_odoc/reference/merlin-js/merlin-js.worker.static 35613 + -L 35614 + merlin-lib.analysis:../_doc/_odoc/reference/merlin-lib/merlin-lib.analysis 35615 + -L 35616 + merlin-lib.config:../_doc/_odoc/reference/merlin-lib/merlin-lib.config 35617 + -L 35618 + merlin-lib.dot_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.dot_protocol 35619 + -L 35620 + merlin-lib.extend:../_doc/_odoc/reference/merlin-lib/merlin-lib.extend 35621 + -L 35622 + merlin-lib.index_format:../_doc/_odoc/reference/merlin-lib/merlin-lib.index_format 35623 + -L 35624 + merlin-lib.kernel:../_doc/_odoc/reference/merlin-lib/merlin-lib.kernel 35625 + -L 35626 + merlin-lib.ocaml_merlin_specific:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_merlin_specific 35627 + -L 35628 + merlin-lib.ocaml_parsing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_parsing 35629 + -L 35630 + merlin-lib.ocaml_preprocess:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_preprocess 35631 + -L 35632 + merlin-lib.ocaml_typing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_typing 35633 + -L 35634 + merlin-lib.ocaml_utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_utils 35635 + -L 35636 + merlin-lib.os_ipc:../_doc/_odoc/reference/merlin-lib/merlin-lib.os_ipc 35637 + -L 35638 + merlin-lib.query_commands:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_commands 35639 + -L 35640 + merlin-lib.query_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_protocol 35641 + -L 35642 + merlin-lib.sherlodoc:../_doc/_odoc/reference/merlin-lib/merlin-lib.sherlodoc 35643 + -L 35644 + merlin-lib.utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.utils 35645 + -L 35646 + mime_printer:../_doc/_odoc/reference/mime_printer/mime_printer 35647 + -L 35648 + mtime:../_doc/_odoc/reference/mtime/mtime 35649 + -L 35650 + mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 35651 + -L 35652 + note:../_doc/_odoc/reference/note/note 35653 + -L 35654 + ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 35655 + -L 35656 + ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common 35657 + -L 35658 + ocaml-compiler-libs.shadow:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.shadow 35659 + -L 35660 + findlib.internal:../_doc/_odoc/reference/ocamlfind/findlib.internal 35661 + -L 35662 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph/ocamlgraph 35663 + -L 35664 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel/ocaml_intrinsics_kernel 35665 + -L 35666 + compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.bytecomp 35667 + -L 35668 + compiler-libs.common:../_doc/_odoc/reference/ocaml-variants/compiler-libs.common 35669 + -L 35670 + compiler-libs.optcomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.optcomp 35671 + -L 35672 + compiler-libs.toplevel:../_doc/_odoc/reference/ocaml-variants/compiler-libs.toplevel 35673 + -L 35674 + runtime_events:../_doc/_odoc/reference/ocaml-variants/runtime_events 35675 + -L 35676 + stdlib:../_doc/_odoc/reference/ocaml-variants/stdlib 35677 + -L 35678 + str:../_doc/_odoc/reference/ocaml-variants/str 35679 + -L 35680 + threads:../_doc/_odoc/reference/ocaml-variants/threads 35681 + -L 35682 + unix:../_doc/_odoc/reference/ocaml-variants/unix 35683 + -L 35684 + odoc-admonition-extension.impl:../_doc/_odoc/reference/odoc-admonition-extension/odoc-admonition-extension.impl 35685 + -L 35686 + deprecated:../_doc/_odoc/reference/odoc/deprecated 35687 + -L 35688 + odoc-docsite.impl:../_doc/_odoc/reference/odoc-docsite/odoc-docsite.impl 35689 + -L 35690 + odoc-dot-extension.impl:../_doc/_odoc/reference/odoc-dot-extension/odoc-dot-extension.impl 35691 + -L 35692 + odoc-driver:../_doc/_odoc/reference/odoc-driver/odoc-driver 35693 + -L 35694 + odoc-interactive-extension.impl:../_doc/_odoc/reference/odoc-interactive-extension/odoc-interactive-extension.impl 35695 + -L 35696 + odoc-jons-plugins.impl:../_doc/_odoc/reference/odoc-jons-plugins/odoc-jons-plugins.impl 35697 + -L 35698 + odoc-mermaid-extension.impl:../_doc/_odoc/reference/odoc-mermaid-extension/odoc-mermaid-extension.impl 35699 + -L 35700 + odoc-msc-extension.impl:../_doc/_odoc/reference/odoc-msc-extension/odoc-msc-extension.impl 35701 + -L 35702 + odoc.document:../_doc/_odoc/reference/odoc/odoc.document 35703 + -L 35704 + odoc.examples:../_doc/_odoc/reference/odoc/odoc.examples 35705 + -L 35706 + odoc.extension_api:../_doc/_odoc/reference/odoc/odoc.extension_api 35707 + -L 35708 + odoc.extension_registry:../_doc/_odoc/reference/odoc/odoc.extension_registry 35709 + -L 35710 + odoc.html:../_doc/_odoc/reference/odoc/odoc.html 35711 + -L 35712 + odoc.html_support_files:../_doc/_odoc/reference/odoc/odoc.html_support_files 35713 + -L 35714 + odoc.index:../_doc/_odoc/reference/odoc/odoc.index 35715 + -L 35716 + odoc.json_index:../_doc/_odoc/reference/odoc/odoc.json_index 35717 + -L 35718 + odoc.latex:../_doc/_odoc/reference/odoc/odoc.latex 35719 + -L 35720 + odoc.loader:../_doc/_odoc/reference/odoc/odoc.loader 35721 + -L 35722 + odoc.manpage:../_doc/_odoc/reference/odoc/odoc.manpage 35723 + -L 35724 + odoc.markdown:../_doc/_odoc/reference/odoc/odoc.markdown 35725 + -L 35726 + odoc.model:../_doc/_odoc/reference/odoc/odoc.model 35727 + -L 35728 + odoc.model_desc:../_doc/_odoc/reference/odoc/odoc.model_desc 35729 + -L 35730 + odoc.ocamlary:../_doc/_odoc/reference/odoc/odoc.ocamlary 35731 + -L 35732 + odoc.occurrences:../_doc/_odoc/reference/odoc/odoc.occurrences 35733 + -L 35734 + odoc.odoc:../_doc/_odoc/reference/odoc/odoc.odoc 35735 + -L 35736 + odoc.odoc_utils:../_doc/_odoc/reference/odoc/odoc.odoc_utils 35737 + -L 35738 + odoc.search:../_doc/_odoc/reference/odoc/odoc.search 35739 + -L 35740 + odoc.search_html_frontend:../_doc/_odoc/reference/odoc/odoc.search_html_frontend 35741 + -L 35742 + odoc.syntax_highlighter:../_doc/_odoc/reference/odoc/odoc.syntax_highlighter 35743 + -L 35744 + odoc.xref2:../_doc/_odoc/reference/odoc/odoc.xref2 35745 + -L 35746 + odoc.xref_test:../_doc/_odoc/reference/odoc/odoc.xref_test 35747 + -L 35748 + odoc-parser:../_doc/_odoc/reference/odoc-parser/odoc-parser 35749 + -L 35750 + odoc-rfc-extension.impl:../_doc/_odoc/reference/odoc-rfc-extension/odoc-rfc-extension.impl 35751 + -L 35752 + odoc-scrollycode-extension.impl:../_doc/_odoc/reference/odoc-scrollycode-extension/odoc-scrollycode-extension.impl 35753 + -L 35754 + odoc-standalone.impl:../_doc/_odoc/reference/odoc-standalone/odoc-standalone.impl 35755 + -L 35756 + onnxrt:../_doc/_odoc/reference/onnxrt/onnxrt 35757 + -L 35758 + opam-core:../_doc/_odoc/reference/opam-core/opam-core 35759 + -L 35760 + opam-file-format:../_doc/_odoc/reference/opam-file-format/opam-file-format 35761 + -L 35762 + opam-format:../_doc/_odoc/reference/opam-format/opam-format 35763 + -L 35764 + optint:../_doc/_odoc/reference/optint/optint 35765 + -L 35766 + parsexp:../_doc/_odoc/reference/parsexp/parsexp 35767 + -L 35768 + patch:../_doc/_odoc/reference/patch/patch 35769 + -L 35770 + portable.kernel:../_doc/_odoc/reference/portable/portable.kernel 35771 + -L 35772 + ppx_assert.runtime-lib:../_doc/_odoc/reference/ppx_assert/ppx_assert.runtime-lib 35773 + -L 35774 + ppx_bench.config:../_doc/_odoc/reference/ppx_bench/ppx_bench.config 35775 + -L 35776 + ppx_bench.config_types:../_doc/_odoc/reference/ppx_bench/ppx_bench.config_types 35777 + -L 35778 + ppx_bench.runtime-lib:../_doc/_odoc/reference/ppx_bench/ppx_bench.runtime-lib 35779 + -L 35780 + ppx_compare.runtime-lib:../_doc/_odoc/reference/ppx_compare/ppx_compare.runtime-lib 35781 + -L 35782 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers/ppx_derivers 35783 + -L 35784 + ppx_enumerate.runtime-lib:../_doc/_odoc/reference/ppx_enumerate/ppx_enumerate.runtime-lib 35785 + -L 35786 + ppx_hash.base_internalhash_types:../_doc/_odoc/reference/ppx_hash/ppx_hash.base_internalhash_types 35787 + -L 35788 + ppx_hash.runtime-lib:../_doc/_odoc/reference/ppx_hash/ppx_hash.runtime-lib 35789 + -L 35790 + ppx_here.runtime-lib:../_doc/_odoc/reference/ppx_here/ppx_here.runtime-lib 35791 + -L 35792 + ppx_inline_test.config:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.config 35793 + -L 35794 + ppx_inline_test.runtime-lib:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.runtime-lib 35795 + -L 35796 + ppxlib_ast.ast:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.ast 35797 + -L 35798 + ppxlib_ast.astlib:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.astlib 35799 + -L 35800 + ppxlib_ast.stdppx:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.stdppx 35801 + -L 35802 + ppxlib_ast.traverse_builtins:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.traverse_builtins 35803 + -L 35804 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane/ppxlib_jane 35805 + -L 35806 + ppxlib:../_doc/_odoc/reference/ppxlib/ppxlib 35807 + -L 35808 + ppxlib.print_diff:../_doc/_odoc/reference/ppxlib/ppxlib.print_diff 35809 + -L 35810 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register/ppxlib_register 35811 + -L 35812 + ppx_portable.runtime:../_doc/_odoc/reference/ppx_portable/ppx_portable.runtime 35813 + -L 35814 + ppx_sexp_conv.runtime-lib:../_doc/_odoc/reference/ppx_sexp_conv/ppx_sexp_conv.runtime-lib 35815 + -L 35816 + progress:../_doc/_odoc/reference/progress/progress 35817 + -L 35818 + progress.engine:../_doc/_odoc/reference/progress/progress.engine 35819 + -L 35820 + progress.vector:../_doc/_odoc/reference/progress/progress.vector 35821 + -L 35822 + psq:../_doc/_odoc/reference/psq/psq 35823 + -L 35824 + re:../_doc/_odoc/reference/re/re 35825 + -L 35826 + rresult:../_doc/_odoc/reference/rresult/rresult 35827 + -L 35828 + sedlex:../_doc/_odoc/reference/sedlex/sedlex 35829 + -L 35830 + sexplib0:../_doc/_odoc/reference/sexplib0/sexplib0 35831 + -L 35832 + sexplib:../_doc/_odoc/reference/sexplib/sexplib 35833 + -L 35834 + sexp_type:../_doc/_odoc/reference/sexp_type/sexp_type 35835 + -L 35836 + sexp_type.grammar:../_doc/_odoc/reference/sexp_type/sexp_type.grammar 35837 + -L 35838 + sha:../_doc/_odoc/reference/sha/sha 35839 + -L 35840 + sherlodoc.db:../_doc/_odoc/reference/sherlodoc/sherlodoc.db 35841 + -L 35842 + sherlodoc.db_store:../_doc/_odoc/reference/sherlodoc/sherlodoc.db_store 35843 + -L 35844 + sherlodoc.query:../_doc/_odoc/reference/sherlodoc/sherlodoc.query 35845 + -L 35846 + sherlodoc.storage_js:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_js 35847 + -L 35848 + sherlodoc.storage_marshal:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_marshal 35849 + -L 35850 + splittable_random:../_doc/_odoc/reference/splittable_random/splittable_random 35851 + -L 35852 + stringext:../_doc/_odoc/reference/stringext/stringext 35853 + -L 35854 + swhid_core:../_doc/_odoc/reference/swhid_core/swhid_core 35855 + -L 35856 + terminal:../_doc/_odoc/reference/terminal/terminal 35857 + -L 35858 + terminal.ansi:../_doc/_odoc/reference/terminal/terminal.ansi 35859 + -L 35860 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo/tessera-geotessera-jsoo 35861 + -L 35862 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera/tessera-geotessera 35863 + -L 35864 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg/tessera-linalg 35865 + -L 35866 + tessera-npy:../_doc/_odoc/reference/tessera-npy/tessera-npy 35867 + -L 35868 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo/tessera-viz-jsoo 35869 + -L 35870 + tessera-viz:../_doc/_odoc/reference/tessera-viz/tessera-viz 35871 + -L 35872 + thread-table:../_doc/_odoc/reference/thread-table/thread-table 35873 + -L 35874 + time_now:../_doc/_odoc/reference/time_now/time_now 35875 + -L 35876 + tyxml:../_doc/_odoc/reference/tyxml/tyxml 35877 + -L 35878 + tyxml.functor:../_doc/_odoc/reference/tyxml/tyxml.functor 35879 + -L 35880 + unique:../_doc/_odoc/reference/unique/unique 35881 + -L 35882 + uring:../_doc/_odoc/reference/uring/uring 35883 + -L 35884 + uri:../_doc/_odoc/reference/uri/uri 35885 + -L 35886 + uucp:../_doc/_odoc/reference/uucp/uucp 35887 + -L 35888 + uutf:../_doc/_odoc/reference/uutf/uutf 35889 + -L 35890 + x-ocaml.lib:../_doc/_odoc/reference/x-ocaml/x-ocaml.lib 35891 + -L 35892 + x-ocaml.protocol:../_doc/_odoc/reference/x-ocaml/x-ocaml.protocol 35893 + -L 35894 + yojson:../_doc/_odoc/reference/yojson/yojson 35895 + -o 35896 + _odoc/blog/2026/03/page-weeknotes-2026-12.odocl) 35897 + (run 35898 + odoc 35899 + link 35900 + --warn-error 34349 35901 _odoc/blog/2026/page-index.odoc 34350 35902 -P 34351 35903 site:_odoc ··· 34445 35997 mime_printer:../_doc/_odoc/reference/mime_printer 34446 35998 -P 34447 35999 mtime:../_doc/_odoc/reference/mtime 36000 + -P 36001 + note:../_doc/_odoc/reference/note 34448 36002 -P 34449 36003 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 34450 36004 -P ··· 34754 36308 -L 34755 36309 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 34756 36310 -L 36311 + note:../_doc/_odoc/reference/note/note 36312 + -L 34757 36313 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 34758 36314 -L 34759 36315 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 35101 36657 -P 35102 36658 mtime:../_doc/_odoc/reference/mtime 35103 36659 -P 36660 + note:../_doc/_odoc/reference/note 36661 + -P 35104 36662 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 35105 36663 -P 35106 36664 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 35408 36966 mtime:../_doc/_odoc/reference/mtime/mtime 35409 36967 -L 35410 36968 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 36969 + -L 36970 + note:../_doc/_odoc/reference/note/note 35411 36971 -L 35412 36972 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 35413 36973 -L ··· 35756 37316 -P 35757 37317 mtime:../_doc/_odoc/reference/mtime 35758 37318 -P 37319 + note:../_doc/_odoc/reference/note 37320 + -P 35759 37321 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 35760 37322 -P 35761 37323 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 36063 37625 mtime:../_doc/_odoc/reference/mtime/mtime 36064 37626 -L 36065 37627 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 37628 + -L 37629 + note:../_doc/_odoc/reference/note/note 36066 37630 -L 36067 37631 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 36068 37632 -L ··· 36410 37974 mime_printer:../_doc/_odoc/reference/mime_printer 36411 37975 -P 36412 37976 mtime:../_doc/_odoc/reference/mtime 37977 + -P 37978 + note:../_doc/_odoc/reference/note 36413 37979 -P 36414 37980 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 36415 37981 -P ··· 36719 38285 -L 36720 38286 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 36721 38287 -L 38288 + note:../_doc/_odoc/reference/note/note 38289 + -L 36722 38290 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 36723 38291 -L 36724 38292 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 37066 38634 -P 37067 38635 mtime:../_doc/_odoc/reference/mtime 37068 38636 -P 38637 + note:../_doc/_odoc/reference/note 38638 + -P 37069 38639 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 37070 38640 -P 37071 38641 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 37374 38944 -L 37375 38945 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 37376 38946 -L 38947 + note:../_doc/_odoc/reference/note/note 38948 + -L 37377 38949 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 37378 38950 -L 37379 38951 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 37721 39293 -P 37722 39294 mtime:../_doc/_odoc/reference/mtime 37723 39295 -P 39296 + note:../_doc/_odoc/reference/note 39297 + -P 37724 39298 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 37725 39299 -P 37726 39300 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 38028 39602 mtime:../_doc/_odoc/reference/mtime/mtime 38029 39603 -L 38030 39604 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 39605 + -L 39606 + note:../_doc/_odoc/reference/note/note 38031 39607 -L 38032 39608 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 38033 39609 -L ··· 38376 39952 -P 38377 39953 mtime:../_doc/_odoc/reference/mtime 38378 39954 -P 39955 + note:../_doc/_odoc/reference/note 39956 + -P 38379 39957 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 38380 39958 -P 38381 39959 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 38683 40261 mtime:../_doc/_odoc/reference/mtime/mtime 38684 40262 -L 38685 40263 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 40264 + -L 40265 + note:../_doc/_odoc/reference/note/note 38686 40266 -L 38687 40267 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 38688 40268 -L ··· 39031 40611 -P 39032 40612 mtime:../_doc/_odoc/reference/mtime 39033 40613 -P 40614 + note:../_doc/_odoc/reference/note 40615 + -P 39034 40616 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 39035 40617 -P 39036 40618 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 39338 40920 mtime:../_doc/_odoc/reference/mtime/mtime 39339 40921 -L 39340 40922 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 40923 + -L 40924 + note:../_doc/_odoc/reference/note/note 39341 40925 -L 39342 40926 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 39343 40927 -L ··· 39686 41270 -P 39687 41271 mtime:../_doc/_odoc/reference/mtime 39688 41272 -P 41273 + note:../_doc/_odoc/reference/note 41274 + -P 39689 41275 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 39690 41276 -P 39691 41277 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 39994 41580 -L 39995 41581 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 39996 41582 -L 41583 + note:../_doc/_odoc/reference/note/note 41584 + -L 39997 41585 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 39998 41586 -L 39999 41587 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 40341 41929 -P 40342 41930 mtime:../_doc/_odoc/reference/mtime 40343 41931 -P 41932 + note:../_doc/_odoc/reference/note 41933 + -P 40344 41934 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 40345 41935 -P 40346 41936 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 40648 42238 mtime:../_doc/_odoc/reference/mtime/mtime 40649 42239 -L 40650 42240 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 42241 + -L 42242 + note:../_doc/_odoc/reference/note/note 40651 42243 -L 40652 42244 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 40653 42245 -L ··· 40996 42588 -P 40997 42589 mtime:../_doc/_odoc/reference/mtime 40998 42590 -P 42591 + note:../_doc/_odoc/reference/note 42592 + -P 40999 42593 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 41000 42594 -P 41001 42595 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 41303 42897 mtime:../_doc/_odoc/reference/mtime/mtime 41304 42898 -L 41305 42899 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 42900 + -L 42901 + note:../_doc/_odoc/reference/note/note 41306 42902 -L 41307 42903 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 41308 42904 -L ··· 41650 43246 mime_printer:../_doc/_odoc/reference/mime_printer 41651 43247 -P 41652 43248 mtime:../_doc/_odoc/reference/mtime 43249 + -P 43250 + note:../_doc/_odoc/reference/note 41653 43251 -P 41654 43252 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 41655 43253 -P ··· 41959 43557 -L 41960 43558 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 41961 43559 -L 43560 + note:../_doc/_odoc/reference/note/note 43561 + -L 41962 43562 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 41963 43563 -L 41964 43564 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 42306 43906 -P 42307 43907 mtime:../_doc/_odoc/reference/mtime 42308 43908 -P 43909 + note:../_doc/_odoc/reference/note 43910 + -P 42309 43911 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 42310 43912 -P 42311 43913 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 42614 44216 -L 42615 44217 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 42616 44218 -L 44219 + note:../_doc/_odoc/reference/note/note 44220 + -L 42617 44221 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 42618 44222 -L 42619 44223 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 42960 44564 mime_printer:../_doc/_odoc/reference/mime_printer 42961 44565 -P 42962 44566 mtime:../_doc/_odoc/reference/mtime 44567 + -P 44568 + note:../_doc/_odoc/reference/note 42963 44569 -P 42964 44570 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 42965 44571 -P ··· 43269 44875 -L 43270 44876 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 43271 44877 -L 44878 + note:../_doc/_odoc/reference/note/note 44879 + -L 43272 44880 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 43273 44881 -L 43274 44882 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 43616 45224 -P 43617 45225 mtime:../_doc/_odoc/reference/mtime 43618 45226 -P 45227 + note:../_doc/_odoc/reference/note 45228 + -P 43619 45229 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 43620 45230 -P 43621 45231 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 43923 45533 mtime:../_doc/_odoc/reference/mtime/mtime 43924 45534 -L 43925 45535 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 45536 + -L 45537 + note:../_doc/_odoc/reference/note/note 43926 45538 -L 43927 45539 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 43928 45540 -L ··· 44270 45882 mime_printer:../_doc/_odoc/reference/mime_printer 44271 45883 -P 44272 45884 mtime:../_doc/_odoc/reference/mtime 45885 + -P 45886 + note:../_doc/_odoc/reference/note 44273 45887 -P 44274 45888 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 44275 45889 -P ··· 44579 46193 -L 44580 46194 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 44581 46195 -L 46196 + note:../_doc/_odoc/reference/note/note 46197 + -L 44582 46198 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 44583 46199 -L 44584 46200 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 44926 46542 -P 44927 46543 mtime:../_doc/_odoc/reference/mtime 44928 46544 -P 46545 + note:../_doc/_odoc/reference/note 46546 + -P 44929 46547 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 44930 46548 -P 44931 46549 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 45234 46852 -L 45235 46853 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 45236 46854 -L 46855 + note:../_doc/_odoc/reference/note/note 46856 + -L 45237 46857 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 45238 46858 -L 45239 46859 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 45581 47201 -P 45582 47202 mtime:../_doc/_odoc/reference/mtime 45583 47203 -P 47204 + note:../_doc/_odoc/reference/note 47205 + -P 45584 47206 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 45585 47207 -P 45586 47208 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 45888 47510 mtime:../_doc/_odoc/reference/mtime/mtime 45889 47511 -L 45890 47512 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 47513 + -L 47514 + note:../_doc/_odoc/reference/note/note 45891 47515 -L 45892 47516 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 45893 47517 -L ··· 46236 47860 -P 46237 47861 mtime:../_doc/_odoc/reference/mtime 46238 47862 -P 47863 + note:../_doc/_odoc/reference/note 47864 + -P 46239 47865 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 46240 47866 -P 46241 47867 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 46543 48169 mtime:../_doc/_odoc/reference/mtime/mtime 46544 48170 -L 46545 48171 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 48172 + -L 48173 + note:../_doc/_odoc/reference/note/note 46546 48174 -L 46547 48175 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 46548 48176 -L ··· 46890 48518 mime_printer:../_doc/_odoc/reference/mime_printer 46891 48519 -P 46892 48520 mtime:../_doc/_odoc/reference/mtime 48521 + -P 48522 + note:../_doc/_odoc/reference/note 46893 48523 -P 46894 48524 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 46895 48525 -P ··· 47199 48829 -L 47200 48830 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 47201 48831 -L 48832 + note:../_doc/_odoc/reference/note/note 48833 + -L 47202 48834 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 47203 48835 -L 47204 48836 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 47546 49178 -P 47547 49179 mtime:../_doc/_odoc/reference/mtime 47548 49180 -P 49181 + note:../_doc/_odoc/reference/note 49182 + -P 47549 49183 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 47550 49184 -P 47551 49185 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 47854 49488 -L 47855 49489 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 47856 49490 -L 49491 + note:../_doc/_odoc/reference/note/note 49492 + -L 47857 49493 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 47858 49494 -L 47859 49495 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 48200 49836 mime_printer:../_doc/_odoc/reference/mime_printer 48201 49837 -P 48202 49838 mtime:../_doc/_odoc/reference/mtime 49839 + -P 49840 + note:../_doc/_odoc/reference/note 48203 49841 -P 48204 49842 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 48205 49843 -P ··· 48509 50147 -L 48510 50148 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 48511 50149 -L 50150 + note:../_doc/_odoc/reference/note/note 50151 + -L 48512 50152 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 48513 50153 -L 48514 50154 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 48856 50496 -P 48857 50497 mtime:../_doc/_odoc/reference/mtime 48858 50498 -P 50499 + note:../_doc/_odoc/reference/note 50500 + -P 48859 50501 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 48860 50502 -P 48861 50503 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 49163 50805 mtime:../_doc/_odoc/reference/mtime/mtime 49164 50806 -L 49165 50807 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 50808 + -L 50809 + note:../_doc/_odoc/reference/note/note 49166 50810 -L 49167 50811 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 49168 50812 -L ··· 49510 51154 mime_printer:../_doc/_odoc/reference/mime_printer 49511 51155 -P 49512 51156 mtime:../_doc/_odoc/reference/mtime 51157 + -P 51158 + note:../_doc/_odoc/reference/note 49513 51159 -P 49514 51160 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 49515 51161 -P ··· 49819 51465 -L 49820 51466 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 49821 51467 -L 51468 + note:../_doc/_odoc/reference/note/note 51469 + -L 49822 51470 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 49823 51471 -L 49824 51472 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 50166 51814 -P 50167 51815 mtime:../_doc/_odoc/reference/mtime 50168 51816 -P 51817 + note:../_doc/_odoc/reference/note 51818 + -P 50169 51819 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 50170 51820 -P 50171 51821 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 50473 52123 mtime:../_doc/_odoc/reference/mtime/mtime 50474 52124 -L 50475 52125 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 52126 + -L 52127 + note:../_doc/_odoc/reference/note/note 50476 52128 -L 50477 52129 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 50478 52130 -L ··· 50821 52473 -P 50822 52474 mtime:../_doc/_odoc/reference/mtime 50823 52475 -P 52476 + note:../_doc/_odoc/reference/note 52477 + -P 50824 52478 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 50825 52479 -P 50826 52480 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 51128 52782 mtime:../_doc/_odoc/reference/mtime/mtime 51129 52783 -L 51130 52784 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 52785 + -L 52786 + note:../_doc/_odoc/reference/note/note 51131 52787 -L 51132 52788 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 51133 52789 -L ··· 51476 53132 -P 51477 53133 mtime:../_doc/_odoc/reference/mtime 51478 53134 -P 53135 + note:../_doc/_odoc/reference/note 53136 + -P 51479 53137 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 51480 53138 -P 51481 53139 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 51783 53441 mtime:../_doc/_odoc/reference/mtime/mtime 51784 53442 -L 51785 53443 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 53444 + -L 53445 + note:../_doc/_odoc/reference/note/note 51786 53446 -L 51787 53447 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 51788 53448 -L ··· 52130 53790 mime_printer:../_doc/_odoc/reference/mime_printer 52131 53791 -P 52132 53792 mtime:../_doc/_odoc/reference/mtime 53793 + -P 53794 + note:../_doc/_odoc/reference/note 52133 53795 -P 52134 53796 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 52135 53797 -P ··· 52439 54101 -L 52440 54102 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 52441 54103 -L 54104 + note:../_doc/_odoc/reference/note/note 54105 + -L 52442 54106 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 52443 54107 -L 52444 54108 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 52786 54450 -P 52787 54451 mtime:../_doc/_odoc/reference/mtime 52788 54452 -P 54453 + note:../_doc/_odoc/reference/note 54454 + -P 52789 54455 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 52790 54456 -P 52791 54457 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 53094 54760 -L 53095 54761 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 53096 54762 -L 54763 + note:../_doc/_odoc/reference/note/note 54764 + -L 53097 54765 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 53098 54766 -L 53099 54767 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 53440 55108 mime_printer:../_doc/_odoc/reference/mime_printer 53441 55109 -P 53442 55110 mtime:../_doc/_odoc/reference/mtime 55111 + -P 55112 + note:../_doc/_odoc/reference/note 53443 55113 -P 53444 55114 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 53445 55115 -P ··· 53749 55419 -L 53750 55420 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 53751 55421 -L 55422 + note:../_doc/_odoc/reference/note/note 55423 + -L 53752 55424 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 53753 55425 -L 53754 55426 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 54096 55768 -P 54097 55769 mtime:../_doc/_odoc/reference/mtime 54098 55770 -P 55771 + note:../_doc/_odoc/reference/note 55772 + -P 54099 55773 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 54100 55774 -P 54101 55775 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 54403 56077 mtime:../_doc/_odoc/reference/mtime/mtime 54404 56078 -L 54405 56079 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 56080 + -L 56081 + note:../_doc/_odoc/reference/note/note 54406 56082 -L 54407 56083 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 54408 56084 -L ··· 54750 56426 mime_printer:../_doc/_odoc/reference/mime_printer 54751 56427 -P 54752 56428 mtime:../_doc/_odoc/reference/mtime 56429 + -P 56430 + note:../_doc/_odoc/reference/note 54753 56431 -P 54754 56432 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 54755 56433 -P ··· 55059 56737 -L 55060 56738 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 55061 56739 -L 56740 + note:../_doc/_odoc/reference/note/note 56741 + -L 55062 56742 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 55063 56743 -L 55064 56744 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 55406 57086 -P 55407 57087 mtime:../_doc/_odoc/reference/mtime 55408 57088 -P 57089 + note:../_doc/_odoc/reference/note 57090 + -P 55409 57091 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 55410 57092 -P 55411 57093 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 55714 57396 -L 55715 57397 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 55716 57398 -L 57399 + note:../_doc/_odoc/reference/note/note 57400 + -L 55717 57401 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 55718 57402 -L 55719 57403 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 56061 57745 -P 56062 57746 mtime:../_doc/_odoc/reference/mtime 56063 57747 -P 57748 + note:../_doc/_odoc/reference/note 57749 + -P 56064 57750 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 56065 57751 -P 56066 57752 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 56368 58054 mtime:../_doc/_odoc/reference/mtime/mtime 56369 58055 -L 56370 58056 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 58057 + -L 58058 + note:../_doc/_odoc/reference/note/note 56371 58059 -L 56372 58060 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 56373 58061 -L ··· 56716 58404 -P 56717 58405 mtime:../_doc/_odoc/reference/mtime 56718 58406 -P 58407 + note:../_doc/_odoc/reference/note 58408 + -P 56719 58409 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 56720 58410 -P 56721 58411 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 57023 58713 mtime:../_doc/_odoc/reference/mtime/mtime 57024 58714 -L 57025 58715 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 58716 + -L 58717 + note:../_doc/_odoc/reference/note/note 57026 58718 -L 57027 58719 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 57028 58720 -L ··· 57370 59062 mime_printer:../_doc/_odoc/reference/mime_printer 57371 59063 -P 57372 59064 mtime:../_doc/_odoc/reference/mtime 59065 + -P 59066 + note:../_doc/_odoc/reference/note 57373 59067 -P 57374 59068 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 57375 59069 -P ··· 57679 59373 -L 57680 59374 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 57681 59375 -L 59376 + note:../_doc/_odoc/reference/note/note 59377 + -L 57682 59378 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 57683 59379 -L 57684 59380 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 58026 59722 -P 58027 59723 mtime:../_doc/_odoc/reference/mtime 58028 59724 -P 59725 + note:../_doc/_odoc/reference/note 59726 + -P 58029 59727 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 58030 59728 -P 58031 59729 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 58334 60032 -L 58335 60033 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 58336 60034 -L 60035 + note:../_doc/_odoc/reference/note/note 60036 + -L 58337 60037 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 58338 60038 -L 58339 60039 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 58681 60381 -P 58682 60382 mtime:../_doc/_odoc/reference/mtime 58683 60383 -P 60384 + note:../_doc/_odoc/reference/note 60385 + -P 58684 60386 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 58685 60387 -P 58686 60388 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 58988 60690 mtime:../_doc/_odoc/reference/mtime/mtime 58989 60691 -L 58990 60692 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 60693 + -L 60694 + note:../_doc/_odoc/reference/note/note 58991 60695 -L 58992 60696 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 58993 60697 -L ··· 59336 61040 -P 59337 61041 mtime:../_doc/_odoc/reference/mtime 59338 61042 -P 61043 + note:../_doc/_odoc/reference/note 61044 + -P 59339 61045 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 59340 61046 -P 59341 61047 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 59643 61349 mtime:../_doc/_odoc/reference/mtime/mtime 59644 61350 -L 59645 61351 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 61352 + -L 61353 + note:../_doc/_odoc/reference/note/note 59646 61354 -L 59647 61355 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 59648 61356 -L ··· 59991 61699 -P 59992 61700 mtime:../_doc/_odoc/reference/mtime 59993 61701 -P 61702 + note:../_doc/_odoc/reference/note 61703 + -P 59994 61704 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 59995 61705 -P 59996 61706 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 60298 62008 mtime:../_doc/_odoc/reference/mtime/mtime 60299 62009 -L 60300 62010 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 62011 + -L 62012 + note:../_doc/_odoc/reference/note/note 60301 62013 -L 60302 62014 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 60303 62015 -L ··· 60646 62358 -P 60647 62359 mtime:../_doc/_odoc/reference/mtime 60648 62360 -P 62361 + note:../_doc/_odoc/reference/note 62362 + -P 60649 62363 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 60650 62364 -P 60651 62365 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 60954 62668 -L 60955 62669 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 60956 62670 -L 62671 + note:../_doc/_odoc/reference/note/note 62672 + -L 60957 62673 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 60958 62674 -L 60959 62675 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 61301 63017 -P 61302 63018 mtime:../_doc/_odoc/reference/mtime 61303 63019 -P 63020 + note:../_doc/_odoc/reference/note 63021 + -P 61304 63022 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 61305 63023 -P 61306 63024 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 61608 63326 mtime:../_doc/_odoc/reference/mtime/mtime 61609 63327 -L 61610 63328 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 63329 + -L 63330 + note:../_doc/_odoc/reference/note/note 61611 63331 -L 61612 63332 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 61613 63333 -L ··· 61956 63676 -P 61957 63677 mtime:../_doc/_odoc/reference/mtime 61958 63678 -P 63679 + note:../_doc/_odoc/reference/note 63680 + -P 61959 63681 ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 61960 63682 -P 61961 63683 ocamlfind:../_doc/_odoc/reference/ocamlfind ··· 62264 63986 -L 62265 63987 mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 62266 63988 -L 63989 + note:../_doc/_odoc/reference/note/note 63990 + -L 62267 63991 ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 62268 63992 -L 62269 63993 ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common ··· 62509 64233 _odoc/blog/2026/03/asset-tessera.png.odocl) 62510 64234 (run 62511 64235 odoc 64236 + link 64237 + --warn-error 64238 + _odoc/blog/2026/03/asset-vibecoding.png.odoc 64239 + -P 64240 + site:_odoc 64241 + -P 64242 + angstrom:../_doc/_odoc/reference/angstrom 64243 + -P 64244 + astring:../_doc/_odoc/reference/astring 64245 + -P 64246 + base64:../_doc/_odoc/reference/base64 64247 + -P 64248 + base:../_doc/_odoc/reference/base 64249 + -P 64250 + basement:../_doc/_odoc/reference/basement 64251 + -P 64252 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck 64253 + -P 64254 + bigstringaf:../_doc/_odoc/reference/bigstringaf 64255 + -P 64256 + bos:../_doc/_odoc/reference/bos 64257 + -P 64258 + brr:../_doc/_odoc/reference/brr 64259 + -P 64260 + camlp-streams:../_doc/_odoc/reference/camlp-streams 64261 + -P 64262 + capsule0:../_doc/_odoc/reference/capsule0 64263 + -P 64264 + capsule:../_doc/_odoc/reference/capsule 64265 + -P 64266 + cmdliner:../_doc/_odoc/reference/cmdliner 64267 + -P 64268 + code-mirror:../_doc/_odoc/reference/code-mirror 64269 + -P 64270 + csexp:../_doc/_odoc/reference/csexp 64271 + -P 64272 + cstruct:../_doc/_odoc/reference/cstruct 64273 + -P 64274 + decompress:../_doc/_odoc/reference/decompress 64275 + -P 64276 + domain-local-await:../_doc/_odoc/reference/domain-local-await 64277 + -P 64278 + eio:../_doc/_odoc/reference/eio 64279 + -P 64280 + eio_linux:../_doc/_odoc/reference/eio_linux 64281 + -P 64282 + eio_main:../_doc/_odoc/reference/eio_main 64283 + -P 64284 + eio_posix:../_doc/_odoc/reference/eio_posix 64285 + -P 64286 + fieldslib:../_doc/_odoc/reference/fieldslib 64287 + -P 64288 + fmt:../_doc/_odoc/reference/fmt 64289 + -P 64290 + fpath:../_doc/_odoc/reference/fpath 64291 + -P 64292 + gen:../_doc/_odoc/reference/gen 64293 + -P 64294 + hmap:../_doc/_odoc/reference/hmap 64295 + -P 64296 + iomux:../_doc/_odoc/reference/iomux 64297 + -P 64298 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers 64299 + -P 64300 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler 64301 + -P 64302 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml 64303 + -P 64304 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt 64305 + -P 64306 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel 64307 + -P 64308 + jsonm:../_doc/_odoc/reference/jsonm 64309 + -P 64310 + js_top_worker-client:../_doc/_odoc/reference/js_top_worker-client 64311 + -P 64312 + js_top_worker:../_doc/_odoc/reference/js_top_worker 64313 + -P 64314 + js_top_worker-rpc:../_doc/_odoc/reference/js_top_worker-rpc 64315 + -P 64316 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web 64317 + -P 64318 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget 64319 + -P 64320 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet 64321 + -P 64322 + logs:../_doc/_odoc/reference/logs 64323 + -P 64324 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist 64325 + -P 64326 + lwt:../_doc/_odoc/reference/lwt 64327 + -P 64328 + menhirLib:../_doc/_odoc/reference/menhirLib 64329 + -P 64330 + merlin-js:../_doc/_odoc/reference/merlin-js 64331 + -P 64332 + merlin-lib:../_doc/_odoc/reference/merlin-lib 64333 + -P 64334 + mime_printer:../_doc/_odoc/reference/mime_printer 64335 + -P 64336 + mtime:../_doc/_odoc/reference/mtime 64337 + -P 64338 + note:../_doc/_odoc/reference/note 64339 + -P 64340 + ocaml-compiler-libs:../_doc/_odoc/reference/ocaml-compiler-libs 64341 + -P 64342 + ocamlfind:../_doc/_odoc/reference/ocamlfind 64343 + -P 64344 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph 64345 + -P 64346 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel 64347 + -P 64348 + ocaml-variants:../_doc/_odoc/reference/ocaml-variants 64349 + -P 64350 + odoc-admonition-extension:../_doc/_odoc/reference/odoc-admonition-extension 64351 + -P 64352 + odoc:../_doc/_odoc/reference/odoc 64353 + -P 64354 + odoc-docsite:../_doc/_odoc/reference/odoc-docsite 64355 + -P 64356 + odoc-dot-extension:../_doc/_odoc/reference/odoc-dot-extension 64357 + -P 64358 + odoc-driver:../_doc/_odoc/reference/odoc-driver 64359 + -P 64360 + odoc-interactive-extension:../_doc/_odoc/reference/odoc-interactive-extension 64361 + -P 64362 + odoc-jons-plugins:../_doc/_odoc/reference/odoc-jons-plugins 64363 + -P 64364 + odoc-mermaid-extension:../_doc/_odoc/reference/odoc-mermaid-extension 64365 + -P 64366 + odoc-msc-extension:../_doc/_odoc/reference/odoc-msc-extension 64367 + -P 64368 + odoc-parser:../_doc/_odoc/reference/odoc-parser 64369 + -P 64370 + odoc-rfc-extension:../_doc/_odoc/reference/odoc-rfc-extension 64371 + -P 64372 + odoc-scrollycode-extension:../_doc/_odoc/reference/odoc-scrollycode-extension 64373 + -P 64374 + odoc-standalone:../_doc/_odoc/reference/odoc-standalone 64375 + -P 64376 + onnxrt:../_doc/_odoc/reference/onnxrt 64377 + -P 64378 + opam-core:../_doc/_odoc/reference/opam-core 64379 + -P 64380 + opam-file-format:../_doc/_odoc/reference/opam-file-format 64381 + -P 64382 + opam-format:../_doc/_odoc/reference/opam-format 64383 + -P 64384 + optint:../_doc/_odoc/reference/optint 64385 + -P 64386 + parsexp:../_doc/_odoc/reference/parsexp 64387 + -P 64388 + patch:../_doc/_odoc/reference/patch 64389 + -P 64390 + portable:../_doc/_odoc/reference/portable 64391 + -P 64392 + ppx_assert:../_doc/_odoc/reference/ppx_assert 64393 + -P 64394 + ppx_bench:../_doc/_odoc/reference/ppx_bench 64395 + -P 64396 + ppx_compare:../_doc/_odoc/reference/ppx_compare 64397 + -P 64398 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers 64399 + -P 64400 + ppx_enumerate:../_doc/_odoc/reference/ppx_enumerate 64401 + -P 64402 + ppx_hash:../_doc/_odoc/reference/ppx_hash 64403 + -P 64404 + ppx_here:../_doc/_odoc/reference/ppx_here 64405 + -P 64406 + ppx_inline_test:../_doc/_odoc/reference/ppx_inline_test 64407 + -P 64408 + ppxlib_ast:../_doc/_odoc/reference/ppxlib_ast 64409 + -P 64410 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane 64411 + -P 64412 + ppxlib:../_doc/_odoc/reference/ppxlib 64413 + -P 64414 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register 64415 + -P 64416 + ppx_portable:../_doc/_odoc/reference/ppx_portable 64417 + -P 64418 + ppx_sexp_conv:../_doc/_odoc/reference/ppx_sexp_conv 64419 + -P 64420 + progress:../_doc/_odoc/reference/progress 64421 + -P 64422 + psq:../_doc/_odoc/reference/psq 64423 + -P 64424 + re:../_doc/_odoc/reference/re 64425 + -P 64426 + rresult:../_doc/_odoc/reference/rresult 64427 + -P 64428 + sedlex:../_doc/_odoc/reference/sedlex 64429 + -P 64430 + sexplib0:../_doc/_odoc/reference/sexplib0 64431 + -P 64432 + sexplib:../_doc/_odoc/reference/sexplib 64433 + -P 64434 + sexp_type:../_doc/_odoc/reference/sexp_type 64435 + -P 64436 + sha:../_doc/_odoc/reference/sha 64437 + -P 64438 + sherlodoc:../_doc/_odoc/reference/sherlodoc 64439 + -P 64440 + splittable_random:../_doc/_odoc/reference/splittable_random 64441 + -P 64442 + stringext:../_doc/_odoc/reference/stringext 64443 + -P 64444 + swhid_core:../_doc/_odoc/reference/swhid_core 64445 + -P 64446 + terminal:../_doc/_odoc/reference/terminal 64447 + -P 64448 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo 64449 + -P 64450 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera 64451 + -P 64452 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg 64453 + -P 64454 + tessera-npy:../_doc/_odoc/reference/tessera-npy 64455 + -P 64456 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo 64457 + -P 64458 + tessera-viz:../_doc/_odoc/reference/tessera-viz 64459 + -P 64460 + thread-table:../_doc/_odoc/reference/thread-table 64461 + -P 64462 + time_now:../_doc/_odoc/reference/time_now 64463 + -P 64464 + tyxml:../_doc/_odoc/reference/tyxml 64465 + -P 64466 + unique:../_doc/_odoc/reference/unique 64467 + -P 64468 + uring:../_doc/_odoc/reference/uring 64469 + -P 64470 + uri:../_doc/_odoc/reference/uri 64471 + -P 64472 + uucp:../_doc/_odoc/reference/uucp 64473 + -P 64474 + uutf:../_doc/_odoc/reference/uutf 64475 + -P 64476 + x-ocaml:../_doc/_odoc/reference/x-ocaml 64477 + -P 64478 + yojson:../_doc/_odoc/reference/yojson 64479 + -L 64480 + angstrom:../_doc/_odoc/reference/angstrom/angstrom 64481 + -L 64482 + astring:../_doc/_odoc/reference/astring/astring 64483 + -L 64484 + base64:../_doc/_odoc/reference/base64/base64 64485 + -L 64486 + base:../_doc/_odoc/reference/base/base 64487 + -L 64488 + base.shadow_stdlib:../_doc/_odoc/reference/base/base.shadow_stdlib 64489 + -L 64490 + basement:../_doc/_odoc/reference/basement/basement 64491 + -L 64492 + base_quickcheck:../_doc/_odoc/reference/base_quickcheck/base_quickcheck 64493 + -L 64494 + base_quickcheck.ppx_quickcheck.runtime:../_doc/_odoc/reference/base_quickcheck/base_quickcheck.ppx_quickcheck.runtime 64495 + -L 64496 + bigstringaf:../_doc/_odoc/reference/bigstringaf/bigstringaf 64497 + -L 64498 + bos:../_doc/_odoc/reference/bos/bos 64499 + -L 64500 + brr:../_doc/_odoc/reference/brr/brr 64501 + -L 64502 + camlp-streams:../_doc/_odoc/reference/camlp-streams/camlp-streams 64503 + -L 64504 + capsule0.blocking_sync:../_doc/_odoc/reference/capsule0/capsule0.blocking_sync 64505 + -L 64506 + capsule0.expert:../_doc/_odoc/reference/capsule0/capsule0.expert 64507 + -L 64508 + capsule:../_doc/_odoc/reference/capsule/capsule 64509 + -L 64510 + cmdliner:../_doc/_odoc/reference/cmdliner/cmdliner 64511 + -L 64512 + code-mirror:../_doc/_odoc/reference/code-mirror/code-mirror 64513 + -L 64514 + code-mirror.autocomplete:../_doc/_odoc/reference/code-mirror/code-mirror.autocomplete 64515 + -L 64516 + code-mirror.lint:../_doc/_odoc/reference/code-mirror/code-mirror.lint 64517 + -L 64518 + code-mirror.stream:../_doc/_odoc/reference/code-mirror/code-mirror.stream 64519 + -L 64520 + code-mirror.tooltip:../_doc/_odoc/reference/code-mirror/code-mirror.tooltip 64521 + -L 64522 + csexp:../_doc/_odoc/reference/csexp/csexp 64523 + -L 64524 + cstruct:../_doc/_odoc/reference/cstruct/cstruct 64525 + -L 64526 + decompress.de:../_doc/_odoc/reference/decompress/decompress.de 64527 + -L 64528 + decompress.zl:../_doc/_odoc/reference/decompress/decompress.zl 64529 + -L 64530 + domain-local-await:../_doc/_odoc/reference/domain-local-await/domain-local-await 64531 + -L 64532 + eio:../_doc/_odoc/reference/eio/eio 64533 + -L 64534 + eio.core:../_doc/_odoc/reference/eio/eio.core 64535 + -L 64536 + eio.runtime_events:../_doc/_odoc/reference/eio/eio.runtime_events 64537 + -L 64538 + eio.unix:../_doc/_odoc/reference/eio/eio.unix 64539 + -L 64540 + eio.utils:../_doc/_odoc/reference/eio/eio.utils 64541 + -L 64542 + eio_linux:../_doc/_odoc/reference/eio_linux/eio_linux 64543 + -L 64544 + eio_main:../_doc/_odoc/reference/eio_main/eio_main 64545 + -L 64546 + eio_posix:../_doc/_odoc/reference/eio_posix/eio_posix 64547 + -L 64548 + fieldslib:../_doc/_odoc/reference/fieldslib/fieldslib 64549 + -L 64550 + fmt:../_doc/_odoc/reference/fmt/fmt 64551 + -L 64552 + fpath:../_doc/_odoc/reference/fpath/fpath 64553 + -L 64554 + gen:../_doc/_odoc/reference/gen/gen 64555 + -L 64556 + hmap:../_doc/_odoc/reference/hmap/hmap 64557 + -L 64558 + iomux:../_doc/_odoc/reference/iomux/iomux 64559 + -L 64560 + jane-street-headers:../_doc/_odoc/reference/jane-street-headers/jane-street-headers 64561 + -L 64562 + js_of_ocaml-compiler:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler 64563 + -L 64564 + js_of_ocaml-compiler.dynlink:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.dynlink 64565 + -L 64566 + js_of_ocaml-compiler.runtime:../_doc/_odoc/reference/js_of_ocaml-compiler/js_of_ocaml-compiler.runtime 64567 + -L 64568 + js_of_ocaml:../_doc/_odoc/reference/js_of_ocaml/js_of_ocaml 64569 + -L 64570 + js_of_ocaml-lwt:../_doc/_odoc/reference/js_of_ocaml-lwt/js_of_ocaml-lwt 64571 + -L 64572 + js_of_ocaml-toplevel:../_doc/_odoc/reference/js_of_ocaml-toplevel/js_of_ocaml-toplevel 64573 + -L 64574 + jsonm:../_doc/_odoc/reference/jsonm/jsonm 64575 + -L 64576 + js_top_worker-client.msg:../_doc/_odoc/reference/js_top_worker-client/js_top_worker-client.msg 64577 + -L 64578 + js_top_worker:../_doc/_odoc/reference/js_top_worker/js_top_worker 64579 + -L 64580 + js_top_worker-rpc.message:../_doc/_odoc/reference/js_top_worker-rpc/js_top_worker-rpc.message 64581 + -L 64582 + js_top_worker-web:../_doc/_odoc/reference/js_top_worker-web/js_top_worker-web 64583 + -L 64584 + js_top_worker-widget:../_doc/_odoc/reference/js_top_worker-widget/js_top_worker-widget 64585 + -L 64586 + js_top_worker-widget-leaflet:../_doc/_odoc/reference/js_top_worker-widget-leaflet/js_top_worker-widget-leaflet 64587 + -L 64588 + logs:../_doc/_odoc/reference/logs/logs 64589 + -L 64590 + logs.browser:../_doc/_odoc/reference/logs/logs.browser 64591 + -L 64592 + logs.fmt:../_doc/_odoc/reference/logs/logs.fmt 64593 + -L 64594 + lwt-dllist:../_doc/_odoc/reference/lwt-dllist/lwt-dllist 64595 + -L 64596 + lwt:../_doc/_odoc/reference/lwt/lwt 64597 + -L 64598 + menhirLib:../_doc/_odoc/reference/menhirLib/menhirLib 64599 + -L 64600 + merlin-js.client:../_doc/_odoc/reference/merlin-js/merlin-js.client 64601 + -L 64602 + merlin-js.code-mirror:../_doc/_odoc/reference/merlin-js/merlin-js.code-mirror 64603 + -L 64604 + merlin-js.protocol:../_doc/_odoc/reference/merlin-js/merlin-js.protocol 64605 + -L 64606 + merlin-js.worker:../_doc/_odoc/reference/merlin-js/merlin-js.worker 64607 + -L 64608 + merlin-js.worker.static:../_doc/_odoc/reference/merlin-js/merlin-js.worker.static 64609 + -L 64610 + merlin-lib.analysis:../_doc/_odoc/reference/merlin-lib/merlin-lib.analysis 64611 + -L 64612 + merlin-lib.config:../_doc/_odoc/reference/merlin-lib/merlin-lib.config 64613 + -L 64614 + merlin-lib.dot_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.dot_protocol 64615 + -L 64616 + merlin-lib.extend:../_doc/_odoc/reference/merlin-lib/merlin-lib.extend 64617 + -L 64618 + merlin-lib.index_format:../_doc/_odoc/reference/merlin-lib/merlin-lib.index_format 64619 + -L 64620 + merlin-lib.kernel:../_doc/_odoc/reference/merlin-lib/merlin-lib.kernel 64621 + -L 64622 + merlin-lib.ocaml_merlin_specific:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_merlin_specific 64623 + -L 64624 + merlin-lib.ocaml_parsing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_parsing 64625 + -L 64626 + merlin-lib.ocaml_preprocess:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_preprocess 64627 + -L 64628 + merlin-lib.ocaml_typing:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_typing 64629 + -L 64630 + merlin-lib.ocaml_utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.ocaml_utils 64631 + -L 64632 + merlin-lib.os_ipc:../_doc/_odoc/reference/merlin-lib/merlin-lib.os_ipc 64633 + -L 64634 + merlin-lib.query_commands:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_commands 64635 + -L 64636 + merlin-lib.query_protocol:../_doc/_odoc/reference/merlin-lib/merlin-lib.query_protocol 64637 + -L 64638 + merlin-lib.sherlodoc:../_doc/_odoc/reference/merlin-lib/merlin-lib.sherlodoc 64639 + -L 64640 + merlin-lib.utils:../_doc/_odoc/reference/merlin-lib/merlin-lib.utils 64641 + -L 64642 + mime_printer:../_doc/_odoc/reference/mime_printer/mime_printer 64643 + -L 64644 + mtime:../_doc/_odoc/reference/mtime/mtime 64645 + -L 64646 + mtime.clock:../_doc/_odoc/reference/mtime/mtime.clock 64647 + -L 64648 + note:../_doc/_odoc/reference/note/note 64649 + -L 64650 + ocaml-compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.bytecomp 64651 + -L 64652 + ocaml-compiler-libs.common:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.common 64653 + -L 64654 + ocaml-compiler-libs.shadow:../_doc/_odoc/reference/ocaml-compiler-libs/ocaml-compiler-libs.shadow 64655 + -L 64656 + findlib.internal:../_doc/_odoc/reference/ocamlfind/findlib.internal 64657 + -L 64658 + ocamlgraph:../_doc/_odoc/reference/ocamlgraph/ocamlgraph 64659 + -L 64660 + ocaml_intrinsics_kernel:../_doc/_odoc/reference/ocaml_intrinsics_kernel/ocaml_intrinsics_kernel 64661 + -L 64662 + compiler-libs.bytecomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.bytecomp 64663 + -L 64664 + compiler-libs.common:../_doc/_odoc/reference/ocaml-variants/compiler-libs.common 64665 + -L 64666 + compiler-libs.optcomp:../_doc/_odoc/reference/ocaml-variants/compiler-libs.optcomp 64667 + -L 64668 + compiler-libs.toplevel:../_doc/_odoc/reference/ocaml-variants/compiler-libs.toplevel 64669 + -L 64670 + runtime_events:../_doc/_odoc/reference/ocaml-variants/runtime_events 64671 + -L 64672 + stdlib:../_doc/_odoc/reference/ocaml-variants/stdlib 64673 + -L 64674 + str:../_doc/_odoc/reference/ocaml-variants/str 64675 + -L 64676 + threads:../_doc/_odoc/reference/ocaml-variants/threads 64677 + -L 64678 + unix:../_doc/_odoc/reference/ocaml-variants/unix 64679 + -L 64680 + odoc-admonition-extension.impl:../_doc/_odoc/reference/odoc-admonition-extension/odoc-admonition-extension.impl 64681 + -L 64682 + deprecated:../_doc/_odoc/reference/odoc/deprecated 64683 + -L 64684 + odoc-docsite.impl:../_doc/_odoc/reference/odoc-docsite/odoc-docsite.impl 64685 + -L 64686 + odoc-dot-extension.impl:../_doc/_odoc/reference/odoc-dot-extension/odoc-dot-extension.impl 64687 + -L 64688 + odoc-driver:../_doc/_odoc/reference/odoc-driver/odoc-driver 64689 + -L 64690 + odoc-interactive-extension.impl:../_doc/_odoc/reference/odoc-interactive-extension/odoc-interactive-extension.impl 64691 + -L 64692 + odoc-jons-plugins.impl:../_doc/_odoc/reference/odoc-jons-plugins/odoc-jons-plugins.impl 64693 + -L 64694 + odoc-mermaid-extension.impl:../_doc/_odoc/reference/odoc-mermaid-extension/odoc-mermaid-extension.impl 64695 + -L 64696 + odoc-msc-extension.impl:../_doc/_odoc/reference/odoc-msc-extension/odoc-msc-extension.impl 64697 + -L 64698 + odoc.document:../_doc/_odoc/reference/odoc/odoc.document 64699 + -L 64700 + odoc.examples:../_doc/_odoc/reference/odoc/odoc.examples 64701 + -L 64702 + odoc.extension_api:../_doc/_odoc/reference/odoc/odoc.extension_api 64703 + -L 64704 + odoc.extension_registry:../_doc/_odoc/reference/odoc/odoc.extension_registry 64705 + -L 64706 + odoc.html:../_doc/_odoc/reference/odoc/odoc.html 64707 + -L 64708 + odoc.html_support_files:../_doc/_odoc/reference/odoc/odoc.html_support_files 64709 + -L 64710 + odoc.index:../_doc/_odoc/reference/odoc/odoc.index 64711 + -L 64712 + odoc.json_index:../_doc/_odoc/reference/odoc/odoc.json_index 64713 + -L 64714 + odoc.latex:../_doc/_odoc/reference/odoc/odoc.latex 64715 + -L 64716 + odoc.loader:../_doc/_odoc/reference/odoc/odoc.loader 64717 + -L 64718 + odoc.manpage:../_doc/_odoc/reference/odoc/odoc.manpage 64719 + -L 64720 + odoc.markdown:../_doc/_odoc/reference/odoc/odoc.markdown 64721 + -L 64722 + odoc.model:../_doc/_odoc/reference/odoc/odoc.model 64723 + -L 64724 + odoc.model_desc:../_doc/_odoc/reference/odoc/odoc.model_desc 64725 + -L 64726 + odoc.ocamlary:../_doc/_odoc/reference/odoc/odoc.ocamlary 64727 + -L 64728 + odoc.occurrences:../_doc/_odoc/reference/odoc/odoc.occurrences 64729 + -L 64730 + odoc.odoc:../_doc/_odoc/reference/odoc/odoc.odoc 64731 + -L 64732 + odoc.odoc_utils:../_doc/_odoc/reference/odoc/odoc.odoc_utils 64733 + -L 64734 + odoc.search:../_doc/_odoc/reference/odoc/odoc.search 64735 + -L 64736 + odoc.search_html_frontend:../_doc/_odoc/reference/odoc/odoc.search_html_frontend 64737 + -L 64738 + odoc.syntax_highlighter:../_doc/_odoc/reference/odoc/odoc.syntax_highlighter 64739 + -L 64740 + odoc.xref2:../_doc/_odoc/reference/odoc/odoc.xref2 64741 + -L 64742 + odoc.xref_test:../_doc/_odoc/reference/odoc/odoc.xref_test 64743 + -L 64744 + odoc-parser:../_doc/_odoc/reference/odoc-parser/odoc-parser 64745 + -L 64746 + odoc-rfc-extension.impl:../_doc/_odoc/reference/odoc-rfc-extension/odoc-rfc-extension.impl 64747 + -L 64748 + odoc-scrollycode-extension.impl:../_doc/_odoc/reference/odoc-scrollycode-extension/odoc-scrollycode-extension.impl 64749 + -L 64750 + odoc-standalone.impl:../_doc/_odoc/reference/odoc-standalone/odoc-standalone.impl 64751 + -L 64752 + onnxrt:../_doc/_odoc/reference/onnxrt/onnxrt 64753 + -L 64754 + opam-core:../_doc/_odoc/reference/opam-core/opam-core 64755 + -L 64756 + opam-file-format:../_doc/_odoc/reference/opam-file-format/opam-file-format 64757 + -L 64758 + opam-format:../_doc/_odoc/reference/opam-format/opam-format 64759 + -L 64760 + optint:../_doc/_odoc/reference/optint/optint 64761 + -L 64762 + parsexp:../_doc/_odoc/reference/parsexp/parsexp 64763 + -L 64764 + patch:../_doc/_odoc/reference/patch/patch 64765 + -L 64766 + portable.kernel:../_doc/_odoc/reference/portable/portable.kernel 64767 + -L 64768 + ppx_assert.runtime-lib:../_doc/_odoc/reference/ppx_assert/ppx_assert.runtime-lib 64769 + -L 64770 + ppx_bench.config:../_doc/_odoc/reference/ppx_bench/ppx_bench.config 64771 + -L 64772 + ppx_bench.config_types:../_doc/_odoc/reference/ppx_bench/ppx_bench.config_types 64773 + -L 64774 + ppx_bench.runtime-lib:../_doc/_odoc/reference/ppx_bench/ppx_bench.runtime-lib 64775 + -L 64776 + ppx_compare.runtime-lib:../_doc/_odoc/reference/ppx_compare/ppx_compare.runtime-lib 64777 + -L 64778 + ppx_derivers:../_doc/_odoc/reference/ppx_derivers/ppx_derivers 64779 + -L 64780 + ppx_enumerate.runtime-lib:../_doc/_odoc/reference/ppx_enumerate/ppx_enumerate.runtime-lib 64781 + -L 64782 + ppx_hash.base_internalhash_types:../_doc/_odoc/reference/ppx_hash/ppx_hash.base_internalhash_types 64783 + -L 64784 + ppx_hash.runtime-lib:../_doc/_odoc/reference/ppx_hash/ppx_hash.runtime-lib 64785 + -L 64786 + ppx_here.runtime-lib:../_doc/_odoc/reference/ppx_here/ppx_here.runtime-lib 64787 + -L 64788 + ppx_inline_test.config:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.config 64789 + -L 64790 + ppx_inline_test.runtime-lib:../_doc/_odoc/reference/ppx_inline_test/ppx_inline_test.runtime-lib 64791 + -L 64792 + ppxlib_ast.ast:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.ast 64793 + -L 64794 + ppxlib_ast.astlib:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.astlib 64795 + -L 64796 + ppxlib_ast.stdppx:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.stdppx 64797 + -L 64798 + ppxlib_ast.traverse_builtins:../_doc/_odoc/reference/ppxlib_ast/ppxlib_ast.traverse_builtins 64799 + -L 64800 + ppxlib_jane:../_doc/_odoc/reference/ppxlib_jane/ppxlib_jane 64801 + -L 64802 + ppxlib:../_doc/_odoc/reference/ppxlib/ppxlib 64803 + -L 64804 + ppxlib.print_diff:../_doc/_odoc/reference/ppxlib/ppxlib.print_diff 64805 + -L 64806 + ppxlib_register:../_doc/_odoc/reference/ppxlib_register/ppxlib_register 64807 + -L 64808 + ppx_portable.runtime:../_doc/_odoc/reference/ppx_portable/ppx_portable.runtime 64809 + -L 64810 + ppx_sexp_conv.runtime-lib:../_doc/_odoc/reference/ppx_sexp_conv/ppx_sexp_conv.runtime-lib 64811 + -L 64812 + progress:../_doc/_odoc/reference/progress/progress 64813 + -L 64814 + progress.engine:../_doc/_odoc/reference/progress/progress.engine 64815 + -L 64816 + progress.vector:../_doc/_odoc/reference/progress/progress.vector 64817 + -L 64818 + psq:../_doc/_odoc/reference/psq/psq 64819 + -L 64820 + re:../_doc/_odoc/reference/re/re 64821 + -L 64822 + rresult:../_doc/_odoc/reference/rresult/rresult 64823 + -L 64824 + sedlex:../_doc/_odoc/reference/sedlex/sedlex 64825 + -L 64826 + sexplib0:../_doc/_odoc/reference/sexplib0/sexplib0 64827 + -L 64828 + sexplib:../_doc/_odoc/reference/sexplib/sexplib 64829 + -L 64830 + sexp_type:../_doc/_odoc/reference/sexp_type/sexp_type 64831 + -L 64832 + sexp_type.grammar:../_doc/_odoc/reference/sexp_type/sexp_type.grammar 64833 + -L 64834 + sha:../_doc/_odoc/reference/sha/sha 64835 + -L 64836 + sherlodoc.db:../_doc/_odoc/reference/sherlodoc/sherlodoc.db 64837 + -L 64838 + sherlodoc.db_store:../_doc/_odoc/reference/sherlodoc/sherlodoc.db_store 64839 + -L 64840 + sherlodoc.query:../_doc/_odoc/reference/sherlodoc/sherlodoc.query 64841 + -L 64842 + sherlodoc.storage_js:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_js 64843 + -L 64844 + sherlodoc.storage_marshal:../_doc/_odoc/reference/sherlodoc/sherlodoc.storage_marshal 64845 + -L 64846 + splittable_random:../_doc/_odoc/reference/splittable_random/splittable_random 64847 + -L 64848 + stringext:../_doc/_odoc/reference/stringext/stringext 64849 + -L 64850 + swhid_core:../_doc/_odoc/reference/swhid_core/swhid_core 64851 + -L 64852 + terminal:../_doc/_odoc/reference/terminal/terminal 64853 + -L 64854 + terminal.ansi:../_doc/_odoc/reference/terminal/terminal.ansi 64855 + -L 64856 + tessera-geotessera-jsoo:../_doc/_odoc/reference/tessera-geotessera-jsoo/tessera-geotessera-jsoo 64857 + -L 64858 + tessera-geotessera:../_doc/_odoc/reference/tessera-geotessera/tessera-geotessera 64859 + -L 64860 + tessera-linalg:../_doc/_odoc/reference/tessera-linalg/tessera-linalg 64861 + -L 64862 + tessera-npy:../_doc/_odoc/reference/tessera-npy/tessera-npy 64863 + -L 64864 + tessera-viz-jsoo:../_doc/_odoc/reference/tessera-viz-jsoo/tessera-viz-jsoo 64865 + -L 64866 + tessera-viz:../_doc/_odoc/reference/tessera-viz/tessera-viz 64867 + -L 64868 + thread-table:../_doc/_odoc/reference/thread-table/thread-table 64869 + -L 64870 + time_now:../_doc/_odoc/reference/time_now/time_now 64871 + -L 64872 + tyxml:../_doc/_odoc/reference/tyxml/tyxml 64873 + -L 64874 + tyxml.functor:../_doc/_odoc/reference/tyxml/tyxml.functor 64875 + -L 64876 + unique:../_doc/_odoc/reference/unique/unique 64877 + -L 64878 + uring:../_doc/_odoc/reference/uring/uring 64879 + -L 64880 + uri:../_doc/_odoc/reference/uri/uri 64881 + -L 64882 + uucp:../_doc/_odoc/reference/uucp/uucp 64883 + -L 64884 + uutf:../_doc/_odoc/reference/uutf/uutf 64885 + -L 64886 + x-ocaml.lib:../_doc/_odoc/reference/x-ocaml/x-ocaml.lib 64887 + -L 64888 + x-ocaml.protocol:../_doc/_odoc/reference/x-ocaml/x-ocaml.protocol 64889 + -L 64890 + yojson:../_doc/_odoc/reference/yojson/yojson 64891 + -o 64892 + _odoc/blog/2026/03/asset-vibecoding.png.odocl) 64893 + (run 64894 + odoc 62512 64895 compile-index 62513 64896 --root 62514 64897 site:_odoc ··· 62561 64944 _odoc/blog/2026/02/page-weeknotes-2026-08.odocl 62562 64945 _odoc/blog/2026/03/page-index.odocl 62563 64946 _odoc/blog/2026/03/page-open-source-and-ai.odocl 64947 + _odoc/blog/2026/03/page-retrospective.odocl 62564 64948 _odoc/blog/2026/03/page-review.odocl 62565 64949 _odoc/blog/2026/03/page-weeknotes-2026-09.odocl 62566 64950 _odoc/blog/2026/03/page-weeknotes-2026-10.odocl 62567 64951 _odoc/blog/2026/03/page-weeknotes-2026-11.odocl 64952 + _odoc/blog/2026/03/page-weeknotes-2026-12.odocl 62568 64953 _odoc/blog/2026/page-index.odocl 62569 64954 _odoc/blog/page-index.odocl 62570 64955 _odoc/drafts/page-index.odocl ··· 62645 65030 _odoc/blog/2026/02/page-weeknotes-2026-08.odocl 62646 65031 _odoc/blog/2026/03/page-index.odocl 62647 65032 _odoc/blog/2026/03/page-open-source-and-ai.odocl 65033 + _odoc/blog/2026/03/page-retrospective.odocl 62648 65034 _odoc/blog/2026/03/page-review.odocl 62649 65035 _odoc/blog/2026/03/page-weeknotes-2026-09.odocl 62650 65036 _odoc/blog/2026/03/page-weeknotes-2026-10.odocl 62651 65037 _odoc/blog/2026/03/page-weeknotes-2026-11.odocl 65038 + _odoc/blog/2026/03/page-weeknotes-2026-12.odocl 62652 65039 _odoc/blog/2026/page-index.odocl 62653 65040 _odoc/blog/page-index.odocl 62654 65041 _odoc/drafts/page-index.odocl ··· 62692 65079 _odoc/blog/2026/03/asset-old.png.odocl 62693 65080 _odoc/blog/2026/03/asset-search.png.odocl 62694 65081 _odoc/blog/2026/03/asset-tessera.png.odocl 65082 + _odoc/blog/2026/03/asset-vibecoding.png.odocl 62695 65083 blog/2025/05/alice.jpg 62696 65084 blog/2025/05/amy.jpg 62697 65085 blog/2025/05/emilio.jpg ··· 62713 65101 blog/2026/03/old.png 62714 65102 blog/2026/03/search.png 62715 65103 blog/2026/03/tessera.png 65104 + blog/2026/03/vibecoding.png 62716 65105 static/assets/jon.jpg 62717 65106 static/assets/notebook-foundations.png 62718 65107 static/assets/notebook-interactive-map.png ··· 62721 65110 static/assets/notebook-widgets.png) 62722 65111 (action 62723 65112 (progn 65113 + (system "mkdir -p _html") 65114 + (system 65115 + "{ find ../_doc/_odocl -name '*.odocl' 2>/dev/null; } > _html/.sherlodoc-files.txt") 65116 + (system 65117 + "sherlodoc index --format js -o _html/sherlodoc-db.js --file-list _html/.sherlodoc-files.txt _odoc/blog/2025/03/page-code-block-metadata.odocl _odoc/blog/2025/03/page-index.odocl _odoc/blog/2025/03/page-module-type-of.odocl _odoc/blog/2025/04/page-index.odocl _odoc/blog/2025/04/page-meeting-the-team.odocl _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl _odoc/blog/2025/04/page-odoc-3.odocl _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl _odoc/blog/2025/04/page-this-site.odocl _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl _odoc/blog/2025/05/page-docs-progress.odocl _odoc/blog/2025/05/page-index.odocl _odoc/blog/2025/05/page-lots-of-things.odocl _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl _odoc/blog/2025/06/page-index.odocl _odoc/blog/2025/06/page-week23.odocl _odoc/blog/2025/07/page-index.odocl _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl _odoc/blog/2025/07/page-retrospective.odocl _odoc/blog/2025/07/page-week27.odocl _odoc/blog/2025/07/page-week28.odocl _odoc/blog/2025/08/page-index.odocl _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl _odoc/blog/2025/08/page-ocaml-mcp-server.odocl _odoc/blog/2025/08/page-week33.odocl _odoc/blog/2025/09/page-build-ids-for-day10.odocl _odoc/blog/2025/09/page-caching-opam-solutions.odocl _odoc/blog/2025/09/page-caching-opam-solutions2.odocl _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl _odoc/blog/2025/09/page-index.odocl _odoc/blog/2025/09/page-odoc-bugs.odocl _odoc/blog/2025/11/page-foundations-of-computer-science.odocl _odoc/blog/2025/11/page-index.odocl _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl _odoc/blog/2025/12/page-claude-and-dune.odocl _odoc/blog/2025/12/page-index.odocl _odoc/blog/2025/page-index.odocl _odoc/blog/2026/01/page-index.odocl _odoc/blog/2026/01/page-weeknotes-2026-03.odocl _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl _odoc/blog/2026/02/page-index.odocl _odoc/blog/2026/02/page-odoc-js-notebooks-fun.odocl _odoc/blog/2026/02/page-weeknotes-2026-06.odocl _odoc/blog/2026/02/page-weeknotes-2026-08.odocl _odoc/blog/2026/03/page-index.odocl _odoc/blog/2026/03/page-open-source-and-ai.odocl _odoc/blog/2026/03/page-retrospective.odocl _odoc/blog/2026/03/page-review.odocl _odoc/blog/2026/03/page-weeknotes-2026-09.odocl _odoc/blog/2026/03/page-weeknotes-2026-10.odocl _odoc/blog/2026/03/page-weeknotes-2026-11.odocl _odoc/blog/2026/03/page-weeknotes-2026-12.odocl _odoc/blog/2026/page-index.odocl _odoc/blog/page-index.odocl _odoc/drafts/page-index.odocl _odoc/page-index.odocl _odoc/notebooks/foundations/page-foundations1.odocl _odoc/notebooks/foundations/page-foundations10.odocl _odoc/notebooks/foundations/page-foundations11.odocl _odoc/notebooks/foundations/page-foundations2.odocl _odoc/notebooks/foundations/page-foundations3.odocl _odoc/notebooks/foundations/page-foundations4.odocl _odoc/notebooks/foundations/page-foundations5.odocl _odoc/notebooks/foundations/page-foundations6.odocl _odoc/notebooks/foundations/page-foundations7.odocl _odoc/notebooks/foundations/page-foundations8.odocl _odoc/notebooks/foundations/page-foundations9.odocl _odoc/notebooks/foundations/page-index.odocl _odoc/notebooks/page-index.odocl _odoc/notebooks/page-interactive_map.odocl _odoc/notebooks/page-interactive_map_zarr.odocl _odoc/notebooks/oxcaml/page-local.odocl _odoc/projects/page-index.odocl _odoc/reference/page-index.odocl") 65118 + (run sherlodoc js _html/sherlodoc.js) 65119 + (system 65120 + "sed -i 's#{caml_blake2_string:#{caml_sys_const_arch_amd64:function(){return 1;},caml_sys_const_arch_arm64:function(){return 0;},caml_domain_tls_get:function(){return 0;},caml_domain_tls_set:function(){return 0;},caml_hash_exn:function(){return [0,0];},caml_ml_domain_index:function(){return 0;},sherlodoc_db:self.sherlodoc_db||function(){},caml_blake2_string:#' _html/sherlodoc.js") 62724 65121 (run 62725 65122 odoc 62726 65123 html-generate ··· 62729 65126 jon-shell 62730 65127 --config 62731 65128 x-ocaml.universe=/_opam 65129 + --search-uri 65130 + sherlodoc-db.js 65131 + --search-uri 65132 + sherlodoc.js 62732 65133 -o 62733 65134 _html 62734 65135 _odoc/blog/2025/03/page-code-block-metadata.odocl) ··· 62740 65141 jon-shell 62741 65142 --config 62742 65143 x-ocaml.universe=/_opam 65144 + --search-uri 65145 + sherlodoc-db.js 65146 + --search-uri 65147 + sherlodoc.js 62743 65148 -o 62744 65149 _html 62745 65150 _odoc/blog/2025/03/page-index.odocl) ··· 62751 65156 jon-shell 62752 65157 --config 62753 65158 x-ocaml.universe=/_opam 65159 + --search-uri 65160 + sherlodoc-db.js 65161 + --search-uri 65162 + sherlodoc.js 62754 65163 -o 62755 65164 _html 62756 65165 _odoc/blog/2025/03/page-module-type-of.odocl) ··· 62762 65171 jon-shell 62763 65172 --config 62764 65173 x-ocaml.universe=/_opam 65174 + --search-uri 65175 + sherlodoc-db.js 65176 + --search-uri 65177 + sherlodoc.js 62765 65178 -o 62766 65179 _html 62767 65180 _odoc/blog/2025/04/page-index.odocl) ··· 62773 65186 jon-shell 62774 65187 --config 62775 65188 x-ocaml.universe=/_opam 65189 + --search-uri 65190 + sherlodoc-db.js 65191 + --search-uri 65192 + sherlodoc.js 62776 65193 -o 62777 65194 _html 62778 65195 _odoc/blog/2025/04/page-meeting-the-team.odocl) ··· 62784 65201 jon-shell 62785 65202 --config 62786 65203 x-ocaml.universe=/_opam 65204 + --search-uri 65205 + sherlodoc-db.js 65206 + --search-uri 65207 + sherlodoc.js 62787 65208 -o 62788 65209 _html 62789 65210 _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl) ··· 62795 65216 jon-shell 62796 65217 --config 62797 65218 x-ocaml.universe=/_opam 65219 + --search-uri 65220 + sherlodoc-db.js 65221 + --search-uri 65222 + sherlodoc.js 62798 65223 -o 62799 65224 _html 62800 65225 _odoc/blog/2025/04/page-odoc-3.odocl) ··· 62806 65231 jon-shell 62807 65232 --config 62808 65233 x-ocaml.universe=/_opam 65234 + --search-uri 65235 + sherlodoc-db.js 65236 + --search-uri 65237 + sherlodoc.js 62809 65238 -o 62810 65239 _html 62811 65240 _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl) ··· 62817 65246 jon-shell 62818 65247 --config 62819 65248 x-ocaml.universe=/_opam 65249 + --search-uri 65250 + sherlodoc-db.js 65251 + --search-uri 65252 + sherlodoc.js 62820 65253 -o 62821 65254 _html 62822 65255 _odoc/blog/2025/04/page-this-site.odocl) ··· 62828 65261 jon-shell 62829 65262 --config 62830 65263 x-ocaml.universe=/_opam 65264 + --search-uri 65265 + sherlodoc-db.js 65266 + --search-uri 65267 + sherlodoc.js 62831 65268 -o 62832 65269 _html 62833 65270 _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl) ··· 62839 65276 jon-shell 62840 65277 --config 62841 65278 x-ocaml.universe=/_opam 65279 + --search-uri 65280 + sherlodoc-db.js 65281 + --search-uri 65282 + sherlodoc.js 62842 65283 -o 62843 65284 _html 62844 65285 _odoc/blog/2025/05/page-docs-progress.odocl) ··· 62850 65291 jon-shell 62851 65292 --config 62852 65293 x-ocaml.universe=/_opam 65294 + --search-uri 65295 + sherlodoc-db.js 65296 + --search-uri 65297 + sherlodoc.js 62853 65298 -o 62854 65299 _html 62855 65300 _odoc/blog/2025/05/page-index.odocl) ··· 62861 65306 jon-shell 62862 65307 --config 62863 65308 x-ocaml.universe=/_opam 65309 + --search-uri 65310 + sherlodoc-db.js 65311 + --search-uri 65312 + sherlodoc.js 62864 65313 -o 62865 65314 _html 62866 65315 _odoc/blog/2025/05/page-lots-of-things.odocl) ··· 62872 65321 jon-shell 62873 65322 --config 62874 65323 x-ocaml.universe=/_opam 65324 + --search-uri 65325 + sherlodoc-db.js 65326 + --search-uri 65327 + sherlodoc.js 62875 65328 -o 62876 65329 _html 62877 65330 _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl) ··· 62883 65336 jon-shell 62884 65337 --config 62885 65338 x-ocaml.universe=/_opam 65339 + --search-uri 65340 + sherlodoc-db.js 65341 + --search-uri 65342 + sherlodoc.js 62886 65343 -o 62887 65344 _html 62888 65345 _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl) ··· 62894 65351 jon-shell 62895 65352 --config 62896 65353 x-ocaml.universe=/_opam 65354 + --search-uri 65355 + sherlodoc-db.js 65356 + --search-uri 65357 + sherlodoc.js 62897 65358 -o 62898 65359 _html 62899 65360 _odoc/blog/2025/06/page-index.odocl) ··· 62905 65366 jon-shell 62906 65367 --config 62907 65368 x-ocaml.universe=/_opam 65369 + --search-uri 65370 + sherlodoc-db.js 65371 + --search-uri 65372 + sherlodoc.js 62908 65373 -o 62909 65374 _html 62910 65375 _odoc/blog/2025/06/page-week23.odocl) ··· 62916 65381 jon-shell 62917 65382 --config 62918 65383 x-ocaml.universe=/_opam 65384 + --search-uri 65385 + sherlodoc-db.js 65386 + --search-uri 65387 + sherlodoc.js 62919 65388 -o 62920 65389 _html 62921 65390 _odoc/blog/2025/07/page-index.odocl) ··· 62927 65396 jon-shell 62928 65397 --config 62929 65398 x-ocaml.universe=/_opam 65399 + --search-uri 65400 + sherlodoc-db.js 65401 + --search-uri 65402 + sherlodoc.js 62930 65403 -o 62931 65404 _html 62932 65405 _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl) ··· 62938 65411 jon-shell 62939 65412 --config 62940 65413 x-ocaml.universe=/_opam 65414 + --search-uri 65415 + sherlodoc-db.js 65416 + --search-uri 65417 + sherlodoc.js 62941 65418 -o 62942 65419 _html 62943 65420 _odoc/blog/2025/07/page-retrospective.odocl) ··· 62949 65426 jon-shell 62950 65427 --config 62951 65428 x-ocaml.universe=/_opam 65429 + --search-uri 65430 + sherlodoc-db.js 65431 + --search-uri 65432 + sherlodoc.js 62952 65433 -o 62953 65434 _html 62954 65435 _odoc/blog/2025/07/page-week27.odocl) ··· 62960 65441 jon-shell 62961 65442 --config 62962 65443 x-ocaml.universe=/_opam 65444 + --search-uri 65445 + sherlodoc-db.js 65446 + --search-uri 65447 + sherlodoc.js 62963 65448 -o 62964 65449 _html 62965 65450 _odoc/blog/2025/07/page-week28.odocl) ··· 62971 65456 jon-shell 62972 65457 --config 62973 65458 x-ocaml.universe=/_opam 65459 + --search-uri 65460 + sherlodoc-db.js 65461 + --search-uri 65462 + sherlodoc.js 62974 65463 -o 62975 65464 _html 62976 65465 _odoc/blog/2025/08/page-index.odocl) ··· 62982 65471 jon-shell 62983 65472 --config 62984 65473 x-ocaml.universe=/_opam 65474 + --search-uri 65475 + sherlodoc-db.js 65476 + --search-uri 65477 + sherlodoc.js 62985 65478 -o 62986 65479 _html 62987 65480 _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl) ··· 62993 65486 jon-shell 62994 65487 --config 62995 65488 x-ocaml.universe=/_opam 65489 + --search-uri 65490 + sherlodoc-db.js 65491 + --search-uri 65492 + sherlodoc.js 62996 65493 -o 62997 65494 _html 62998 65495 _odoc/blog/2025/08/page-ocaml-mcp-server.odocl) ··· 63004 65501 jon-shell 63005 65502 --config 63006 65503 x-ocaml.universe=/_opam 65504 + --search-uri 65505 + sherlodoc-db.js 65506 + --search-uri 65507 + sherlodoc.js 63007 65508 -o 63008 65509 _html 63009 65510 _odoc/blog/2025/08/page-week33.odocl) ··· 63015 65516 jon-shell 63016 65517 --config 63017 65518 x-ocaml.universe=/_opam 65519 + --search-uri 65520 + sherlodoc-db.js 65521 + --search-uri 65522 + sherlodoc.js 63018 65523 -o 63019 65524 _html 63020 65525 _odoc/blog/2025/09/page-build-ids-for-day10.odocl) ··· 63026 65531 jon-shell 63027 65532 --config 63028 65533 x-ocaml.universe=/_opam 65534 + --search-uri 65535 + sherlodoc-db.js 65536 + --search-uri 65537 + sherlodoc.js 63029 65538 -o 63030 65539 _html 63031 65540 _odoc/blog/2025/09/page-caching-opam-solutions.odocl) ··· 63037 65546 jon-shell 63038 65547 --config 63039 65548 x-ocaml.universe=/_opam 65549 + --search-uri 65550 + sherlodoc-db.js 65551 + --search-uri 65552 + sherlodoc.js 63040 65553 -o 63041 65554 _html 63042 65555 _odoc/blog/2025/09/page-caching-opam-solutions2.odocl) ··· 63048 65561 jon-shell 63049 65562 --config 63050 65563 x-ocaml.universe=/_opam 65564 + --search-uri 65565 + sherlodoc-db.js 65566 + --search-uri 65567 + sherlodoc.js 63051 65568 -o 63052 65569 _html 63053 65570 _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl) ··· 63059 65576 jon-shell 63060 65577 --config 63061 65578 x-ocaml.universe=/_opam 65579 + --search-uri 65580 + sherlodoc-db.js 65581 + --search-uri 65582 + sherlodoc.js 63062 65583 -o 63063 65584 _html 63064 65585 _odoc/blog/2025/09/page-index.odocl) ··· 63070 65591 jon-shell 63071 65592 --config 63072 65593 x-ocaml.universe=/_opam 65594 + --search-uri 65595 + sherlodoc-db.js 65596 + --search-uri 65597 + sherlodoc.js 63073 65598 -o 63074 65599 _html 63075 65600 _odoc/blog/2025/09/page-odoc-bugs.odocl) ··· 63081 65606 jon-shell 63082 65607 --config 63083 65608 x-ocaml.universe=/_opam 65609 + --search-uri 65610 + sherlodoc-db.js 65611 + --search-uri 65612 + sherlodoc.js 63084 65613 -o 63085 65614 _html 63086 65615 _odoc/blog/2025/11/page-foundations-of-computer-science.odocl) ··· 63092 65621 jon-shell 63093 65622 --config 63094 65623 x-ocaml.universe=/_opam 65624 + --search-uri 65625 + sherlodoc-db.js 65626 + --search-uri 65627 + sherlodoc.js 63095 65628 -o 63096 65629 _html 63097 65630 _odoc/blog/2025/11/page-index.odocl) ··· 63103 65636 jon-shell 63104 65637 --config 63105 65638 x-ocaml.universe=/_opam 65639 + --search-uri 65640 + sherlodoc-db.js 65641 + --search-uri 65642 + sherlodoc.js 63106 65643 -o 63107 65644 _html 63108 65645 _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl) ··· 63114 65651 jon-shell 63115 65652 --config 63116 65653 x-ocaml.universe=/_opam 65654 + --search-uri 65655 + sherlodoc-db.js 65656 + --search-uri 65657 + sherlodoc.js 63117 65658 -o 63118 65659 _html 63119 65660 _odoc/blog/2025/12/page-claude-and-dune.odocl) ··· 63125 65666 jon-shell 63126 65667 --config 63127 65668 x-ocaml.universe=/_opam 65669 + --search-uri 65670 + sherlodoc-db.js 65671 + --search-uri 65672 + sherlodoc.js 63128 65673 -o 63129 65674 _html 63130 65675 _odoc/blog/2025/12/page-index.odocl) ··· 63136 65681 jon-shell 63137 65682 --config 63138 65683 x-ocaml.universe=/_opam 65684 + --search-uri 65685 + sherlodoc-db.js 65686 + --search-uri 65687 + sherlodoc.js 63139 65688 -o 63140 65689 _html 63141 65690 _odoc/blog/2025/page-index.odocl) ··· 63147 65696 jon-shell 63148 65697 --config 63149 65698 x-ocaml.universe=/_opam 65699 + --search-uri 65700 + sherlodoc-db.js 65701 + --search-uri 65702 + sherlodoc.js 63150 65703 -o 63151 65704 _html 63152 65705 _odoc/blog/2026/01/page-index.odocl) ··· 63158 65711 jon-shell 63159 65712 --config 63160 65713 x-ocaml.universe=/_opam 65714 + --search-uri 65715 + sherlodoc-db.js 65716 + --search-uri 65717 + sherlodoc.js 63161 65718 -o 63162 65719 _html 63163 65720 _odoc/blog/2026/01/page-weeknotes-2026-03.odocl) ··· 63169 65726 jon-shell 63170 65727 --config 63171 65728 x-ocaml.universe=/_opam 65729 + --search-uri 65730 + sherlodoc-db.js 65731 + --search-uri 65732 + sherlodoc.js 63172 65733 -o 63173 65734 _html 63174 65735 _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl) ··· 63180 65741 jon-shell 63181 65742 --config 63182 65743 x-ocaml.universe=/_opam 65744 + --search-uri 65745 + sherlodoc-db.js 65746 + --search-uri 65747 + sherlodoc.js 63183 65748 -o 63184 65749 _html 63185 65750 _odoc/blog/2026/02/page-index.odocl) ··· 63191 65756 jon-shell 63192 65757 --config 63193 65758 x-ocaml.universe=/_opam 65759 + --search-uri 65760 + sherlodoc-db.js 65761 + --search-uri 65762 + sherlodoc.js 63194 65763 -o 63195 65764 _html 63196 65765 _odoc/blog/2026/02/page-odoc-js-notebooks-fun.odocl) ··· 63202 65771 jon-shell 63203 65772 --config 63204 65773 x-ocaml.universe=/_opam 65774 + --search-uri 65775 + sherlodoc-db.js 65776 + --search-uri 65777 + sherlodoc.js 63205 65778 -o 63206 65779 _html 63207 65780 _odoc/blog/2026/02/page-weeknotes-2026-06.odocl) ··· 63213 65786 jon-shell 63214 65787 --config 63215 65788 x-ocaml.universe=/_opam 65789 + --search-uri 65790 + sherlodoc-db.js 65791 + --search-uri 65792 + sherlodoc.js 63216 65793 -o 63217 65794 _html 63218 65795 _odoc/blog/2026/02/page-weeknotes-2026-08.odocl) ··· 63224 65801 jon-shell 63225 65802 --config 63226 65803 x-ocaml.universe=/_opam 65804 + --search-uri 65805 + sherlodoc-db.js 65806 + --search-uri 65807 + sherlodoc.js 63227 65808 -o 63228 65809 _html 63229 65810 _odoc/blog/2026/03/page-index.odocl) ··· 63235 65816 jon-shell 63236 65817 --config 63237 65818 x-ocaml.universe=/_opam 65819 + --search-uri 65820 + sherlodoc-db.js 65821 + --search-uri 65822 + sherlodoc.js 63238 65823 -o 63239 65824 _html 63240 65825 _odoc/blog/2026/03/page-open-source-and-ai.odocl) ··· 63246 65831 jon-shell 63247 65832 --config 63248 65833 x-ocaml.universe=/_opam 65834 + --search-uri 65835 + sherlodoc-db.js 65836 + --search-uri 65837 + sherlodoc.js 65838 + -o 65839 + _html 65840 + _odoc/blog/2026/03/page-retrospective.odocl) 65841 + (run 65842 + odoc 65843 + html-generate 65844 + --warn-error 65845 + --shell 65846 + jon-shell 65847 + --config 65848 + x-ocaml.universe=/_opam 65849 + --search-uri 65850 + sherlodoc.js 65851 + --search-uri 65852 + sherlodoc-db.js 63249 65853 -o 63250 65854 _html 63251 65855 _odoc/blog/2026/03/page-review.odocl) ··· 63257 65861 jon-shell 63258 65862 --config 63259 65863 x-ocaml.universe=/_opam 65864 + --search-uri 65865 + sherlodoc-db.js 65866 + --search-uri 65867 + sherlodoc.js 63260 65868 -o 63261 65869 _html 63262 65870 _odoc/blog/2026/03/page-weeknotes-2026-09.odocl) ··· 63268 65876 jon-shell 63269 65877 --config 63270 65878 x-ocaml.universe=/_opam 65879 + --search-uri 65880 + sherlodoc-db.js 65881 + --search-uri 65882 + sherlodoc.js 63271 65883 -o 63272 65884 _html 63273 65885 _odoc/blog/2026/03/page-weeknotes-2026-10.odocl) ··· 63279 65891 jon-shell 63280 65892 --config 63281 65893 x-ocaml.universe=/_opam 65894 + --search-uri 65895 + sherlodoc-db.js 65896 + --search-uri 65897 + sherlodoc.js 63282 65898 -o 63283 65899 _html 63284 65900 _odoc/blog/2026/03/page-weeknotes-2026-11.odocl) ··· 63290 65906 jon-shell 63291 65907 --config 63292 65908 x-ocaml.universe=/_opam 65909 + --search-uri 65910 + sherlodoc-db.js 65911 + --search-uri 65912 + sherlodoc.js 65913 + -o 65914 + _html 65915 + _odoc/blog/2026/03/page-weeknotes-2026-12.odocl) 65916 + (run 65917 + odoc 65918 + html-generate 65919 + --warn-error 65920 + --shell 65921 + jon-shell 65922 + --config 65923 + x-ocaml.universe=/_opam 65924 + --search-uri 65925 + sherlodoc.js 65926 + --search-uri 65927 + sherlodoc-db.js 63293 65928 -o 63294 65929 _html 63295 65930 _odoc/blog/2026/page-index.odocl) ··· 63301 65936 jon-shell 63302 65937 --config 63303 65938 x-ocaml.universe=/_opam 65939 + --search-uri 65940 + sherlodoc-db.js 65941 + --search-uri 65942 + sherlodoc.js 63304 65943 -o 63305 65944 _html 63306 65945 _odoc/blog/page-index.odocl) ··· 63312 65951 jon-shell 63313 65952 --config 63314 65953 x-ocaml.universe=/_opam 65954 + --search-uri 65955 + sherlodoc-db.js 65956 + --search-uri 65957 + sherlodoc.js 63315 65958 -o 63316 65959 _html 63317 65960 _odoc/drafts/page-index.odocl) ··· 63323 65966 jon-shell 63324 65967 --config 63325 65968 x-ocaml.universe=/_opam 65969 + --search-uri 65970 + sherlodoc-db.js 65971 + --search-uri 65972 + sherlodoc.js 63326 65973 -o 63327 65974 _html 63328 65975 _odoc/page-index.odocl) ··· 63334 65981 jon-shell 63335 65982 --config 63336 65983 x-ocaml.universe=/_opam 65984 + --search-uri 65985 + sherlodoc-db.js 65986 + --search-uri 65987 + sherlodoc.js 63337 65988 -o 63338 65989 _html 63339 65990 _odoc/notebooks/foundations/page-foundations1.odocl) ··· 63345 65996 jon-shell 63346 65997 --config 63347 65998 x-ocaml.universe=/_opam 65999 + --search-uri 66000 + sherlodoc-db.js 66001 + --search-uri 66002 + sherlodoc.js 63348 66003 -o 63349 66004 _html 63350 66005 _odoc/notebooks/foundations/page-foundations10.odocl) ··· 63356 66011 jon-shell 63357 66012 --config 63358 66013 x-ocaml.universe=/_opam 66014 + --search-uri 66015 + sherlodoc-db.js 66016 + --search-uri 66017 + sherlodoc.js 63359 66018 -o 63360 66019 _html 63361 66020 _odoc/notebooks/foundations/page-foundations11.odocl) ··· 63367 66026 jon-shell 63368 66027 --config 63369 66028 x-ocaml.universe=/_opam 66029 + --search-uri 66030 + sherlodoc-db.js 66031 + --search-uri 66032 + sherlodoc.js 63370 66033 -o 63371 66034 _html 63372 66035 _odoc/notebooks/foundations/page-foundations2.odocl) ··· 63378 66041 jon-shell 63379 66042 --config 63380 66043 x-ocaml.universe=/_opam 66044 + --search-uri 66045 + sherlodoc-db.js 66046 + --search-uri 66047 + sherlodoc.js 63381 66048 -o 63382 66049 _html 63383 66050 _odoc/notebooks/foundations/page-foundations3.odocl) ··· 63389 66056 jon-shell 63390 66057 --config 63391 66058 x-ocaml.universe=/_opam 66059 + --search-uri 66060 + sherlodoc-db.js 66061 + --search-uri 66062 + sherlodoc.js 63392 66063 -o 63393 66064 _html 63394 66065 _odoc/notebooks/foundations/page-foundations4.odocl) ··· 63400 66071 jon-shell 63401 66072 --config 63402 66073 x-ocaml.universe=/_opam 66074 + --search-uri 66075 + sherlodoc-db.js 66076 + --search-uri 66077 + sherlodoc.js 63403 66078 -o 63404 66079 _html 63405 66080 _odoc/notebooks/foundations/page-foundations5.odocl) ··· 63411 66086 jon-shell 63412 66087 --config 63413 66088 x-ocaml.universe=/_opam 66089 + --search-uri 66090 + sherlodoc-db.js 66091 + --search-uri 66092 + sherlodoc.js 63414 66093 -o 63415 66094 _html 63416 66095 _odoc/notebooks/foundations/page-foundations6.odocl) ··· 63422 66101 jon-shell 63423 66102 --config 63424 66103 x-ocaml.universe=/_opam 66104 + --search-uri 66105 + sherlodoc-db.js 66106 + --search-uri 66107 + sherlodoc.js 63425 66108 -o 63426 66109 _html 63427 66110 _odoc/notebooks/foundations/page-foundations7.odocl) ··· 63433 66116 jon-shell 63434 66117 --config 63435 66118 x-ocaml.universe=/_opam 66119 + --search-uri 66120 + sherlodoc-db.js 66121 + --search-uri 66122 + sherlodoc.js 63436 66123 -o 63437 66124 _html 63438 66125 _odoc/notebooks/foundations/page-foundations8.odocl) ··· 63444 66131 jon-shell 63445 66132 --config 63446 66133 x-ocaml.universe=/_opam 66134 + --search-uri 66135 + sherlodoc-db.js 66136 + --search-uri 66137 + sherlodoc.js 63447 66138 -o 63448 66139 _html 63449 66140 _odoc/notebooks/foundations/page-foundations9.odocl) ··· 63455 66146 jon-shell 63456 66147 --config 63457 66148 x-ocaml.universe=/_opam 66149 + --search-uri 66150 + sherlodoc-db.js 66151 + --search-uri 66152 + sherlodoc.js 63458 66153 -o 63459 66154 _html 63460 66155 _odoc/notebooks/foundations/page-index.odocl) ··· 63466 66161 jon-shell 63467 66162 --config 63468 66163 x-ocaml.universe=/_opam 66164 + --search-uri 66165 + sherlodoc-db.js 66166 + --search-uri 66167 + sherlodoc.js 63469 66168 -o 63470 66169 _html 63471 66170 _odoc/notebooks/page-index.odocl) ··· 63477 66176 jon-shell 63478 66177 --config 63479 66178 x-ocaml.universe=/_opam 66179 + --search-uri 66180 + sherlodoc-db.js 66181 + --search-uri 66182 + sherlodoc.js 63480 66183 -o 63481 66184 _html 63482 66185 _odoc/notebooks/page-interactive_map.odocl) ··· 63488 66191 jon-shell 63489 66192 --config 63490 66193 x-ocaml.universe=/_opam 66194 + --search-uri 66195 + sherlodoc-db.js 66196 + --search-uri 66197 + sherlodoc.js 63491 66198 -o 63492 66199 _html 63493 66200 _odoc/notebooks/page-interactive_map_zarr.odocl) ··· 63499 66206 jon-shell 63500 66207 --config 63501 66208 x-ocaml.universe=/_opam 66209 + --search-uri 66210 + sherlodoc-db.js 66211 + --search-uri 66212 + sherlodoc.js 63502 66213 -o 63503 66214 _html 63504 66215 _odoc/notebooks/oxcaml/page-local.odocl) ··· 63510 66221 jon-shell 63511 66222 --config 63512 66223 x-ocaml.universe=/_opam 66224 + --search-uri 66225 + sherlodoc-db.js 66226 + --search-uri 66227 + sherlodoc.js 63513 66228 -o 63514 66229 _html 63515 66230 _odoc/projects/page-index.odocl) ··· 63521 66236 jon-shell 63522 66237 --config 63523 66238 x-ocaml.universe=/_opam 66239 + --search-uri 66240 + sherlodoc-db.js 66241 + --search-uri 66242 + sherlodoc.js 63524 66243 -o 63525 66244 _html 63526 66245 _odoc/reference/page-index.odocl) ··· 63692 66411 -o 63693 66412 _html 63694 66413 blog/2026/03/tessera.png) 66414 + (run 66415 + odoc 66416 + html-generate-asset 66417 + --asset-unit 66418 + _odoc/blog/2026/03/asset-vibecoding.png.odocl 66419 + -o 66420 + _html 66421 + blog/2026/03/vibecoding.png) 63695 66422 (run odoc support-files -o _html) 63696 66423 (system 63697 66424 "mkdir -p $(dirname _html/static/assets/jon.jpg) && cp static/assets/jon.jpg _html/static/assets/jon.jpg") ··· 63756 66483 _html/blog/2026/02/weeknotes-2026-08.html 63757 66484 _html/blog/2026/03/index.html 63758 66485 _html/blog/2026/03/open-source-and-ai.html 66486 + _html/blog/2026/03/retrospective.html 63759 66487 _html/blog/2026/03/review.html 63760 66488 _html/blog/2026/03/weeknotes-2026-09.html 63761 66489 _html/blog/2026/03/weeknotes-2026-10.html 63762 66490 _html/blog/2026/03/weeknotes-2026-11.html 66491 + _html/blog/2026/03/weeknotes-2026-12.html 63763 66492 _html/blog/2026/index.html 63764 66493 _html/blog/index.html 63765 66494 _html/drafts/index.html ··· 63808 66537 _html/blog/2026/03/new.png 63809 66538 _html/blog/2026/03/old.png 63810 66539 _html/blog/2026/03/search.png 63811 - _html/blog/2026/03/tessera.png)) 66540 + _html/blog/2026/03/tessera.png 66541 + _html/blog/2026/03/vibecoding.png)) 63812 66542 63813 66543 (rule 63814 66544 (target ··· 63848 66578 blog/2026/02/weeknotes-2026-06.mld 63849 66579 blog/2026/02/weeknotes-2026-08.mld 63850 66580 blog/2026/03/open-source-and-ai.mld 66581 + blog/2026/03/retrospective.mld 63851 66582 blog/2026/03/review.mld 63852 66583 blog/2026/03/weeknotes-2026-09.mld 63853 66584 blog/2026/03/weeknotes-2026-10.mld 63854 66585 blog/2026/03/weeknotes-2026-11.mld 66586 + blog/2026/03/weeknotes-2026-12.mld 63855 66587 blog/2025/03/index.mld 63856 66588 blog/2025/04/index.mld 63857 66589 blog/2025/05/index.mld
+1
site/index.mld
··· 13 13 14 14 @recent-posts 15 15 {ul 16 + {- {{!blog/2026/03/page-"weeknotes-2026-12"}Weeknotes 2026 week 12} 2026-03-23} 16 17 {- {{!blog/2026/03/page-"weeknotes-2026-11"}Weeknotes 2026 week 11} 2026-03-18} 17 18 {- {{!blog/2026/03/page-"weeknotes-2026-10"}Weeknotes 2026 week 10} 2026-03-09} 18 19 {- {{!blog/2026/03/page-"weeknotes-2026-09"}Weeknotes 2026 week 9} 2026-03-02}
+1 -1
site/notebooks/interactive_map_zarr.mld
··· 132 132 let* (mat_full, h_full, w_full, geo_bounds) = 133 133 Tessera_zarr.fetch_region ~progress ~year ~store bbox in 134 134 progress (Printf.sprintf "Fetched %d×%d. Downsampling..." h_full w_full); 135 - let (mat, h, w) = downsample mat_full ~h:h_full ~w:w_full ~max_pixels:200_000 in 135 + let (mat, h, w) = downsample mat_full ~h:h_full ~w:w_full ~max_pixels:1_000_000 in 136 136 let bounds = Leaflet_map.{ 137 137 south = geo_bounds.Geotessera.min_lat; 138 138 north = geo_bounds.Geotessera.max_lat;
+2
tessera-geotessera-jsoo/doc/index.mld
··· 1 1 {0 GeoTessera Browser Backend} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Browser fetch backend for tessera-geotessera. Uses synchronous 4 6 XMLHttpRequest to retrieve GeoTessera tiles, suitable for use in web 5 7 workers where blocking I/O is acceptable.
+2
tessera-geotessera/doc/index.mld
··· 1 1 {0 GeoTessera Tile Client} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Fetch, dequantize, and mosaic 4 6 {{:https://github.com/instadeepai/geotessera}GeoTessera} embedding tiles. 5 7
+2
tessera-linalg/doc/index.mld
··· 1 1 {0 PCA and kNN for Bigarrays} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 PCA dimensionality reduction and k-nearest-neighbours classification 4 6 for float32 Bigarray data. Pure OCaml with no external dependencies. 5 7
+2
tessera-npy/doc/index.mld
··· 1 1 {0 NumPy File Reader} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Read and write NumPy [.npy] files in OCaml. Supports int8, uint8, 4 6 float32, and float64 dtypes with arbitrary shapes, using Bigarray for 5 7 zero-copy data representation. Handles both npy format versions 1.0
+4
tessera-tfjs/lib/tfjs.mli
··· 1 1 (** TensorFlow.js PCA via SVD. 2 2 3 + {b Warning:} This library was vibe-coded with AI assistance and has not 4 + been thoroughly reviewed or tested. Use at your own risk and expect 5 + breaking changes. 6 + 3 7 Requires TensorFlow.js to be loaded in the JavaScript environment 4 8 (e.g., via [importScripts] in a web worker). *) 5 9
+2
tessera-viz-jsoo/doc/index.mld
··· 1 1 {0 Embedding Visualization for the Browser} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Browser display for tessera-viz images. Encodes RGBA pixel arrays 4 6 as [data:image/png;base64] URLs for rendering in OCaml notebook cells.
+2
tessera-viz/doc/index.mld
··· 1 1 {0 Embedding Visualization} 2 2 3 + @admonition.warning This library was vibe-coded with AI assistance and has not been thoroughly reviewed or tested. Use at your own risk and expect breaking changes. 4 + 3 5 Visualization utilities for GeoTessera embeddings. Converts PCA 4 6 components and classification results to RGBA pixel arrays, with 5 7 percentile-based contrast stretching and configurable colour palettes.
+7
tessera-zarr-jsoo/lib/tessera_zarr_jsoo.ml
··· 10 10 | Some o, Some l -> 11 11 xhr##setRequestHeader (Js.string "Range") 12 12 (Js.string (Printf.sprintf "bytes=%d-%d" o (o + l - 1))) 13 + | None, Some l -> 14 + (* Suffix range: last l bytes *) 15 + xhr##setRequestHeader (Js.string "Range") 16 + (Js.string (Printf.sprintf "bytes=-%d" l)) 13 17 | _ -> ()); 14 18 let (p, resolver) = Lwt.wait () in 15 19 xhr##.onload := Dom.handler (fun _ -> ··· 41 45 | Some o, Some l -> 42 46 xhr##setRequestHeader (Js.string "Range") 43 47 (Js.string (Printf.sprintf "bytes=%d-%d" o (o + l - 1))) 48 + | None, Some l -> 49 + xhr##setRequestHeader (Js.string "Range") 50 + (Js.string (Printf.sprintf "bytes=-%d" l)) 44 51 | _ -> ()); 45 52 xhr##send Js.null; 46 53 match xhr##.status with
+4
tessera-zarr-jsoo/lib/tessera_zarr_jsoo.mli
··· 1 1 (** Browser backend for tessera-zarr. 2 2 3 + {b Warning:} This library was vibe-coded with AI assistance and has not 4 + been thoroughly reviewed or tested. Use at your own risk and expect 5 + breaking changes. 6 + 3 7 Provides async and sync HTTP fetch with byte-range support, 4 8 convenience wrappers for opening the GeoTessera Zarr store, 5 9 and an FRP bridge for reactive notebooks.
+4
tessera-zarr/lib/tessera_zarr.mli
··· 1 1 (** GeoTessera Zarr v3 client. 2 2 3 + {b Warning:} This library was vibe-coded with AI assistance and has not 4 + been thoroughly reviewed or tested. Use at your own risk and expect 5 + breaking changes. 6 + 3 7 Fetches GeoTessera embeddings from sharded Zarr v3 stores, 4 8 mapping WGS84 bounding boxes to UTM pixel ranges. Dequantizes 5 9 int8 embeddings using float32 scales and reprojects from the
+3
zarr-v3-unix/lib/zarr_v3_unix.ml
··· 2 2 let cmd = match off, len with 3 3 | Some o, Some l -> 4 4 Printf.sprintf "curl -sf -H 'Range: bytes=%d-%d' '%s'" o (o + l - 1) url 5 + | None, Some l -> 6 + (* Suffix range: last l bytes *) 7 + Printf.sprintf "curl -sf -H 'Range: bytes=-%d' '%s'" l url 5 8 | _ -> 6 9 Printf.sprintf "curl -sf '%s'" url 7 10 in
+123 -66
zarr-v3/lib/store.ml
··· 172 172 done; 173 173 !idx 174 174 175 + (* Decompress an inner chunk and copy overlapping pixels to the output buffer *) 176 + let decode_inner codecs codec_names 177 + data local_off nbytes chunk_pixel_start chunk_pixel_stop 178 + ndim start shape elem_size inner_chunk_shape out_buf = 179 + let compressed = String.sub data local_off nbytes in 180 + let raw = apply_inner_codecs codecs codec_names compressed in 181 + let stop = Array.init ndim (fun d -> start.(d) + shape.(d)) in 182 + let copy_lo = Array.init ndim (fun d -> 183 + max chunk_pixel_start.(d) start.(d)) in 184 + let copy_hi = Array.init ndim (fun d -> 185 + min chunk_pixel_stop.(d) stop.(d)) in 186 + let idx = Array.make ndim 0 in 187 + let rec copy dim = 188 + if dim = ndim then begin 189 + let src_off = ref 0 in 190 + let src_stride = ref elem_size in 191 + for d = ndim - 1 downto 0 do 192 + src_off := !src_off + 193 + (idx.(d) - chunk_pixel_start.(d)) * !src_stride; 194 + src_stride := !src_stride * inner_chunk_shape.(d) 195 + done; 196 + let dst_off = ref 0 in 197 + let dst_stride = ref elem_size in 198 + for d = ndim - 1 downto 0 do 199 + dst_off := !dst_off + 200 + (idx.(d) - start.(d)) * !dst_stride; 201 + dst_stride := !dst_stride * shape.(d) 202 + done; 203 + Bytes.blit_string raw !src_off out_buf !dst_off elem_size 204 + end else begin 205 + for i = copy_lo.(dim) to copy_hi.(dim) - 1 do 206 + idx.(dim) <- i; 207 + copy (dim + 1) 208 + done 209 + end 210 + in 211 + copy 0 212 + 175 213 let read ?on_shard arr ~start ~shape = 176 214 let open Lwt.Syntax in 177 215 let meta = arr.meta in ··· 222 260 arr.store.base_url arr.path shard_key in 223 261 224 262 let task = 225 - (* Fetch the entire shard *) 226 - let* shard_data = arr.store.fetch shard_url () in 263 + (* Phase 1: Fetch just the shard index via suffix byte-range 264 + request (bytes=-N fetches last N bytes). 265 + For non-sharded arrays, fetch the whole chunk. *) 266 + let* index_data = 267 + if meta.is_sharded then 268 + arr.store.fetch shard_url ~len:index_size () 269 + else 270 + arr.store.fetch shard_url () 271 + in 272 + 273 + (* The server may not support suffix ranges (returns full shard) 274 + or may return slightly more data. Handle gracefully. *) 275 + let shard_data_opt, index_data = 276 + if String.length index_data > index_size then 277 + (* Got the whole shard — use it directly for sub-chunk reads *) 278 + let full = index_data in 279 + let idx_off = String.length full - index_size in 280 + (Some full, String.sub full idx_off index_size) 281 + else 282 + (None, index_data) 283 + in 284 + 227 285 incr shards_done; 228 286 (match on_shard with 229 287 | Some f -> f !shards_done n_shards 230 288 | None -> ()); 231 - let shard_len = String.length shard_data in 232 289 233 - (* Read the shard index from the end *) 234 - let index_off = shard_len - index_size in 235 - let index_data = String.sub shard_data index_off index_size in 236 - 237 - (* Iterate over inner chunks within this shard *) 238 - let rec iter_inner inner_idx dim = 290 + (* Phase 2: Collect all overlapping inner chunks, then fetch 291 + the byte range spanning all of them in a single request. *) 292 + let needed_chunks = ref [] in 293 + let rec collect_inner inner_idx dim = 239 294 if dim = ndim then begin 240 - (* Pixel range this inner chunk covers *) 241 295 let chunk_pixel_start = Array.init ndim (fun d -> 242 296 shard_idx.(d) * chunk_shape.(d) + 243 297 inner_idx.(d) * inner_chunk_shape.(d)) in 244 298 let chunk_pixel_stop = Array.init ndim (fun d -> 245 299 min (chunk_pixel_start.(d) + inner_chunk_shape.(d)) 246 300 meta.shape.(d)) in 247 - 248 - (* Check overlap with requested region *) 249 301 let overlaps = ref true in 250 302 for d = 0 to ndim - 1 do 251 303 if chunk_pixel_start.(d) >= stop.(d) || 252 304 chunk_pixel_stop.(d) <= start.(d) then 253 305 overlaps := false 254 306 done; 255 - 256 307 if !overlaps then begin 257 - (* Look up this chunk in the shard index *) 258 308 let lin = linearize_inner_idx inner_idx inner_per_shard ndim in 259 309 let offset = get_u64_le index_data (lin * index_entry_size) in 260 310 let nbytes = get_u64_le index_data (lin * index_entry_size + 8) in 261 - 262 - (* 0xFFFFFFFFFFFFFFFF means empty chunk *) 263 - if offset < max_int && nbytes > 0 then begin 264 - let compressed = String.sub shard_data offset nbytes in 265 - let raw = apply_inner_codecs arr.store.codecs 266 - meta.inner_codecs compressed in 267 - 268 - (* Copy overlapping pixels into output buffer *) 269 - let copy_lo = Array.init ndim (fun d -> 270 - max chunk_pixel_start.(d) start.(d)) in 271 - let copy_hi = Array.init ndim (fun d -> 272 - min chunk_pixel_stop.(d) stop.(d)) in 273 - 274 - (* Iterate over overlapping pixels *) 275 - let idx = Array.make ndim 0 in 276 - let rec copy dim = 277 - if dim = ndim then begin 278 - (* Source offset within the decoded inner chunk *) 279 - let src_off = ref 0 in 280 - let src_stride = ref elem_size in 281 - for d = ndim - 1 downto 0 do 282 - src_off := !src_off + 283 - (idx.(d) - chunk_pixel_start.(d)) * !src_stride; 284 - src_stride := !src_stride * inner_chunk_shape.(d) 285 - done; 286 - (* Dest offset within output buffer *) 287 - let dst_off = ref 0 in 288 - let dst_stride = ref elem_size in 289 - for d = ndim - 1 downto 0 do 290 - dst_off := !dst_off + 291 - (idx.(d) - start.(d)) * !dst_stride; 292 - dst_stride := !dst_stride * shape.(d) 293 - done; 294 - Bytes.blit_string raw !src_off out_buf !dst_off elem_size 295 - end else begin 296 - for i = copy_lo.(dim) to copy_hi.(dim) - 1 do 297 - idx.(dim) <- i; 298 - copy (dim + 1) 299 - done 300 - end 301 - in 302 - copy 0 303 - end 304 - end; 305 - Lwt.return_unit 306 - end else begin 307 - let tasks = ref [] in 311 + if offset < max_int && nbytes > 0 then 312 + needed_chunks := (offset, nbytes, 313 + chunk_pixel_start, chunk_pixel_stop) :: !needed_chunks 314 + end 315 + end else 308 316 for i = 0 to inner_per_shard.(dim) - 1 do 309 317 inner_idx.(dim) <- i; 310 - tasks := iter_inner (Array.copy inner_idx) (dim + 1) :: !tasks 311 - done; 312 - Lwt.join !tasks 313 - end 318 + collect_inner (Array.copy inner_idx) (dim + 1) 319 + done 314 320 in 315 - iter_inner (Array.make ndim 0) 0 321 + collect_inner (Array.make ndim 0) 0; 322 + 323 + let chunks = !needed_chunks in 324 + if chunks = [] then Lwt.return_unit 325 + else match shard_data_opt with 326 + | Some full -> 327 + (* Already have the full shard — just decompress in place *) 328 + List.iter (fun (offset, nbytes, cps, cpe) -> 329 + decode_inner arr.store.codecs meta.inner_codecs 330 + full offset nbytes cps cpe 331 + ndim start shape elem_size inner_chunk_shape out_buf 332 + ) chunks; 333 + Lwt.return_unit 334 + | None -> 335 + (* Group nearby sub-chunks into merged byte ranges. 336 + Sort by offset, then merge when gap < 64KB. *) 337 + let sorted = List.sort (fun (a,_,_,_) (b,_,_,_) -> compare a b) chunks in 338 + let max_gap = 65536 in 339 + (* Build groups: each group is (range_start, range_end, chunk list) *) 340 + let groups = ref [] in 341 + let cur_start = ref 0 in 342 + let cur_end = ref 0 in 343 + let cur_chunks = ref [] in 344 + List.iter (fun ((off, nb, _, _) as chunk) -> 345 + if !cur_chunks = [] then begin 346 + cur_start := off; 347 + cur_end := off + nb; 348 + cur_chunks := [chunk] 349 + end else if off - !cur_end <= max_gap then begin 350 + cur_end := max !cur_end (off + nb); 351 + cur_chunks := chunk :: !cur_chunks 352 + end else begin 353 + groups := (!cur_start, !cur_end, !cur_chunks) :: !groups; 354 + cur_start := off; 355 + cur_end := off + nb; 356 + cur_chunks := [chunk] 357 + end 358 + ) sorted; 359 + if !cur_chunks <> [] then 360 + groups := (!cur_start, !cur_end, !cur_chunks) :: !groups; 361 + 362 + (* Fetch each group in parallel *) 363 + let group_tasks = List.map (fun (g_start, g_end, g_chunks) -> 364 + let+ data = arr.store.fetch shard_url 365 + ~off:g_start ~len:(g_end - g_start) () in 366 + List.iter (fun (offset, nbytes, cps, cpe) -> 367 + decode_inner arr.store.codecs meta.inner_codecs 368 + data (offset - g_start) nbytes cps cpe 369 + ndim start shape elem_size inner_chunk_shape out_buf 370 + ) g_chunks 371 + ) !groups in 372 + Lwt.join group_tasks 316 373 in 317 374 shard_tasks := task :: !shard_tasks 318 375 end else begin
+7 -1
zarr-v3/lib/store.mli
··· 1 1 (** Pure OCaml Zarr v3 store reader. 2 2 3 + {b Warning:} This library was vibe-coded with AI assistance and has not 4 + been thoroughly reviewed or tested. Use at your own risk and expect 5 + breaking changes. 6 + 3 7 Reads sharded Zarr v3 arrays over HTTP with pluggable codecs and 4 8 fetch functions. Platform-independent — bring your own HTTP client 5 9 and decompressors. ··· 23 27 24 28 type fetch = string -> ?off:int -> ?len:int -> unit -> string Lwt.t 25 29 (** [fetch url ?off ?len ()] fetches bytes from [url]. 26 - If [off] and [len] are provided, fetches a byte range. 30 + If [off] and [len] are provided, fetches byte range [off..off+len-1]. 31 + If only [len] is provided (no [off]), fetches the last [len] bytes 32 + (suffix range, i.e. HTTP [bytes=-len]). 27 33 Returns the response body as a string. *) 28 34 29 35 type codec = string -> string
+56 -3
zarr-v3/test/test_live.ml
··· 61 61 zi.zone zi.origin_easting zi.origin_northing zi.pixel_size; 62 62 63 63 (* Test full fetch_region pipeline *) 64 - Printf.printf "\n=== Testing fetch_region (small bbox near Cambridge) ===\n%!"; 64 + Printf.printf "\n=== Testing v1 fetch_region (small bbox near Cambridge) ===\n%!"; 65 65 let bbox = Geotessera.{ min_lon = 0.11; min_lat = 52.19; 66 66 max_lon = 0.13; max_lat = 52.21 } in 67 - let* (mat, h, w, bounds) = Tessera_zarr.fetch_region ~store bbox in 67 + let progress msg = Printf.printf " [v1 progress] %s\n%!" msg in 68 + let* (mat, h, w, bounds) = Tessera_zarr.fetch_region ~progress ~store bbox in 68 69 Printf.printf " mosaic: %d x %d (%d rows, %d cols in mat)\n%!" h w mat.Linalg.rows mat.Linalg.cols; 69 70 Printf.printf " bounds: S=%.4f N=%.4f W=%.4f E=%.4f\n%!" 70 71 bounds.min_lat bounds.max_lat bounds.min_lon bounds.max_lon; ··· 72 73 let v0 = Linalg.mat_get mat 0 0 in 73 74 let v1 = Linalg.mat_get mat 0 1 in 74 75 Printf.printf " first pixel: feat[0]=%.4f, feat[1]=%.4f\n%!" v0 v1; 75 - Printf.printf " (should be non-zero dequantized values)\n%!"; 76 + let mid = (h / 2) * w + (w / 2) in 77 + let vm0 = Linalg.mat_get mat mid 0 in 78 + let vm1 = Linalg.mat_get mat mid 1 in 79 + Printf.printf " center pixel: feat[0]=%.4f, feat[1]=%.4f\n%!" vm0 vm1; 80 + (* Count non-zero pixels *) 81 + let nz = ref 0 in 82 + for i = 0 to h * w - 1 do 83 + if Float.abs (Linalg.mat_get mat i 0) > 0.001 then incr nz 84 + done; 85 + Printf.printf " non-zero pixels: %d / %d\n%!" !nz (h * w); 86 + 87 + (* === V2 store test === *) 88 + Printf.printf "\n=== Opening v2 store ===\n%!"; 89 + let v2_base = "https://dl2.geotessera.org/zarr/v2/store.zarr" in 90 + let* store2 = Zarr_v3.Store.open_store ~fetch:Zarr_v3_unix.fetch 91 + ~codecs:Zarr_v3_unix.codecs v2_base in 92 + 93 + let entries2 = Zarr_v3.Store.store_meta store2 in 94 + Printf.printf "V2 consolidated metadata: %d entries\n%!" (List.length entries2); 95 + 96 + (* Open v2 embeddings to check shape *) 97 + Printf.printf "\n=== V2 utm31/embeddings ===\n%!"; 98 + let* emb2 = Zarr_v3.Store.open_array store2 "utm31/embeddings" in 99 + let em2 = Zarr_v3.Store.array_meta emb2 in 100 + Printf.printf " shape = %s\n" 101 + (String.concat " x " (Array.to_list (Array.map string_of_int em2.shape))); 102 + Printf.printf " sharded = %b, chunk_shape = %s\n" em2.is_sharded 103 + (String.concat " x " (Array.to_list (Array.map string_of_int em2.chunk_shape))); 104 + (match em2.inner_chunk_shape with 105 + | Some s -> Printf.printf " inner_chunk_shape = %s\n" 106 + (String.concat " x " (Array.to_list (Array.map string_of_int s))) 107 + | None -> Printf.printf " (no inner chunks)\n"); 108 + 109 + (* Test fetch_region with v2 store *) 110 + Printf.printf "\n=== V2 fetch_region (small bbox near Cambridge, year=2024) ===\n%!"; 111 + let progress msg = Printf.printf " [progress] %s\n%!" msg in 112 + let* (mat2, h2, w2, bounds2) = 113 + Tessera_zarr.fetch_region ~progress ~year:2024 ~store:store2 bbox in 114 + Printf.printf " mosaic: %d x %d (%d rows, %d cols in mat)\n%!" h2 w2 mat2.Linalg.rows mat2.Linalg.cols; 115 + Printf.printf " bounds: S=%.4f N=%.4f W=%.4f E=%.4f\n%!" 116 + bounds2.min_lat bounds2.max_lat bounds2.min_lon bounds2.max_lon; 117 + let v0_2 = Linalg.mat_get mat2 0 0 in 118 + let v1_2 = Linalg.mat_get mat2 0 1 in 119 + Printf.printf " first pixel: feat[0]=%.4f, feat[1]=%.4f\n%!" v0_2 v1_2; 120 + let mid2 = (h2 / 2) * w2 + (w2 / 2) in 121 + let vm0_2 = Linalg.mat_get mat2 mid2 0 in 122 + let vm1_2 = Linalg.mat_get mat2 mid2 1 in 123 + Printf.printf " center pixel: feat[0]=%.4f, feat[1]=%.4f\n%!" vm0_2 vm1_2; 124 + let nz2 = ref 0 in 125 + for i = 0 to h2 * w2 - 1 do 126 + if Float.abs (Linalg.mat_get mat2 i 0) > 0.001 then incr nz2 127 + done; 128 + Printf.printf " non-zero pixels: %d / %d\n%!" !nz2 (h2 * w2); 76 129 77 130 Printf.printf "\n=== Done ===\n%!"; 78 131 Lwt.return_unit