From b5800df038e547e027381ab2c06812ffcc4d0233 Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Wed, 8 Jul 2026 23:51:24 +0200 Subject: [PATCH] chore(release): bump to v0.24.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v0.24.0 — "Structured WIT records + a compiling wit-bindgen component crate". One feature area shipped since v0.23.0 (PR #320, closes #319 items 1/3/4/6/7): - REQ-CODEGEN-WIT-RECORDS-001 (verified) — spar codegen now emits structured, no_alloc-representable WIT from real AADL: a `data implementation` becomes a WIT `record` (recursively, dependency-first), scalar fields map to precise WIT scalars honouring signedness/float (a non-encodable field is a HARD ERROR, not a silent `list`), `wit_ident` preserves PascalCase word boundaries, each thread's `world` exports its `Dispatch_Protocol`-derived lifecycle, and a per-process binding crate wires the world to Rust (`generate!` + `impl Guest` + `export!`). Because wit-bindgen derives the `Guest` trait from the world, a `cargo check` of the emitted crate is a COMPILER-ENFORCED alignment oracle. - REQ-CODEGEN-WIT-RECORDS-002 (verified) — the WHOLE generated per-process crate now compiles: classifier-typed ports resolve to real Rust types (records -> structs in a per-crate `types` module derived from the SAME DataShape as the WIT records), per-thread files are relocated under the crate and module-wired, and the `Guest` delegates to each per-thread component. The no_alloc guarantee has a SOUND oracle at the WIT level (`list`/`string` absence) after a probe showed the wasm `cabi_realloc` symbol is unconditional wit-bindgen-rt glue that cannot discriminate; an opaque-port model is the negative control. The emitted crate also builds to wasm32-wasip2. A dedicated `codegen-oracle` CI job runs the #[ignore] compile oracles so they actually gate. Honesty / scope (stated, not footnoted): the no-alloc guarantee holds only for all-scalar/record ports (an opaque top-level port keeps the `list` fallback by design). DEFERRED to successor requirements: the data plane (populating ports from imported WIT functions + persistent component state — Guest methods are free fns), and REQ-CODEGEN-VERIFY-WORKSPACE-001 (`spar codegen --verify test/build` still emits artifacts that are inert in the generated virtual workspace). Falsification: if a generated `Guest` method name diverges from its WIT world export, or a record-typed port references an undefined Rust type, the `codegen-oracle` job fails to compile the emitted crate; if an all-scalar/record model emits any `list`/`string` in its WIT, the no-alloc oracle fails. Co-Authored-By: Claude Opus 4.8 (1M context) --- Cargo.lock | 46 ++++++++++++++++++------------------- Cargo.toml | 2 +- artifacts/requirements.yaml | 10 ++++---- vscode-spar/package.json | 2 +- 4 files changed, 29 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a5fadab..e497c1f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1373,7 +1373,7 @@ dependencies = [ [[package]] name = "spar" -version = "0.23.0" +version = "0.24.0" dependencies = [ "etch", "la-arena", @@ -1405,7 +1405,7 @@ dependencies = [ [[package]] name = "spar-analysis" -version = "0.23.0" +version = "0.24.0" dependencies = [ "la-arena", "rustc-hash 2.1.2", @@ -1419,7 +1419,7 @@ dependencies = [ [[package]] name = "spar-annex" -version = "0.23.0" +version = "0.24.0" dependencies = [ "rowan", "spar-syntax", @@ -1427,7 +1427,7 @@ dependencies = [ [[package]] name = "spar-base-db" -version = "0.23.0" +version = "0.24.0" dependencies = [ "rowan", "salsa", @@ -1437,7 +1437,7 @@ dependencies = [ [[package]] name = "spar-codegen" -version = "0.23.0" +version = "0.24.0" dependencies = [ "criterion", "la-arena", @@ -1452,7 +1452,7 @@ dependencies = [ [[package]] name = "spar-dbc" -version = "0.23.0" +version = "0.24.0" dependencies = [ "can-dbc", "expect-test", @@ -1463,7 +1463,7 @@ dependencies = [ [[package]] name = "spar-hir" -version = "0.23.0" +version = "0.24.0" dependencies = [ "salsa", "serde", @@ -1476,7 +1476,7 @@ dependencies = [ [[package]] name = "spar-hir-def" -version = "0.23.0" +version = "0.24.0" dependencies = [ "la-arena", "rowan", @@ -1491,7 +1491,7 @@ dependencies = [ [[package]] name = "spar-insight" -version = "0.23.0" +version = "0.24.0" dependencies = [ "pretty_assertions", "serde", @@ -1503,7 +1503,7 @@ dependencies = [ [[package]] name = "spar-mcp" -version = "0.23.0" +version = "0.24.0" dependencies = [ "serde", "serde_json", @@ -1518,7 +1518,7 @@ dependencies = [ [[package]] name = "spar-mermaid" -version = "0.23.0" +version = "0.24.0" dependencies = [ "la-arena", "rustc-hash 2.1.2", @@ -1527,7 +1527,7 @@ dependencies = [ [[package]] name = "spar-network" -version = "0.23.0" +version = "0.24.0" dependencies = [ "good_lp", "spar-base-db", @@ -1536,7 +1536,7 @@ dependencies = [ [[package]] name = "spar-parser" -version = "0.23.0" +version = "0.24.0" dependencies = [ "expect-test", "proptest", @@ -1546,7 +1546,7 @@ dependencies = [ [[package]] name = "spar-render" -version = "0.23.0" +version = "0.24.0" dependencies = [ "etch", "la-arena", @@ -1557,7 +1557,7 @@ dependencies = [ [[package]] name = "spar-solver" -version = "0.23.0" +version = "0.24.0" dependencies = [ "criterion", "good_lp", @@ -1571,7 +1571,7 @@ dependencies = [ [[package]] name = "spar-syntax" -version = "0.23.0" +version = "0.24.0" dependencies = [ "expect-test", "rowan", @@ -1580,7 +1580,7 @@ dependencies = [ [[package]] name = "spar-sysml2" -version = "0.23.0" +version = "0.24.0" dependencies = [ "expect-test", "la-arena", @@ -1591,7 +1591,7 @@ dependencies = [ [[package]] name = "spar-trace-topology" -version = "0.23.0" +version = "0.24.0" dependencies = [ "pcap-parser", "serde", @@ -1605,7 +1605,7 @@ dependencies = [ [[package]] name = "spar-transform" -version = "0.23.0" +version = "0.24.0" dependencies = [ "la-arena", "serde", @@ -1616,7 +1616,7 @@ dependencies = [ [[package]] name = "spar-variants" -version = "0.23.0" +version = "0.24.0" dependencies = [ "pretty_assertions", "serde", @@ -1626,14 +1626,14 @@ dependencies = [ [[package]] name = "spar-verify" -version = "0.23.0" +version = "0.24.0" dependencies = [ "spar-verify-macros", ] [[package]] name = "spar-verify-macros" -version = "0.23.0" +version = "0.24.0" dependencies = [ "proc-macro2", "quote", @@ -1642,7 +1642,7 @@ dependencies = [ [[package]] name = "spar-wasm" -version = "0.23.0" +version = "0.24.0" dependencies = [ "etch", "la-arena", diff --git a/Cargo.toml b/Cargo.toml index a61c322..973da2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ members = [ ] [workspace.package] -version = "0.23.0" +version = "0.24.0" edition = "2024" license = "MIT" repository = "https://github.com/pulseengine/spar" diff --git a/artifacts/requirements.yaml b/artifacts/requirements.yaml index a73d929..8719c06 100644 --- a/artifacts/requirements.yaml +++ b/artifacts/requirements.yaml @@ -2685,10 +2685,9 @@ artifacts: `*Impl` record structs + typed ports and module-wiring the per-thread files so the WHOLE crate (not just the binding lib.rs) compiles, and the wasm-component zero-`cabi_realloc` symbol check. Reported as GitHub #319. - status: implemented + status: verified tags: [codegen, wit, rust, wit-bindgen, interop] - fields: - release: v0.24.0 + release: v0.24.0 links: - type: traces-to target: REQ-CODEGEN-WIT-TYPES @@ -2726,10 +2725,9 @@ artifacts: imported WIT functions and persistent component state (Guest methods are free fns). Optional stronger evidence, not a completion gate: the crate also builds to `wasm32-wasip2` (toolchain present locally). - status: implemented + status: verified tags: [codegen, wit, rust, wit-bindgen, no-alloc] - fields: - release: v0.24.0 + release: v0.24.0 links: - type: traces-to target: REQ-CODEGEN-WIT-RECORDS-001 diff --git a/vscode-spar/package.json b/vscode-spar/package.json index 325ea7f..a2516f9 100644 --- a/vscode-spar/package.json +++ b/vscode-spar/package.json @@ -3,7 +3,7 @@ "displayName": "AADL (spar)", "description": "AADL v2.2/v2.3 language support with live architecture visualization", "publisher": "pulseengine", - "version": "0.23.0", + "version": "0.24.0", "license": "MIT", "repository": { "type": "git",