Releases: pulseengine/meld
v0.9.0
What's Changed
- feat(ci): LS-N verification gate (spar-pattern port) by @avrabe in #161
- feat(ci): Mythos delta-pass auto-runner (single-actor, OAuth-token) by @avrabe in #162
- test(merger): add LS-A-19 regression for exact resource-import lookup by @avrabe in #163
- fix(ci): mythos-auto plumbing — slug ordering, unzip install by @avrabe in #164
- chore: DWARF / witness mapping discovery for fused output (sub-#130) by @avrabe in #131
- test(dwarf): LS-CP-4 aliases + gate scans integration tests by @avrabe in #165
- test(fact): LS-A-9 regression for callback POLL dispatch by @avrabe in #166
- test(fact): LS-A-8 regression for inner-list rep_func selection by @avrabe in #169
- fix(ci): drop musl target from fuzz.yml + add id-token to mythos-auto (#168) by @avrabe in #170
- ci: skip bench/fuzz/ci on docs/safety-only changes by @avrabe in #171
- feat(p3): cross-component stream pairing detection (#141, ADR-3) by @avrabe in #173
- fix(ci): mythos-auto aggregate uses curl not gh; register p3_stream.rs by @avrabe in #175
- chore: release v0.9.0 by @avrabe in #176
Full Changelog: v0.8.1...v0.9.0
v0.8.1
What's Changed
- feat(p3-async): cross-memory ptr-pair return for stackful lift by @avrabe in #150
- feat(ci): Mythos delta-pass gate on Tier-5 file changes by @avrabe in #151
- fix(parser): fold extended-const init/offset expressions (LS-A-11) by @avrabe in #152
- fix(determinism): replace HashMap.iter().find with sorted-key iteration (LS-A-15) by @avrabe in #154
- fix(resource-graph,merger): match full (iface, rn) tuple in 4 sites (LS-A-17/18/19) by @avrabe in #156
- fix(parser): canonical ABI for flags (LS-A-20) by @avrabe in #157
- fix(p3-async): mixed-mode stackful, type classification, stream-write over-count by @avrabe in #153
- fix(wrap): route lift lookup via export name + propagate string encoding (LS-A-16) by @avrabe in #159
- chore: release v0.8.1 by @avrabe in #160
Full Changelog: v0.8.0...v0.8.1
v0.8.0
What's Changed
- docs: evaluate arXiv 2604.13693 (WarpL) for meld CI use by @avrabe in #138
- docs: roadmap v0.8 → v0.11 + rivet SDLC artifacts by @avrabe in #145
- feat(p3-async): stackful lifting ABI foundation (#140 phase 1) by @avrabe in #146
- feat(p3-async): stackful lifting trampoline emitter (#140 phase 2, SR-32) by @avrabe in #147
- fix(adapter): pad CABI alignment in async-lift retptr writeback (LS-A-10) by @avrabe in #148
- chore: release v0.8.0 by @avrabe in #149
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- chore(ci): add concurrency control to all workflows by @avrabe in #133
- ci: migrate 9 of 12 workflow jobs to smithy self-hosted runners by @avrabe in #134
- feat(core): explicit DWARF policy with Strip default (#130 phase 1.5) by @avrabe in #135
- chore: release v0.7.0 by @avrabe in #137
Full Changelog: v0.6.0...v0.7.0
v0.6.0 — P3 async lowering complete + Mythos fix
Headlines
Closes the #94 epic — P3 async support is now end-to-end functional.
Added
- P3 async lowering pass (#120 / #129):
(canon stream.*)/(canon future.*)→ core-module imports againstpulseengine:async. End-to-end tests for stream and future. AbiErrorenum + typed result decoders + ADR-2 (#121 / #127). Closed numeric error codes; partial-write / EOF / waitable-set-wait semantics documented.- Async-export callback trampoline alignment (#122 / #128). Stable
event::*/callback::*constants; canonical trampoline shape pinned.
Fixed
- LS-A-9 (Mythos):
callback::POLLwas dispatched as YIELD, dropping host-ready events. Trampoline now branches onWAIT || POLL.
Pre-release Mythos pass
Tier-5 + tier-4 changed since v0.5.0: adapter/fact.rs only (+62 LOC). 1 confirmed finding (LS-A-9), fixed in this release.
Full changelog
See CHANGELOG.md.
What's Changed
- feat: P3 async error / backpressure conventions for pulseengine:async ABI (closes #121) by @avrabe in #127
- feat: P3 async lowering pass — canon stream/future → pulseengine:async (closes #120) by @avrabe in #129
- feat: align async-export callback trampoline with pulseengine:async ABI (closes #122) by @avrabe in #128
- chore: release v0.6.0 by @avrabe in #132
Full Changelog: v0.5.0...v0.6.0
v0.5.0 — P3 async foundation + criterion benches + parser robustness
Headlines
3 issues closed (#94 partial, #103, #118).
Added
- P3 async lowering foundation (#94 / #124, partial). Documented
pulseengine:asynchost-intrinsic ABI (14 verbs coveringstream<T>andfuture<T>), detection layer in newmeld-core::p3_asyncmodule,Fuser::p3_async_summary()accessor, and ADR-1. The lowering pass is tracked as #120; the v0.5.0 ABI is the stable contract follow-ups land against. - Criterion benchmarks (#103 / #123).
meld-core/benches/fusion_benchmarks.rsships parser / merger / resolver / end-to-end groups against the wit-bindgen test fixtures. CIBench compile-onlyjob verifies on every PR. RivetTEST-BENCH-*artifacts.
Fixed
- Parser slice OOB on truncated component-section input (#118 / #125). The
Payload::ModuleSection.unchecked_rangeand three sibling section payloads previously panicked on&full_bytes[range.start..range.end]when input was truncated. Fix:checked_section_slicehelper bounds-checks the range and returns a structuredParseErrorinstead of slicing. Regression test + libFuzzer corpus seed shipped. LS-P-5 approved.
Pre-release Mythos pass
Tier-5 + tier-4 files changed since v0.4.0: parser.rs only. Scanned per scripts/mythos/discover.md; no confirmed findings.
One unverified hypothesis flagged for the next pass (sibling reader.range() storage sites in parse_core_module of the same class as LS-P-5; surface narrowed by the outer module bounds check at parser.rs:820). The 2026-05-20 verification routine includes a deeper Mythos sweep that will revisit.
Follow-ups filed
- #120 — P3 async lowering pass (rewrite
(canon stream.*)→pulseengine:async/*imports in fused output) - #121 — Error and backpressure conventions for the
pulseengine:asyncABI - #122 — Async-export callback trampoline alignment with the new ABI
Full changelog
See CHANGELOG.md.
What's Changed
- fix: parser rejects truncated component-section input cleanly (closes #118) by @avrabe in #125
- feat: P3 async lowering — foundation + stream e2e (partial #94) by @avrabe in #124
- feat: criterion benchmarks for fusion pipeline (closes #103) by @avrabe in #123
- chore: release v0.5.0 by @avrabe in #126
Full Changelog: v0.4.0...v0.5.0
v0.4.0 — V&V hardening + Mythos v0.4 cleanup
Headlines
V&V-hardening minor release. 5 issues closed (#98, #99, #102, #104, #112).
Added
- Kani + proptest harnesses for parser/merger/resolver (#102 / #116). Three Kani harnesses (parser no-panic on bounded inputs, model topological sort, model resolver loop) plus proptest for fusion round-trips.
- cargo-fuzz scaffolding with 4 targets and seed corpora (#104 / #114). CI runs each target for 60 s on every PR (informational).
Fixed
compare_versionhandles pre-release suffixes per semver 2.0.0 (#98 / #113). Previously"0.2.99-rc1"sorted less than"0.2.0".- Resource-import fallback name-keyed (#99 / #115).
build_resource_type_to_importno longer collapses multi-resource imports onto a sentinel slot; replaced withResourceImportMap { by_type_id, by_name }. - Mythos v0.4 follow-up — items 4, 5, 6 (#112 / #117):
- LS-CP-3 / SR-19:
graph.adapter_sitessorted viasort_adapter_sites_for_determinismafter both adapter passes; previously HashMap iteration order leaked into adapter-offset → merged-function-index, breaking byte-equal builds. - LS-R-10 / UCA-R-3:
identify_intra_component_adapter_sitespreservesfrom_import_modulewhen promoting; previouslyimport_namewas copied intoimport_module, causingmerger.rs:1500's disjunctive match to accept the wrong import for two same-name functions from different modules. - LS-CP-3 (second class): three
caller_lower_map.iter().next()encoding fallbacks now useiter().min_by_key(|(k,_)| **k)for stability.
- LS-CP-3 / SR-19:
Pre-release Mythos pass
Tier-5 + tier-4 files changed since v0.3.0: merger.rs, resolver.rs. Both scanned per scripts/mythos/discover.md; no confirmed findings.
The cargo-fuzz scaffolding (#114) immediately surfaced a real parser panic on truncated component-section input — tracked as #118 for v0.4.1 / v0.5.
Full changelog
See CHANGELOG.md.
What's Changed
- fix: compare_version handles pre-release suffixes (closes #98) by @avrabe in #113
- feat: Kani + proptest harnesses for parser/merger/resolver (closes #102) by @avrabe in #116
- feat: cargo-fuzz targets for parser/merger/resolver (closes #104) by @avrabe in #114
- fix: key resource-import fallback by name, eliminate sentinel (closes #99) by @avrabe in #115
- fix: Mythos v0.4 follow-up — items 4, 5, 6 (closes #112 partially) by @avrabe in #117
- chore: release v0.4.0 by @avrabe in #119
Full Changelog: v0.3.0...v0.4.0
v0.3.0 — Trio runtime fixtures pass + Mythos pre-release fixes
Headlines
- Per-component handle tables for resource definers (#108, #109). Cross-component handle hand-offs go through bridging trampolines that translate
(caller_handle → caller.ht_rep → rep → callee.ht_new → callee_handle). - Trio runtime fixtures pass (closes #75):
resource_floats,resource_with_lists, andresource-import-and-exportare nowruntime_test!fixtures. The 73-test wit-bindgen suite remains green. --opaque-repCLI flag for resources whose representation is treated as au32rather than a boxed pointer.
Mythos pre-release fixes
The pre-release Mythos delta pass surfaced two confirmed findings; both fixed in this release and documented as approved loss scenarios:
- LS-P-4 (UCA-P-3): canonical-ABI size saturating arithmetic on nested
fixed-length-list. Prevents debug-build panic and release-build wrap-to-0 → OOB write into receiver memory. - LS-A-8 (UCA-A-7): per-type
rep_funcselection for inner-listborrow<T>. Previouslyresource_rep_imports.values().next()(HashMap-arbitrary) routed handle A through resource B's rep_func; now resolved via the callee'sresource_type_to_importmap.
Six unverified Mythos suspicions deferred to v0.4 in issue #112.
Full changelog
See CHANGELOG.md.
What's Changed
- fix(adapter): conditional pointer copy for option/result/variant types by @avrabe in #16
- feat(safety): STPA analysis, safety requirements, and 30 new tests by @avrabe in #13
- feat: expand wit-bindgen fixtures to 8 type families by @avrabe in #15
- fix: multi-memory WASI import lowering and adapter type fixes by @avrabe in #20
- test: adapter safety runtime tests for SR-12/13/15/16 by @avrabe in #21
- fix: attestation safety hardening and resources fixture stubs by @avrabe in #22
- Expand wit-bindgen fixtures to 14 and add multi-memory unit tests by @avrabe in #23
- safety: STPA analysis of BA RFC #46 and cross-toolchain consistency by @avrabe in #25
- fix: cross-toolchain ABI consistency is ecosystem-wide, not unique by @avrabe in #26
- fix: address critical safety gaps (SR-17, SR-25, SR-31) by @avrabe in #27
- feat(SR-25): fix resource handle translation in cross-component adapters by @avrabe in #28
- test(#1): expand wit-bindgen fixture coverage from 14 to 45 by @avrabe in #29
- fix: disambiguate adapter matching and populate fallback resource params by @avrabe in #30
- fix: propagate resource type aliases in resource import map by @avrabe in #31
- fix: resolve imported resource types in resource position lookup by @avrabe in #32
- refactor: add ResourceBorrowTransfer and callee_defines_resource flag by @avrabe in #33
- feat: per-component resource import tracking for 3-component borrow forwarding by @avrabe in #34
- feat: STPA resource handle analysis and implementation plans by @avrabe in #35
- fix(SR-33): own result conversion for 3-component chains by @avrabe in #36
- fix(SR-32): inner resource handle fixup for borrow in list elements by @avrabe in #37
- fix(SR-37): per-component resource types in P2 wrapper by @avrabe in #38
- fix: resolve instance alias arguments in propagate_outer_wiring by @avrabe in #40
- fix: per-kind index resolution in propagate_outer_wiring by @avrabe in #41
- fix: copy ALL pointer pairs in non-retptr adapter path by @avrabe in #42
- feat: composition DAG wiring hints for directed import resolution by @avrabe in #43
- fix: fallback to core imports in resource type map by @avrabe in #44
- fix: Step 4b core import scan for resource type map by @avrabe in #45
- fix: correct callee_defines_resource for sentinel type entries by @avrabe in #46
- fix: use first candidate in resource position fallback by @avrabe in #47
- fix: use composition DAG to determine callee_defines_resource by @avrabe in #48
- fix: per-component synthesis dedup + SR-33 cross-memory by @avrabe in #49
- refactor: shared resource types per interface in P2 wrapper by @avrabe in #50
- chore: add AGENTS.md via rivet init --agents by @avrabe in #51
- feat: resource ownership graph (petgraph) — Phase 1 by @avrabe in #52
- feat: resource graph Phase 2 — DAG-based callee_defines_resource by @avrabe in #53
- feat: unified resource types + graph re-exporter detection by @avrabe in #54
- feat: resource graph fixes, emit-import-map, and stable clippy by @avrabe in #55
- fix: osxcar build script with per-component worlds by @avrabe in #56
- fix: split Phase R own result transfer around post_return by @avrabe in #57
- feat: detect and reject P3 async components (Phase 1) by @avrabe in #58
- fix: synthesize callee resource.rep for own result transfers by @avrabe in #59
- docs: add re-exporter detection implementation plan by @avrabe in #60
- test: add osxcar anti-pinch integration tests by @avrabe in #61
- feat: bump wit-bindgen to 0.54.0 for P3 sync-only support by @avrabe in #62
- fix: use memory index for cabi_realloc$N export suffix by @avrabe in #63
- fix: use resource_definer for graph override instead of is_reexporter by @avrabe in #64
- feat: implement params-ptr lowering for >16 flat params by @avrabe in #65
- fix: prevent double resource.rep for forwarded borrow params by @avrabe in #66
- fix: correct ComponentTypeRef tag constant (0x03 not 0x04) by @avrabe in #67
- fix: per-component resource types — all 45 fixtures pass at runtime by @avrabe in #68
- fix(tests): use Command API for wasi:cli/run runtime tests by @avrabe in #77
- fix: reject multiply-instantiated modules in resolver by @avrabe in #76
- fix: prevent subtraction overflow in attestation size_reduction calc by @avrabe in #78
- feat: per-component handle table allocation and function generation by @avrabe in #79
- feat: route re-exporter resource imports to handle table functions by @avrabe in #80
- fix: set caller_already_converted for re-exporter adapter chains by @avrabe in #81
- feat(tests): update wit-bindgen fixtures to v0.54.0 with WASI version compat by @avrabe in #83
- safety: STPA analysis of resource type dedup in 3-component chains by @avrabe in #84
- fix: synthesize caller's resource imports for per-component type identity by @avrabe in #85
- fix: strip $N suffix from resource name in resource tracking maps by @avrabe in #86
- fix: restrict handle table routing to exports interface only by @avrabe in #87
- fix: suffix duplicate exports in multi-memory mode to prevent cross-component collisions by @avrabe in #88
- fix: export dedup + shared resource types + disable handle tables by @avrabe in #89
- fix: remove incorrect caller_already_converted for re-exporter adapters by @avrabe in #90
- feat: P3 async component fusion by @avrabe in #93
- feat: callback-driving adapter for P3 async fusion by @avrabe in #95
- fix: async adapter string params + shim routing by @avrabe in #96
- fix: prevent resource map overwrites and remove unsafe graph upgrades by @avrabe in #91
- fix: disambiguate import resolution by module+name (closes #97) by @avrabe in #100
- docs: consolidate project guidance into AGENTS.md by @avrabe in #101
- docs: memo on wasmtime FACT reusability for Christof Petig by @avrabe in #105
- feat: per-res...
v0.1.0
What's Changed
- Add formal verification proofs and spec-sync tooling by @avrabe in #2
- feat: proofs, adapters, verification, and docs alignment by @avrabe in #4
- feat: multi-memory fusion, P2 component wrapping, and fully-closed formal proofs by @avrabe in #5
- fix(component): replace bump allocator with indirect table pattern by @avrabe in #6
- ci: add release workflow by @avrabe in #7
- fix(ci): use macos-14 for x86_64-apple-darwin release build by @avrabe in #8
New Contributors
Full Changelog: https://github.com/pulseengine/meld/commits/v0.1.0