this repo has no description

site-builder: sidebar, interactive blocks, clean URLs, reference docs

- Add sidebar pipeline: compile-index → sidebar-generate → html-generate --sidebar
- jon-shell: render sidebar nav with sticky CSS layout
- Convert all {@ocamltop blocks to {@ocaml for interactive extension
- odoc-interactive-extension: handle autorun (→ run-on=load) and skip tags
- Remove package prefix from URLs (parent-id uses "." for root pages)
- Add projects/index.mld placeholder, @children_order for notebooks
- Add (prefix reference) to dune-workspace for @doc output
- Update deploy-site.sh for two-pass build (site + reference docs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

+844 -533
+36 -55
deploy-site.sh
··· 1 1 #!/bin/bash 2 - # Deploy the full odoc documentation site including jon.recoil.org content. 2 + # Build and optionally serve the full jon.recoil.org site. 3 3 # 4 - # Builds all packages' docs, extension support files, x-ocaml runtime, 5 - # and a jtw universe for the interactive demos. 4 + # The site is built in two passes: 5 + # 1. `dune build @site` — site content (.mld pages → HTML) 6 + # Output: _build/default/site/_html/ 7 + # 2. `dune build @doc` — reference docs (library API docs) 8 + # Output: _build/default/_doc/_html/reference/ 6 9 # 7 - # The jon-site package (in site/) is included automatically by 8 - # `dune build @doc` since it has a (documentation ...) stanza. 9 - # 10 - # Shell configuration: 11 - # dune-workspace sets html_flags globally for all packages. 12 - # Currently using --shell jon-shell for the site content layout. 13 - # Per-package shell selection is not possible in a single build; 14 - # production may need a two-pass build: 15 - # Pass 1: --shell docsite -> build reference docs 16 - # Pass 2: --shell jon-shell -> rebuild site content 17 - # See dune-workspace comments for details. 10 + # These are combined into a single tree for serving/deployment: 11 + # _build/default/site/_html/ — site root 12 + # _build/default/site/_html/reference/ — symlinked to @doc output 18 13 # 19 14 # Prerequisites: 20 - # - opam switch "default" with the custom dune fork (3.21, html_flags support) 21 - # - js_top_worker packages installed in the default switch 22 - # (opam pin + opam install js_top_worker js_top_worker-web) 23 - # - odoc-jon-shell installed (opam install odoc-jon-shell) 15 + # - opam switch "default" with dune 3.21+ (html_flags + prefix support) 16 + # - odoc-jon-shell and odoc-interactive-extension in the workspace 24 17 # 25 18 # Usage: 26 19 # ./deploy-site.sh # build everything and serve on port 8080 ··· 29 22 set -euo pipefail 30 23 31 24 MONO=$(cd "$(dirname "$0")" && pwd) 25 + SITE_HTML="$MONO/_build/default/site/_html" 32 26 DOC_HTML="$MONO/_build/default/_doc/_html" 33 27 SERVE=true 34 28 ··· 36 30 SERVE=false 37 31 fi 38 32 39 - # Ensure we're on the right switch (custom dune with html_flags). 33 + # Ensure we're on the right switch. 40 34 export OPAMSWITCH=default 41 35 eval "$(opam env)" 42 36 43 - echo "=== Step 1: Build and install into opam switch ===" 44 - echo " (needed so odoc finds extensions + x-ocaml.js + jon-shell via dune-site)" 37 + echo "=== Step 1: Build and register plugins ===" 45 38 cd "$MONO" 46 39 dune build @install 47 - dune install 2>&1 | tail -3 40 + echo " plugins registered" 48 41 49 42 echo "" 50 - echo "=== Step 2: Generate documentation ===" 51 - echo " (builds all packages including jon-site content)" 52 - echo " (odoc copies extension support files including x-ocaml.js automatically)" 53 - dune build @doc 2>&1 | tail -5 || true 43 + echo "=== Step 2: Build site content ===" 44 + dune build @site 2>&1 | grep -v '^Warning\|^File\|^$' | tail -5 || true 45 + echo " site built → $SITE_HTML/" 54 46 55 47 echo "" 56 - echo "=== Step 3: Build jtw universe for interactive demos ===" 57 - dune build odoc-interactive-extension/doc/universe 58 - echo " built universe (via dune rule)" 48 + echo "=== Step 3: Build reference docs ===" 49 + dune build @doc 2>&1 | tail -5 || true 50 + echo " reference docs built → $DOC_HTML/reference/" 59 51 60 52 echo "" 61 - echo "=== Step 4: Deploy universe ===" 62 - # The universe needs to be accessible from pages that use interactive OCaml. 63 - # Currently that's only the odoc-interactive-extension demo pages. 64 - # When site content gains interactive cells (ocamltop/deferred-js blocks), 65 - # the universe will also need to be accessible from jon-site pages. 66 - rm -rf "$DOC_HTML/odoc-interactive-extension/universe" 67 - cp -r "$MONO/_build/default/odoc-interactive-extension/doc/universe" \ 68 - "$DOC_HTML/odoc-interactive-extension/universe" 69 - echo " deployed odoc-interactive-extension/universe/" 53 + echo "=== Step 4: Merge reference docs into site ===" 54 + # Copy @doc reference output into the site's reference/ directory. 55 + # The site build already creates reference/index.html from reference/index.mld; 56 + # we add the API docs packages alongside it. 57 + cp -r "$DOC_HTML/reference/"* "$SITE_HTML/reference/" 58 + echo " merged reference docs into site tree" 70 59 71 60 echo "" 72 61 echo "=== Done ===" 73 62 echo "" 74 - echo "Site at: $DOC_HTML/" 63 + echo "Site root: $SITE_HTML/" 75 64 echo "" 76 - echo "Key pages — reference docs:" 77 - echo " /index.html — package index" 78 - echo " /odoc-admonition-extension/index.html — admonition demos" 79 - echo " /odoc-dot-extension/index.html — graphviz demos" 80 - echo " /odoc-mermaid-extension/index.html — mermaid demos" 81 - echo " /odoc-msc-extension/index.html — MSC demos" 82 - echo " /odoc-rfc-extension/index.html — RFC demos" 83 - echo " /odoc-scrollycode-extension/index.html — scrollycode demos" 84 - echo " /odoc-interactive-extension/demo1.html — interactive OCaml" 85 - echo "" 86 - echo "Key pages — site content (jon-site):" 87 - echo " /jon-site/index.html — site home" 88 - echo " /jon-site/blog/index.html — blog index" 89 - echo " /jon-site/notebooks/index.html — notebooks index" 90 - echo " /jon-site/notebooks/foundations/index.html — foundations of CS" 65 + echo "Key pages:" 66 + echo " /index.html — site home" 67 + echo " /blog/index.html — blog index" 68 + echo " /notebooks/index.html — notebooks index" 69 + echo " /notebooks/foundations/index.html — foundations of CS" 70 + echo " /projects/index.html — projects" 71 + echo " /reference/ — API reference docs" 91 72 92 73 if $SERVE; then 93 74 echo "" 94 75 echo "Starting HTTP server on http://localhost:8080" 95 - cd "$DOC_HTML" 76 + cd "$SITE_HTML" 96 77 exec python3 -m http.server 8080 97 78 fi
+1
dune-workspace
··· 16 16 (dev 17 17 (odoc 18 18 (html_flags --shell jon-shell) 19 + (prefix reference) 19 20 )))
+7 -1
odoc-interactive-extension/src/interactive_extension.ml
··· 105 105 let for_attr = Api.get_binding "for" tags in 106 106 let env_attr = Api.get_binding "env" tags in 107 107 let merlin_off = Api.has_tag "no-merlin" tags in 108 - let run_on = Api.get_binding "run-on" tags in 108 + let autorun = Api.has_tag "autorun" tags in 109 + let skip = Api.has_tag "skip" tags in 110 + let run_on = match Api.get_binding "run-on" tags with 111 + | Some _ as v -> v 112 + | None -> if autorun then Some "load" else None 113 + in 109 114 let esc = html_escape in 110 115 (* Build attribute string *) 111 116 let attrs = ··· 115 120 Option.map (fun v -> Printf.sprintf "data-for=\"%s\"" (esc v)) for_attr; 116 121 Option.map (fun v -> Printf.sprintf "data-env=\"%s\"" (esc v)) env_attr; 117 122 (if merlin_off then Some "data-merlin=\"false\"" else None); 123 + (if skip then Some "data-skip=\"true\"" else None); 118 124 Option.map (fun v -> Printf.sprintf "run-on=\"%s\"" (esc v)) run_on; 119 125 ] 120 126 in
+26 -12
odoc-jon-shell/src/odoc_jon_shell.ml
··· 24 24 25 25 (* --- Page assembly --- *) 26 26 27 - let page_creator ~config ~url ~uses_katex ~resources ~header ~preamble content = 27 + let page_creator ~config ~url ~uses_katex ~resources ~sidebar ~header ~preamble 28 + content = 28 29 let support_uri = Odoc_html.Config.support_uri config in 29 30 let file_uri = file_uri ~config ~url in 30 31 let shell_css_uri = file_uri support_uri "extensions/jon-shell.css" in ··· 119 120 Html.head (Html.title (Html.txt title_string)) meta_elements 120 121 in 121 122 123 + let sidebar_nav = 124 + match sidebar with 125 + | Some elts -> 126 + [ 127 + Html.nav 128 + ~a:[ Html.a_class [ "jon-shell-sidebar"; "odoc-global-toc" ] ] 129 + (elts :> Html_types.nav_content Html.elt list); 130 + ] 131 + | None -> [] 132 + in 133 + 122 134 let body = 123 135 [ 124 136 Html.header ··· 135 147 ]; 136 148 Html.main 137 149 ~a:[ Html.a_class [ "jon-shell-main" ] ] 138 - [ 139 - Html.div 140 - ~a:[ Html.a_class [ "odoc-content" ] ] 141 - ((header :> Html_types.div_content Html.elt list) 142 - @ (preamble :> Html_types.div_content Html.elt list) 143 - @ content); 144 - ]; 150 + (sidebar_nav 151 + @ [ 152 + Html.div 153 + ~a:[ Html.a_class [ "odoc-content" ] ] 154 + ((header :> Html_types.div_content Html.elt list) 155 + @ (preamble :> Html_types.div_content Html.elt list) 156 + @ content); 157 + ]); 145 158 Html.footer 146 159 ~a:[ Html.a_class [ "jon-shell-footer" ] ] 147 160 [ Html.txt "jon ludlam" ]; ··· 159 172 in 160 173 content 161 174 162 - let make ~config ~url ~header ~preamble ~uses_katex ~resources ~assets content 163 - children = 175 + let make ~config ~url ~header ~preamble ~uses_katex ~resources ~sidebar ~assets 176 + content children = 164 177 let filename = Odoc_html.Link.Path.as_filename ~config url in 165 178 let content = 166 - page_creator ~config ~url ~uses_katex ~resources ~header ~preamble content 179 + page_creator ~config ~url ~uses_katex ~resources ~sidebar ~header ~preamble 180 + content 167 181 in 168 182 { Odoc_document.Renderer.filename; content; children; path = url; assets } 169 183 ··· 250 264 let make ~config (data : Odoc_html.Html_shell.page_data) = 251 265 make ~config ~url:data.url ~header:data.header ~preamble:data.preamble 252 266 ~uses_katex:data.uses_katex ~resources:data.resources 253 - ~assets:data.assets data.content data.children 267 + ~sidebar:data.sidebar ~assets:data.assets data.content data.children 254 268 255 269 let make_src ~config (data : Odoc_html.Html_shell.src_page_data) = 256 270 make_src ~config ~url:data.url ~header:data.header data.title
+79 -3
odoc-jon-shell/src/odoc_jon_shell_css.ml
··· 89 89 display: flex; 90 90 align-items: center; 91 91 justify-content: space-between; 92 - max-width: var(--max-width); 92 + max-width: calc(var(--max-width) + 220px); 93 93 margin: 0 auto; 94 94 padding: 16px 20px; 95 95 font-size: 14px; ··· 121 121 122 122 /* Main content */ 123 123 .jon-shell-main { 124 - max-width: var(--max-width); 124 + max-width: calc(var(--max-width) + 220px); 125 125 margin: 0 auto; 126 126 padding: 24px 20px 60px; 127 + display: flex; 128 + gap: 32px; 129 + } 130 + 131 + .jon-shell-main .odoc-content { 132 + flex: 1; 133 + min-width: 0; 134 + } 135 + 136 + /* Sidebar */ 137 + .jon-shell-sidebar { 138 + width: 200px; 139 + flex-shrink: 0; 140 + font-size: 0.85rem; 141 + line-height: 1.5; 142 + position: sticky; 143 + top: 24px; 144 + align-self: flex-start; 145 + max-height: calc(100vh - 48px); 146 + overflow-y: auto; 147 + } 148 + 149 + .jon-shell-sidebar ul { 150 + list-style: none; 151 + padding: 0; 152 + margin: 0; 153 + } 154 + 155 + .jon-shell-sidebar ul ul { 156 + padding-left: 12px; 157 + } 158 + 159 + .jon-shell-sidebar li { 160 + margin: 0; 161 + } 162 + 163 + .jon-shell-sidebar a { 164 + display: block; 165 + padding: 3px 8px; 166 + color: var(--text-muted); 167 + text-decoration: none; 168 + border-radius: 4px; 169 + } 170 + 171 + .jon-shell-sidebar a:hover { 172 + color: var(--link-color); 173 + background: var(--highlight-bg); 174 + text-decoration: none; 175 + } 176 + 177 + .jon-shell-sidebar a.current_unit { 178 + color: var(--link-color); 179 + font-weight: 600; 180 + } 181 + 182 + /* Hide the bare "index" text breadcrumb from odoc sidebar */ 183 + .jon-shell-sidebar > ul > li:last-child:not(:has(a)) { 184 + display: none; 127 185 } 128 186 129 187 /* Typography */ ··· 295 353 296 354 /* Footer */ 297 355 .jon-shell-footer { 298 - max-width: var(--max-width); 356 + max-width: calc(var(--max-width) + 220px); 299 357 margin: 0 auto; 300 358 padding: 24px 20px; 301 359 border-top: 1px solid var(--border-color); ··· 304 362 } 305 363 306 364 /* Responsive */ 365 + @media (max-width: 800px) { 366 + .jon-shell-sidebar { 367 + display: none; 368 + } 369 + 370 + .jon-shell-main { 371 + max-width: var(--max-width); 372 + } 373 + 374 + .jon-shell-header { 375 + max-width: var(--max-width); 376 + } 377 + 378 + .jon-shell-footer { 379 + max-width: var(--max-width); 380 + } 381 + } 382 + 307 383 @media (max-width: 600px) { 308 384 body { 309 385 font-size: 16px;
+25 -12
site-builder/gen_rules.ml
··· 10 10 the current directory. This means any .mld change triggers a full 11 11 rebuild, but for ~60 pages the pipeline is fast enough. *) 12 12 13 - let package = "jon-site" 13 + (* Internal name used for odoc's -P and --root flags (cross-references 14 + and sidebar grouping). Does NOT appear in output URLs. *) 15 + let package = "site" 14 16 15 17 let excluded_dirs = 16 18 [ ··· 57 59 58 60 let parent_id rel = 59 61 let dir = Filename.dirname rel in 60 - if dir = "." then package else Printf.sprintf "%s/%s" package dir 62 + if dir = "." then "." else dir 61 63 62 64 let page_name rel = 63 65 Printf.sprintf "page-%s" (Filename.chop_extension (Filename.basename rel)) ··· 65 67 let odoc_target rel = 66 68 let dir = Filename.dirname rel in 67 69 let pn = page_name rel in 68 - if dir = "." then Printf.sprintf "_odoc/%s/%s.odoc" package pn 69 - else Printf.sprintf "_odoc/%s/%s/%s.odoc" package dir pn 70 + if dir = "." then Printf.sprintf "_odoc/%s.odoc" pn 71 + else Printf.sprintf "_odoc/%s/%s.odoc" dir pn 70 72 71 73 let odocl_target rel = Filename.chop_extension (odoc_target rel) ^ ".odocl" 72 74 73 75 let html_target rel = 74 76 let dir = Filename.dirname rel in 75 77 let base = Filename.chop_extension (Filename.basename rel) in 76 - if dir = "." then Printf.sprintf "_html/%s/%s.html" package base 77 - else Printf.sprintf "_html/%s/%s/%s.html" package dir base 78 + if dir = "." then Printf.sprintf "_html/%s.html" base 79 + else Printf.sprintf "_html/%s/%s.html" dir base 78 80 79 81 (* --- Output helpers ------------------------------------------------------ *) 80 82 ··· 110 112 (* Link *) 111 113 List.iter 112 114 (fun rel -> 113 - prl " (run odoc link %s -P %s:_odoc/%s -o %s)" (odoc_target rel) 114 - package package (odocl_target rel)) 115 + prl " (run odoc link %s -P %s:_odoc -o %s)" (odoc_target rel) 116 + package (odocl_target rel)) 115 117 mld_files; 118 + (* Index + sidebar *) 119 + pr " (run odoc compile-index --root %s:_odoc -o _odoc/index.odoc-index" 120 + package; 121 + List.iter (fun rel -> pr " %s" (odocl_target rel)) mld_files; 122 + prl ")"; 123 + prl 124 + " (run odoc sidebar-generate -o _odoc/sidebar.odoc-sidebar \ 125 + _odoc/index.odoc-index)"; 116 126 prl " )))"; 117 127 pr "\n"; 118 128 (* Phase 2: html-generate + support-files + asset copy *) ··· 120 130 prl " (target (dir _html))"; 121 131 prl " (deps"; 122 132 List.iter (fun rel -> prl " %s" (odocl_target rel)) mld_files; 133 + prl " _odoc/sidebar.odoc-sidebar"; 123 134 List.iter (fun asset -> prl " %s" asset) assets; 124 135 prl " )"; 125 136 prl " (action"; ··· 127 138 (* HTML generate *) 128 139 List.iter 129 140 (fun rel -> 130 - prl " (run odoc html-generate --shell jon-shell -o _html %s)" 141 + prl 142 + " (run odoc html-generate --shell jon-shell --sidebar \ 143 + _odoc/sidebar.odoc-sidebar -o _html %s)" 131 144 (odocl_target rel)) 132 145 mld_files; 133 146 (* Support files *) ··· 135 148 (* Asset copies — use system because (copy) declares implicit targets *) 136 149 List.iter 137 150 (fun asset -> 138 - prl " (system \"mkdir -p $(dirname _html/%s/%s) && cp %s _html/%s/%s\")" 139 - package asset asset package asset) 151 + prl " (system \"mkdir -p $(dirname _html/%s) && cp %s _html/%s\")" 152 + asset asset asset) 140 153 assets; 141 154 prl " )))"; 142 155 pr "\n"; ··· 145 158 prl " (name site)"; 146 159 prl " (deps"; 147 160 List.iter (fun rel -> prl " %s" (html_target rel)) mld_files; 148 - List.iter (fun asset -> prl " _html/%s/%s" package asset) assets; 161 + List.iter (fun asset -> prl " _html/%s" asset) assets; 149 162 prl " ))"; 150 163 ()
+666 -450
site/dune.inc
··· 63 63 notebooks/foundations/index.mld 64 64 notebooks/index.mld 65 65 notebooks/oxcaml/local.mld 66 + projects/index.mld 66 67 reference/index.mld) 67 68 (action 68 69 (progn ··· 73 74 --output-dir 74 75 _odoc 75 76 --parent-id 76 - jon-site/blog/2025/03) 77 + blog/2025/03) 77 78 (run 78 79 odoc 79 80 compile ··· 81 82 --output-dir 82 83 _odoc 83 84 --parent-id 84 - jon-site/blog/2025/03) 85 + blog/2025/03) 85 86 (run 86 87 odoc 87 88 compile ··· 89 90 --output-dir 90 91 _odoc 91 92 --parent-id 92 - jon-site/blog/2025/03) 93 + blog/2025/03) 93 94 (run 94 95 odoc 95 96 compile ··· 97 98 --output-dir 98 99 _odoc 99 100 --parent-id 100 - jon-site/blog/2025/04) 101 + blog/2025/04) 101 102 (run 102 103 odoc 103 104 compile ··· 105 106 --output-dir 106 107 _odoc 107 108 --parent-id 108 - jon-site/blog/2025/04) 109 + blog/2025/04) 109 110 (run 110 111 odoc 111 112 compile ··· 113 114 --output-dir 114 115 _odoc 115 116 --parent-id 116 - jon-site/blog/2025/04) 117 + blog/2025/04) 117 118 (run 118 119 odoc 119 120 compile ··· 121 122 --output-dir 122 123 _odoc 123 124 --parent-id 124 - jon-site/blog/2025/04) 125 + blog/2025/04) 125 126 (run 126 127 odoc 127 128 compile ··· 129 130 --output-dir 130 131 _odoc 131 132 --parent-id 132 - jon-site/blog/2025/04) 133 + blog/2025/04) 133 134 (run 134 135 odoc 135 136 compile ··· 137 138 --output-dir 138 139 _odoc 139 140 --parent-id 140 - jon-site/blog/2025/04) 141 + blog/2025/04) 141 142 (run 142 143 odoc 143 144 compile ··· 145 146 --output-dir 146 147 _odoc 147 148 --parent-id 148 - jon-site/blog/2025/05) 149 + blog/2025/05) 149 150 (run 150 151 odoc 151 152 compile ··· 153 154 --output-dir 154 155 _odoc 155 156 --parent-id 156 - jon-site/blog/2025/05) 157 + blog/2025/05) 157 158 (run 158 159 odoc 159 160 compile ··· 161 162 --output-dir 162 163 _odoc 163 164 --parent-id 164 - jon-site/blog/2025/05) 165 + blog/2025/05) 165 166 (run 166 167 odoc 167 168 compile ··· 169 170 --output-dir 170 171 _odoc 171 172 --parent-id 172 - jon-site/blog/2025/05) 173 + blog/2025/05) 173 174 (run 174 175 odoc 175 176 compile ··· 177 178 --output-dir 178 179 _odoc 179 180 --parent-id 180 - jon-site/blog/2025/05) 181 + blog/2025/05) 181 182 (run 182 183 odoc 183 184 compile ··· 185 186 --output-dir 186 187 _odoc 187 188 --parent-id 188 - jon-site/blog/2025/05) 189 + blog/2025/05) 189 190 (run 190 191 odoc 191 192 compile ··· 193 194 --output-dir 194 195 _odoc 195 196 --parent-id 196 - jon-site/blog/2025/06) 197 + blog/2025/06) 197 198 (run 198 199 odoc 199 200 compile ··· 201 202 --output-dir 202 203 _odoc 203 204 --parent-id 204 - jon-site/blog/2025/06) 205 + blog/2025/06) 205 206 (run 206 207 odoc 207 208 compile ··· 209 210 --output-dir 210 211 _odoc 211 212 --parent-id 212 - jon-site/blog/2025/07) 213 + blog/2025/07) 213 214 (run 214 215 odoc 215 216 compile ··· 217 218 --output-dir 218 219 _odoc 219 220 --parent-id 220 - jon-site/blog/2025/07) 221 + blog/2025/07) 221 222 (run 222 223 odoc 223 224 compile ··· 225 226 --output-dir 226 227 _odoc 227 228 --parent-id 228 - jon-site/blog/2025/07) 229 + blog/2025/07) 229 230 (run 230 231 odoc 231 232 compile ··· 233 234 --output-dir 234 235 _odoc 235 236 --parent-id 236 - jon-site/blog/2025/07) 237 + blog/2025/07) 237 238 (run 238 239 odoc 239 240 compile ··· 241 242 --output-dir 242 243 _odoc 243 244 --parent-id 244 - jon-site/blog/2025/07) 245 + blog/2025/07) 245 246 (run 246 247 odoc 247 248 compile ··· 249 250 --output-dir 250 251 _odoc 251 252 --parent-id 252 - jon-site/blog/2025/08) 253 + blog/2025/08) 253 254 (run 254 255 odoc 255 256 compile ··· 257 258 --output-dir 258 259 _odoc 259 260 --parent-id 260 - jon-site/blog/2025/08) 261 + blog/2025/08) 261 262 (run 262 263 odoc 263 264 compile ··· 265 266 --output-dir 266 267 _odoc 267 268 --parent-id 268 - jon-site/blog/2025/08) 269 + blog/2025/08) 269 270 (run 270 271 odoc 271 272 compile ··· 273 274 --output-dir 274 275 _odoc 275 276 --parent-id 276 - jon-site/blog/2025/08) 277 + blog/2025/08) 277 278 (run 278 279 odoc 279 280 compile ··· 281 282 --output-dir 282 283 _odoc 283 284 --parent-id 284 - jon-site/blog/2025/09) 285 + blog/2025/09) 285 286 (run 286 287 odoc 287 288 compile ··· 289 290 --output-dir 290 291 _odoc 291 292 --parent-id 292 - jon-site/blog/2025/09) 293 + blog/2025/09) 293 294 (run 294 295 odoc 295 296 compile ··· 297 298 --output-dir 298 299 _odoc 299 300 --parent-id 300 - jon-site/blog/2025/09) 301 + blog/2025/09) 301 302 (run 302 303 odoc 303 304 compile ··· 305 306 --output-dir 306 307 _odoc 307 308 --parent-id 308 - jon-site/blog/2025/09) 309 + blog/2025/09) 309 310 (run 310 311 odoc 311 312 compile ··· 313 314 --output-dir 314 315 _odoc 315 316 --parent-id 316 - jon-site/blog/2025/09) 317 + blog/2025/09) 317 318 (run 318 319 odoc 319 320 compile ··· 321 322 --output-dir 322 323 _odoc 323 324 --parent-id 324 - jon-site/blog/2025/09) 325 + blog/2025/09) 325 326 (run 326 327 odoc 327 328 compile ··· 329 330 --output-dir 330 331 _odoc 331 332 --parent-id 332 - jon-site/blog/2025/11) 333 + blog/2025/11) 333 334 (run 334 335 odoc 335 336 compile ··· 337 338 --output-dir 338 339 _odoc 339 340 --parent-id 340 - jon-site/blog/2025/11) 341 + blog/2025/11) 341 342 (run 342 343 odoc 343 344 compile ··· 345 346 --output-dir 346 347 _odoc 347 348 --parent-id 348 - jon-site/blog/2025/12) 349 + blog/2025/12) 349 350 (run 350 351 odoc 351 352 compile ··· 353 354 --output-dir 354 355 _odoc 355 356 --parent-id 356 - jon-site/blog/2025/12) 357 + blog/2025/12) 357 358 (run 358 359 odoc 359 360 compile ··· 361 362 --output-dir 362 363 _odoc 363 364 --parent-id 364 - jon-site/blog/2025/12) 365 + blog/2025/12) 365 366 (run 366 367 odoc 367 368 compile ··· 369 370 --output-dir 370 371 _odoc 371 372 --parent-id 372 - jon-site/blog/2025) 373 + blog/2025) 373 374 (run 374 375 odoc 375 376 compile ··· 377 378 --output-dir 378 379 _odoc 379 380 --parent-id 380 - jon-site/blog/2026/01) 381 + blog/2026/01) 381 382 (run 382 383 odoc 383 384 compile ··· 385 386 --output-dir 386 387 _odoc 387 388 --parent-id 388 - jon-site/blog/2026/01) 389 + blog/2026/01) 389 390 (run 390 391 odoc 391 392 compile ··· 393 394 --output-dir 394 395 _odoc 395 396 --parent-id 396 - jon-site/blog/2026/01) 397 + blog/2026/01) 397 398 (run 398 399 odoc 399 400 compile ··· 401 402 --output-dir 402 403 _odoc 403 404 --parent-id 404 - jon-site/blog/2026/02) 405 + blog/2026/02) 405 406 (run 406 407 odoc 407 408 compile ··· 409 410 --output-dir 410 411 _odoc 411 412 --parent-id 412 - jon-site/blog/2026/02) 413 + blog/2026/02) 413 414 (run 414 415 odoc 415 416 compile ··· 417 418 --output-dir 418 419 _odoc 419 420 --parent-id 420 - jon-site/blog/2026) 421 - (run 422 - odoc 423 - compile 424 - blog/index.mld 425 - --output-dir 426 - _odoc 427 - --parent-id 428 - jon-site/blog) 429 - (run 430 - odoc 431 - compile 432 - drafts/index.mld 433 - --output-dir 434 - _odoc 435 - --parent-id 436 - jon-site/drafts) 437 - (run odoc compile index.mld --output-dir _odoc --parent-id jon-site) 421 + blog/2026) 422 + (run odoc compile blog/index.mld --output-dir _odoc --parent-id blog) 423 + (run odoc compile drafts/index.mld --output-dir _odoc --parent-id drafts) 424 + (run odoc compile index.mld --output-dir _odoc --parent-id .) 438 425 (run 439 426 odoc 440 427 compile ··· 442 429 --output-dir 443 430 _odoc 444 431 --parent-id 445 - jon-site/notebooks/foundations) 432 + notebooks/foundations) 446 433 (run 447 434 odoc 448 435 compile ··· 450 437 --output-dir 451 438 _odoc 452 439 --parent-id 453 - jon-site/notebooks/foundations) 440 + notebooks/foundations) 454 441 (run 455 442 odoc 456 443 compile ··· 458 445 --output-dir 459 446 _odoc 460 447 --parent-id 461 - jon-site/notebooks/foundations) 448 + notebooks/foundations) 462 449 (run 463 450 odoc 464 451 compile ··· 466 453 --output-dir 467 454 _odoc 468 455 --parent-id 469 - jon-site/notebooks/foundations) 456 + notebooks/foundations) 470 457 (run 471 458 odoc 472 459 compile ··· 474 461 --output-dir 475 462 _odoc 476 463 --parent-id 477 - jon-site/notebooks/foundations) 464 + notebooks/foundations) 478 465 (run 479 466 odoc 480 467 compile ··· 482 469 --output-dir 483 470 _odoc 484 471 --parent-id 485 - jon-site/notebooks/foundations) 472 + notebooks/foundations) 486 473 (run 487 474 odoc 488 475 compile ··· 490 477 --output-dir 491 478 _odoc 492 479 --parent-id 493 - jon-site/notebooks/foundations) 480 + notebooks/foundations) 494 481 (run 495 482 odoc 496 483 compile ··· 498 485 --output-dir 499 486 _odoc 500 487 --parent-id 501 - jon-site/notebooks/foundations) 488 + notebooks/foundations) 502 489 (run 503 490 odoc 504 491 compile ··· 506 493 --output-dir 507 494 _odoc 508 495 --parent-id 509 - jon-site/notebooks/foundations) 496 + notebooks/foundations) 510 497 (run 511 498 odoc 512 499 compile ··· 514 501 --output-dir 515 502 _odoc 516 503 --parent-id 517 - jon-site/notebooks/foundations) 504 + notebooks/foundations) 518 505 (run 519 506 odoc 520 507 compile ··· 522 509 --output-dir 523 510 _odoc 524 511 --parent-id 525 - jon-site/notebooks/foundations) 512 + notebooks/foundations) 526 513 (run 527 514 odoc 528 515 compile ··· 530 517 --output-dir 531 518 _odoc 532 519 --parent-id 533 - jon-site/notebooks/foundations) 520 + notebooks/foundations) 534 521 (run 535 522 odoc 536 523 compile ··· 538 525 --output-dir 539 526 _odoc 540 527 --parent-id 541 - jon-site/notebooks) 528 + notebooks) 542 529 (run 543 530 odoc 544 531 compile ··· 546 533 --output-dir 547 534 _odoc 548 535 --parent-id 549 - jon-site/notebooks/oxcaml) 536 + notebooks/oxcaml) 537 + (run 538 + odoc 539 + compile 540 + projects/index.mld 541 + --output-dir 542 + _odoc 543 + --parent-id 544 + projects) 550 545 (run 551 546 odoc 552 547 compile ··· 554 549 --output-dir 555 550 _odoc 556 551 --parent-id 557 - jon-site/reference) 552 + reference) 558 553 (run 559 554 odoc 560 555 link 561 - _odoc/jon-site/blog/2025/03/page-code-block-metadata.odoc 556 + _odoc/blog/2025/03/page-code-block-metadata.odoc 562 557 -P 563 - jon-site:_odoc/jon-site 558 + site:_odoc 564 559 -o 565 - _odoc/jon-site/blog/2025/03/page-code-block-metadata.odocl) 560 + _odoc/blog/2025/03/page-code-block-metadata.odocl) 566 561 (run 567 562 odoc 568 563 link 569 - _odoc/jon-site/blog/2025/03/page-index.odoc 564 + _odoc/blog/2025/03/page-index.odoc 570 565 -P 571 - jon-site:_odoc/jon-site 566 + site:_odoc 572 567 -o 573 - _odoc/jon-site/blog/2025/03/page-index.odocl) 568 + _odoc/blog/2025/03/page-index.odocl) 574 569 (run 575 570 odoc 576 571 link 577 - _odoc/jon-site/blog/2025/03/page-module-type-of.odoc 572 + _odoc/blog/2025/03/page-module-type-of.odoc 578 573 -P 579 - jon-site:_odoc/jon-site 574 + site:_odoc 580 575 -o 581 - _odoc/jon-site/blog/2025/03/page-module-type-of.odocl) 576 + _odoc/blog/2025/03/page-module-type-of.odocl) 582 577 (run 583 578 odoc 584 579 link 585 - _odoc/jon-site/blog/2025/04/page-index.odoc 580 + _odoc/blog/2025/04/page-index.odoc 586 581 -P 587 - jon-site:_odoc/jon-site 582 + site:_odoc 588 583 -o 589 - _odoc/jon-site/blog/2025/04/page-index.odocl) 584 + _odoc/blog/2025/04/page-index.odocl) 590 585 (run 591 586 odoc 592 587 link 593 - _odoc/jon-site/blog/2025/04/page-meeting-the-team.odoc 588 + _odoc/blog/2025/04/page-meeting-the-team.odoc 594 589 -P 595 - jon-site:_odoc/jon-site 590 + site:_odoc 596 591 -o 597 - _odoc/jon-site/blog/2025/04/page-meeting-the-team.odocl) 592 + _odoc/blog/2025/04/page-meeting-the-team.odocl) 598 593 (run 599 594 odoc 600 595 link 601 - _odoc/jon-site/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odoc 596 + _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odoc 602 597 -P 603 - jon-site:_odoc/jon-site 598 + site:_odoc 604 599 -o 605 - _odoc/jon-site/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl) 600 + _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl) 606 601 (run 607 602 odoc 608 603 link 609 - _odoc/jon-site/blog/2025/04/page-odoc-3.odoc 604 + _odoc/blog/2025/04/page-odoc-3.odoc 610 605 -P 611 - jon-site:_odoc/jon-site 606 + site:_odoc 612 607 -o 613 - _odoc/jon-site/blog/2025/04/page-odoc-3.odocl) 608 + _odoc/blog/2025/04/page-odoc-3.odocl) 614 609 (run 615 610 odoc 616 611 link 617 - _odoc/jon-site/blog/2025/04/page-semantic-versioning-is-hard.odoc 612 + _odoc/blog/2025/04/page-semantic-versioning-is-hard.odoc 618 613 -P 619 - jon-site:_odoc/jon-site 614 + site:_odoc 620 615 -o 621 - _odoc/jon-site/blog/2025/04/page-semantic-versioning-is-hard.odocl) 616 + _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl) 622 617 (run 623 618 odoc 624 619 link 625 - _odoc/jon-site/blog/2025/04/page-this-site.odoc 620 + _odoc/blog/2025/04/page-this-site.odoc 626 621 -P 627 - jon-site:_odoc/jon-site 622 + site:_odoc 628 623 -o 629 - _odoc/jon-site/blog/2025/04/page-this-site.odocl) 624 + _odoc/blog/2025/04/page-this-site.odocl) 630 625 (run 631 626 odoc 632 627 link 633 - _odoc/jon-site/blog/2025/05/page-ai-for-climate-and-nature-day.odoc 628 + _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odoc 634 629 -P 635 - jon-site:_odoc/jon-site 630 + site:_odoc 636 631 -o 637 - _odoc/jon-site/blog/2025/05/page-ai-for-climate-and-nature-day.odocl) 632 + _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl) 638 633 (run 639 634 odoc 640 635 link 641 - _odoc/jon-site/blog/2025/05/page-docs-progress.odoc 636 + _odoc/blog/2025/05/page-docs-progress.odoc 642 637 -P 643 - jon-site:_odoc/jon-site 638 + site:_odoc 644 639 -o 645 - _odoc/jon-site/blog/2025/05/page-docs-progress.odocl) 640 + _odoc/blog/2025/05/page-docs-progress.odocl) 646 641 (run 647 642 odoc 648 643 link 649 - _odoc/jon-site/blog/2025/05/page-index.odoc 644 + _odoc/blog/2025/05/page-index.odoc 650 645 -P 651 - jon-site:_odoc/jon-site 646 + site:_odoc 652 647 -o 653 - _odoc/jon-site/blog/2025/05/page-index.odocl) 648 + _odoc/blog/2025/05/page-index.odocl) 654 649 (run 655 650 odoc 656 651 link 657 - _odoc/jon-site/blog/2025/05/page-lots-of-things.odoc 652 + _odoc/blog/2025/05/page-lots-of-things.odoc 658 653 -P 659 - jon-site:_odoc/jon-site 654 + site:_odoc 660 655 -o 661 - _odoc/jon-site/blog/2025/05/page-lots-of-things.odocl) 656 + _odoc/blog/2025/05/page-lots-of-things.odocl) 662 657 (run 663 658 odoc 664 659 link 665 - _odoc/jon-site/blog/2025/05/page-oxcaml-gets-closer.odoc 660 + _odoc/blog/2025/05/page-oxcaml-gets-closer.odoc 666 661 -P 667 - jon-site:_odoc/jon-site 662 + site:_odoc 668 663 -o 669 - _odoc/jon-site/blog/2025/05/page-oxcaml-gets-closer.odocl) 664 + _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl) 670 665 (run 671 666 odoc 672 667 link 673 - _odoc/jon-site/blog/2025/05/page-ticks-solved-by-ai.odoc 668 + _odoc/blog/2025/05/page-ticks-solved-by-ai.odoc 674 669 -P 675 - jon-site:_odoc/jon-site 670 + site:_odoc 676 671 -o 677 - _odoc/jon-site/blog/2025/05/page-ticks-solved-by-ai.odocl) 672 + _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl) 678 673 (run 679 674 odoc 680 675 link 681 - _odoc/jon-site/blog/2025/06/page-index.odoc 676 + _odoc/blog/2025/06/page-index.odoc 682 677 -P 683 - jon-site:_odoc/jon-site 678 + site:_odoc 684 679 -o 685 - _odoc/jon-site/blog/2025/06/page-index.odocl) 680 + _odoc/blog/2025/06/page-index.odocl) 686 681 (run 687 682 odoc 688 683 link 689 - _odoc/jon-site/blog/2025/06/page-week23.odoc 684 + _odoc/blog/2025/06/page-week23.odoc 690 685 -P 691 - jon-site:_odoc/jon-site 686 + site:_odoc 692 687 -o 693 - _odoc/jon-site/blog/2025/06/page-week23.odocl) 688 + _odoc/blog/2025/06/page-week23.odocl) 694 689 (run 695 690 odoc 696 691 link 697 - _odoc/jon-site/blog/2025/07/page-index.odoc 692 + _odoc/blog/2025/07/page-index.odoc 698 693 -P 699 - jon-site:_odoc/jon-site 694 + site:_odoc 700 695 -o 701 - _odoc/jon-site/blog/2025/07/page-index.odocl) 696 + _odoc/blog/2025/07/page-index.odocl) 702 697 (run 703 698 odoc 704 699 link 705 - _odoc/jon-site/blog/2025/07/page-odoc-3-live-on-ocaml-org.odoc 700 + _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odoc 706 701 -P 707 - jon-site:_odoc/jon-site 702 + site:_odoc 708 703 -o 709 - _odoc/jon-site/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl) 704 + _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl) 710 705 (run 711 706 odoc 712 707 link 713 - _odoc/jon-site/blog/2025/07/page-retrospective.odoc 708 + _odoc/blog/2025/07/page-retrospective.odoc 714 709 -P 715 - jon-site:_odoc/jon-site 710 + site:_odoc 716 711 -o 717 - _odoc/jon-site/blog/2025/07/page-retrospective.odocl) 712 + _odoc/blog/2025/07/page-retrospective.odocl) 718 713 (run 719 714 odoc 720 715 link 721 - _odoc/jon-site/blog/2025/07/page-week27.odoc 716 + _odoc/blog/2025/07/page-week27.odoc 722 717 -P 723 - jon-site:_odoc/jon-site 718 + site:_odoc 724 719 -o 725 - _odoc/jon-site/blog/2025/07/page-week27.odocl) 720 + _odoc/blog/2025/07/page-week27.odocl) 726 721 (run 727 722 odoc 728 723 link 729 - _odoc/jon-site/blog/2025/07/page-week28.odoc 724 + _odoc/blog/2025/07/page-week28.odoc 730 725 -P 731 - jon-site:_odoc/jon-site 726 + site:_odoc 732 727 -o 733 - _odoc/jon-site/blog/2025/07/page-week28.odocl) 728 + _odoc/blog/2025/07/page-week28.odocl) 734 729 (run 735 730 odoc 736 731 link 737 - _odoc/jon-site/blog/2025/08/page-index.odoc 732 + _odoc/blog/2025/08/page-index.odoc 738 733 -P 739 - jon-site:_odoc/jon-site 734 + site:_odoc 740 735 -o 741 - _odoc/jon-site/blog/2025/08/page-index.odocl) 736 + _odoc/blog/2025/08/page-index.odocl) 742 737 (run 743 738 odoc 744 739 link 745 - _odoc/jon-site/blog/2025/08/page-ocaml-lsp-mcp.odoc 740 + _odoc/blog/2025/08/page-ocaml-lsp-mcp.odoc 746 741 -P 747 - jon-site:_odoc/jon-site 742 + site:_odoc 748 743 -o 749 - _odoc/jon-site/blog/2025/08/page-ocaml-lsp-mcp.odocl) 744 + _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl) 750 745 (run 751 746 odoc 752 747 link 753 - _odoc/jon-site/blog/2025/08/page-ocaml-mcp-server.odoc 748 + _odoc/blog/2025/08/page-ocaml-mcp-server.odoc 754 749 -P 755 - jon-site:_odoc/jon-site 750 + site:_odoc 756 751 -o 757 - _odoc/jon-site/blog/2025/08/page-ocaml-mcp-server.odocl) 752 + _odoc/blog/2025/08/page-ocaml-mcp-server.odocl) 758 753 (run 759 754 odoc 760 755 link 761 - _odoc/jon-site/blog/2025/08/page-week33.odoc 756 + _odoc/blog/2025/08/page-week33.odoc 762 757 -P 763 - jon-site:_odoc/jon-site 758 + site:_odoc 764 759 -o 765 - _odoc/jon-site/blog/2025/08/page-week33.odocl) 760 + _odoc/blog/2025/08/page-week33.odocl) 766 761 (run 767 762 odoc 768 763 link 769 - _odoc/jon-site/blog/2025/09/page-build-ids-for-day10.odoc 764 + _odoc/blog/2025/09/page-build-ids-for-day10.odoc 770 765 -P 771 - jon-site:_odoc/jon-site 766 + site:_odoc 772 767 -o 773 - _odoc/jon-site/blog/2025/09/page-build-ids-for-day10.odocl) 768 + _odoc/blog/2025/09/page-build-ids-for-day10.odocl) 774 769 (run 775 770 odoc 776 771 link 777 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions.odoc 772 + _odoc/blog/2025/09/page-caching-opam-solutions.odoc 778 773 -P 779 - jon-site:_odoc/jon-site 774 + site:_odoc 780 775 -o 781 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions.odocl) 776 + _odoc/blog/2025/09/page-caching-opam-solutions.odocl) 782 777 (run 783 778 odoc 784 779 link 785 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions2.odoc 780 + _odoc/blog/2025/09/page-caching-opam-solutions2.odoc 786 781 -P 787 - jon-site:_odoc/jon-site 782 + site:_odoc 788 783 -o 789 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions2.odocl) 784 + _odoc/blog/2025/09/page-caching-opam-solutions2.odocl) 790 785 (run 791 786 odoc 792 787 link 793 - _odoc/jon-site/blog/2025/09/page-giving-hub-cl-an-upgrade.odoc 788 + _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odoc 794 789 -P 795 - jon-site:_odoc/jon-site 790 + site:_odoc 796 791 -o 797 - _odoc/jon-site/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl) 792 + _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl) 798 793 (run 799 794 odoc 800 795 link 801 - _odoc/jon-site/blog/2025/09/page-index.odoc 796 + _odoc/blog/2025/09/page-index.odoc 802 797 -P 803 - jon-site:_odoc/jon-site 798 + site:_odoc 804 799 -o 805 - _odoc/jon-site/blog/2025/09/page-index.odocl) 800 + _odoc/blog/2025/09/page-index.odocl) 806 801 (run 807 802 odoc 808 803 link 809 - _odoc/jon-site/blog/2025/09/page-odoc-bugs.odoc 804 + _odoc/blog/2025/09/page-odoc-bugs.odoc 810 805 -P 811 - jon-site:_odoc/jon-site 806 + site:_odoc 812 807 -o 813 - _odoc/jon-site/blog/2025/09/page-odoc-bugs.odocl) 808 + _odoc/blog/2025/09/page-odoc-bugs.odocl) 814 809 (run 815 810 odoc 816 811 link 817 - _odoc/jon-site/blog/2025/11/page-foundations-of-computer-science.odoc 812 + _odoc/blog/2025/11/page-foundations-of-computer-science.odoc 818 813 -P 819 - jon-site:_odoc/jon-site 814 + site:_odoc 820 815 -o 821 - _odoc/jon-site/blog/2025/11/page-foundations-of-computer-science.odocl) 816 + _odoc/blog/2025/11/page-foundations-of-computer-science.odocl) 822 817 (run 823 818 odoc 824 819 link 825 - _odoc/jon-site/blog/2025/11/page-index.odoc 820 + _odoc/blog/2025/11/page-index.odoc 826 821 -P 827 - jon-site:_odoc/jon-site 822 + site:_odoc 828 823 -o 829 - _odoc/jon-site/blog/2025/11/page-index.odocl) 824 + _odoc/blog/2025/11/page-index.odocl) 830 825 (run 831 826 odoc 832 827 link 833 - _odoc/jon-site/blog/2025/12/page-an-svg-is-all-you-need.odoc 828 + _odoc/blog/2025/12/page-an-svg-is-all-you-need.odoc 834 829 -P 835 - jon-site:_odoc/jon-site 830 + site:_odoc 836 831 -o 837 - _odoc/jon-site/blog/2025/12/page-an-svg-is-all-you-need.odocl) 832 + _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl) 838 833 (run 839 834 odoc 840 835 link 841 - _odoc/jon-site/blog/2025/12/page-claude-and-dune.odoc 836 + _odoc/blog/2025/12/page-claude-and-dune.odoc 842 837 -P 843 - jon-site:_odoc/jon-site 838 + site:_odoc 844 839 -o 845 - _odoc/jon-site/blog/2025/12/page-claude-and-dune.odocl) 840 + _odoc/blog/2025/12/page-claude-and-dune.odocl) 846 841 (run 847 842 odoc 848 843 link 849 - _odoc/jon-site/blog/2025/12/page-index.odoc 844 + _odoc/blog/2025/12/page-index.odoc 850 845 -P 851 - jon-site:_odoc/jon-site 846 + site:_odoc 852 847 -o 853 - _odoc/jon-site/blog/2025/12/page-index.odocl) 848 + _odoc/blog/2025/12/page-index.odocl) 854 849 (run 855 850 odoc 856 851 link 857 - _odoc/jon-site/blog/2025/page-index.odoc 852 + _odoc/blog/2025/page-index.odoc 858 853 -P 859 - jon-site:_odoc/jon-site 854 + site:_odoc 860 855 -o 861 - _odoc/jon-site/blog/2025/page-index.odocl) 856 + _odoc/blog/2025/page-index.odocl) 862 857 (run 863 858 odoc 864 859 link 865 - _odoc/jon-site/blog/2026/01/page-index.odoc 860 + _odoc/blog/2026/01/page-index.odoc 866 861 -P 867 - jon-site:_odoc/jon-site 862 + site:_odoc 868 863 -o 869 - _odoc/jon-site/blog/2026/01/page-index.odocl) 864 + _odoc/blog/2026/01/page-index.odocl) 870 865 (run 871 866 odoc 872 867 link 873 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-03.odoc 868 + _odoc/blog/2026/01/page-weeknotes-2026-03.odoc 874 869 -P 875 - jon-site:_odoc/jon-site 870 + site:_odoc 876 871 -o 877 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-03.odocl) 872 + _odoc/blog/2026/01/page-weeknotes-2026-03.odocl) 878 873 (run 879 874 odoc 880 875 link 881 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-04-05.odoc 876 + _odoc/blog/2026/01/page-weeknotes-2026-04-05.odoc 882 877 -P 883 - jon-site:_odoc/jon-site 878 + site:_odoc 884 879 -o 885 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-04-05.odocl) 880 + _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl) 886 881 (run 887 882 odoc 888 883 link 889 - _odoc/jon-site/blog/2026/02/page-index.odoc 884 + _odoc/blog/2026/02/page-index.odoc 885 + -P 886 + site:_odoc 887 + -o 888 + _odoc/blog/2026/02/page-index.odocl) 889 + (run 890 + odoc 891 + link 892 + _odoc/blog/2026/02/page-weeknotes-2026-06.odoc 890 893 -P 891 - jon-site:_odoc/jon-site 894 + site:_odoc 892 895 -o 893 - _odoc/jon-site/blog/2026/02/page-index.odocl) 896 + _odoc/blog/2026/02/page-weeknotes-2026-06.odocl) 894 897 (run 895 898 odoc 896 899 link 897 - _odoc/jon-site/blog/2026/02/page-weeknotes-2026-06.odoc 900 + _odoc/blog/2026/page-index.odoc 898 901 -P 899 - jon-site:_odoc/jon-site 902 + site:_odoc 900 903 -o 901 - _odoc/jon-site/blog/2026/02/page-weeknotes-2026-06.odocl) 904 + _odoc/blog/2026/page-index.odocl) 902 905 (run 903 906 odoc 904 907 link 905 - _odoc/jon-site/blog/2026/page-index.odoc 908 + _odoc/blog/page-index.odoc 906 909 -P 907 - jon-site:_odoc/jon-site 910 + site:_odoc 908 911 -o 909 - _odoc/jon-site/blog/2026/page-index.odocl) 912 + _odoc/blog/page-index.odocl) 910 913 (run 911 914 odoc 912 915 link 913 - _odoc/jon-site/blog/page-index.odoc 916 + _odoc/drafts/page-index.odoc 914 917 -P 915 - jon-site:_odoc/jon-site 918 + site:_odoc 916 919 -o 917 - _odoc/jon-site/blog/page-index.odocl) 920 + _odoc/drafts/page-index.odocl) 918 921 (run 919 922 odoc 920 923 link 921 - _odoc/jon-site/drafts/page-index.odoc 924 + _odoc/page-index.odoc 922 925 -P 923 - jon-site:_odoc/jon-site 926 + site:_odoc 924 927 -o 925 - _odoc/jon-site/drafts/page-index.odocl) 928 + _odoc/page-index.odocl) 926 929 (run 927 930 odoc 928 931 link 929 - _odoc/jon-site/page-index.odoc 932 + _odoc/notebooks/foundations/page-foundations1.odoc 930 933 -P 931 - jon-site:_odoc/jon-site 934 + site:_odoc 932 935 -o 933 - _odoc/jon-site/page-index.odocl) 936 + _odoc/notebooks/foundations/page-foundations1.odocl) 934 937 (run 935 938 odoc 936 939 link 937 - _odoc/jon-site/notebooks/foundations/page-foundations1.odoc 940 + _odoc/notebooks/foundations/page-foundations10.odoc 938 941 -P 939 - jon-site:_odoc/jon-site 942 + site:_odoc 940 943 -o 941 - _odoc/jon-site/notebooks/foundations/page-foundations1.odocl) 944 + _odoc/notebooks/foundations/page-foundations10.odocl) 942 945 (run 943 946 odoc 944 947 link 945 - _odoc/jon-site/notebooks/foundations/page-foundations10.odoc 948 + _odoc/notebooks/foundations/page-foundations11.odoc 946 949 -P 947 - jon-site:_odoc/jon-site 950 + site:_odoc 948 951 -o 949 - _odoc/jon-site/notebooks/foundations/page-foundations10.odocl) 952 + _odoc/notebooks/foundations/page-foundations11.odocl) 950 953 (run 951 954 odoc 952 955 link 953 - _odoc/jon-site/notebooks/foundations/page-foundations11.odoc 956 + _odoc/notebooks/foundations/page-foundations2.odoc 954 957 -P 955 - jon-site:_odoc/jon-site 958 + site:_odoc 956 959 -o 957 - _odoc/jon-site/notebooks/foundations/page-foundations11.odocl) 960 + _odoc/notebooks/foundations/page-foundations2.odocl) 958 961 (run 959 962 odoc 960 963 link 961 - _odoc/jon-site/notebooks/foundations/page-foundations2.odoc 964 + _odoc/notebooks/foundations/page-foundations3.odoc 962 965 -P 963 - jon-site:_odoc/jon-site 966 + site:_odoc 964 967 -o 965 - _odoc/jon-site/notebooks/foundations/page-foundations2.odocl) 968 + _odoc/notebooks/foundations/page-foundations3.odocl) 966 969 (run 967 970 odoc 968 971 link 969 - _odoc/jon-site/notebooks/foundations/page-foundations3.odoc 972 + _odoc/notebooks/foundations/page-foundations4.odoc 970 973 -P 971 - jon-site:_odoc/jon-site 974 + site:_odoc 972 975 -o 973 - _odoc/jon-site/notebooks/foundations/page-foundations3.odocl) 976 + _odoc/notebooks/foundations/page-foundations4.odocl) 974 977 (run 975 978 odoc 976 979 link 977 - _odoc/jon-site/notebooks/foundations/page-foundations4.odoc 980 + _odoc/notebooks/foundations/page-foundations5.odoc 978 981 -P 979 - jon-site:_odoc/jon-site 982 + site:_odoc 980 983 -o 981 - _odoc/jon-site/notebooks/foundations/page-foundations4.odocl) 984 + _odoc/notebooks/foundations/page-foundations5.odocl) 982 985 (run 983 986 odoc 984 987 link 985 - _odoc/jon-site/notebooks/foundations/page-foundations5.odoc 988 + _odoc/notebooks/foundations/page-foundations6.odoc 986 989 -P 987 - jon-site:_odoc/jon-site 990 + site:_odoc 988 991 -o 989 - _odoc/jon-site/notebooks/foundations/page-foundations5.odocl) 992 + _odoc/notebooks/foundations/page-foundations6.odocl) 990 993 (run 991 994 odoc 992 995 link 993 - _odoc/jon-site/notebooks/foundations/page-foundations6.odoc 996 + _odoc/notebooks/foundations/page-foundations7.odoc 994 997 -P 995 - jon-site:_odoc/jon-site 998 + site:_odoc 996 999 -o 997 - _odoc/jon-site/notebooks/foundations/page-foundations6.odocl) 1000 + _odoc/notebooks/foundations/page-foundations7.odocl) 998 1001 (run 999 1002 odoc 1000 1003 link 1001 - _odoc/jon-site/notebooks/foundations/page-foundations7.odoc 1004 + _odoc/notebooks/foundations/page-foundations8.odoc 1002 1005 -P 1003 - jon-site:_odoc/jon-site 1006 + site:_odoc 1004 1007 -o 1005 - _odoc/jon-site/notebooks/foundations/page-foundations7.odocl) 1008 + _odoc/notebooks/foundations/page-foundations8.odocl) 1006 1009 (run 1007 1010 odoc 1008 1011 link 1009 - _odoc/jon-site/notebooks/foundations/page-foundations8.odoc 1012 + _odoc/notebooks/foundations/page-foundations9.odoc 1010 1013 -P 1011 - jon-site:_odoc/jon-site 1014 + site:_odoc 1012 1015 -o 1013 - _odoc/jon-site/notebooks/foundations/page-foundations8.odocl) 1016 + _odoc/notebooks/foundations/page-foundations9.odocl) 1014 1017 (run 1015 1018 odoc 1016 1019 link 1017 - _odoc/jon-site/notebooks/foundations/page-foundations9.odoc 1020 + _odoc/notebooks/foundations/page-index.odoc 1018 1021 -P 1019 - jon-site:_odoc/jon-site 1022 + site:_odoc 1020 1023 -o 1021 - _odoc/jon-site/notebooks/foundations/page-foundations9.odocl) 1024 + _odoc/notebooks/foundations/page-index.odocl) 1022 1025 (run 1023 1026 odoc 1024 1027 link 1025 - _odoc/jon-site/notebooks/foundations/page-index.odoc 1028 + _odoc/notebooks/page-index.odoc 1026 1029 -P 1027 - jon-site:_odoc/jon-site 1030 + site:_odoc 1028 1031 -o 1029 - _odoc/jon-site/notebooks/foundations/page-index.odocl) 1032 + _odoc/notebooks/page-index.odocl) 1030 1033 (run 1031 1034 odoc 1032 1035 link 1033 - _odoc/jon-site/notebooks/page-index.odoc 1036 + _odoc/notebooks/oxcaml/page-local.odoc 1034 1037 -P 1035 - jon-site:_odoc/jon-site 1038 + site:_odoc 1036 1039 -o 1037 - _odoc/jon-site/notebooks/page-index.odocl) 1040 + _odoc/notebooks/oxcaml/page-local.odocl) 1038 1041 (run 1039 1042 odoc 1040 1043 link 1041 - _odoc/jon-site/notebooks/oxcaml/page-local.odoc 1044 + _odoc/projects/page-index.odoc 1042 1045 -P 1043 - jon-site:_odoc/jon-site 1046 + site:_odoc 1044 1047 -o 1045 - _odoc/jon-site/notebooks/oxcaml/page-local.odocl) 1048 + _odoc/projects/page-index.odocl) 1046 1049 (run 1047 1050 odoc 1048 1051 link 1049 - _odoc/jon-site/reference/page-index.odoc 1052 + _odoc/reference/page-index.odoc 1050 1053 -P 1051 - jon-site:_odoc/jon-site 1054 + site:_odoc 1055 + -o 1056 + _odoc/reference/page-index.odocl) 1057 + (run 1058 + odoc 1059 + compile-index 1060 + --root 1061 + site:_odoc 1052 1062 -o 1053 - _odoc/jon-site/reference/page-index.odocl)))) 1063 + _odoc/index.odoc-index 1064 + _odoc/blog/2025/03/page-code-block-metadata.odocl 1065 + _odoc/blog/2025/03/page-index.odocl 1066 + _odoc/blog/2025/03/page-module-type-of.odocl 1067 + _odoc/blog/2025/04/page-index.odocl 1068 + _odoc/blog/2025/04/page-meeting-the-team.odocl 1069 + _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl 1070 + _odoc/blog/2025/04/page-odoc-3.odocl 1071 + _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl 1072 + _odoc/blog/2025/04/page-this-site.odocl 1073 + _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl 1074 + _odoc/blog/2025/05/page-docs-progress.odocl 1075 + _odoc/blog/2025/05/page-index.odocl 1076 + _odoc/blog/2025/05/page-lots-of-things.odocl 1077 + _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl 1078 + _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl 1079 + _odoc/blog/2025/06/page-index.odocl 1080 + _odoc/blog/2025/06/page-week23.odocl 1081 + _odoc/blog/2025/07/page-index.odocl 1082 + _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl 1083 + _odoc/blog/2025/07/page-retrospective.odocl 1084 + _odoc/blog/2025/07/page-week27.odocl 1085 + _odoc/blog/2025/07/page-week28.odocl 1086 + _odoc/blog/2025/08/page-index.odocl 1087 + _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl 1088 + _odoc/blog/2025/08/page-ocaml-mcp-server.odocl 1089 + _odoc/blog/2025/08/page-week33.odocl 1090 + _odoc/blog/2025/09/page-build-ids-for-day10.odocl 1091 + _odoc/blog/2025/09/page-caching-opam-solutions.odocl 1092 + _odoc/blog/2025/09/page-caching-opam-solutions2.odocl 1093 + _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl 1094 + _odoc/blog/2025/09/page-index.odocl 1095 + _odoc/blog/2025/09/page-odoc-bugs.odocl 1096 + _odoc/blog/2025/11/page-foundations-of-computer-science.odocl 1097 + _odoc/blog/2025/11/page-index.odocl 1098 + _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl 1099 + _odoc/blog/2025/12/page-claude-and-dune.odocl 1100 + _odoc/blog/2025/12/page-index.odocl 1101 + _odoc/blog/2025/page-index.odocl 1102 + _odoc/blog/2026/01/page-index.odocl 1103 + _odoc/blog/2026/01/page-weeknotes-2026-03.odocl 1104 + _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl 1105 + _odoc/blog/2026/02/page-index.odocl 1106 + _odoc/blog/2026/02/page-weeknotes-2026-06.odocl 1107 + _odoc/blog/2026/page-index.odocl 1108 + _odoc/blog/page-index.odocl 1109 + _odoc/drafts/page-index.odocl 1110 + _odoc/page-index.odocl 1111 + _odoc/notebooks/foundations/page-foundations1.odocl 1112 + _odoc/notebooks/foundations/page-foundations10.odocl 1113 + _odoc/notebooks/foundations/page-foundations11.odocl 1114 + _odoc/notebooks/foundations/page-foundations2.odocl 1115 + _odoc/notebooks/foundations/page-foundations3.odocl 1116 + _odoc/notebooks/foundations/page-foundations4.odocl 1117 + _odoc/notebooks/foundations/page-foundations5.odocl 1118 + _odoc/notebooks/foundations/page-foundations6.odocl 1119 + _odoc/notebooks/foundations/page-foundations7.odocl 1120 + _odoc/notebooks/foundations/page-foundations8.odocl 1121 + _odoc/notebooks/foundations/page-foundations9.odocl 1122 + _odoc/notebooks/foundations/page-index.odocl 1123 + _odoc/notebooks/page-index.odocl 1124 + _odoc/notebooks/oxcaml/page-local.odocl 1125 + _odoc/projects/page-index.odocl 1126 + _odoc/reference/page-index.odocl) 1127 + (run 1128 + odoc 1129 + sidebar-generate 1130 + -o 1131 + _odoc/sidebar.odoc-sidebar 1132 + _odoc/index.odoc-index)))) 1054 1133 1055 1134 (rule 1056 1135 (target 1057 1136 (dir _html)) 1058 1137 (deps 1059 - _odoc/jon-site/blog/2025/03/page-code-block-metadata.odocl 1060 - _odoc/jon-site/blog/2025/03/page-index.odocl 1061 - _odoc/jon-site/blog/2025/03/page-module-type-of.odocl 1062 - _odoc/jon-site/blog/2025/04/page-index.odocl 1063 - _odoc/jon-site/blog/2025/04/page-meeting-the-team.odocl 1064 - _odoc/jon-site/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl 1065 - _odoc/jon-site/blog/2025/04/page-odoc-3.odocl 1066 - _odoc/jon-site/blog/2025/04/page-semantic-versioning-is-hard.odocl 1067 - _odoc/jon-site/blog/2025/04/page-this-site.odocl 1068 - _odoc/jon-site/blog/2025/05/page-ai-for-climate-and-nature-day.odocl 1069 - _odoc/jon-site/blog/2025/05/page-docs-progress.odocl 1070 - _odoc/jon-site/blog/2025/05/page-index.odocl 1071 - _odoc/jon-site/blog/2025/05/page-lots-of-things.odocl 1072 - _odoc/jon-site/blog/2025/05/page-oxcaml-gets-closer.odocl 1073 - _odoc/jon-site/blog/2025/05/page-ticks-solved-by-ai.odocl 1074 - _odoc/jon-site/blog/2025/06/page-index.odocl 1075 - _odoc/jon-site/blog/2025/06/page-week23.odocl 1076 - _odoc/jon-site/blog/2025/07/page-index.odocl 1077 - _odoc/jon-site/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl 1078 - _odoc/jon-site/blog/2025/07/page-retrospective.odocl 1079 - _odoc/jon-site/blog/2025/07/page-week27.odocl 1080 - _odoc/jon-site/blog/2025/07/page-week28.odocl 1081 - _odoc/jon-site/blog/2025/08/page-index.odocl 1082 - _odoc/jon-site/blog/2025/08/page-ocaml-lsp-mcp.odocl 1083 - _odoc/jon-site/blog/2025/08/page-ocaml-mcp-server.odocl 1084 - _odoc/jon-site/blog/2025/08/page-week33.odocl 1085 - _odoc/jon-site/blog/2025/09/page-build-ids-for-day10.odocl 1086 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions.odocl 1087 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions2.odocl 1088 - _odoc/jon-site/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl 1089 - _odoc/jon-site/blog/2025/09/page-index.odocl 1090 - _odoc/jon-site/blog/2025/09/page-odoc-bugs.odocl 1091 - _odoc/jon-site/blog/2025/11/page-foundations-of-computer-science.odocl 1092 - _odoc/jon-site/blog/2025/11/page-index.odocl 1093 - _odoc/jon-site/blog/2025/12/page-an-svg-is-all-you-need.odocl 1094 - _odoc/jon-site/blog/2025/12/page-claude-and-dune.odocl 1095 - _odoc/jon-site/blog/2025/12/page-index.odocl 1096 - _odoc/jon-site/blog/2025/page-index.odocl 1097 - _odoc/jon-site/blog/2026/01/page-index.odocl 1098 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-03.odocl 1099 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-04-05.odocl 1100 - _odoc/jon-site/blog/2026/02/page-index.odocl 1101 - _odoc/jon-site/blog/2026/02/page-weeknotes-2026-06.odocl 1102 - _odoc/jon-site/blog/2026/page-index.odocl 1103 - _odoc/jon-site/blog/page-index.odocl 1104 - _odoc/jon-site/drafts/page-index.odocl 1105 - _odoc/jon-site/page-index.odocl 1106 - _odoc/jon-site/notebooks/foundations/page-foundations1.odocl 1107 - _odoc/jon-site/notebooks/foundations/page-foundations10.odocl 1108 - _odoc/jon-site/notebooks/foundations/page-foundations11.odocl 1109 - _odoc/jon-site/notebooks/foundations/page-foundations2.odocl 1110 - _odoc/jon-site/notebooks/foundations/page-foundations3.odocl 1111 - _odoc/jon-site/notebooks/foundations/page-foundations4.odocl 1112 - _odoc/jon-site/notebooks/foundations/page-foundations5.odocl 1113 - _odoc/jon-site/notebooks/foundations/page-foundations6.odocl 1114 - _odoc/jon-site/notebooks/foundations/page-foundations7.odocl 1115 - _odoc/jon-site/notebooks/foundations/page-foundations8.odocl 1116 - _odoc/jon-site/notebooks/foundations/page-foundations9.odocl 1117 - _odoc/jon-site/notebooks/foundations/page-index.odocl 1118 - _odoc/jon-site/notebooks/page-index.odocl 1119 - _odoc/jon-site/notebooks/oxcaml/page-local.odocl 1120 - _odoc/jon-site/reference/page-index.odocl 1138 + _odoc/blog/2025/03/page-code-block-metadata.odocl 1139 + _odoc/blog/2025/03/page-index.odocl 1140 + _odoc/blog/2025/03/page-module-type-of.odocl 1141 + _odoc/blog/2025/04/page-index.odocl 1142 + _odoc/blog/2025/04/page-meeting-the-team.odocl 1143 + _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl 1144 + _odoc/blog/2025/04/page-odoc-3.odocl 1145 + _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl 1146 + _odoc/blog/2025/04/page-this-site.odocl 1147 + _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl 1148 + _odoc/blog/2025/05/page-docs-progress.odocl 1149 + _odoc/blog/2025/05/page-index.odocl 1150 + _odoc/blog/2025/05/page-lots-of-things.odocl 1151 + _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl 1152 + _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl 1153 + _odoc/blog/2025/06/page-index.odocl 1154 + _odoc/blog/2025/06/page-week23.odocl 1155 + _odoc/blog/2025/07/page-index.odocl 1156 + _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl 1157 + _odoc/blog/2025/07/page-retrospective.odocl 1158 + _odoc/blog/2025/07/page-week27.odocl 1159 + _odoc/blog/2025/07/page-week28.odocl 1160 + _odoc/blog/2025/08/page-index.odocl 1161 + _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl 1162 + _odoc/blog/2025/08/page-ocaml-mcp-server.odocl 1163 + _odoc/blog/2025/08/page-week33.odocl 1164 + _odoc/blog/2025/09/page-build-ids-for-day10.odocl 1165 + _odoc/blog/2025/09/page-caching-opam-solutions.odocl 1166 + _odoc/blog/2025/09/page-caching-opam-solutions2.odocl 1167 + _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl 1168 + _odoc/blog/2025/09/page-index.odocl 1169 + _odoc/blog/2025/09/page-odoc-bugs.odocl 1170 + _odoc/blog/2025/11/page-foundations-of-computer-science.odocl 1171 + _odoc/blog/2025/11/page-index.odocl 1172 + _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl 1173 + _odoc/blog/2025/12/page-claude-and-dune.odocl 1174 + _odoc/blog/2025/12/page-index.odocl 1175 + _odoc/blog/2025/page-index.odocl 1176 + _odoc/blog/2026/01/page-index.odocl 1177 + _odoc/blog/2026/01/page-weeknotes-2026-03.odocl 1178 + _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl 1179 + _odoc/blog/2026/02/page-index.odocl 1180 + _odoc/blog/2026/02/page-weeknotes-2026-06.odocl 1181 + _odoc/blog/2026/page-index.odocl 1182 + _odoc/blog/page-index.odocl 1183 + _odoc/drafts/page-index.odocl 1184 + _odoc/page-index.odocl 1185 + _odoc/notebooks/foundations/page-foundations1.odocl 1186 + _odoc/notebooks/foundations/page-foundations10.odocl 1187 + _odoc/notebooks/foundations/page-foundations11.odocl 1188 + _odoc/notebooks/foundations/page-foundations2.odocl 1189 + _odoc/notebooks/foundations/page-foundations3.odocl 1190 + _odoc/notebooks/foundations/page-foundations4.odocl 1191 + _odoc/notebooks/foundations/page-foundations5.odocl 1192 + _odoc/notebooks/foundations/page-foundations6.odocl 1193 + _odoc/notebooks/foundations/page-foundations7.odocl 1194 + _odoc/notebooks/foundations/page-foundations8.odocl 1195 + _odoc/notebooks/foundations/page-foundations9.odocl 1196 + _odoc/notebooks/foundations/page-index.odocl 1197 + _odoc/notebooks/page-index.odocl 1198 + _odoc/notebooks/oxcaml/page-local.odocl 1199 + _odoc/projects/page-index.odocl 1200 + _odoc/reference/page-index.odocl 1201 + _odoc/sidebar.odoc-sidebar 1121 1202 static/assets/jon.jpg) 1122 1203 (action 1123 1204 (progn ··· 1126 1207 html-generate 1127 1208 --shell 1128 1209 jon-shell 1210 + --sidebar 1211 + _odoc/sidebar.odoc-sidebar 1129 1212 -o 1130 1213 _html 1131 - _odoc/jon-site/blog/2025/03/page-code-block-metadata.odocl) 1214 + _odoc/blog/2025/03/page-code-block-metadata.odocl) 1132 1215 (run 1133 1216 odoc 1134 1217 html-generate 1135 1218 --shell 1136 1219 jon-shell 1220 + --sidebar 1221 + _odoc/sidebar.odoc-sidebar 1137 1222 -o 1138 1223 _html 1139 - _odoc/jon-site/blog/2025/03/page-index.odocl) 1224 + _odoc/blog/2025/03/page-index.odocl) 1140 1225 (run 1141 1226 odoc 1142 1227 html-generate 1143 1228 --shell 1144 1229 jon-shell 1230 + --sidebar 1231 + _odoc/sidebar.odoc-sidebar 1145 1232 -o 1146 1233 _html 1147 - _odoc/jon-site/blog/2025/03/page-module-type-of.odocl) 1234 + _odoc/blog/2025/03/page-module-type-of.odocl) 1148 1235 (run 1149 1236 odoc 1150 1237 html-generate 1151 1238 --shell 1152 1239 jon-shell 1240 + --sidebar 1241 + _odoc/sidebar.odoc-sidebar 1153 1242 -o 1154 1243 _html 1155 - _odoc/jon-site/blog/2025/04/page-index.odocl) 1244 + _odoc/blog/2025/04/page-index.odocl) 1156 1245 (run 1157 1246 odoc 1158 1247 html-generate 1159 1248 --shell 1160 1249 jon-shell 1250 + --sidebar 1251 + _odoc/sidebar.odoc-sidebar 1161 1252 -o 1162 1253 _html 1163 - _odoc/jon-site/blog/2025/04/page-meeting-the-team.odocl) 1254 + _odoc/blog/2025/04/page-meeting-the-team.odocl) 1164 1255 (run 1165 1256 odoc 1166 1257 html-generate 1167 1258 --shell 1168 1259 jon-shell 1260 + --sidebar 1261 + _odoc/sidebar.odoc-sidebar 1169 1262 -o 1170 1263 _html 1171 - _odoc/jon-site/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl) 1264 + _odoc/blog/2025/04/page-ocaml-docs-ci-and-odoc-3.odocl) 1172 1265 (run 1173 1266 odoc 1174 1267 html-generate 1175 1268 --shell 1176 1269 jon-shell 1270 + --sidebar 1271 + _odoc/sidebar.odoc-sidebar 1177 1272 -o 1178 1273 _html 1179 - _odoc/jon-site/blog/2025/04/page-odoc-3.odocl) 1274 + _odoc/blog/2025/04/page-odoc-3.odocl) 1180 1275 (run 1181 1276 odoc 1182 1277 html-generate 1183 1278 --shell 1184 1279 jon-shell 1280 + --sidebar 1281 + _odoc/sidebar.odoc-sidebar 1185 1282 -o 1186 1283 _html 1187 - _odoc/jon-site/blog/2025/04/page-semantic-versioning-is-hard.odocl) 1284 + _odoc/blog/2025/04/page-semantic-versioning-is-hard.odocl) 1188 1285 (run 1189 1286 odoc 1190 1287 html-generate 1191 1288 --shell 1192 1289 jon-shell 1290 + --sidebar 1291 + _odoc/sidebar.odoc-sidebar 1193 1292 -o 1194 1293 _html 1195 - _odoc/jon-site/blog/2025/04/page-this-site.odocl) 1294 + _odoc/blog/2025/04/page-this-site.odocl) 1196 1295 (run 1197 1296 odoc 1198 1297 html-generate 1199 1298 --shell 1200 1299 jon-shell 1300 + --sidebar 1301 + _odoc/sidebar.odoc-sidebar 1201 1302 -o 1202 1303 _html 1203 - _odoc/jon-site/blog/2025/05/page-ai-for-climate-and-nature-day.odocl) 1304 + _odoc/blog/2025/05/page-ai-for-climate-and-nature-day.odocl) 1204 1305 (run 1205 1306 odoc 1206 1307 html-generate 1207 1308 --shell 1208 1309 jon-shell 1310 + --sidebar 1311 + _odoc/sidebar.odoc-sidebar 1209 1312 -o 1210 1313 _html 1211 - _odoc/jon-site/blog/2025/05/page-docs-progress.odocl) 1314 + _odoc/blog/2025/05/page-docs-progress.odocl) 1212 1315 (run 1213 1316 odoc 1214 1317 html-generate 1215 1318 --shell 1216 1319 jon-shell 1320 + --sidebar 1321 + _odoc/sidebar.odoc-sidebar 1217 1322 -o 1218 1323 _html 1219 - _odoc/jon-site/blog/2025/05/page-index.odocl) 1324 + _odoc/blog/2025/05/page-index.odocl) 1220 1325 (run 1221 1326 odoc 1222 1327 html-generate 1223 1328 --shell 1224 1329 jon-shell 1330 + --sidebar 1331 + _odoc/sidebar.odoc-sidebar 1225 1332 -o 1226 1333 _html 1227 - _odoc/jon-site/blog/2025/05/page-lots-of-things.odocl) 1334 + _odoc/blog/2025/05/page-lots-of-things.odocl) 1228 1335 (run 1229 1336 odoc 1230 1337 html-generate 1231 1338 --shell 1232 1339 jon-shell 1340 + --sidebar 1341 + _odoc/sidebar.odoc-sidebar 1233 1342 -o 1234 1343 _html 1235 - _odoc/jon-site/blog/2025/05/page-oxcaml-gets-closer.odocl) 1344 + _odoc/blog/2025/05/page-oxcaml-gets-closer.odocl) 1236 1345 (run 1237 1346 odoc 1238 1347 html-generate 1239 1348 --shell 1240 1349 jon-shell 1350 + --sidebar 1351 + _odoc/sidebar.odoc-sidebar 1241 1352 -o 1242 1353 _html 1243 - _odoc/jon-site/blog/2025/05/page-ticks-solved-by-ai.odocl) 1354 + _odoc/blog/2025/05/page-ticks-solved-by-ai.odocl) 1244 1355 (run 1245 1356 odoc 1246 1357 html-generate 1247 1358 --shell 1248 1359 jon-shell 1360 + --sidebar 1361 + _odoc/sidebar.odoc-sidebar 1249 1362 -o 1250 1363 _html 1251 - _odoc/jon-site/blog/2025/06/page-index.odocl) 1364 + _odoc/blog/2025/06/page-index.odocl) 1252 1365 (run 1253 1366 odoc 1254 1367 html-generate 1255 1368 --shell 1256 1369 jon-shell 1370 + --sidebar 1371 + _odoc/sidebar.odoc-sidebar 1257 1372 -o 1258 1373 _html 1259 - _odoc/jon-site/blog/2025/06/page-week23.odocl) 1374 + _odoc/blog/2025/06/page-week23.odocl) 1260 1375 (run 1261 1376 odoc 1262 1377 html-generate 1263 1378 --shell 1264 1379 jon-shell 1380 + --sidebar 1381 + _odoc/sidebar.odoc-sidebar 1265 1382 -o 1266 1383 _html 1267 - _odoc/jon-site/blog/2025/07/page-index.odocl) 1384 + _odoc/blog/2025/07/page-index.odocl) 1268 1385 (run 1269 1386 odoc 1270 1387 html-generate 1271 1388 --shell 1272 1389 jon-shell 1390 + --sidebar 1391 + _odoc/sidebar.odoc-sidebar 1273 1392 -o 1274 1393 _html 1275 - _odoc/jon-site/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl) 1394 + _odoc/blog/2025/07/page-odoc-3-live-on-ocaml-org.odocl) 1276 1395 (run 1277 1396 odoc 1278 1397 html-generate 1279 1398 --shell 1280 1399 jon-shell 1400 + --sidebar 1401 + _odoc/sidebar.odoc-sidebar 1281 1402 -o 1282 1403 _html 1283 - _odoc/jon-site/blog/2025/07/page-retrospective.odocl) 1404 + _odoc/blog/2025/07/page-retrospective.odocl) 1284 1405 (run 1285 1406 odoc 1286 1407 html-generate 1287 1408 --shell 1288 1409 jon-shell 1410 + --sidebar 1411 + _odoc/sidebar.odoc-sidebar 1289 1412 -o 1290 1413 _html 1291 - _odoc/jon-site/blog/2025/07/page-week27.odocl) 1414 + _odoc/blog/2025/07/page-week27.odocl) 1292 1415 (run 1293 1416 odoc 1294 1417 html-generate 1295 1418 --shell 1296 1419 jon-shell 1420 + --sidebar 1421 + _odoc/sidebar.odoc-sidebar 1297 1422 -o 1298 1423 _html 1299 - _odoc/jon-site/blog/2025/07/page-week28.odocl) 1424 + _odoc/blog/2025/07/page-week28.odocl) 1300 1425 (run 1301 1426 odoc 1302 1427 html-generate 1303 1428 --shell 1304 1429 jon-shell 1430 + --sidebar 1431 + _odoc/sidebar.odoc-sidebar 1305 1432 -o 1306 1433 _html 1307 - _odoc/jon-site/blog/2025/08/page-index.odocl) 1434 + _odoc/blog/2025/08/page-index.odocl) 1308 1435 (run 1309 1436 odoc 1310 1437 html-generate 1311 1438 --shell 1312 1439 jon-shell 1440 + --sidebar 1441 + _odoc/sidebar.odoc-sidebar 1313 1442 -o 1314 1443 _html 1315 - _odoc/jon-site/blog/2025/08/page-ocaml-lsp-mcp.odocl) 1444 + _odoc/blog/2025/08/page-ocaml-lsp-mcp.odocl) 1316 1445 (run 1317 1446 odoc 1318 1447 html-generate 1319 1448 --shell 1320 1449 jon-shell 1450 + --sidebar 1451 + _odoc/sidebar.odoc-sidebar 1321 1452 -o 1322 1453 _html 1323 - _odoc/jon-site/blog/2025/08/page-ocaml-mcp-server.odocl) 1454 + _odoc/blog/2025/08/page-ocaml-mcp-server.odocl) 1324 1455 (run 1325 1456 odoc 1326 1457 html-generate 1327 1458 --shell 1328 1459 jon-shell 1460 + --sidebar 1461 + _odoc/sidebar.odoc-sidebar 1329 1462 -o 1330 1463 _html 1331 - _odoc/jon-site/blog/2025/08/page-week33.odocl) 1464 + _odoc/blog/2025/08/page-week33.odocl) 1332 1465 (run 1333 1466 odoc 1334 1467 html-generate 1335 1468 --shell 1336 1469 jon-shell 1470 + --sidebar 1471 + _odoc/sidebar.odoc-sidebar 1337 1472 -o 1338 1473 _html 1339 - _odoc/jon-site/blog/2025/09/page-build-ids-for-day10.odocl) 1474 + _odoc/blog/2025/09/page-build-ids-for-day10.odocl) 1340 1475 (run 1341 1476 odoc 1342 1477 html-generate 1343 1478 --shell 1344 1479 jon-shell 1480 + --sidebar 1481 + _odoc/sidebar.odoc-sidebar 1345 1482 -o 1346 1483 _html 1347 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions.odocl) 1484 + _odoc/blog/2025/09/page-caching-opam-solutions.odocl) 1348 1485 (run 1349 1486 odoc 1350 1487 html-generate 1351 1488 --shell 1352 1489 jon-shell 1490 + --sidebar 1491 + _odoc/sidebar.odoc-sidebar 1353 1492 -o 1354 1493 _html 1355 - _odoc/jon-site/blog/2025/09/page-caching-opam-solutions2.odocl) 1494 + _odoc/blog/2025/09/page-caching-opam-solutions2.odocl) 1356 1495 (run 1357 1496 odoc 1358 1497 html-generate 1359 1498 --shell 1360 1499 jon-shell 1500 + --sidebar 1501 + _odoc/sidebar.odoc-sidebar 1361 1502 -o 1362 1503 _html 1363 - _odoc/jon-site/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl) 1504 + _odoc/blog/2025/09/page-giving-hub-cl-an-upgrade.odocl) 1364 1505 (run 1365 1506 odoc 1366 1507 html-generate 1367 1508 --shell 1368 1509 jon-shell 1510 + --sidebar 1511 + _odoc/sidebar.odoc-sidebar 1369 1512 -o 1370 1513 _html 1371 - _odoc/jon-site/blog/2025/09/page-index.odocl) 1514 + _odoc/blog/2025/09/page-index.odocl) 1372 1515 (run 1373 1516 odoc 1374 1517 html-generate 1375 1518 --shell 1376 1519 jon-shell 1520 + --sidebar 1521 + _odoc/sidebar.odoc-sidebar 1377 1522 -o 1378 1523 _html 1379 - _odoc/jon-site/blog/2025/09/page-odoc-bugs.odocl) 1524 + _odoc/blog/2025/09/page-odoc-bugs.odocl) 1380 1525 (run 1381 1526 odoc 1382 1527 html-generate 1383 1528 --shell 1384 1529 jon-shell 1530 + --sidebar 1531 + _odoc/sidebar.odoc-sidebar 1385 1532 -o 1386 1533 _html 1387 - _odoc/jon-site/blog/2025/11/page-foundations-of-computer-science.odocl) 1534 + _odoc/blog/2025/11/page-foundations-of-computer-science.odocl) 1388 1535 (run 1389 1536 odoc 1390 1537 html-generate 1391 1538 --shell 1392 1539 jon-shell 1540 + --sidebar 1541 + _odoc/sidebar.odoc-sidebar 1393 1542 -o 1394 1543 _html 1395 - _odoc/jon-site/blog/2025/11/page-index.odocl) 1544 + _odoc/blog/2025/11/page-index.odocl) 1396 1545 (run 1397 1546 odoc 1398 1547 html-generate 1399 1548 --shell 1400 1549 jon-shell 1550 + --sidebar 1551 + _odoc/sidebar.odoc-sidebar 1401 1552 -o 1402 1553 _html 1403 - _odoc/jon-site/blog/2025/12/page-an-svg-is-all-you-need.odocl) 1554 + _odoc/blog/2025/12/page-an-svg-is-all-you-need.odocl) 1404 1555 (run 1405 1556 odoc 1406 1557 html-generate 1407 1558 --shell 1408 1559 jon-shell 1560 + --sidebar 1561 + _odoc/sidebar.odoc-sidebar 1409 1562 -o 1410 1563 _html 1411 - _odoc/jon-site/blog/2025/12/page-claude-and-dune.odocl) 1564 + _odoc/blog/2025/12/page-claude-and-dune.odocl) 1412 1565 (run 1413 1566 odoc 1414 1567 html-generate 1415 1568 --shell 1416 1569 jon-shell 1570 + --sidebar 1571 + _odoc/sidebar.odoc-sidebar 1417 1572 -o 1418 1573 _html 1419 - _odoc/jon-site/blog/2025/12/page-index.odocl) 1574 + _odoc/blog/2025/12/page-index.odocl) 1420 1575 (run 1421 1576 odoc 1422 1577 html-generate 1423 1578 --shell 1424 1579 jon-shell 1580 + --sidebar 1581 + _odoc/sidebar.odoc-sidebar 1425 1582 -o 1426 1583 _html 1427 - _odoc/jon-site/blog/2025/page-index.odocl) 1584 + _odoc/blog/2025/page-index.odocl) 1428 1585 (run 1429 1586 odoc 1430 1587 html-generate 1431 1588 --shell 1432 1589 jon-shell 1590 + --sidebar 1591 + _odoc/sidebar.odoc-sidebar 1433 1592 -o 1434 1593 _html 1435 - _odoc/jon-site/blog/2026/01/page-index.odocl) 1594 + _odoc/blog/2026/01/page-index.odocl) 1436 1595 (run 1437 1596 odoc 1438 1597 html-generate 1439 1598 --shell 1440 1599 jon-shell 1600 + --sidebar 1601 + _odoc/sidebar.odoc-sidebar 1441 1602 -o 1442 1603 _html 1443 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-03.odocl) 1604 + _odoc/blog/2026/01/page-weeknotes-2026-03.odocl) 1444 1605 (run 1445 1606 odoc 1446 1607 html-generate 1447 1608 --shell 1448 1609 jon-shell 1610 + --sidebar 1611 + _odoc/sidebar.odoc-sidebar 1449 1612 -o 1450 1613 _html 1451 - _odoc/jon-site/blog/2026/01/page-weeknotes-2026-04-05.odocl) 1614 + _odoc/blog/2026/01/page-weeknotes-2026-04-05.odocl) 1452 1615 (run 1453 1616 odoc 1454 1617 html-generate 1455 1618 --shell 1456 1619 jon-shell 1620 + --sidebar 1621 + _odoc/sidebar.odoc-sidebar 1457 1622 -o 1458 1623 _html 1459 - _odoc/jon-site/blog/2026/02/page-index.odocl) 1624 + _odoc/blog/2026/02/page-index.odocl) 1460 1625 (run 1461 1626 odoc 1462 1627 html-generate 1463 1628 --shell 1464 1629 jon-shell 1630 + --sidebar 1631 + _odoc/sidebar.odoc-sidebar 1465 1632 -o 1466 1633 _html 1467 - _odoc/jon-site/blog/2026/02/page-weeknotes-2026-06.odocl) 1634 + _odoc/blog/2026/02/page-weeknotes-2026-06.odocl) 1468 1635 (run 1469 1636 odoc 1470 1637 html-generate 1471 1638 --shell 1472 1639 jon-shell 1640 + --sidebar 1641 + _odoc/sidebar.odoc-sidebar 1473 1642 -o 1474 1643 _html 1475 - _odoc/jon-site/blog/2026/page-index.odocl) 1644 + _odoc/blog/2026/page-index.odocl) 1476 1645 (run 1477 1646 odoc 1478 1647 html-generate 1479 1648 --shell 1480 1649 jon-shell 1650 + --sidebar 1651 + _odoc/sidebar.odoc-sidebar 1481 1652 -o 1482 1653 _html 1483 - _odoc/jon-site/blog/page-index.odocl) 1654 + _odoc/blog/page-index.odocl) 1484 1655 (run 1485 1656 odoc 1486 1657 html-generate 1487 1658 --shell 1488 1659 jon-shell 1660 + --sidebar 1661 + _odoc/sidebar.odoc-sidebar 1489 1662 -o 1490 1663 _html 1491 - _odoc/jon-site/drafts/page-index.odocl) 1664 + _odoc/drafts/page-index.odocl) 1492 1665 (run 1493 1666 odoc 1494 1667 html-generate 1495 1668 --shell 1496 1669 jon-shell 1670 + --sidebar 1671 + _odoc/sidebar.odoc-sidebar 1497 1672 -o 1498 1673 _html 1499 - _odoc/jon-site/page-index.odocl) 1674 + _odoc/page-index.odocl) 1500 1675 (run 1501 1676 odoc 1502 1677 html-generate 1503 1678 --shell 1504 1679 jon-shell 1680 + --sidebar 1681 + _odoc/sidebar.odoc-sidebar 1505 1682 -o 1506 1683 _html 1507 - _odoc/jon-site/notebooks/foundations/page-foundations1.odocl) 1684 + _odoc/notebooks/foundations/page-foundations1.odocl) 1508 1685 (run 1509 1686 odoc 1510 1687 html-generate 1511 1688 --shell 1512 1689 jon-shell 1690 + --sidebar 1691 + _odoc/sidebar.odoc-sidebar 1513 1692 -o 1514 1693 _html 1515 - _odoc/jon-site/notebooks/foundations/page-foundations10.odocl) 1694 + _odoc/notebooks/foundations/page-foundations10.odocl) 1516 1695 (run 1517 1696 odoc 1518 1697 html-generate 1519 1698 --shell 1520 1699 jon-shell 1700 + --sidebar 1701 + _odoc/sidebar.odoc-sidebar 1521 1702 -o 1522 1703 _html 1523 - _odoc/jon-site/notebooks/foundations/page-foundations11.odocl) 1704 + _odoc/notebooks/foundations/page-foundations11.odocl) 1524 1705 (run 1525 1706 odoc 1526 1707 html-generate 1527 1708 --shell 1528 1709 jon-shell 1710 + --sidebar 1711 + _odoc/sidebar.odoc-sidebar 1529 1712 -o 1530 1713 _html 1531 - _odoc/jon-site/notebooks/foundations/page-foundations2.odocl) 1714 + _odoc/notebooks/foundations/page-foundations2.odocl) 1532 1715 (run 1533 1716 odoc 1534 1717 html-generate 1535 1718 --shell 1536 1719 jon-shell 1720 + --sidebar 1721 + _odoc/sidebar.odoc-sidebar 1537 1722 -o 1538 1723 _html 1539 - _odoc/jon-site/notebooks/foundations/page-foundations3.odocl) 1724 + _odoc/notebooks/foundations/page-foundations3.odocl) 1540 1725 (run 1541 1726 odoc 1542 1727 html-generate 1543 1728 --shell 1544 1729 jon-shell 1730 + --sidebar 1731 + _odoc/sidebar.odoc-sidebar 1545 1732 -o 1546 1733 _html 1547 - _odoc/jon-site/notebooks/foundations/page-foundations4.odocl) 1734 + _odoc/notebooks/foundations/page-foundations4.odocl) 1548 1735 (run 1549 1736 odoc 1550 1737 html-generate 1551 1738 --shell 1552 1739 jon-shell 1740 + --sidebar 1741 + _odoc/sidebar.odoc-sidebar 1553 1742 -o 1554 1743 _html 1555 - _odoc/jon-site/notebooks/foundations/page-foundations5.odocl) 1744 + _odoc/notebooks/foundations/page-foundations5.odocl) 1556 1745 (run 1557 1746 odoc 1558 1747 html-generate 1559 1748 --shell 1560 1749 jon-shell 1750 + --sidebar 1751 + _odoc/sidebar.odoc-sidebar 1561 1752 -o 1562 1753 _html 1563 - _odoc/jon-site/notebooks/foundations/page-foundations6.odocl) 1754 + _odoc/notebooks/foundations/page-foundations6.odocl) 1564 1755 (run 1565 1756 odoc 1566 1757 html-generate 1567 1758 --shell 1568 1759 jon-shell 1760 + --sidebar 1761 + _odoc/sidebar.odoc-sidebar 1569 1762 -o 1570 1763 _html 1571 - _odoc/jon-site/notebooks/foundations/page-foundations7.odocl) 1764 + _odoc/notebooks/foundations/page-foundations7.odocl) 1765 + (run 1766 + odoc 1767 + html-generate 1768 + --shell 1769 + jon-shell 1770 + --sidebar 1771 + _odoc/sidebar.odoc-sidebar 1772 + -o 1773 + _html 1774 + _odoc/notebooks/foundations/page-foundations8.odocl) 1572 1775 (run 1573 1776 odoc 1574 1777 html-generate 1575 1778 --shell 1576 1779 jon-shell 1780 + --sidebar 1781 + _odoc/sidebar.odoc-sidebar 1577 1782 -o 1578 1783 _html 1579 - _odoc/jon-site/notebooks/foundations/page-foundations8.odocl) 1784 + _odoc/notebooks/foundations/page-foundations9.odocl) 1580 1785 (run 1581 1786 odoc 1582 1787 html-generate 1583 1788 --shell 1584 1789 jon-shell 1790 + --sidebar 1791 + _odoc/sidebar.odoc-sidebar 1585 1792 -o 1586 1793 _html 1587 - _odoc/jon-site/notebooks/foundations/page-foundations9.odocl) 1794 + _odoc/notebooks/foundations/page-index.odocl) 1588 1795 (run 1589 1796 odoc 1590 1797 html-generate 1591 1798 --shell 1592 1799 jon-shell 1800 + --sidebar 1801 + _odoc/sidebar.odoc-sidebar 1593 1802 -o 1594 1803 _html 1595 - _odoc/jon-site/notebooks/foundations/page-index.odocl) 1804 + _odoc/notebooks/page-index.odocl) 1596 1805 (run 1597 1806 odoc 1598 1807 html-generate 1599 1808 --shell 1600 1809 jon-shell 1810 + --sidebar 1811 + _odoc/sidebar.odoc-sidebar 1601 1812 -o 1602 1813 _html 1603 - _odoc/jon-site/notebooks/page-index.odocl) 1814 + _odoc/notebooks/oxcaml/page-local.odocl) 1604 1815 (run 1605 1816 odoc 1606 1817 html-generate 1607 1818 --shell 1608 1819 jon-shell 1820 + --sidebar 1821 + _odoc/sidebar.odoc-sidebar 1609 1822 -o 1610 1823 _html 1611 - _odoc/jon-site/notebooks/oxcaml/page-local.odocl) 1824 + _odoc/projects/page-index.odocl) 1612 1825 (run 1613 1826 odoc 1614 1827 html-generate 1615 1828 --shell 1616 1829 jon-shell 1830 + --sidebar 1831 + _odoc/sidebar.odoc-sidebar 1617 1832 -o 1618 1833 _html 1619 - _odoc/jon-site/reference/page-index.odocl) 1834 + _odoc/reference/page-index.odocl) 1620 1835 (run odoc support-files -o _html) 1621 1836 (system 1622 - "mkdir -p $(dirname _html/jon-site/static/assets/jon.jpg) && cp static/assets/jon.jpg _html/jon-site/static/assets/jon.jpg")))) 1837 + "mkdir -p $(dirname _html/static/assets/jon.jpg) && cp static/assets/jon.jpg _html/static/assets/jon.jpg")))) 1623 1838 1624 1839 (alias 1625 1840 (name site) 1626 1841 (deps 1627 - _html/jon-site/blog/2025/03/code-block-metadata.html 1628 - _html/jon-site/blog/2025/03/index.html 1629 - _html/jon-site/blog/2025/03/module-type-of.html 1630 - _html/jon-site/blog/2025/04/index.html 1631 - _html/jon-site/blog/2025/04/meeting-the-team.html 1632 - _html/jon-site/blog/2025/04/ocaml-docs-ci-and-odoc-3.html 1633 - _html/jon-site/blog/2025/04/odoc-3.html 1634 - _html/jon-site/blog/2025/04/semantic-versioning-is-hard.html 1635 - _html/jon-site/blog/2025/04/this-site.html 1636 - _html/jon-site/blog/2025/05/ai-for-climate-and-nature-day.html 1637 - _html/jon-site/blog/2025/05/docs-progress.html 1638 - _html/jon-site/blog/2025/05/index.html 1639 - _html/jon-site/blog/2025/05/lots-of-things.html 1640 - _html/jon-site/blog/2025/05/oxcaml-gets-closer.html 1641 - _html/jon-site/blog/2025/05/ticks-solved-by-ai.html 1642 - _html/jon-site/blog/2025/06/index.html 1643 - _html/jon-site/blog/2025/06/week23.html 1644 - _html/jon-site/blog/2025/07/index.html 1645 - _html/jon-site/blog/2025/07/odoc-3-live-on-ocaml-org.html 1646 - _html/jon-site/blog/2025/07/retrospective.html 1647 - _html/jon-site/blog/2025/07/week27.html 1648 - _html/jon-site/blog/2025/07/week28.html 1649 - _html/jon-site/blog/2025/08/index.html 1650 - _html/jon-site/blog/2025/08/ocaml-lsp-mcp.html 1651 - _html/jon-site/blog/2025/08/ocaml-mcp-server.html 1652 - _html/jon-site/blog/2025/08/week33.html 1653 - _html/jon-site/blog/2025/09/build-ids-for-day10.html 1654 - _html/jon-site/blog/2025/09/caching-opam-solutions.html 1655 - _html/jon-site/blog/2025/09/caching-opam-solutions2.html 1656 - _html/jon-site/blog/2025/09/giving-hub-cl-an-upgrade.html 1657 - _html/jon-site/blog/2025/09/index.html 1658 - _html/jon-site/blog/2025/09/odoc-bugs.html 1659 - _html/jon-site/blog/2025/11/foundations-of-computer-science.html 1660 - _html/jon-site/blog/2025/11/index.html 1661 - _html/jon-site/blog/2025/12/an-svg-is-all-you-need.html 1662 - _html/jon-site/blog/2025/12/claude-and-dune.html 1663 - _html/jon-site/blog/2025/12/index.html 1664 - _html/jon-site/blog/2025/index.html 1665 - _html/jon-site/blog/2026/01/index.html 1666 - _html/jon-site/blog/2026/01/weeknotes-2026-03.html 1667 - _html/jon-site/blog/2026/01/weeknotes-2026-04-05.html 1668 - _html/jon-site/blog/2026/02/index.html 1669 - _html/jon-site/blog/2026/02/weeknotes-2026-06.html 1670 - _html/jon-site/blog/2026/index.html 1671 - _html/jon-site/blog/index.html 1672 - _html/jon-site/drafts/index.html 1673 - _html/jon-site/index.html 1674 - _html/jon-site/notebooks/foundations/foundations1.html 1675 - _html/jon-site/notebooks/foundations/foundations10.html 1676 - _html/jon-site/notebooks/foundations/foundations11.html 1677 - _html/jon-site/notebooks/foundations/foundations2.html 1678 - _html/jon-site/notebooks/foundations/foundations3.html 1679 - _html/jon-site/notebooks/foundations/foundations4.html 1680 - _html/jon-site/notebooks/foundations/foundations5.html 1681 - _html/jon-site/notebooks/foundations/foundations6.html 1682 - _html/jon-site/notebooks/foundations/foundations7.html 1683 - _html/jon-site/notebooks/foundations/foundations8.html 1684 - _html/jon-site/notebooks/foundations/foundations9.html 1685 - _html/jon-site/notebooks/foundations/index.html 1686 - _html/jon-site/notebooks/index.html 1687 - _html/jon-site/notebooks/oxcaml/local.html 1688 - _html/jon-site/reference/index.html 1689 - _html/jon-site/static/assets/jon.jpg)) 1842 + _html/blog/2025/03/code-block-metadata.html 1843 + _html/blog/2025/03/index.html 1844 + _html/blog/2025/03/module-type-of.html 1845 + _html/blog/2025/04/index.html 1846 + _html/blog/2025/04/meeting-the-team.html 1847 + _html/blog/2025/04/ocaml-docs-ci-and-odoc-3.html 1848 + _html/blog/2025/04/odoc-3.html 1849 + _html/blog/2025/04/semantic-versioning-is-hard.html 1850 + _html/blog/2025/04/this-site.html 1851 + _html/blog/2025/05/ai-for-climate-and-nature-day.html 1852 + _html/blog/2025/05/docs-progress.html 1853 + _html/blog/2025/05/index.html 1854 + _html/blog/2025/05/lots-of-things.html 1855 + _html/blog/2025/05/oxcaml-gets-closer.html 1856 + _html/blog/2025/05/ticks-solved-by-ai.html 1857 + _html/blog/2025/06/index.html 1858 + _html/blog/2025/06/week23.html 1859 + _html/blog/2025/07/index.html 1860 + _html/blog/2025/07/odoc-3-live-on-ocaml-org.html 1861 + _html/blog/2025/07/retrospective.html 1862 + _html/blog/2025/07/week27.html 1863 + _html/blog/2025/07/week28.html 1864 + _html/blog/2025/08/index.html 1865 + _html/blog/2025/08/ocaml-lsp-mcp.html 1866 + _html/blog/2025/08/ocaml-mcp-server.html 1867 + _html/blog/2025/08/week33.html 1868 + _html/blog/2025/09/build-ids-for-day10.html 1869 + _html/blog/2025/09/caching-opam-solutions.html 1870 + _html/blog/2025/09/caching-opam-solutions2.html 1871 + _html/blog/2025/09/giving-hub-cl-an-upgrade.html 1872 + _html/blog/2025/09/index.html 1873 + _html/blog/2025/09/odoc-bugs.html 1874 + _html/blog/2025/11/foundations-of-computer-science.html 1875 + _html/blog/2025/11/index.html 1876 + _html/blog/2025/12/an-svg-is-all-you-need.html 1877 + _html/blog/2025/12/claude-and-dune.html 1878 + _html/blog/2025/12/index.html 1879 + _html/blog/2025/index.html 1880 + _html/blog/2026/01/index.html 1881 + _html/blog/2026/01/weeknotes-2026-03.html 1882 + _html/blog/2026/01/weeknotes-2026-04-05.html 1883 + _html/blog/2026/02/index.html 1884 + _html/blog/2026/02/weeknotes-2026-06.html 1885 + _html/blog/2026/index.html 1886 + _html/blog/index.html 1887 + _html/drafts/index.html 1888 + _html/index.html 1889 + _html/notebooks/foundations/foundations1.html 1890 + _html/notebooks/foundations/foundations10.html 1891 + _html/notebooks/foundations/foundations11.html 1892 + _html/notebooks/foundations/foundations2.html 1893 + _html/notebooks/foundations/foundations3.html 1894 + _html/notebooks/foundations/foundations4.html 1895 + _html/notebooks/foundations/foundations5.html 1896 + _html/notebooks/foundations/foundations6.html 1897 + _html/notebooks/foundations/foundations7.html 1898 + _html/notebooks/foundations/foundations8.html 1899 + _html/notebooks/foundations/foundations9.html 1900 + _html/notebooks/foundations/index.html 1901 + _html/notebooks/index.html 1902 + _html/notebooks/oxcaml/local.html 1903 + _html/projects/index.html 1904 + _html/reference/index.html 1905 + _html/static/assets/jon.jpg))
+1
site/notebooks/index.mld
··· 1 1 {0 Notebooks} 2 + @children_order foundations/ oxcaml/ 2 3 3 4 Here you will find some odoc notebooks that I'm currently testing 4 5
+3
site/projects/index.mld
··· 1 + {0 Projects} 2 + 3 + Coming soon.