diff --git a/docs/known-gaps.md b/docs/known-gaps.md index 499712835..9e010cdc4 100644 --- a/docs/known-gaps.md +++ b/docs/known-gaps.md @@ -31,7 +31,7 @@ |---|---| | HIGH | 77 | -| MED | 200 | +| MED | 201 | | LOW | 86 | | Nominal (spec-ahead-of-impl) | 7 | @@ -49,6 +49,14 @@ + + +### g-bare-expr-in-if-arm-rebinds-tilde-context-corrupting-the-result-var — a bare-expression statement inside an if-as-expression arm mints a FRESH `_scrml_tilde_N` **and rebinds `tildeContext.var`**, so a following explicit `lift` writes the wrong variable and the binding stays `null`. **PA-CONFIRMED BY EXECUTION on merged main `908a631c`, and it survives #815.** `const label = if (@n > 0) { note("a") lift "pos" } else { lift "neg" }` compiles **exit 0, zero diagnostics** and emits `let _scrml_tilde_5 = _scrml_note_2("a");` then `_scrml_tilde_5 = "pos";` inside the then-arm, while the real result var `_scrml_tilde_4` keeps its `null` seed — so `label` is **always null on the true path**. ⛑ **AND THE SIBLING ARM LEAKS A GLOBAL.** With `else { lift "neg" }` the else-arm emits `_scrml_tilde_5 = "neg"`, a name `let`-declared INSIDE the then-block and therefore **not in scope** there. PA-verified the emitted client artifact is a **classic script** (`