A fork of mtelver's day10 project

OxCaml compat: cppo preprocessing, version guards, and new exercises

- Add cppo preprocessing for merlin-js and x-ocaml workers to support
conditional compilation with OXCAML flag
- Guard day10 packages with enabled_if >= 5.3.0 since they need recent OCaml
- Remove fatal odoc warnings from dune-workspace (handled per-package now)
- Bump merlin-js dune lang to 3.17
- Add warning suppression flags where needed (-w -58, -w -67)
- Add interactive extension exercise pages (FOCS 2020/2024/2025, OxCaml
stack allocation)

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

+14
+1
analysis/dune
··· 1 (executables 2 (names universe_compat real_world conflict_analysis) 3 (libraries unix))
··· 1 (executables 2 (names universe_compat real_world conflict_analysis) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (libraries unix))
+1
bin/dune
··· 1 (executable 2 (public_name day10) 3 (name main) 4 (package day10) 5 (libraries opam-0install yojson ppx_deriving_yojson.runtime cmdliner dockerfile day10_lib) 6 (preprocess
··· 1 (executable 2 (public_name day10) 3 (name main) 4 + (enabled_if (>= %{ocaml_version} 5.3.0)) 5 (package day10) 6 (libraries opam-0install yojson ppx_deriving_yojson.runtime cmdliner dockerfile day10_lib) 7 (preprocess
+2
dune-project
··· 17 18 (package 19 (name day10) 20 (synopsis "A short synopsis") 21 (description "A longer description") 22 (depends ··· 31 32 (package 33 (name day10-web) 34 (synopsis "Web dashboard for day10 documentation status") 35 (description "Status dashboard for package maintainers and operators") 36 (depends
··· 17 18 (package 19 (name day10) 20 + (allow_empty) 21 (synopsis "A short synopsis") 22 (description "A longer description") 23 (depends ··· 32 33 (package 34 (name day10-web) 35 + (allow_empty) 36 (synopsis "Web dashboard for day10 documentation status") 37 (description "Status dashboard for package maintainers and operators") 38 (depends
+1
lib/dune
··· 1 (library 2 (name day10_lib) 3 (libraries unix str yojson) 4 (modules atomic_swap build_lock gc progress run_log))
··· 1 (library 2 (name day10_lib) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (libraries unix str yojson) 5 (modules atomic_swap build_lock gc progress run_log))
+6
tests/unit/dune
··· 1 (executable 2 (name test_atomic_swap) 3 (libraries day10_lib)) 4 5 (executable 6 (name test_gc) 7 (libraries day10_lib)) 8 9 (executable 10 (name test_run_log) 11 (libraries day10_lib unix yojson)) 12 13 (executable 14 (name test_run_data) 15 (libraries day10_web_data unix yojson)) 16 17 (executable 18 (name test_package_data) 19 (libraries day10_web_data unix)) 20 21 ; Run all tests with: dune runtest 22 (rule 23 (alias runtest) 24 (deps test_atomic_swap.exe test_gc.exe test_run_log.exe test_run_data.exe test_package_data.exe) 25 (action (progn 26 (run ./test_atomic_swap.exe)
··· 1 (executable 2 (name test_atomic_swap) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (libraries day10_lib)) 5 6 (executable 7 (name test_gc) 8 + (enabled_if (>= %{ocaml_version} 5.3.0)) 9 (libraries day10_lib)) 10 11 (executable 12 (name test_run_log) 13 + (enabled_if (>= %{ocaml_version} 5.3.0)) 14 (libraries day10_lib unix yojson)) 15 16 (executable 17 (name test_run_data) 18 + (enabled_if (>= %{ocaml_version} 5.3.0)) 19 (libraries day10_web_data unix yojson)) 20 21 (executable 22 (name test_package_data) 23 + (enabled_if (>= %{ocaml_version} 5.3.0)) 24 (libraries day10_web_data unix)) 25 26 ; Run all tests with: dune runtest 27 (rule 28 (alias runtest) 29 + (enabled_if (>= %{ocaml_version} 5.3.0)) 30 (deps test_atomic_swap.exe test_gc.exe test_run_log.exe test_run_data.exe test_package_data.exe) 31 (action (progn 32 (run ./test_atomic_swap.exe)
+1
web/data/dune
··· 1 (library 2 (name day10_web_data) 3 (libraries unix yojson day10_lib) 4 (modules run_data package_data layer_data lock_data progress_data))
··· 1 (library 2 (name day10_web_data) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (libraries unix yojson day10_lib) 5 (modules run_data package_data layer_data lock_data progress_data))
+1
web/dune
··· 1 (executable 2 (name main) 3 (public_name day10-web) 4 (package day10-web) 5 (libraries dream day10_lib day10_web_data day10_web_views cmdliner unix yojson))
··· 1 (executable 2 (name main) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (public_name day10-web) 5 (package day10-web) 6 (libraries dream day10_lib day10_web_data day10_web_views cmdliner unix yojson))
+1
web/views/dune
··· 1 (library 2 (name day10_web_views) 3 (libraries dream day10_web_data) 4 (modules layout dashboard runs packages live_log))
··· 1 (library 2 (name day10_web_views) 3 + (enabled_if (>= %{ocaml_version} 5.3.0)) 4 (libraries dream day10_web_data) 5 (modules layout dashboard runs packages live_log))