Skip to content

Commit efe995e

Browse files
committed
build(deps): bump zwasm pin v2.1.0 → v2.2.0 (AOT-full-fidelity release)
Smell-audited: 0: clean engine follow under the user's 2026-07-09 tag-watch directive; embedding surface unchanged, capability ledger refreshed in the same commit. zwasm v2.2.0 (cf5d20d7, ADR-0203 stages 1-5): guard-page bounds-check elision (D-507/ADR-0202) + committed differential-fuzz gate (D-510) + JIT helper de-baking into JitRuntime slots (D-516) + full-fidelity .cwasm v0.5 AOT serialize/load (aot-diff 62/62) + transparent on-disk compilation cache (--cache, D-508). cljw rides `.auto` (JIT-default, D-488) — the elision makes JIT bodies faster transparently; the AOT/.cwasm cache is a zwasm-CLI surface today (ledger row notes the cljw cold-start adoption candidate). Verified: zig build test -Dwasm (both-backend diff oracle) + smoke with all five wasm e2e steps (run/ffi/component/engine_select/require_component) green on the new pin. zwasm_capabilities.md: pin section + header to v2.2.0, two new capability rows, stale co-dev tree paths refreshed.
1 parent 7427289 commit efe995e

2 files changed

Lines changed: 48 additions & 42 deletions

File tree

.dev/zwasm_capabilities.md

Lines changed: 36 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
> **SSOT for "what does the zwasm we embed offer, and what has cljw adopted".**
44
> cljw embeds **zwasm v2** (F-001, unavoidable). The dep is a **tag pin**
5-
> **v2.1.0** (`d5d685ad`, see § Pin), pinned 2026-07-06 — the table64-JIT release
6-
> (bumped from stable v2.0.0 for zwasm D-475 native table64 JIT). zwasm is itself under active
7-
> co-development (`~/Documents/MyProducts/zwasm_from_scratch`, branch
8-
> `zwasm-from-scratch`) and its embedding API is *growing* — notably a **JIT-backed
5+
> **v2.2.0** (`cf5d20d7`, see § Pin), pinned 2026-07-09 — the AOT-full-fidelity
6+
> release (ADR-0203; guard-page bounds elision, diff-fuzz gate, .cwasm AOT +
7+
> on-disk compilation cache). zwasm is itself under active
8+
> co-development (`~/Documents/MyProducts/zwasm`) and its embedding API is
9+
> *growing* — notably a **JIT-backed
910
> engine** (the cljw north star, ROADMAP §9.0 gap area II × III). cljw has **adopted
1011
> the JIT as its default** (`.auto`, D-488 discharged); the remaining north-star step
1112
> is components-through-the-JIT (zwasm-side, D-500). This file is the durable record
@@ -35,23 +36,24 @@ a cljw-side shim.
3536

