compiler: while loops work at module and function scope, including conditional bodies and nested loops. Named exports retain their values at declaration time. (#3328, #3330, #3331, #3342, #3344, #3347)
compiler: loop bodies admit break, continue, owning-function return and throw, and switches with braced cases, stacked labels and an optional final default. (#3351, #3352, #3357)
compiler: classic for (init; condition; step) loops lower to while, with loop-scoped header declarations; the step runs on normal body completion and on continue targeting that loop. (#3429)
compiler: a final literal while (true) can terminate a function or terminal block when no source break targets that loop; returning, throwing and divergent paths retain their behavior. (#3418)
compiler: all 15 identifier compound assignment statements are accepted, including short-circuiting &&=, ||= and ??=. Targets remain mutable identifiers; property mutation and assignment expressions stay refused. (#3415)
compiler: immediate, argumentless expression blocks can assign enclosing variables, preserving current values and reached evaluation order. Ordinary function capture restrictions still apply. (#3419)
compiler: "key" in object accepts literal string keys outside the prototype-name inventory, including "length"; primitives throw. Computed keys stay refused. (#3433, #3437, #3440, #3442, #3447, #3443)
compiler: admit Object.fromEntries over arrays of entries, with key conversion, last-value duplicates and an own __proto__ property. Non-array inputs and primitive entries throw. (#3392)
edag/to_fast: eligible self tail calls become bounded-stack invocation loops, including missing, extra, spread and rest arguments. Newly eligible functions can change canonical graph bytes and function text. (#3319, #3323, #3325, #3326)
edag/from_fast: general FAST loops become graph helpers, including nested loops, multiple state/result values, outer transfers and owning-function returns. Normal continuations are shared. (#3247, #3248, #3251, #3252, #3253, #3254)
js/ast: propagate owning-function returns through ordered operands, collections and result regions, preserving earlier evaluations and failures while skipping later work. (#3274, #3282, #3286, #3288, #3289, #3290)
js/ast: propagate returns through calls, optional operands, spreads, captures and loop entry/transfer values without changing lookup or expansion order. (#3294, #3295, #3297, #3305, #3306, #3308, #3309, #3310)
common/monoid: Monoid requires weight; fold balances by the actual weights of values and merge results. step takes a monoid instead of an operation, and Run.size is removed. (#3439, #3444, #3445)
common/monoid: export collect for folding a saved run stack and move for a single fold transition. A shared-input demo draws each merge, including heavy-first and heavy-last sequences. (#3445, #3449, #3457)
types/number: sum folds by magnitude, changing floating-point grouping and rounding. Bigint reductions and string/vector concatenation use bit length or length as their weights. (#3445)
types/bit_vec: concatenation checks the length cap as each vector arrives, before merging or consuming a further lazy tail, including an unbounded tail of empty vectors. (#3444, #3445)
types/list: toArray moves to list/alt; iterator-based toArray and iterable live in list/iterable. The core module now exports trampoline. (#3426)
types/array: repeat uses monoid doubling. NaN and positive infinity throw while normalizing repeat(n) instead of iterating indefinitely; finite nonpositive and fractional counts retain their behavior. (#3413)
types/object/entry: hasEntry becomes a TypeScript type guard for key-based union narrowing; add Declaring and WithEntry types. Enumerable own-property semantics remain unchanged. (#3337)
rtti: declared members use enumerable own entries, so optional inherited names such as toString accept {} rather than reading Object.prototype. (#3350)
rtti/common: readerOf drops emptyRest; containerRead and restContainerRead drop restFits. The rtti/data.emptyRest export is removed. (#3355)
rtti/parse: rebuild tuples densely and trim trailing absent positions. Arrays with holes remain outside the readers' input contract. (#3355)
media/wasm: add binary parse/write, WAT writers and a shared opcode table for WebAssembly 2.0 core without SIMD. Malformed and unsupported binaries are refused with byte positions. (#3436)
rust/demangle: add demangle for Rust v0 names; legacy, malformed and over-limit symbols are returned unchanged. (#3436)
text/code_point: export maxCodePoint, the Unicode bound 0x10_ffff, beside bmpMax. (#3466)
js/marked: spansOf, tsSpansOf and disagreement move here from website/demo/highlight, which retains the rendering and highlighting functions. (#3454)
edag: preserve evaluation order through module initialization, shared initializers, captures and operand requirements; normalization may change graph bytes and hashes. (#3331, #3333, #3335)
nanvm-lib: resolve member lookup before argument evaluation and align own-field, runtime and native precedence. edag adds the internal memberPresent query. (#3293)
rust/serializer: fail invalid spreads before later operands, and convert computed object keys before evaluating property values. (#3336, #3338)
js/ast/serializer: wrapped property calls retain detached invocation when trivial blocks or singleton comma expressions are simplified. (#3310)
emergent_testing: fjs test selects authored FunctionalScript proofs. Native fjs-only.mjs and js-only.mjs select FunctionalScript or host proofs; default native discovery remains combined. (#3320)
media/markdown: Inline gains Image and links use LinkLabel spans. Read images and one level of balanced parentheses in link targets; the site renders HTTPS images and nested quote blocks. (#3387, #3456)
media/mermaid: add tryFlowchart for rectangular flowcharts and labelled arrow chains, including <br> line breaks and four named entity codes. Diagrams over 500 arrows are refused. (#3391, #3393, #3451, #3453)
website: draw admitted Mermaid flowcharts at build time with multiline node labels and cycle links; unsupported diagrams stay as source. README code fences gain syntax colours and copy buttons. (#3393, #3451, #3453, #3360, #3388)
website: heading links reveal collapsed sections. Demos restore stable examples and custom inputs from query parameters; edits enter browser history, and links can copy the current inputs. (#3265, #3267, #3268, #3275, #3281, #3339, #3340)
website/demo/graph: RTTI and EDAG trace operand connections and incoming uses across source/title cells. Recursive groups use local bands and shared return segments. (#3240, #3242, #3243, #3279)
compiler/graph: add operatorShape, fastGraph and sourceGraph. The compiler's sugar demo draws source AST and FAST side by side, with shared bindings and transfer targets. (#3370, #3372, #3424)
website/style: selects fit narrow screen columns while preserving their desktop width, native menus and accessible labels. (#3423)
compiler: demo output failures stay within their individual panes, preserving other copyable outputs and recovering after input is corrected. (#3298)
crypto/sign: the demo adds OpenSSL verification against Alice's saved trusted key and a P-256/SHA-256 nonce-reuse experiment that recovers the private key. (#3245)
nanvm/demos: Chromium compares WebAssembly linear-memory growth with JavaScript page-heap growth when matching successful runs provide both measurements. (#3249)
fjs: types/function/compare, js/ast/task, js/ast/loop/terminal, media/json/number and types/btree/find rename module.f.mjs to module.f.js. (#3418, #3430)
fjs: zlib/bits, js/ast/invocation and types/stack_walk rename module.f.mjs to module.f.js; spec/undecided/samples.f.mjs becomes samples.f.js. (#3450)
dev: mise replaces Nix; dev.sh and dev.ps1 run the committed toolset, and fjs ci requires the caller's mise manifest and lock. The devcontainer and Nix generator are removed. (#3259, #3261, #3284, #3315, #3375)