From 28f661c36f82bf158b12a0e7da4674784fdc5b1d Mon Sep 17 00:00:00 2001 From: Orkuncakilkaya Date: Thu, 17 Sep 2026 15:59:35 +0300 Subject: [PATCH] chore(release): v0.21.0 --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ VERSION | 2 +- changes/launcher-runtime.md | 22 ---------------------- changes/window-title.md | 8 -------- 4 files changed, 34 insertions(+), 31 deletions(-) delete mode 100644 changes/launcher-runtime.md delete mode 100644 changes/window-title.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 69f48eac..7fafbe8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,39 @@ change type. Preview the next one with `ludic dev release --dry-run`. A released section may carry a hand-written summary paragraph above its groups (v0.2.0 has one); the generated bullets below it are not edited by hand. +## v0.21.0 — 2026-09-17 + +### Features + +- **A launcher's runtime** — start a program, step aside while it runs, and download large + files with a progress bar. + + - **`Process.*`** — `Process.spawn(path, args)` starts a program directly (no shell) with this + process's environment and working directory and returns at once; `Process.poll(h)` is `-1` + while it runs, then its exit code (`128 + signal` for a signal death, `137` after + `Process.kill`); `Process.free` lets a handle go. `posix_spawn` on macOS + (`runtime/native/process.ll`); `CreateProcessW` on Windows (`process_win.ll`), with each + argument quoted by the MSVC rules and no console window. Linked only into a program that + uses `Process.*`. + - **`Http.save_to(h, path)`** — before `Http.send`, streams the response body straight into a + file (written at `path` itself, created on send) instead of memory; `Http.text` of such a + request is empty and `Http.body_len` is the bytes written. **`Http.received(h)`** and + **`Http.expected(h)`** (the `Content-Length`, or `-1`) are live while it is pending. macOS + streams through an `NSURLSession` with a delegate built at run time, Windows through the + WinHTTP read loop. Freeing a pending request now cancels it and parks its slot until the + worker has let go, rather than freeing what the worker is still writing. + - **`App.window_hide()` / `App.window_show()`** — take the game's window off the screen and + bring it back without closing it or its GL / Vulkan surface; the run goes on while it is + hidden. No-ops headless and before there is a window. + +### Fixes + +- A game's window takes the title it asks for. The runtime opens a game's window before `main`, + titled with the `program` name, and `Gl.open` / render3d's `gl_open` and `gvk_open` attached + to it without passing their title on, so a `program Valley` that opened "Maroon Lake" showed + "Valley". `win_set_title` (cocoa.ll `setTitle:`, win32.ll `SetWindowTextW`, UTF-8 to UTF-16) + now retitles it, and a second `win_open` on macOS retitles the open window instead of making + another, as it already did on Windows. ## v0.20.0 — 2026-09-17 ### Features diff --git a/VERSION b/VERSION index 5a03fb73..88541566 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.20.0 +0.21.0 diff --git a/changes/launcher-runtime.md b/changes/launcher-runtime.md deleted file mode 100644 index f36bea0f..00000000 --- a/changes/launcher-runtime.md +++ /dev/null @@ -1,22 +0,0 @@ -bump: minor -type: feat -**A launcher's runtime** — start a program, step aside while it runs, and download large -files with a progress bar. - -- **`Process.*`** — `Process.spawn(path, args)` starts a program directly (no shell) with this - process's environment and working directory and returns at once; `Process.poll(h)` is `-1` - while it runs, then its exit code (`128 + signal` for a signal death, `137` after - `Process.kill`); `Process.free` lets a handle go. `posix_spawn` on macOS - (`runtime/native/process.ll`); `CreateProcessW` on Windows (`process_win.ll`), with each - argument quoted by the MSVC rules and no console window. Linked only into a program that - uses `Process.*`. -- **`Http.save_to(h, path)`** — before `Http.send`, streams the response body straight into a - file (written at `path` itself, created on send) instead of memory; `Http.text` of such a - request is empty and `Http.body_len` is the bytes written. **`Http.received(h)`** and - **`Http.expected(h)`** (the `Content-Length`, or `-1`) are live while it is pending. macOS - streams through an `NSURLSession` with a delegate built at run time, Windows through the - WinHTTP read loop. Freeing a pending request now cancels it and parks its slot until the - worker has let go, rather than freeing what the worker is still writing. -- **`App.window_hide()` / `App.window_show()`** — take the game's window off the screen and - bring it back without closing it or its GL / Vulkan surface; the run goes on while it is - hidden. No-ops headless and before there is a window. diff --git a/changes/window-title.md b/changes/window-title.md deleted file mode 100644 index ecdba2c7..00000000 --- a/changes/window-title.md +++ /dev/null @@ -1,8 +0,0 @@ -bump: patch -type: fix -A game's window takes the title it asks for. The runtime opens a game's window before `main`, -titled with the `program` name, and `Gl.open` / render3d's `gl_open` and `gvk_open` attached -to it without passing their title on, so a `program Valley` that opened "Maroon Lake" showed -"Valley". `win_set_title` (cocoa.ll `setTitle:`, win32.ll `SetWindowTextW`, UTF-8 to UTF-16) -now retitles it, and a second `win_open` on macOS retitles the open window instead of making -another, as it already did on Windows.