3637
| Source | What it tells you |
3738
|--------------------------------------------------------------------------|----------------------------------------------------------------|
38-
| `~/Documents/MyProducts/zwasm_from_scratch/private/dogfooding_handover/` | **the mailbox**`PROTOCOL.md` + `from_cljw_NN`/`to_cljw_NN` |
39-
| `~/Documents/MyProducts/zwasm_from_scratch/.dev/ROADMAP.md` | zwasm phase plan (p17 = JIT) |
40-
| `~/Documents/MyProducts/zwasm_from_scratch/.dev/decisions/0200_*.md` | ADR-0200 — JIT-DEFAULT engine + research-driven API |
41-
| `git -C ~/Documents/MyProducts/zwasm_from_scratch log --oneline -15` | recent JIT work (zwasm#477 multi-arg invoke arm64/x86_64) |
39+
| `~/Documents/MyProducts/zwasm/private/dogfooding_handover/` | **the mailbox**`PROTOCOL.md` + `from_cljw_NN`/`to_cljw_NN` |
40+
| `~/Documents/MyProducts/zwasm/.dev/ROADMAP.md` | zwasm phase plan (p17 = JIT) |
41+
| `~/Documents/MyProducts/zwasm/.dev/decisions/0200_*.md` | ADR-0200 — JIT-DEFAULT engine + research-driven API |
42+
| `git -C ~/Documents/MyProducts/zwasm log --oneline -15` | recent JIT work (zwasm#477 multi-arg invoke arm64/x86_64) |
4243

4344
## Pin
4445

45-
- **TAG PIN — v2.1.0 (`d5d685ad`), pinned 2026-07-06.** `build.zig.zon`
46-
`.zwasm` = `.url = "git+…/zwasm.git#v2.1.0"` + `.hash = "zwasm-2.1.0-FT1Fv7J…"`,
47-
resolved from GitHub. Bumped from stable v2.0.0 for zwasm D-475 (native table64 JIT
48-
compilation) + table64 elem-segment / instantiate-bounds hardening; cljw uses no
49-
tables, so behaviorally unaffected. Prior stable pin was **v2.0.0** (`0853f3c1`,
50-
2026-07-01, the cljw 1.0.0 release engine). This replaced the
51-
2026-06-21 relative-path JIT-adoption experiment (`.path = "../zwasm_from_scratch"`,
52-
no-push) once zwasm cut the pinnable tag (3-host green) — so the no-push mode is
53-
LIFTED and cljw pushes `main` again. v2.0.0 is a full stable GitHub Release
54-
(published 2026-07-01), the coherent engine cljw 1.0.0 ships on.
46+
- **TAG PIN — v2.2.0 (`cf5d20d7`), pinned 2026-07-09.** `build.zig.zon`
47+
`.zwasm` = `.url = "git+…/zwasm.git#v2.2.0"` + `.hash = "zwasm-2.2.0-FT1Fv2P…"`,
48+
resolved from GitHub. The AOT-full-fidelity release (zwasm ADR-0203 stages
49+
1-5): guard-page bounds-check elision (D-507/ADR-0202), committed
50+
differential-fuzz gate (D-510), JIT helper de-baking (D-516), full-fidelity
51+
`.cwasm` v0.5 AOT serialize/load (aot-diff 62/62), transparent on-disk
52+
compilation cache (`--cache`, D-508). cljw's embedding surface is unchanged
53+
(engine follow); the bump was executed under the user's standing 2026-07-09
54+
tag-watch directive (bump on a >v2.1.0 tag). Prior pins: **v2.1.0**
55+
(`d5d685ad`, 2026-07-06, table64-JIT) / **v2.0.0** (`0853f3c1`, 2026-07-01,
56+
the cljw 1.0.0 release engine).
5557
- `lazy` dependency: resolved only under `-Dwasm`. So a churning dep never
5658
breaks the day-to-day gate when the flag is off — it
5759
only gates what `cljw.wasm/*` can do.
@@ -60,20 +62,22 @@ a cljw-side shim.
6062

6163
## Capability table (refresh at each boundary)
6264

63-
| Capability | zwasm status (as of 2026-06-22) | in cljw's tree? | cljw adoption | ref |
64-
|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------------------------------------------------------------------------------------------------------|--------------|
65-
| Interp embedding (load/instantiate) | ready | YES | integrated behind `cljw.wasm/*` (-Dwasm) | F-001, D-036 |
66-
| `invoke` (call exported fn) | ready (interp + JIT) | YES (rel-path) | integrated; JIT `invoke` verified via unit test | D-036, D-488 |
67-
| Embedder hardening / WASI sandbox | landed (security pass `…→6b08fe70`, 3-host green) | mostly | consumed (old security mailbox) | CODEV |
68-
| **Multi-arg JIT invoke (≤5/7 GPR)** | **ready** (embedder-stable, to_cljw_02 matrix) | YES (rel-path) | exercised by the dual-engine unit test | to_cljw_02 |
69-
| **SIMD (v128) body on JIT** | **ready** (JIT-only by design; interp has no v128 dispatch) | YES (rel-path) | verified (lane0→42 on .jit); interp traps catchably | D-488 |
70-
| `exportFuncSig` on JIT instance | **ready** (JIT arm shipped @5b6449779, to_cljw_03) | YES (rel-path) | adopted — explicit `:jit` `wasm/call` works end-to-end (e2e) | D-488 |
71-
| FP-bank scalar JIT invoke (f32/f64) | **ready** (1/2-arg matrix COMPLETE @3cf40a573 — veneer→generic-buffer fall-through; 3-arg via buffer) | YES (rel-path) | adopted — `:jit` covers all 1/2-arg scalar (incl. mixed) + 3-arg; e2e-locked | D-488 |
72-
| **JIT-backed engine (`.auto`)** | **ON (JIT-first + interp fallback)** — re-landed v2.0.0-alpha.3 (D-478); x86_64 LSRA miscompile D-489/D-494 fixed, 3-host green | YES (tag-pin) | **ADOPTED — cljw default flipped `.interp``.auto` (D-488 discharged 2026-06-22); no-opts load rides JIT** | D-488 |
73-
| Components on JIT | interp-pinned (D-500, zwasm CM-API core); Win64 string-arg wrapper-thunk gap | YES (tag-pin) | unaffected — `.auto` default leaves components on interp (zwasm-side pin) | D-500, D-404 |
74-
| WIT component marshalling | future | NO | NOT adopted | D-404 |
75-
| no-max table `table.grow` (JIT) | tier-1 FIXED in v2.0.0 (D-501) — grows to a synth cap `max(min*2, 1024)`; unbounded no-max grow still interp-only | YES (pin) | unaffected (no `table.grow` / table decl in cljw host or FFI fixtures); available if a guest needs it | D-501 |
76-
| table64 (i64-indexed tables) on JIT | NEW in v2.1.0 (D-475) — table64 ops / `call_indirect` / elem segments compile natively (u64 index width, wrap-safe bounds); i32 tables keep the fast path | YES (pin) | unaffected (cljw declares no tables); a table64 guest now rides the JIT instead of the interp fallback | zwasm D-475 |
65+
| Capability | zwasm status (as of 2026-06-22) | in cljw's tree? | cljw adoption | ref |
66+
|---------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|---------------------------------------------------------------------------------------------------------------------------------|--------------|
67+
| Interp embedding (load/instantiate) | ready | YES | integrated behind `cljw.wasm/*` (-Dwasm) | F-001, D-036 |
68+
| `invoke` (call exported fn) | ready (interp + JIT) | YES (rel-path) | integrated; JIT `invoke` verified via unit test | D-036, D-488 |
69+
| Embedder hardening / WASI sandbox | landed (security pass `…→6b08fe70`, 3-host green) | mostly | consumed (old security mailbox) | CODEV |
70+
| **Multi-arg JIT invoke (≤5/7 GPR)** | **ready** (embedder-stable, to_cljw_02 matrix) | YES (rel-path) | exercised by the dual-engine unit test | to_cljw_02 |
71+
| **SIMD (v128) body on JIT** | **ready** (JIT-only by design; interp has no v128 dispatch) | YES (rel-path) | verified (lane0→42 on .jit); interp traps catchably | D-488 |
72+
| `exportFuncSig` on JIT instance | **ready** (JIT arm shipped @5b6449779, to_cljw_03) | YES (rel-path) | adopted — explicit `:jit` `wasm/call` works end-to-end (e2e) | D-488 |
73+
| FP-bank scalar JIT invoke (f32/f64) | **ready** (1/2-arg matrix COMPLETE @3cf40a573 — veneer→generic-buffer fall-through; 3-arg via buffer) | YES (rel-path) | adopted — `:jit` covers all 1/2-arg scalar (incl. mixed) + 3-arg; e2e-locked | D-488 |
74+
| **JIT-backed engine (`.auto`)** | **ON (JIT-first + interp fallback)** — re-landed v2.0.0-alpha.3 (D-478); x86_64 LSRA miscompile D-489/D-494 fixed, 3-host green | YES (tag-pin) | **ADOPTED — cljw default flipped `.interp``.auto` (D-488 discharged 2026-06-22); no-opts load rides JIT** | D-488 |
75+
| Components on JIT | interp-pinned (D-500, zwasm CM-API core); Win64 string-arg wrapper-thunk gap | YES (tag-pin) | unaffected — `.auto` default leaves components on interp (zwasm-side pin) | D-500, D-404 |
76+
| WIT component marshalling | future | NO | NOT adopted | D-404 |
77+
| no-max table `table.grow` (JIT) | tier-1 FIXED in v2.0.0 (D-501) — grows to a synth cap `max(min*2, 1024)`; unbounded no-max grow still interp-only | YES (pin) | unaffected (no `table.grow` / table decl in cljw host or FFI fixtures); available if a guest needs it | D-501 |
78+
| table64 (i64-indexed tables) on JIT | NEW in v2.1.0 (D-475) — table64 ops / `call_indirect` / elem segments compile natively (u64 index width, wrap-safe bounds); i32 tables keep the fast path | YES (pin) | unaffected (cljw declares no tables); a table64 guest now rides the JIT instead of the interp fallback | zwasm D-475 |
79+
| guard-page bounds-check elision (JIT) | NEW in v2.2.0 (D-507/ADR-0202) — reservation-backed linear memory + fault→trap PC-redirect; bounds checks elided by default, diff-fuzz-gated (D-510) | YES (pin) | transparent — cljw's `.auto` guests get the faster JIT bodies; no embedding-API change | zwasm D-507 |
80+
| .cwasm AOT + on-disk compile cache | NEW in v2.2.0 (ADR-0203) — full-fidelity `.cwasm` v0.5 serialize/load (aot-diff 62/62) + transparent `--cache` (D-508); JIT helpers de-baked (D-516) | YES (pin) | NOT adopted — zwasm-CLI-side surface today; candidate for cljw cold-start (evaluate when an embedding API for the cache lands) | zwasm D-508 |
7781

7882
## Forward plan — the JIT adoption unit (gap area II × III) — ACTIVE
7983

build.zig.zon

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,19 @@
1010
},
1111
// zwasm v2 embedding API (F-001 / D-037). `lazy` so the DEFAULT build +
1212
// gate never resolve it — only `-Dwasm` (b.lazyDependency) does.
13-
// PINNED to STABLE tag **v2.1.0** (zwasm@d5d685ad, 2026-07-06): the table64-JIT
14-
// release. Bumped from v2.0.0 to pick up native table64 (i64-indexed table)
15-
// JIT compilation (zwasm D-475, PR #127) + table64 elem-segment / bounds
16-
// hardening. cljw uses no tables in its host or FFI fixtures, so this is
17-
// behaviorally unaffected — a clean engine follow. `.auto`=JIT-default; cljw
18-
// rides `.auto` (D-488). (Prior relative-path form: `.path =
19-
// "../zwasm_from_scratch"`, see git history.) lazy + flag-guard means a
20-
// churning dep cannot break the default gate.
13+
// PINNED to STABLE tag **v2.2.0** (zwasm@cf5d20d7, 2026-07-09): the
14+
// AOT-full-fidelity release (ADR-0203 stages 1-5). Bumped from v2.1.0 to
15+
// pick up guard-page bounds-check elision (zwasm D-507, ADR-0202), the
16+
// committed differential-fuzz gate (D-510), JIT helper de-baking into
17+
// JitRuntime slots (D-516), full-fidelity .cwasm v0.5 AOT serialize/load
18+
// (aot-diff 62/62), and the transparent on-disk compilation cache
19+
// (--cache, D-508). cljw's embedding surface (Engine/Module/Instance via
20+
// `.auto`=JIT-default, D-488) is unchanged — an engine follow; the AOT
21+
// cache is opt-in on the zwasm side. lazy + flag-guard means a churning
22+
// dep cannot break the default gate.
2123
.zwasm = .{
22-
.url = "git+https://github.com/clojurewasm/zwasm.git#v2.1.0",
23-
.hash = "zwasm-2.1.0-FT1Fv7J_iwADA4XfXfKPCuoNE9IzQgo4HXfLR1sO6D0h",
24+
.url = "git+https://github.com/clojurewasm/zwasm.git#v2.2.0",
25+
.hash = "zwasm-2.2.0-FT1Fv2PwjACdhzh76isO9noV0ISNRXKkS8e_8DddrYJo",
2426
.lazy = true,
2527
},
2628
},

0 commit comments

Comments
 (0)