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
Commit ddfb936
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/COMPLETION-PLAN.adoc
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -87,7 +87,7 @@ Results were consistent, but they do not prove CI is green.
87
87
| Memory reclamation. try/catch.
88
88
89
89
| Bun-ESM (`lib/codegen_deno.ml`)
90
-
| Basic programs are correct. A `return` inside a match arm returns 100 instead of 99 (IIFE at `:1575`). aLib conformance is 100 of 103 vectors.
90
+
| Basic programs are correct. A `return` inside a match arm is correct in a `let` initializer, a function or lambda tail, and nested statement position; as an argument or operand it is refused at compile time rather than miscompiled (H2, 2026-11-09). aLib conformance is 100 of 103 vectors.
91
91
| —
92
92
| —
93
93
@@ -202,7 +202,7 @@ Results were consistent, but they do not prove CI is green.
202
202
All were observed by RUN unless marked otherwise. The maps confirm that H1–H4 and H9 are absent from `docs/SOUNDNESS.adoc`. H5–H8, H10, H12 and H13 were not checked against the ledger. H11 already has a drafted issue (`issues-drafts/06`, referenced from the AFFIRMATION). H14, H15 and H19 belong to typed-wasm, not the AffineScript ledger.
203
203
204
204
. H1. Interpreter early `return` has no non-local exit (`lib/interp.ml:262`).
205
-
. H2. Bun-ESM `return` in expression position is lowered as an IIFE (`lib/codegen_deno.ml:1575`).
205
+
. H2. Bun-ESM `return` in expression position is lowered as an IIFE (`lib/codegen_deno.ml:1575`). *Narrowed 2026-11-09:* `let` initializers and function and lambda tails are now lowered to statements, so the `return` leaves the function; a match used as an argument or operand with a `return` in an arm is refused loudly. Anchor: `test/test_module_root_flatten.ml`.
206
206
. H3. The JS-text backend drops block returns (`lib/js_codegen.ml`). The Lua backend emits invalid code.
207
207
. H4. Non-exhaustive match compiles to "return 0" on core WASM.
208
208
. H5. Effect rows are not checked against performed operations or callee rows.
@@ -220,9 +220,9 @@ All were observed by RUN unless marked otherwise. The maps confirm that H1–H4
220
220
. H17. The lexer accepts the bad escape `\q`, and an empty `match` parses (conformance invalid cases 010 and 011).
221
221
. H18. The interpreter fails when dereferencing refs returned through calls ("Expected reference type"). The session lead reproduced this on two #554 fixtures.
222
222
. H19 (typed-wasm). No L5 index guard: `get_player_hp(0,150)` reads an adjacent region. `where` constraints are discarded. Malformed `session` blocks are silently ignored.
223
-
. H20. `Face.render_ty` is not injective, contrary to the F-5 model. On the Js face `List[Option[Int]]` and `Option[List[Int]]` both render as `List[Int] | null`; on Cafe both render as `List[Int]?`. The greedy `Option\[\(.*\)\]` regex in `lib/face.ml` causes it (RUN, by calling the built library).
224
-
. H21. The Coq proof gate fails open on assertions outside the printed theorems' dependency cone. A planted `Admitted` false lemma and a planted `Axiom False` both passed a replica of `coq-proof-gate.yml` (RUN). The gate also never re-runs when the `lib/*.ml` files the models describe change.
225
-
. H22. The staged Agda under `proposals/` (23 files) passes under the canonical flags, but nothing checks it: `tools/check-proofs.sh --agda` reports SKIP, not failure, when `AFFINESCRIPT_ECHO_TYPES_DIR` or `AGDA_STDLIB` is unset, and no workflow or dune rule calls it. No echo-types commit is pinned.
223
+
. H20 (found and fixed 2026-11-09, checking and running metadatastician/kyq). A module file found for `A.B` that declares `module A;` was accepted as `A.B`, so `use A.Nonexistent::*` type-checked and imported `A`'s exports; it is now a `ModuleDeclMismatch` load error. Anchor: `test/test_module_root_flatten.ml`.
224
+
. H21 (found and fixed 2026-11-09). `eval` ran the unflattened program, so no imported function was bound at run time; flattening also emitted a selected function before the private helpers it calls and carried no helpers for glob or plain imports. `eval` now flattens, every import kind carries its helpers, and they are emitted in the imported module's declaration order. Anchor: `test/test_module_root_flatten.ml`.
225
+
. H22 (found and fixed 2026-11-09). The interpreter had no `++` on arrays and no `==`/`!=` beyond Int, Float, String and Bool, though the checker accepts them; it now uses the structural `Value.value_eq`. H7 (`let mut`) is unchanged. Anchor: `test/test_module_root_flatten.ml`.
0 commit comments