From 059897970e6d2c89e5270ec8ff1c781db58bae58 Mon Sep 17 00:00:00 2001 From: giles Date: Mon, 29 Jun 2026 11:11:18 +0000 Subject: [PATCH] =?UTF-8?q?host:=20doc=20=E2=80=94=20blog=20SPA=20complete?= =?UTF-8?q?=20+=20live=20on=20the=20WASM=20OCaml=20kernel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- plans/host-spa.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plans/host-spa.md b/plans/host-spa.md index c76efd67..216a9bab 100644 --- a/plans/host-spa.md +++ b/plans/host-spa.md @@ -1,5 +1,24 @@ # Host blog → SPA via the SX-htmx engine (WASM OCaml kernel) +## ✅ COMPLETE 2026-06-29 — live SPA on the WASM OCaml kernel + +blog.rose-ash.com is now a single-page app: the browser boots the SAME OCaml +kernel the server runs (compiled to WASM), `sx-boost` fragment-swaps every link +into #content with URL push + working back button, no full reload. Verified: +native host conformance 271/271; `lib/host/playwright/spa-check` 4/4 in chromium; +LIVE blog.rose-ash.com boost 19/19 + click nav + zero errors. + +The boot crash was the crypto stack assuming 63-bit int (fixed in `fce9e0c6`). +The boost then needed six more source-load/boost-path fixes (commit `689dae7d`): +import double-apply (library_loaded_p got a key not a spec), unloaded-import +crash (library_exports nil -> empty dict), value_to_js missing Integer (broke +dom-query-all -> only 1 link boosted), browser-same-origin? rejecting relative +URLs, dom-query-in undefined (= dom-query), and lazy-deps never preloaded under +source fallback (CEK can't lazy-resolve). Everything below is the history. + +--- + + Turn the blog (lib/host/blog.sx) into a single-page app using the in-repo SX hypermedia engine (web/engine.sx — "our htmx"): boot the **WASM OCaml kernel** (the same evaluator the server runs) in the browser, and `sx-boost` every