Root cause found: when the click handler calls run-all → for-each → callback → hs-wait → perform, the perform raises VmSuspended. But the call path goes through sx_apply_cek (from the call-lambda CALL_PRIM) which converts VmSuspended → CekPerformRequest. The inner CEK context has no IO handler, so it raises "IO suspension in non-IO context" instead of propagating the suspension to the outer context. Fix needed: either (a) make sx_apply_cek NOT convert VmSuspended when in a context that supports IO suspension, or (b) ensure the inner CEK from call-lambda propagates perform as a suspension state rather than erroring. Debug logging still present in sx_browser.ml (js_to_value traces). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
51 KiB
51 KiB