From 6ab109b9760b42c55f0ef4b95a63816b04698b05 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:17 +0530 Subject: [PATCH 01/15] Bump Rust crate metadata to 0.14.0 --- rust/flintlang/Cargo.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/flintlang/Cargo.toml b/rust/flintlang/Cargo.toml index a7ea071..1e9fcc3 100644 --- a/rust/flintlang/Cargo.toml +++ b/rust/flintlang/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flintlang" -version = "0.13.2" +version = "0.14.0" edition = "2021" description = "Safe Rust embedding of the Flint scripting language runtime" license = "MIT" @@ -14,4 +14,4 @@ name = "flintlang" path = "src/lib.rs" [dependencies] -flintlang-sys = { version = "0.13.2", path = "../flintlang-sys" } +flintlang-sys = { version = "0.14.0", path = "../flintlang-sys" } From 75cf9a7ed1e51e54b3cdad507d353c2a5ad11cb0 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:19 +0530 Subject: [PATCH 02/15] Bump Rust crate metadata to 0.14.0 --- rust/flintlang-sys/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/flintlang-sys/Cargo.toml b/rust/flintlang-sys/Cargo.toml index 5702f8f..f9b01d0 100644 --- a/rust/flintlang-sys/Cargo.toml +++ b/rust/flintlang-sys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "flintlang-sys" -version = "0.13.2" +version = "0.14.0" edition = "2021" description = "Safe Rust bindings over the Flint native C ABI" license = "MIT" From 682932a31964863bd17f933a0778e8f8164ab50b Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:21 +0530 Subject: [PATCH 03/15] Bump Rust crate metadata to 0.14.0 --- rust/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 9fed3ae..322437f 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -4,11 +4,11 @@ version = 4 [[package]] name = "flintlang" -version = "0.13.2" +version = "0.14.0" dependencies = [ "flintlang-sys", ] [[package]] name = "flintlang-sys" -version = "0.13.2" +version = "0.14.0" From e37c5aed6acc1761f47911214b8cdc43019b2411 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:24 +0530 Subject: [PATCH 04/15] Bump Rust crate metadata to 0.14.0 --- rust/examples/rust-native/Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/examples/rust-native/Cargo.lock b/rust/examples/rust-native/Cargo.lock index 54e7f95..f88eda4 100644 --- a/rust/examples/rust-native/Cargo.lock +++ b/rust/examples/rust-native/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "flintlang-sys" -version = "0.13.2" +version = "0.14.0" [[package]] name = "rust-native" From 2f774382738983f125f6c218e1568896d856c1e2 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:29 +0530 Subject: [PATCH 05/15] Update 0.14.0 release documentation --- rust/examples/tui-native/Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/examples/tui-native/Cargo.lock b/rust/examples/tui-native/Cargo.lock index 0e11b1f..9b4bb66 100644 --- a/rust/examples/tui-native/Cargo.lock +++ b/rust/examples/tui-native/Cargo.lock @@ -382,7 +382,7 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flintlang-sys" -version = "0.13.2" +version = "0.14.0" [[package]] name = "fnv" From ae82d9d2a1871a15f272d57a6d5c868ee44471a8 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:31 +0530 Subject: [PATCH 06/15] Update 0.14.0 release documentation --- rust/flintlang/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/flintlang/README.md b/rust/flintlang/README.md index c0eaef4..067d6c1 100644 --- a/rust/flintlang/README.md +++ b/rust/flintlang/README.md @@ -4,7 +4,7 @@ Safe, idiomatic embedding of the [Flint scripting language](https://github.com/p ```toml [dependencies] -flintlang = "0.13.2" +flintlang = "0.14.0" ``` ```rust @@ -44,8 +44,8 @@ builds target mingw-w64, matching the rest of the project. ## Versions -This crate versions in lockstep with the language: `flintlang 0.13.2` -embeds Flint 0.13.2. The `flintlang-sys` version tracks the wrapper, and +This crate versions in lockstep with the language: `flintlang 0.14.0` +embeds Flint 0.14.0. The `flintlang-sys` version tracks the wrapper, and the ABI version (`FL_ABI_VERSION`, currently 1) tracks the C header independently — a new function does not change it, a changed layout does. From cf03a4d49574a85212a2fcdd0ce3420074238699 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:34 +0530 Subject: [PATCH 07/15] Update 0.14.0 release documentation --- rust/flintlang-sys/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/flintlang-sys/README.md b/rust/flintlang-sys/README.md index 90196fc..bb4bf20 100644 --- a/rust/flintlang-sys/README.md +++ b/rust/flintlang-sys/README.md @@ -33,7 +33,7 @@ later; the host roots retained handles against the collector. ## Versions -`flintlang-sys 0.13.2` binds ABI version 1; `abi_version()` asks the +`flintlang-sys 0.14.0` binds ABI version 1; `abi_version()` asks the host at run time, which is the check that decides whether a module loads. The reviewed header copy lives in `c-api/`. From 72e44d77ae94864382c3b2e43df91a40ad89ad0e Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 19:59:36 +0530 Subject: [PATCH 08/15] Update 0.14.0 release documentation --- RELEASES.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/RELEASES.md b/RELEASES.md index 7be710d..0fdb198 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,5 +1,19 @@ # releases +## v0.14.0 + +- Package imports support package-named single-file modules such as + `flint_modules/levenshtein/levenshtein.fl`, in addition to `main.fl` + and flat-module layouts. +- Failed Git mirror clones clean up incomplete cache directories so a + subsequent package install can recover. +- Document the package import resolution order and keep the standalone C + runtime and Rust-embedded C source synchronized. + +This is release preparation. Do not publish a `v0.14.0` tag or artifacts +until PRs #10 and #11 are merged and the full `make validate` gate plus +supported-platform checks have passed. + ## v0.13.2 native modules load through `import` -- no subcommand, no loader From a6409f81ff843d1f6aee52bfc5aa6ce3d6cf31c9 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:18:34 +0530 Subject: [PATCH 09/15] Update verbose version metadata for 0.14.0 --- src/main.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main.c b/src/main.c index 27f869c..f237e63 100644 --- a/src/main.c +++ b/src/main.c @@ -1952,12 +1952,12 @@ int main(int argc, char *argv[]) 0 || strcmp(argv[arg + 1], "-v") == 0)) { - printf(" language: 0.13.1\n"); - printf(" runtime: 0.13.1\n"); - printf(" package format: 0.13.1\n"); - printf(" bytecode: 0.13.1\n"); + printf(" language: 0.14.0\n"); + printf(" runtime: 0.14.0\n"); + printf(" package format: 0.14.0\n"); + printf(" bytecode: 0.14.0\n"); printf(" native abi: 1\n"); - printf(" lockfile: 0.13.1\n"); + printf(" lockfile: 0.14.0\n"); } } else { printf("flint %s\n", FLINT_VERSION); @@ -1966,12 +1966,12 @@ int main(int argc, char *argv[]) 0 || strcmp(argv[arg + 1], "-v") == 0)) { - printf(" language: 0.13.1\n"); - printf(" runtime: 0.13.1\n"); - printf(" package format: 0.13.1\n"); - printf(" bytecode: 0.13.1\n"); + printf(" language: 0.14.0\n"); + printf(" runtime: 0.14.0\n"); + printf(" package format: 0.14.0\n"); + printf(" bytecode: 0.14.0\n"); printf(" native abi: 1\n"); - printf(" lockfile: 0.13.1\n"); + printf(" lockfile: 0.14.0\n"); } } return 0; From 150480f95b95f5ca8d6d8cbb0c3cd19d4fbe4d3b Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:18:42 +0530 Subject: [PATCH 10/15] Include dependency expansion fixes in 0.14.0 notes --- RELEASES.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index 0fdb198..d3b2fdd 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -7,12 +7,13 @@ and flat-module layouts. - Failed Git mirror clones clean up incomplete cache directories so a subsequent package install can recover. -- Document the package import resolution order and keep the standalone C - runtime and Rust-embedded C source synchronized. +- Document package import resolution and keep the standalone C runtime + and Rust-embedded C source synchronized. +- Clean up dependency expansion on errors and stop cyclic path dependencies + at the depth limit. This is release preparation. Do not publish a `v0.14.0` tag or artifacts -until PRs #10 and #11 are merged and the full `make validate` gate plus -supported-platform checks have passed. +until PRs #10, #11, and #13 are merged and the release checks pass. ## v0.13.2 From 94ff375b1966fa5d48ff07d79b90b77491fb9e64 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:19:18 +0530 Subject: [PATCH 11/15] Update HTTP user agent for 0.14.0 --- src/runtime/http.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtime/http.c b/src/runtime/http.c index 1f70af7..96215f8 100644 --- a/src/runtime/http.c +++ b/src/runtime/http.c @@ -519,7 +519,7 @@ static char *socket_fetch(const Url *u, buf_append(&req, hbuf, strlen(hbuf)); } if (!has_ua) { - buf_append(&req, "User-Agent: flint/0.7.0\r\n", 25); + buf_append(&req, "User-Agent: flint/0.14.0\r\n", strlen("User-Agent: flint/0.14.0\r\n")); } if (!has_accept) { buf_append(&req, "Accept: */*\r\n", 13); From f219b2c461b9c6db8740290f101ef38059659b96 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:19:23 +0530 Subject: [PATCH 12/15] Update HTTP user agent for 0.14.0 --- rust/flintlang/c-src/src/runtime/http.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/flintlang/c-src/src/runtime/http.c b/rust/flintlang/c-src/src/runtime/http.c index 1f70af7..96215f8 100644 --- a/rust/flintlang/c-src/src/runtime/http.c +++ b/rust/flintlang/c-src/src/runtime/http.c @@ -519,7 +519,7 @@ static char *socket_fetch(const Url *u, buf_append(&req, hbuf, strlen(hbuf)); } if (!has_ua) { - buf_append(&req, "User-Agent: flint/0.7.0\r\n", 25); + buf_append(&req, "User-Agent: flint/0.14.0\r\n", strlen("User-Agent: flint/0.14.0\r\n")); } if (!has_accept) { buf_append(&req, "Accept: */*\r\n", 13); From 12534cc440c6e3bef280d27a57c82dfbada25286 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:29:17 +0530 Subject: [PATCH 13/15] Polish 0.14.0 release notes --- RELEASES.md | 46 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/RELEASES.md b/RELEASES.md index d3b2fdd..97224ff 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -2,18 +2,40 @@ ## v0.14.0 -- Package imports support package-named single-file modules such as - `flint_modules/levenshtein/levenshtein.fl`, in addition to `main.fl` - and flat-module layouts. -- Failed Git mirror clones clean up incomplete cache directories so a - subsequent package install can recover. -- Document package import resolution and keep the standalone C runtime - and Rust-embedded C source synchronized. -- Clean up dependency expansion on errors and stop cyclic path dependencies - at the depth limit. - -This is release preparation. Do not publish a `v0.14.0` tag or artifacts -until PRs #10, #11, and #13 are merged and the release checks pass. +Package and dependency handling get a reliability pass. + +### Package imports + +- Resolve package-named single-file modules such as + `flint_modules/levenshtein/levenshtein.fl`, alongside the existing + `main.fl` package entry point and flat-module layout. +- Document the supported package layouts and import lookup behavior. + +### Package installation + +- Clone Git dependencies into a staging directory before publishing a + mirror, so interrupted or incomplete clones do not become the active + cache. +- Serialize operations on a shared Git mirror and avoid following + symlinks during cache cleanup. +- Recover from damaged or incomplete mirrors on a subsequent install. +- Keep dependency arrays valid when expansion fails, clean up partial + dependency state, reject overlong paths, and bound cyclic dependency + resolution with a clear error. + +### Release and compatibility notes + +- Update the Rust `flintlang` and `flintlang-sys` crate metadata and + examples to version `0.14.0`. +- Report language, runtime, package format, bytecode, and lockfile + versions as `0.14.0`. The native ABI remains version `1`; it is + versioned independently. +- Identify HTTP requests with the `flint/0.14.0` User-Agent by default. +- Keep the standalone C runtime and the Rust-embedded C source in sync. + +Release gate: this changelog is a draft until PRs #10, #11, and #13 are +merged and the final release checks pass. Do not publish a `v0.14.0` +tag or artifacts before then. ## v0.13.2 From 039c6a3481c041e8eb8e1ebb90da0a0121d517d5 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:29:45 +0530 Subject: [PATCH 14/15] Sync embedded package usage text --- rust/flintlang/c-src/src/pkg.c | 64 +++++++++++++++++++++++++--------- 1 file changed, 47 insertions(+), 17 deletions(-) diff --git a/rust/flintlang/c-src/src/pkg.c b/rust/flintlang/c-src/src/pkg.c index aca7b39..fb01878 100644 --- a/rust/flintlang/c-src/src/pkg.c +++ b/rust/flintlang/c-src/src/pkg.c @@ -1312,33 +1312,63 @@ static void pkg_usage(FILE *stream) bool c = isatty(fileno(stream)); if (c) { - fprintf(stream, "usage: \x1b[1;36mflint pkg\x1b[0m \x1b[32m\x1b[0m \x1b[33m[options]\x1b[0m\n\n"); - fprintf(stream, "manage dependencies declared in flint.toml.\n\n"); + fprintf(stream, + "usage: \x1b[1;36mflint pkg\x1b[0m " + "\x1b[32m\x1b[0m " + "\x1b[33m[options]\x1b[0m\n\n"); + fprintf(stream, + "manage dependencies declared in flint.toml.\n\n"); fprintf(stream, "\x1b[1mcommands:\x1b[0m\n"); - fprintf(stream, " \x1b[32minstall\x1b[0m resolve manifest dependencies into flint_modules/\n"); - fprintf(stream, " \x1b[32madd\x1b[0m \x1b[33m\x1b[0m add dependency to flint.toml and install\n"); - fprintf(stream, " \x1b[32mupdate\x1b[0m \x1b[33m[name]\x1b[0m re-resolve git pins and reinstall\n"); - fprintf(stream, " \x1b[32mlist\x1b[0m list installed packages from flint.lock\n\n"); - - fprintf(stream, "\x1b[1mmanifest format (flint.toml):\x1b[0m\n"); + fprintf(stream, + " \x1b[32minstall\x1b[0m resolve manifest " + "dependencies into flint_modules/\n"); + fprintf(stream, + " \x1b[32madd\x1b[0m \x1b[33m\x1b[0m " + "add dependency to flint.toml and install\n"); + fprintf(stream, + " \x1b[32mupdate\x1b[0m \x1b[33m[name]\x1b[0m " + "re-resolve git pins and reinstall\n"); + fprintf(stream, + " \x1b[32mlist\x1b[0m list installed " + "packages from flint.lock\n\n"); + + fprintf(stream, + "\x1b[1mmanifest format (flint.toml):\x1b[0m\n"); fprintf(stream, " name = \"../path\"\n"); - fprintf(stream, " name = { path = \"../path\", version = \"^1.0.0\" }\n"); - fprintf(stream, " name = { git = \"https://...\", rev = \"v1.0.0\" }\n"); + fprintf(stream, + " name = { path = \"../path\", version = \"^1.0.0\" " + "}\n"); + fprintf(stream, + " name = { git = \"https://...\", rev = \"v1.0.0\" " + "}\n"); } else { fprintf(stream, "usage: flint pkg [options]\n\n"); - fprintf(stream, "manage dependencies declared in flint.toml.\n\n"); + fprintf(stream, + "manage dependencies declared in flint.toml.\n\n"); fprintf(stream, "commands:\n"); - fprintf(stream, " install resolve manifest dependencies into flint_modules/\n"); - fprintf(stream, " add add dependency to flint.toml and install\n"); - fprintf(stream, " update [name] re-resolve git pins and reinstall\n"); - fprintf(stream, " list list installed packages from flint.lock\n\n"); + fprintf(stream, + " install resolve manifest dependencies " + "into flint_modules/\n"); + fprintf(stream, + " add add dependency to flint.toml and " + "install\n"); + fprintf(stream, + " update [name] re-resolve git pins and " + "reinstall\n"); + fprintf(stream, + " list list installed packages from " + "flint.lock\n\n"); fprintf(stream, "manifest format (flint.toml):\n"); fprintf(stream, " name = \"../path\"\n"); - fprintf(stream, " name = { path = \"../path\", version = \"^1.0.0\" }\n"); - fprintf(stream, " name = { git = \"https://...\", rev = \"v1.0.0\" }\n"); + fprintf(stream, + " name = { path = \"../path\", version = \"^1.0.0\" " + "}\n"); + fprintf(stream, + " name = { git = \"https://...\", rev = \"v1.0.0\" " + "}\n"); } } From fc016a55049b60ad504dc798a1ea2c5443e03498 Mon Sep 17 00:00:00 2001 From: soumalya das Date: Sat, 10 Oct 2026 20:36:51 +0530 Subject: [PATCH 15/15] Include package lib manifest feature in 0.14.0 notes --- RELEASES.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/RELEASES.md b/RELEASES.md index 97224ff..0de2018 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -11,6 +11,12 @@ Package and dependency handling get a reliability pass. `main.fl` package entry point and flat-module layout. - Document the supported package layouts and import lookup behavior. +### Package manifest entry points + +- Add optional `[package] lib = "src/api.fl"` to declare the public module + for a package. The path is relative to the package root and must stay inside + that root; legacy entry-point layouts remain available when `lib` is absent. + ### Package installation - Clone Git dependencies into a staging directory before publishing a @@ -33,7 +39,7 @@ Package and dependency handling get a reliability pass. - Identify HTTP requests with the `flint/0.14.0` User-Agent by default. - Keep the standalone C runtime and the Rust-embedded C source in sync. -Release gate: this changelog is a draft until PRs #10, #11, and #13 are +Release gate: this changelog is a draft until PRs #10, #11, #13, and #14 are merged and the final release checks pass. Do not publish a `v0.14.0` tag or artifacts before then.