test_web.ml never opens a browser and never will. What it asserts is the shape a browser needs — three files, a module that starts with the wasm magic, a page that references its own JS and carries the canvas — plus the one execution available without a DOM: node runs the emitted JS and gets "ok". For raylib it builds core-basic-window.flan unchanged, which is the claim, and then reads the module for the two things that would be false if the mechanism were wrong: an asyncify_start_unwind export, and a glViewport import that can only have come from raylib's web platform. Import and export names are plain strings in the binary, so this needs no wasm reader. Both halves probe rather than assume, the way the wasm32 case does: emscripten may not be installed and the raylib archive is not in the tree, and a missing piece is a skip with the reason. The four refusals are asserted by name — --dev, --debug, --sanitize, Build.shared, and flan run --target=web from the CLI — because "it falls out of the existing predicate" is the kind of thing that stops being true quietly.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%