Features
- Engine-held values iterate:
for-of, destructuring, and spread over values born in the embedded engine ride the engine's own iterator protocol with V8's exact error spellings, andfor-ofover any dynamic value lowers generally. Compiled promises cross into the engine as thenables;Promise.allover mixed compiled-and-engine entries runs the engine's own combinator, and engine-array fulfillments settle by reference. - Bare
moduleresolves the builtin exactly likenode:module— the builtin wins over any same-named installed package, matching Node.
Fixes
stream.pipelineargument validation throws Node's synchronousERR_INVALID_ARG_TYPEfor provably-invalid stages in every position instead of crashing the compiler on an internal marker; accepted-but-uncompiled sources refuse naming what Node accepts.- Integer-slot attestations record
u64asu64(the wire-format flattening now applies only where the frozen schema requires it), and declared model-field classes obligate every write — init, update arms, helpers — to the same prove-or-refuse check as export slots. - The 0.0.11 restore's written-binding decline was wider than its rationale, and two carve-outs bring the lost shapes back: a written binding whose declared type has no static mapping keeps the compiling no-storage trap claim, and a statement-position assignment whose right side provably throws before the write no longer counts against the claim.
- A class extending a base the compiler itself rejected now fails the build eagerly with the base's real blocker — the deferred fence compiled a binary that refused at startup where Node runs on. Leaf rejected classes keep the runtime-deferral story.
- A stale remnant of the island-literal fence answered
typeofand.lengthwrongly for poisoned members; reads now fail with the captured diagnostic.