What's Changed
- fix: detect duplicate free-function names before WASM/LLVM emission by @iheitlager in #2037
- fix(wasm): Result/Option Float payloads + Float.to_string()/format() by @iheitlager in #2040
- fix(tools): read tree-sitter grammar from its own submodule; correct IFC docs by @iheitlager in #2042
- chore(vendor): bump both grammar submodules to current; record ctor_path divergence by @iheitlager in #2044
- fix(wasm): Option/Result[String]::unwrap_or emits mismatched if/else shapes by @iheitlager in #2048
- fix(wasm): fix curated playground examples (#2045, #2046, #2047) by @iheitlager in #2057
- docs(security): add SECURITY.md; reconcile roadmap with actual issue state by @iheitlager in #2060
- docs(security): drop a link to a repo that is still private by @iheitlager in #2061
- fix(wasm): dispatch user-defined extension methods on custom structs by @iheitlager in #2058
- docs: correct L4's algorithm name from Cooper's to Fourier-Motzkin by @iheitlager in #2063
- fix(backends): key last-use tracking by binding identity, not name by @iheitlager in #2064
- refactor(assurance): adopt case/verification/traceability/evidence vocabulary by @iheitlager in #2065
- fix(wasm): support write/stdout/stderr/now for std.log by @iheitlager in #2070
- fix: set MVL_NO_REEXEC=1 in examples/test-all.sh by @iheitlager in #2072
- docs: move AGENTS.md to mvl-spec, fix a dangling cross-reference by @iheitlager in #2078
- fix: #2023/#2052 WASM String-return UAF, #2053 stack imbalance, #2062 LLVM extension-method dispatch by @iheitlager in #2059
- fix(lint): clear unused-function and Int zero-arg-literal-fn-as-const warnings by @iheitlager in #2082
- fix(wasm): std.io read_file/_read_file has no import/runtime shim by @iheitlager in #2079
- fix: five pre-existing make check-compiler failures by @iheitlager in #2080
- feat(wasm): List higher-order functions, sort_by, and remaining parse ops (#2014) by @iheitlager in #2081
- fix(wasm): make examples/bzip buildable and add std.env args()/get() shims by @iheitlager in #2085
- fix(wasm): stop infinite recursion on bitwise refinement predicates by @iheitlager in #2087
- feat(wasm): add std.env, std.io, std.time, std.random runtime by @iheitlager in #2094
- chore(wasm): shrink runtime/wasm/ artifact with wasm-opt -Oz by @iheitlager in #2097
- feat(wasm): design --target=wasm-browser flag by @iheitlager in #2098
- chore: remove unused legacy std.time runtime helpers by @iheitlager in #2103
- fix: wire std.io Path builtins on WASM and LLVM backends by @iheitlager in #2104
- chore: release v1.7.4 by @iheitlager in #2106
- chore: align runtime crate versions to 1.0.4 by @iheitlager in #2107
- fix(wasm): wire std.io open()/close() to WASM emitter and runtime by @iheitlager in #2111
- fix(wasm): String type aliases, match scrutinees, and List concat by @iheitlager in #2116
- fix(wasm): ref String reassignment declare/emit split-brain; wire log_to_file by @iheitlager in #2120
- fix(checker): unannotated lambda return type, Map::put/without generic inference by @iheitlager in #2126
- fix(wasm): Fd never reaches struct_layouts, causing dangling calls by @iheitlager in #2105
- fix(wasm): non-generic ext methods on builtin wrappers unreachable by @iheitlager in #2128
- feat(examples): wire mastermind into make test-examples-wasm by @iheitlager in #2129
- docs(adr): fix ADR-0031 status drift, drop stale UFCS jargon by @iheitlager in #2132
- feat(wasm): extern "rust" FFI via embedded-wasmtime host (#2049) by @iheitlager in #2133
- fix(wasm): Set[T]::remove and ::map have no emitter arm (#2124) by @iheitlager in #2130
- fix(llvm): Set[T]::map does not dedupe results (#2134) by @iheitlager in #2135
- fix(wasm): load collections.mvl into implicit prelude, fix Set HOF methods (#2131) by @iheitlager in #2136
- fix(wasm,llvm): let x: ref List/Set[T] = deep-copies instead of aliasing by @iheitlager in #2139
- test(stdlib): regression test for io::remove vs Map/Set::remove collision by @iheitlager in #2140
- fix(checker): mutating collection methods require a ref receiver by @iheitlager in #2142
- fix(checker): extend mutating-method check to field receivers by @iheitlager in #2143
- fix(wasm): Ok(())/Some(())/char literals stub instead of lowering by @iheitlager in #2148
- fix: Option::map/Result::map/Result::and_then have no implementation by @iheitlager in #2150
- spike(007): standalone WASM harness for --backend=wasm output by @iheitlager in #2144
- fix(examples): access_control test-wasm can't reach extern FFI via tools/mvlr by @iheitlager in #2151
- fix(llvm): cross-sibling function calls can see the wrong return type by @iheitlager in #2153
- fix(wasm): string literals/Int::to_string/Bool::to_string broken with no fn main by @iheitlager in #2155
- chore(examples): log_analyzer lint fixes + exclude snake_game from wasm by @iheitlager in #2160
- fix(wasm): Int/UInt/Float::abs/clamp/pow have no emitter arm (#2122) by @iheitlager in #2156
- fix(wasm): capturing closures compile to unreachable stubs (#2118) by @iheitlager in #2157
- fix(wasm): named function used as an fn-value has no funcref table slot (#2159) by @iheitlager in #2161
- fix(wasm): Int::to_float()/Float::to_int() have no emitter arm at all by @iheitlager in #2165
- fix(cli): mvl test silently drops inline test fn when a same-stem *_test.mvl sibling exists by @iheitlager in #2170
- fix(wasm): generic Option/Result::map's own body mis-declares String bindings; Map::new() has no emitter arm by @iheitlager in #2172
- feat(examples): log_analyzer JSON pipeline is now native MVL, no Rust bridge by @iheitlager in #2167
- fix(wasm): nested Some(Variant(x))/Ok(Variant(x)) payload patterns fail to assemble by @iheitlager in #2178
- fix(wasm): List[T]::sort() and String::parse_float() have no emitter arm by @iheitlager in #2176
- fix(llvm): nested Some(Variant(x))/Ok(Variant(x)) payload patterns crash by @iheitlager in #2179
- fix(llvm): Ok()/Some()/Err(_) sibling arm unreachable alongside a qualified variant arm by @iheitlager in #2182
- fix(wasm): wire up String::chars() and String::char_at() emitter arms by @iheitlager in #2187
- fix: three small backend match/type-inference bugs (#2145, #2146, #2171) by @iheitlager in #2184
- fix(wasm): std.random.choice() emits invalid Option payload (#2093) by @iheitlager in #2185
- fix(wasm): finish String kernel-method WASM coverage (#2123) by @iheitlager in #2188
- fix: std.json.decode entirely broken on LLVM and WASM backends (#2169) by @iheitlager in #2189
- fix(checker): close #2017 - sound prelude for mvl test/llvm_text/wasm_text pre-checks by @iheitlager in #2197
- chore(examples): add smoke target to examples/programs; relocate FFI test fixtures by @iheitlager in #2196
- fix: log_analyzer LLVM+WASM test failures (6 backend bugs, closes #2198, #2199) by @iheitlager in #2201
- test(corpus): regression case for #2200 List.get() field-receiver bug by @iheitlager in #2202
- fix(wasm): List/Set[T].get() UAF on String/nested-collection elements (#2203) by @iheitlager in #2208
- fix: test-crate assembly must drop every fn main — LLVM/WASM parity by @iheitlager in #2210
- feat(wasm): wasm-browser target — JS host reuse over bespoke bridge (#2093) by @iheitlager in #2190
- docs(changelog): catch up 1.7.4 with ~75 issues merged since e7138e3 by @iheitlager in #2220
Full Changelog: v1.7.2...v1.7.4