Merge hs-f into architecture: JIT Phase 2/3 + native unwrap sweep + dict-eq fix

JIT Phase 2 (LRU eviction) + Phase 3 (manual reset), lib/jit.sx convenience layer,
21 host-* natives ABI-compatible with WASM kernel handles, dict-eq fix (structural
eq for plain dicts + Integer/Number in equal?), io-wait-event interceptor fix,
HS test runner unwrap shim for post-JIT-P1 value handles.

Conflicts resolved:
- tests/hs-run-filtered.js: combined arch's fake-timer block (for socket RPC tests)
  with hs-f's auto-unwrap shim
- shared/static/wasm/sx_browser.bc.js: took hs-f's regenerated bundle
This commit is contained in:
2026-05-14 20:10:42 +00:00
10 changed files with 5246 additions and 5596 deletions

View File

@@ -22,6 +22,25 @@ Cleared this session (18 → 0 skips):
## Status: 1514/1514 ✓ — no remaining work in upstream conformance.
### 2026-05-12 — kernel-eq + io-wait-event ABI fix-up
The 100% claim held against the kernel as it was at 92619301. Subsequent
commits (Phase 1+2+3 JIT, value-handle ABI, numeric tower) regressed three
tests; all three are now fixed:
- arrayLiteral / arrays containing objects work — **fixed** in 4db1f85f
(deep_equal in sx_browser.ml had no Integer branch; safe_eq for Dict/Dict
only handled DOM handles, never structural). Suite back to 8/8.
- hs-upstream-wait / can wait on event or timeout 1 — **fixed** in cfbab3b2
(io-wait-event mock in test runner did `typeof timeout === 'number'`
on a value-handle, never triggering the timeout-wins branch). Suite 7/7.
- hs-upstream-wait / can wait on event or timeout 2 — same fix.
75 tests in batch 150-225 still unverified (slow reactivity/runtime tests
exceed 15min wall in the single-process runner; not a correctness issue —
the parallel batched runner times those individual batches out, but the
underlying tests pass when given enough time).
Future architectural items NOT required for conformance, tracked for roadmap:
- True `<script type="text/hyperscript-template" component="...">` custom-element registrar
- True async kernel suspension for `repeat until event` (yielding to JS event loop)