diff --git a/NEXT.md b/NEXT.md index f6ce6b0..b73917f 100644 --- a/NEXT.md +++ b/NEXT.md @@ -34,6 +34,31 @@ call and come back as *unknown name*, which is the house rule's own class of bug Read SBCL for what restarts should *mean* and ignore how it moves control: it transfers with `block`/`return-from`, which §6 rules out. +### In flight — four tracks, one session, 2026-09-12 + +Four agents are working these in parallel worktrees. Listed so a session reading this cold does not start one of them again. + +1. **`nth` removed, then a `println` builtin.** `nth` was an *asymmetric* alias of `at`: `check.ml` aliased them, but + `parse.ml` and `place_of_expr` matched only `at`, so `(set (nth a i) x)` and `(addr (nth a i))` were refused while + the `at` forms worked. Two names documented as identical that differ on write. Then `println`: `Session.render` is + already the compile-time structural walk plan.org asks for, and lifting it out of the dev path — parameterised on + its emitter — gives a real `println` over concrete types with none of milestone 5 involved. The per-type + `print-f64`/`print-str` family goes. +2. **The break loop's editor half.** `break` on the daemon protocol, `compute-restarts`, `restart-at`, and a + minibuffer prompt. `spec-conditions.md` §2's remaining piece. +3. **The first ten raylib core examples**, plus the window and input bindings they need. The deliverable is the + *language gap list* as much as the ported files — sand.flan is the only real raylib program today, so this is the + first time the language is pushed by code it was not designed around. +4. **Names in DWARF.** The two items under "One line away" below, promoted here because the inspector and the + conditions buffer are only as good as what lldb can say: let-bound locals print as `s0`, `s2` because `Tast` refers + to them by slot index and `Check` drops the names, and `Session.eval` never passes the `~debug` that + `Emit.redefinition` already takes and is already tested for. The second also unblocks source interleaving in the + disassembly buffer. + +**DWARF is not missing, and `flan-cnr.el`'s stack pane reads as though it were.** `flan build --debug` emits it and +`flan-dape.el` drives lldb with it. What the break loop lacks is DWARF *in a dev build* — a `flan dev` process is not a +`--debug` one. Worth rewording that refusal so it names the real gap. + ### Managed classes are planned. Do not start them. plan.org grew a `class` facility beside `struct`: identity, runtime shape metadata, an implementation-defined @@ -540,9 +565,9 @@ Sixty mutations, nineteen left the whole suite green. The severe cluster is clos - **`match` over enums.** Fully desugarable, wanted, and blocked only by `Ast.pattern` needing a keyword case, which `load.ml` matches exhaustively. -- **DWARF for a redefinition module.** `Emit.redefinition` takes `~debug` and is tested; `Session.eval` does not pass +- **[in flight]** **DWARF for a redefinition module.** `Emit.redefinition` takes `~debug` and is tested; `Session.eval` does not pass it. That also unblocks source interleaving in the disassembly buffer. -- **Let-bound locals print as `s0`, `s2`** under lldb. Parameters get their real names; `Tast` refers to the rest by +- **[in flight]** **Let-bound locals print as `s0`, `s2`** under lldb. Parameters get their real names; `Tast` refers to the rest by slot index and `Check` drops the names. - **`Build.executable` returns only `out`**, so the daemon recovers the host `.ll` by recomputing `Build.workdir ()`.