You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
tracking: general effect-handler dispatch (post-CORE-02 residual) — silent arm-drop on 3 backends; DECISION: back-port loud failure now? #555
CORE-02 was marked CLOSED 2026-05-19 (TECH-DEBT.adoc:237-250) under a title broader than what was delivered: the closure covered the Async slice only (#225 CPS line + #234/ADR-016 boundary detection). General algebraic-effect handler dispatch has no open tracking issue on any backend. This is it.
Per-backend truth (all file:line on main @ 20e27c8)
Backend
handle/resume behaviour
Class
core-WASM (default)
ExprHandle compiles body only — all arms silently dropped; ExprResume = arg passthrough (codegen.ml:1385-1397)
silent miscompile
JS-text
erased ("Effect handlers are erased at MVP", js_codegen.ml:288-292)
fn main() -> Int {
return handle 41 { return(v) => v + 1 };
}
Interpreter: 42. Compiled wasm (default backend): 41. Compilation silent. The TopEffect-emits-nothing fence (effect-op calls → UnboundFunction) does not cover return arms, so this miscompile is reachable from fully effect-free programs. (Verified by Node instantiation, 2026-06-11.)
Test coverage
Zero runtime handler-dispatch tests on any path. tests/effects/basic_effect.affine is wired into no harness (and fails wasm codegen loudly when compiled by hand). Caution: tools/estate-rs-audit/data/results.post228.tsv records check-only PASS rows for it that grep like coverage.
Decision requested
Back-port the WasmGC loud-failure to core-WASM, JS-text, and Deno-ESM now (the exact fix codegen_gc.ml:903-906 already brands the silent behaviour "wrong"); implement real dispatch later. Also fix the CAPABILITY-MATRIX "interpreter-complete" cell to "shallow single-shot tail-resume" in the same PR.
Decision executed (owner: yes, 2026-06-11): the loud-failure fence is back-ported to all three silently-wrong backends in PR #566 (core-WASM UnsupportedFeature, JS-text/Deno-ESM failwith→Error at entry), with the 41-vs-42 probe landed as fixture handle_return_arm.affine and a 4-test E2E Handler Fence suite (interpreter keeps working; all three compile backends must fail loudly). 385 tests green.
This issue STAYS OPEN for the remaining scope: general handler dispatch on a wasm backend (EH proposal or general-handler CPS), deep/multi-shot resume semantics on the interpreter, and runtime dispatch tests once dispatch exists. The silent-wrong-value class is eliminated once #566 merges; the matrix effects-row touch-up follows after #565 lands.
Activity
hyperpolymath commentedon Jun 11, 2026
Decision executed (owner: yes, 2026-06-11): the loud-failure fence is back-ported to all three silently-wrong backends in PR #566 (core-WASM
UnsupportedFeature, JS-text/Deno-ESMfailwith→Errorat entry), with the 41-vs-42 probe landed as fixturehandle_return_arm.affineand a 4-test E2E Handler Fence suite (interpreter keeps working; all three compile backends must fail loudly). 385 tests green.This issue STAYS OPEN for the remaining scope: general handler dispatch on a wasm backend (EH proposal or general-handler CPS), deep/multi-shot resume semantics on the interpreter, and runtime dispatch tests once dispatch exists. The silent-wrong-value class is eliminated once #566 merges; the matrix effects-row touch-up follows after #565 lands.
docs: truth-refresh after CORE-01 closure + 2026-06-11 survey — matri…
fix(codegen): #555 decision — back-port loud handler failure to core-…
fix(codegen): #555 decision — back-port loud handler failure to core-…
fix(codegen): #555 decision — back-port loud handler failure to core-…
docs: truth-refresh after CORE-01 closure + 2026-06-11 survey — matri…
docs: truth-refresh after CORE-01 closure + 2026-06-11 survey (matrix…
design: lowering string ++ (and slice) to wasm — proposal for sign-off (
compiler: string-wall slice 8a — guard string ++ against silent misco…
compiler: string-wall slice 8b — type-directed string ++ lowering (#578)
compiler: lower polymorphic len() to wasm (string + array length) (#583)
docs: consolidated session overview — migration corpus + string/float…
fix(codegen): close #556 — async CPS table-miss loud-fail fence (#596)
merge: integrate main (#556 async fence) into #555 resume-soundness b…
fix(interp): #555 interpreter residual — multi-shot resume loud-fail (#…
docs: author the proof-needs inventory (P-/F-/K- obligation series) (#…
docs: make soundness status a single, test-anchored source of truth (#…
fix(ci): re-anchor SOUNDNESS.adoc #555-stub/#560 row — clears soundne…
fix(#624): fence Lean/Why3 backends to fail loud on early `return`
fix(#624): fence Lean/Why3 on early `return`; finish the soundness-ga…
feat(formal): real-lift R0 + scoping plan (RealWasm.v + REAL-LIFT.adoc)
feat(formal): F-5 render non-collision + real-lift R0 (RealWasm + pla…
Un-break CI: restore the DOC-04 banner, re-arm the disarmed gates, re…