ReviewOS

zig-utils/zig-js

Roadmap: implement every README-declared missing runtime surface

#134
Closed chris opened this 9 days ago ·
9 days ago

Goal

Implement every runtime and platform surface currently called out in the README's What Is Not Implemented section, with checked-in compatibility inventories and reproducible evidence, so that the section can be removed without qualification.

This is an umbrella issue. Each independently reviewable implementation slice should have its own linked child issue before substantial work begins.

Scope

1. JavaScriptCore compatibility surfaces

  • Check in a versioned inventory of the public JavaScriptCore C API and implement every symbol in the declared target.
  • Check in version-pinned inventories for the private framework/internal surfaces we intentionally target, then implement every inventoried entry.
  • Implement and test the Objective-C bridge, including object/value conversion, exceptions, lifetimes, blocks/callables, and cross-runtime identity.
  • Implement inspector/debugger APIs and protocol behavior, including attach/detach, breakpoints, stepping, evaluation, stack/scope inspection, pause/resume, and exception events.
  • Define version-pinned Bun and Home private-JSC ABI compatibility profiles and implement every symbol and behavior in those profiles.
  • Reject unsupported ABI versions explicitly; no silent no-ops or accidental partial compatibility.

Complete here means complete for the exact checked-in target inventories. Private ABIs are moving targets, so each supported revision must be named and auditable rather than described as universal compatibility.

2. WebAssembly

  • Parser, binary decoder, validator, and deterministic malformed-module diagnostics.
  • Module compilation/instantiation and JS-facing Module, Instance, Memory, Table, Global, and Function behavior.
  • Imports, exports, start functions, traps, growth, bounds checks, numeric conversions, and JS/Wasm exception boundaries.
  • Declare and implement the chosen post-MVP feature set (reference types, bulk memory, multi-value, SIMD, threads, exceptions, GC, etc.) in versioned feature profiles.
  • Run the applicable upstream WebAssembly specification tests with an explicit zero-hidden-skip inventory for the supported profiles.

3. PR-249 reference corpus and shell hooks

  • Inventory every WebAssembly/JIT shell hook used by the PR-249 reference corpus.
  • Promote each relevant reference-only hook into maintained runtime functionality with tests and documentation.
  • Remove or explicitly disposition every corpus exclusion; no untracked skip lists.

4. Production generational GC

  • Automatic moving/compacting collection with correct root, stack-map, handle, weak-reference, and interior/reference rewriting (#144 explicit compaction complete; #446 automatic shared safepoints open).
  • Multi-age generational policy with a moving nursery and measured promotion/tenuring behavior (#145 nonmoving age-three policy complete; #447 moving nursery open).
  • Correct remembered sets and barriers across interpreter, baseline JIT, optimizing JIT, native embeddings, and concurrent host threads.
  • Parallel minor collection that may safely occur mid-script, including safepoints, mutator coordination, and bounded failure recovery.
  • Stress, fault-injection, leak, TSan, and long-running mutation tests covering relocation and concurrent collection.

5. Optimizing JIT

  • Optimizing IR and lowering pipeline beyond the verified baseline regions tracked in #132 and #133.
  • Type/value profiling, guarded speculation, deoptimization, OSR entry/exit, stack maps, exception edges, and precise GC integration (#431, #432).
  • Property/shape and call inline caches with invalidation that remains correct under mutation and concurrency.
  • Code lifetime management, executable-memory policy, architecture backends for every declared supported target, and interpreter/baseline fallback.
  • Differential correctness testing against the interpreter plus reproducible performance evidence against JavaScriptCore.

Removal gate

The README section may be removed only when all of the following are true:

  • Every checklist item above is complete or decomposed into completed linked child issues.
  • A checked-in compatibility matrix names exact OS, architecture, JSC, Bun/Home ABI, WebAssembly feature, GC, and JIT targets.
  • Normal, thread-heavy, no-GIL, leak, sanitizer/TSan, differential, inspector, bridge, API/ABI, WebAssembly, and JIT suites pass for the declared matrix.
  • Relevant upstream/reference corpora publish machine-readable pass/fail/skip inventories, with no unexplained exclusions.
  • Benchmarks and README claims are regenerated from committed artifacts and clearly distinguish correctness coverage from performance coverage.
  • Unsupported hosts or revisions fail clearly at build or runtime rather than exposing partial behavior.
  • #1 — threads/GC roadmap
  • #44 — performance umbrella
  • #49 — no-GIL scaling
  • #132 — native guarded-property regions
  • #133 — native packed-array regions

Child issue map

Public and private embedding

  • #135 — complete public JavaScriptCore C API inventory and verifier
    • #136 — JSTypedArray and ArrayBuffer embedding surface
    • #137 — JSClassRef callbacks and property-name APIs
    • #148 — context groups, global metadata, syntax checking, and inspectability
    • #149 — UTF-16 and string completeness
    • #150 — remaining value/BigInt/comparison/JSON APIs
    • #151 — remaining ordinary-object APIs
  • #138 — Objective-C bridge
    • #157 — pinned Objective-C inventory and build gate
    • #158 — JSContext, JSVirtualMachine, and JSValue behavior
    • #159 — managed references, identity, and lifetime semantics
      • #161 — collection epochs and arena reachability
    • #160 — JSExport, blocks, interop, and completion evidence
  • #139 — inspector/debugger protocol
    • #152 — versioned sessions, transport, and Runtime domain
    • #153 — execution control, breakpoints, stepping, and exceptions
    • #154 — call frames, scopes, roots, isolated-worker boundary, and completion evidence
    • #155 — historical, dynamic eval, module, and generated-function script registration
    • #156 — worker target discovery and cross-thread inspector transport
  • #140 — versioned Bun and Home private-JSC ABI profiles
    • #163 — pinned Home private-JSC profile
    • #164 — pinned Bun private-JSC profile
    • #180 — VM-shared pending exceptions and stable exception cells
    • #181 — exact arrays and indexed access
    • #182 — failure-atomic packed and hole-only JSArray constructors
    • #183 — full ECMAScript ToNumber coercion
    • #184 — JSC-exact has-instance and iterator-method predicates
    • #185 — ordered UTF-16 string inclusion
    • #186 — class/AggregateError classification and shared Symbol identity
    • #187 — exact Date parsing, UTC extraction, and ISO buffer formatting
    • #188 — exact private Object.keys/Object.values reflection
    • #189 — private Promise creation, downcasts, and wrapping
    • #190 — explicit Home private profile alias for revision 4389dde
    • #191 — exact Home private JSMap boundary
    • #192 — exact FFI signed/unsigned 64-bit slow conversions
    • #193 — exclude consumer-generated JSFunctionCall from private imports
    • #194 — exact CommonAbortReason DOMException conversion
    • #195 — owned BunString BigInt decimal conversion
    • #196 — BunString value, transfer, length, and array conversion
    • #197 — ZigString Error/TypeError/RangeError/SyntaxError construction
    • #198 — complete ZigString DOMException code matrix
    • #199 — copied, atomic, and rope string construction
    • #200 — stable borrowed ZigString output views
    • #201 — ZigString and BunString error factories
    • #202 — exact AggregateError construction and access
    • #203 — exact private property access and mutation
    • #204 — exact fast built-in property reads
    • #205 — exact Symbol registry and description bridges
    • #206 — exception scopes and termination control
    • #207 — VM GC, memory accounting, and idle scheduling
    • #208 — VM jobs, module registry, and code invalidation
    • #209 — strong and weak embedding references
    • #210 — pinned native StringBuilder boundary
    • #211 — cross-profile private-export audit
    • #212 — rooted native value containers
    • #213 — exact Yarr RegularExpression boundary
    • #214 — exact WTF runtime helpers
    • #215 — Uint8Array constructors and Buffer identity
    • #216 — complete JSBuffer allocation and external ownership
    • #217 — true uninitialized Uint8Array allocation
    • #218 — generic no-copy ArrayBuffer and TypedArray adoption
    • #219 — exact JSValue ArrayBuffer view projection
    • #220 — exact private typeof string projection
    • #221 — exact VM entry-state query
    • #222 — exact JSFunction source and tier-up controls
    • #223 — exact internal length projection
    • #224 — exact private property-path traversal
    • #225 — exact private class and display names
    • #226 — exact private JSON stringification
    • #227 — exact private record construction
    • #228 — exact JSX element predicate
    • #229 — exact deep equality and matching
    • #411 — exact SQL object structures and offset writes
    • #412 — exact global-object lifecycle
    • #417 — process initialization and shell-timeout trap
  • #232 — exact remote inspector process controls
  • #233 — exact proxy internal-field projection
  • #234 — stable script execution context identifiers
  • #235 — exact no-side-effects value stringification
  • #236 — exact unhandled-rejection error-like classification
  • #237 — exact iterable callback traversal
  • #238 — exact ZigString JSON parsing
  • #239 — Bun process warnings and rejection event hooks
  • #243 — process nextTick scheduling
  • #244 — IPC process event dispatch
  • #245 — private module-loader evaluation and import
  • #247 — private JSString backing iterator
  • #248 — Zig host-function creation and exact CallFrame callbacks
  • #249 — structured JSC exception stack frames
  • #250 — complete ZigException metadata and source-line projection
  • #251 — native CallFrame caller metadata
  • #252 — FFI host functions with native data
  • #253 — queued Promise JSHostFn reactions
  • #254 — async Error stack reconstruction from Promise await chains
  • #255 — revalidated contiguous JSArray vectors
    • #256 — shared-memfd ArrayBuffer and Uint8Array import
    • #257 — generated native ArrayBuffer backing handles
    • #258 — accessor cells and non-indexed property traversal
    • #259 — debugger async-call lifecycle and stacks
    • #367 — counted private JSValue protection
    • #368 — exact private property iteration
    • #369 — ArrayBuffer copy and allocator ownership
    • #370 — value-key property query and BunString upsert
    • #371 — private C-API call and proxy extensions
    • #372 — exact JSC Math.pow operation
  • #162 — pinned Home public C embedding profile (kept separate from private ABI)

WebAssembly and reference corpus

  • #141 — WebAssembly MVP runtime and JavaScript API
    • #260 — pinned upstream wg-1.0 corpus and machine-readable inventory
    • #261 — bit-exact NaN payload/sign corpus runner
    • #317 — failure-atomic hostile declaration decoding
  • #142 — versioned post-MVP feature profiles
    • #305 — independent multi-memory profile and 829/829 terminal corpus
    • #318 — spec-correct Wasm GC canonical identity witness
    • #319 — durable corpus evaluator diagnostics
    • #320 — lazy profile-specific spectest imports
    • #321 — nested threads evaluator report flattening
    • #366 — exact WebAssembly Core 3 profile and upstream-main drift report
    • #315 — race-free no-GIL Wasm Memory growth publication
  • #143 — PR-249 WebAssembly/JIT/shell-hook promotion
    • #311 — pinned complete PR-249 reference inventory and drift gate
    • #314 — race-free shared no-GIL debugger script/location registries
    • #406 — streaming WebAssembly compilation and private compiler feed
      • #407 — preserve ReadableStream Fetch Body lifecycle
      • #408 — add compileStreaming and instantiateStreaming
      • #409 — lifetime-safe private StreamingCompiler feed
      • #410 — feed Response chunks directly into StreamingCompiler
    • #428 — resolve the 14 non-JIT reference executables
    • #429 — promote the 10 optimizing-JIT executables
    • #430 — publish the terminal 259-executable runtime inventory

GC and JIT

  • #144 — moving/compacting collection
    • #446 — automatic compaction at shared precise safepoints
    • #316 — restore Object cold sidecar to its 256-byte GC class
    • #413 — preserve the 128-byte Object allocation with stable zig-gc IDs
    • #414 — make same-VM replacement realms precisely collectable
      • #415 — ownership-aware precise heap across sibling realms
        • #420 — register and trace live precise sibling realms
        • #421 — route shared-heap cells to their allocating realm
        • #419 — retire and destroy precise sibling realms safely
      • #416 — migrate private global lifecycle to shared precise GC
    • #418 — eliminate current-Zig mid-GC seed-1 teardown stall
    • #425 — synchronize shared writes with relocating Wasm memory growth
  • #145 — multi-age generations and parallel mid-script minor collection
    • #447 — moving multi-age nursery
  • #146 — optimizing JIT with deoptimization and precise GC
    • #431 — optimizing profiles, IR, and tier publication
    • #432 — OSR exits, deoptimization, and precise GC
      • #435 — resumable optimizer loop bodies and invalidation polls
      • #436 — calls, exceptions, catch, and finally recovery
      • #439 — native calls, effects, and completion dispatch
      • #437 — live optimized-frame tracing and relocation
      • #438 — general reducible loop CFGs
    • #132 — guarded named-property regions
      • #440 — immutable optimizer property-IC snapshots and guarded callback fast paths
    • #133 — verified packed-array regions
    • #433 — concurrency-safe trap polling and optimized artifact lifetime
    • #434 — backend completion and differential evidence

Completion evidence

  • #147 — compatibility matrix and README removal gate
  • #246 — final evidence-backed removal of README missing-surface section

Latest evidence

WebAssembly MVP #141 and its exact wg-1.0 corpus chain #260/#261 remain complete. The versioned post-MVP foundation #262, Core 2 numeric operations #269, and complete structural baseline #263/#270-#278 are now complete. The committed Core 2 inventory at 12ce485e pins official wg-2.0 and WABT 1.0.39 exactly: 27,437/27,437 applicable commands pass across all 90 files, 581 text-format commands are explicitly not applicable, and failures/runner errors are zero. Bounded CI landed in a593fdea; README and detailed evidence were refreshed in 66a953a6. The most recent batched full engine checkpoint remains 1,002/1,002 at af689c4a, and the general JavaScript comparison remains the validated 1,540-sample July 17 matrix because these WebAssembly paths do not execute in its workloads. Fixed-width SIMD #264/#279-#283 is now complete: the exact pinned 56-file score is 25,466/25,466 applicable commands with zero failures/runner errors, and the separate July 18 SIMD matrix preserves 224 scalar/JSC samples with every median above 50 ms. Terminal inventory, CI, architecture/fallback declarations, raw artifacts, README, and reproduction landed through be438ae0. Multi-memory #305 is complete with 829/829 pinned commands and documented robustness/sanitizer gates. Remaining WebAssembly roadmap work is #265-#268. PR-249 foundation #311 pins and checksums all 339 vendored files. #428 is complete at e6d15b1e/fa71b012: the verifier classifies all 259 executables as 243 promoted, 10 optimizing-JIT blocked by #429, and 6 executable terminal dispositions; all five helpers remain classified, and inventory/hook/disposition/evidence drift fails closed. Private property iteration #368 is complete at 4be4789d with its evidence label refreshed at 01cfa77b: Home is now 352/471 private symbols implemented (119 pending), Bun is 344/461 (117 pending), the shared Home consumer links 339/339 symbols, and a dedicated Bun compile-link-runtime fixture passes in Debug and ReleaseSafe.

ArrayBuffer ownership #369 is complete at 07a3e398: Home is 356/471 private symbols implemented (115 pending), Bun is 348/461 (113 pending), both inventories have zero unclassified entries, the Home consumer links 343/343, and the focused engine plus dedicated Bun fixtures pass in Debug and ReleaseSafe.

Value-key property work #370 is complete at 01b3aef3: Home is 359/471 private symbols implemented (112 pending), Bun is 351/461 (110 pending), both inventories have zero unclassified entries, the Home consumer links 346/346, and focused engine plus Bun-profiled fixtures pass in Debug and ReleaseSafe.

Private C-API extensions #371 are complete at 930f177b: Home is 361/471 private symbols implemented (110 pending), Bun is 353/461 (108 pending), both inventories have zero unclassified entries, the Home consumer links 348/348, and focused engine plus dedicated Bun fixtures pass in Debug and ReleaseSafe.

Exact JSC Math.pow operation #372 is complete at 3e96dde2: the private C export and JavaScript builtin share one edge-correct implementation; Home is 362/471 (109 pending), Bun is 354/461 (107 pending), Home links 349/349, and focused plus compiled-consumer evidence passes in Debug and ReleaseSafe.

  • #373 — async-context frame calls
  • #374 — DOMFormData private ABI and Blob entries

Current private-ABI evidence

At 172fea6, Home is 375/471 implemented (96 pending), Bun is 367/461 (94 pending), the Home consumer links 362/362, and the focused Bun DOMFormData fixture links 10/10. Debug and ReleaseSafe pass, including 25/25 relocation tests.

  • #375 — FetchHeaders private ABI and native adapters

  • #378 — VM-stable CommonStrings projection

Latest private-ABI checkpoint

At 9c51dee, Home is 376/471 implemented (95 pending), Bun is 368/461 (93 pending), and the Home fixture links 363/363. Debug and ReleaseSafe pass for the shared Home and exact Bun evidence.

  • #392 — process-wide hot-reload inspector broadcast
  • #404 — per-VM CPU sampling profiles
  • #405 — readable-stream consumption and conversions

Checkpoint at 6427d1c: #392 is complete. Home is 409/471 private implemented (62 pending); Bun is 401/461 (60 pending). Exact multi-VM, detach/reentrancy, Debug, and ReleaseSafe evidence passes with zero leaks; benchmark scores are unchanged because this is compatibility work.

Checkpoint at 4275f7c: #404 is complete with exact fixing-main CI evidence. #405 implements all six pinned ReadableStream consumers and is awaiting only its exact main CI gate. Home is 439/471 private symbols implemented (32 pending); Bun is 430/461 (31 pending). Focused engine and external Home/Bun consumers pass in Debug, ReleaseSafe, and TSan; README benchmark scores are unchanged because this is compatibility work.

July 28, 2026 PR-249 terminal checkpoint

f6f8ef1b completes #143, #429, and #430. The pinned 339-file reference tree now records 259 executables as 253 promoted, 0 blocked, and 6 verifier-enforced terminal dispositions, plus five helpers outside the denominator. ReleaseSafe passes 246/246 serialized-required and 253/253 no-GIL-required promoted cases with zero failures or skips; all six terminal dispositions match in both modes. The release matrix reached 9/12 green at that checkpoint.

July 29, 2026 optimizer release checkpoint

9e51e1ff completes #146, #433, and #434. The sole declared optimizer backend is macOS AArch64; 24 seeded serialized/no-GIL differentials require real publication and exact guard deoptimization, normal and TSan focused gates pass 176/176, the full unit suite passes 1,452/1,452, and unsupported macOS/Linux x86-64 builds remain explicit fallback. The machine-readable optimizer inventory and dated raw JavaScriptCore artifact move the release matrix to 10/12 green. Remaining roadmap blockers are #446 automatic shared compaction evidence and #447 moving nursery.

9 days ago

README tracking link landed on main in 8bf959db. This issue is now the removal gate for the documented unsupported-surface list.

9 days ago

Roadmap decomposition is now linked in the issue body as #135–#147. The first implementation slice, #136, landed on main in 82b8e50a and 7bf1712f: public TypedArray/ArrayBuffer construction and inspection, true no-copy backing stores, and exactly-once failure/finalization lifetime handling. Full unit evidence: 783/783, zero skips/failures/leaks. #136 stays open for its #135 header and C compile-link gate.

9 days ago

Inspector/debugger scope #139 is complete. Worker target child #156 closed through 1060784 with protocol parity, simultaneous independent targets, precise-GC root evidence, and deterministic teardown. The README no longer lists worker inspector parity as missing.

The umbrella now accurately remains open for #138, #140–#147: Objective-C/private ABI profiles, WebAssembly/reference hooks, moving/multi-age/parallel-minor GC, optimizing JIT, and the final compatibility/removal gate.

9 days ago

Objective-C bridge parent #138 and children #157–#161 are complete through f29ca38: pinned 108/108 SDK inventory, semantic managed clearing, typed blocks and JSExport, same-VM cross-context identity, 18-row system-JSC parity (360c1ad3ccf51d6b), 200-cycle ASan/UBSan lifetime stress, deterministic allocation/registration rollback, and Apple leaks at 0 bytes. README/API commands and the What Is Not Implemented boundary are updated. The umbrella remains open for private/Bun/Home ABIs, WebAssembly/reference hooks, moving/multi-age GC, parallel mid-script minor collection, and optimizing JIT.

9 days ago

Closed private-ABI child #253 on main through 657cbba8; parent checklists and latest evidence are updated.

9 days ago

#255 is complete on main through 779f7eff (runtime 481f8ddc), with the roadmap body updated to 262/431 Home, 256/421 Bun, and 261/261 compiled fixture coverage. #254 is now explicitly linked as the remaining async-stack implementation slice. Current benchmark evidence is unchanged because these private embedding exports are outside its measured workloads.

9 days ago

#254 is complete on main through 0ccdad67 (runtime 0c5e5441). Roadmap evidence is now Home 263/431, Bun 257/421, compiled fixture 262/262, and zero unclassified declarations; the current benchmark remains unchanged because this diagnostic ABI is not measured.

9 days ago

Opened #256 for the next bounded private-ABI slice: validated MAP_PRIVATE shared-memfd import into exact ArrayBuffer/Uint8Array values with no-copy slice semantics and exactly-once full-region unmapping. Opaque native JSC::ArrayBuffer handles remain deliberately separate until their producer/lifetime contract is specified.

9 days ago

Completed #256 on main through ae61fd67 (runtime e0164ae9). Evidence: focused ownership/GC matrix green; compiled consumer 263/263; Home 264/431 with 167 pending; Bun 258/421 with 163 pending; both audits zero-unclassified; Bun-selected tags green. README/docs are current, while the 1,540-sample benchmark remains unchanged because this embedding-only path is outside the workload.

9 days ago

Opened #257 for the three opaque native ArrayBuffer exports plus their real bindgen producer. The pinned converter transfers RefPtr<JSC::ArrayBuffer>::leakRef() as an adopted +1, so completion requires an independent backing-store handle that can outlive its JS wrapper/VM—not a raw cell pointer or realm-retaining test adapter.

9 days ago

Opened #258 for the next executable private-ABI cluster: exact GetterSetter/CustomGetterSetter cells, their four null predicates, generated type checks, and non-indexed property traversal that returns descriptor cells without invoking ordinary getters.

9 days ago

WebAssembly profile foundation #262 is complete on main through af10c01c. The checked-in registry pins 12 proposal revisions across 4 profiles; dependency closure and registry/runtime/gate drift are CI-enforced; disabled and enabled-but-unimplemented features reject deterministically. Focused WebAssembly evidence is 126/126 passing. Continuing with the Core 2.0 baseline in #263.

9 days ago

Completed Core 2.0 numeric slice #269 on main through 56273afc: all 5 sign-extension and 8 nontrapping conversion instructions decode, validate, instantiate, and execute behind explicit realm feature switches. Default-realm rejection and public JavaScript API execution are covered. Focused WebAssembly evidence is now 133/133 passing; the July 17 benchmark matrix remains current because these paths are outside its workloads. Continuing with structural Core 2.0 issue #263.

9 days ago

Completed multi-value child #270 on main through a9e617e5. Function/control result vectors, type-index block parameters, all branch forms, calls/returns, general iterable JS imports, ordered export arrays, exact arity errors, and cross-instance linking are implemented behind the explicit realm switch. Focused WebAssembly evidence is now 141/141 passing. Continuing structural Core 2.0 with reference/table types in #271.

9 days ago

Progress checkpoint: #274 is closed with precise tagged reference slots and completed no-GIL liveness/reclamation evidence. main now reports 145/145 focused Wasm tests plus 3/3 dedicated no-GIL tests, all with zero skips/failures/leaks. README/docs evidence is current at 72bcfad0; the July 17 1,540-sample JSC comparison remains the latest valid score set because this batch does not execute in those workloads.

9 days ago

Reference types are now complete: #275 and parent #271 are closed. d3736891 adds reference-valued JS/Wasm export/import conversion with exact externref and canonical funcref identity, including mixed multi-value results; 5374e601 strengthens explicit table-1 operations and cross-instance indirect-call evidence; bfb22343 publishes the result in README/docs. Focused Wasm evidence is 153/153, with zero skips/failures/leaks. The benchmark remains the validated July 17 1,540-sample comparison because these Wasm paths do not execute in its workloads. Structural work proceeds to #272, then #273.

9 days ago

Bulk memory #272/#276-#278 is complete. DataCount, every segment form, all seven memory/table instructions, failure-atomic active segments, overlap/drop/zero-bound behavior, JavaScript table synchronization, cross-instance funcref identity, and externref precise-GC barriers are on main. Evidence is 159/159 at 4c61bd90 plus the final 3/3 witness at 66237d21; docs are current at 03d46ae9. Structural Core 2.0 now proceeds to exact inventory/score #273.

9 days ago

Latest WebAssembly roadmap evidence: #285 is complete on main at a62e0c5 with documentation at e321f04. Phase-4 Threads now has pinned decode/validation plus proposal-exact shared Memory backing and JS ownership across Context Thread and isolated Worker boundaries. Batched evidence is 176/176 Wasm, 33/33 Worker, and 11/11 structured-clone tests, all zero-failure/skip/leak. Remaining Threads work is #286 and #287; post-MVP roadmap also retains #266-#268.

9 days ago

WebAssembly Threads execution advanced: #286 is complete and closed, with exact atomic execution/wait/notify, lifecycle interruption, 372/372 pinned atomic corpus commands, 1,069/1,069 full unit tests, and focused TSan coverage. #287 remains the honest terminal gate for proposal-script execution, complete TSan/corpus inventory, and scaling/JSC evidence.

9 days ago

WebAssembly exception handling and tail calls are now complete through #266/#288-#292. Exact terminal totals are 192 public-API passes across 205 declared commands, with 13 explicit text-parser N/A results and zero failures/runner errors; README and docs publish pins, host limits, TSan/GC evidence, and the JSC differential. The remaining #142 work is #265, newly decomposed memory64/GC #267/#296-#300, and terminal matrix #268.

9 days ago

Machine-verifiable roadmap aggregation started in 54f183f: the checked-in release compatibility matrix covers all required #134 surfaces, derives committed test262/Wasm totals, validates evidence and README claims, and exposes separate structural (release-compatibility-check) and terminal (release-ready) commands. Current truthful state is 4/12 green; open surfaces remain explicit rather than being hidden behind the README.

9 days ago

README cleanup landed in e9869bc4: reduced from 98 lines / 737 words to 77 lines / 488 words. The front page now keeps only the configured test262 result, aggregate nine-profile Wasm result, current zig-js/JSC comparison table, and compact SIMD/Threads headline scores; proposal inventories, kernel tables, methodology, and raw samples remain linked in the authoritative docs. zig build release-compatibility-check and zig build benchmark-comparison-test both pass, so the #147 removal gate and generated benchmark block remain intact.

9 days ago

Progress update: Wasm Threads growth publication #315 is complete in 7650986 with a green 40-job CI matrix, including all four no-GIL TSan corpus shards: https://github.com/zig-utils/zig-js/actions/runs/29697559754. The roadmap remains open for its other terminal surfaces.

9 days ago

Created #324 for the next logically bounded ABI ownership gap: external ZigString storage and exact-once finalization. It is linked to #140/#163/#164 and explicitly rejects an eager-copy/eager-callback approximation.

9 days ago

Created #325 after auditing #324: runtime StringCells are currently arena-permanent and omitted from GC Value tracing, so exact external-string lifetime requires a first-class collectible/finalizable string cell. The issue is linked to #324, #97, and moving-GC tracker #144 with stress, leak, OOM, no-GIL, and CI gates.

9 days ago

ABI progress pushed to main: f095db7 implements #322 and raises the pinned inventories to Home 320/431 and Bun 311/421. Focused tests/audits are green; full CI is queued at https://github.com/zig-utils/zig-js/actions/runs/29700271582. Owned serialization #323 is now closed after its complete green 40-job acceptance run.

9 days ago

Roadmap progress: 6d2af84 lands the #325 runtime StringCell GC foundation and unblocks exact external ZigString ownership work in #324. Local focused lifecycle, nursery-barrier, C-API protection, and bulk-finalizer batches are green. #325 remains open for its terminal stress/OOM/no-GIL gates. Full matrix: https://github.com/zig-utils/zig-js/actions/runs/29700993746

9 days ago

New issue #326 records a real GC/ABI reentry gap found during #324 work: C-API class finalizers currently run inside the collector sweep path. It is linked to #140 and will reuse zig-utils/zig-gc#34 post-sweep delivery.

9 days ago

GC progress landed in two small main commits: 66fa951b (post-sweep exact-once external-owner callbacks, including reentrant-GC witnesses) and 5365a405 (tree-walker literal reuse so parallel marking converges under a continuously running peer). The deterministic unit+TSan failure from the first managed-StringCell matrix is fixed locally across four focused runs. Fresh descendant matrix: https://github.com/zig-utils/zig-js/actions/runs/29701666901. Tracking remains #324/#325; #326 retains the separate custom-class finalizer boundary.

9 days ago

External string ownership is implemented in 74b0fe3f (#324): all three pinned exports, exact post-sweep/teardown callbacks, U16 transfer, regenerated Home/Bun counts, and a green 327/327 consumer fixture. Fresh matrix: https://github.com/zig-utils/zig-js/actions/runs/29702181895. #324 remains open for matrix acceptance; #325 tracks the one prior mid-GC fuzz timeout, whose exact seed passed locally (45 programs, 30.345s, 0 failures).

9 days ago

Roadmap update: external ZigString ownership is complete in 74b0fe3f, its compact 32-byte StringCell representation is restored in 472c5b51, and arbitrary C-API class finalizers now run exact-once outside collector locks in 983cb3bc (#324, #326). Focused ownership, size, teardown, and nested-GC witnesses are green.

Current descendant acceptance matrix: https://github.com/zig-utils/zig-js/actions/runs/29702521425.

9 days ago

Roadmap update:

  • #327 is implemented on main: six pinned TextCodec exports, pure-Zig deterministic legacy decoders, exact Home/Bun inventories, and a 333-symbol independent Home runtime fixture.
  • Home private coverage is now 329/431; Bun core private coverage is 320/421.
  • #328 records and fixes the loaded-runner timeout race exposed by the superseded 34-green-job matrix; focused failing seeds now pass without weakening semantic or GC oracles.
  • Current descendant acceptance matrix: https://github.com/zig-utils/zig-js/actions/runs/29703497726

#324, #325, #326, #327, and #328 remain open until this descendant matrix supplies their final acceptance evidence.

9 days ago

Accepted descendant CI run 29703497726 (39 successful jobs, one intentional nightly skip) and closed #322, #324, #325, #326, #327, and #328. The next private-ABI slice is #329 (14 shared AbortSignal exports); the event-loop-backed Bun timeout handle is tracked separately by #330 so an always-null shim cannot be counted as complete.

9 days ago

Moving-GC roadmap update: #352 implemented useful dense-prefix tail evacuation in 5243acf5; #353 then added the reproducible harness (9f296900) and published clean raw evidence (06e27470). The accepted result is 90.8% lower retained fragmented backing/chunks with unchanged live slots/checksum, a 0.99 ms median pause, and 1.00x post-action probe throughput. The concise README now carries the linked headline.

9 days ago

Roadmap update: #358 landed in cc0837d, allowing explicit quiescent compaction with the current pointer-free baseline JIT while retaining live native-frame and conservative-stack fail-closed barriers. README/API/JIT/relocation docs and C/Objective-C hosts were updated. #354 is also closed after hosted Actions run 29714290629 proved the Zig setup recovery and downstream jobs.

9 days ago

Roadmap update: #359 landed in ca92af0. Explicit moving GC can now run both quiescently and inside the current AArch64 baseline numeric checkpoint under a distinct movement-safe resumption contract. README, JIT/relocation docs, relocation inventory, and the machine-readable release gate are current; the moving-GC gate now points to the accepted benchmark/inventory and names only remaining #336/#337 work.

9 days ago

Roadmap update: #360 landed in 7b82cf9. The README/API/relocation docs and inventories now expose C/Zig scheduled compaction, with a callback-to-native-checkpoint witness and 22 audited zig-js C extensions. Direct metrics/status behavior remains unchanged; unsafe live boundaries still fail closed under #336.

9 days ago

Moving-GC roadmap update: #361 landed in 373181a and #336 is closed. The admitted compaction boundaries now include quiescent realms plus an exact warmed baseline-JIT checkpoint, while native callback, running/parked peer, generic JIT, conservative-stack, and unsupported architecture cases remain explicit and fail-closed. #144 is down to terminal compatibility evidence in #337.

9 days ago

WebAssembly roadmap clarification: #366 now tracks a stable, exact-pin Core 3 profile plus a non-blocking upstream-main drift report. The existing wasm-spec@977f970 checkout is intentionally the wg-1.0 MVP fixture and is now documented as such; it will not be silently advanced and invalidate the accepted MVP inventory.

9 days ago

Generation progress is now on main: #363 adds the three-minor survivor policy, persistent remembered owners, and exact telemetry; #364 proves repeated multi-age cooperative no-GIL minor rendezvous with zero timeouts. Both are closed. #145 remains open solely through terminal benchmark/tuning/evidence child #365.

9 days ago

Private-ABI child #367 is complete on main at 21561474. This removes two pending entries from each pinned profile: Home is now 346/471 private implemented (125 pending), Bun is 338/461 (123 pending), and the compiled consumer passes 333/333 in Debug and ReleaseSafe. Full-suite work was intentionally left to batched CI.

9 days ago

Private ABI child #368 is complete in 4be4789d / 01cfa77b. Six shared property-iterator exports moved both exact inventories forward: Home 352/471 (119 pending), Bun 344/461 (117 pending). Debug/ReleaseSafe focused, Home 339/339 consumer, and dedicated Bun consumer gates pass. #134 remains open for the remaining private ABI, post-MVP/Core 3, PR-249, generational-GC, optimizing-JIT, and final evidence gates.

9 days ago

#369 landed in 07a3e398: four shared private ArrayBuffer copy/allocation/ownership exports are complete. Home advances to 356/471 (115 pending), Bun to 348/461 (113 pending), with zero unclassified entries; Debug and ReleaseSafe focused/Home/Bun evidence is green.

9 days ago

#370 landed in 01b3aef3: three shared private value-key/BunString property exports are complete. Home advances to 359/471 (112 pending), Bun to 351/461 (110 pending), with zero unclassified entries; Debug and ReleaseSafe focused/Home/Bun evidence is green.

9 days ago

Completed child #371 in 930f177b: the two shared private C-API extensions are implemented and evidenced in Debug/ReleaseSafe. Home advances to 361/471 (110 pending), Bun to 353/461 (108 pending), with Home 348/348 linked and zero unclassified entries.

9 days ago

Completed child #372 in 3e96dde2: the private JSC Math.pow export now shares the language builtin’s edge-correct operation. Home is 362/471 (109 pending), Bun 354/461 (107 pending), with Home 349/349 linked and Debug/ReleaseSafe evidence clean.

9 days ago

Progress: #373 is complete on main in df79596. The coherent async-context call ABI now implements capture/brand/call semantics with exact dynamic restoration and precise GC rooting/relocation. Debug + ReleaseSafe focused tests and both compiled consumers are green. Private coverage is now Home 365/471 (106 pending) and Bun 357/461 (104 pending). Root README benchmark numbers were intentionally unchanged because this ABI slice did not rerun the accepted benchmark matrix.

9 days ago

Opened #374 for the next coherent shared family: all ten DOMFormData exports plus the Blob/File entry semantics required to implement them against the real JS FormData source of truth. The issue explicitly rejects a disconnected placeholder native record and includes encoded-form parsing/serialization, surrogate replacement, opaque native Blob round-trip, ownership validation, and compiled Home/Bun evidence.

9 days ago

DOMFormData child #374 is complete in 172fea6. The ten-symbol shared Home/Bun boundary now uses one branded engine FormData representation with exact URL-form codec behavior, USVString normalization, string/File entries, current HTML Blob-to-File semantics, VM ownership checks, opaque native BlobImpl identity round-trip, and forced-GC coverage. Debug and ReleaseSafe fixtures pass at Home 362/362 and Bun 10/10; ReleaseSafe relocation is 25/25. Private inventories advance to Home 375/471 implemented (96 pending) and Bun 367/461 (94 pending), with zero unclassified entries. Benchmark claims remain unchanged because this slice did not rerun the accepted benchmark matrix.

9 days ago

CommonStrings child #378 is complete in 9c51dee. The pinned 13-value enum now returns exact VM-stable JSString cells across sibling realms without cross-VM sharing, while preserving pending exceptions and rejecting invalid inputs. Debug and ReleaseSafe pass at Home 363/363 plus the exact Bun fixture. Inventories advance to Home 376/471 implemented (95 pending) and Bun 368/461 (93 pending), with zero unclassified entries.

9 days ago

Progress checkpoint: completed FetchHeaders core child #376 in 975386e2 + b4a9f717. The shared representation, lifecycle, StringPointer paths, mutations/queries, copy/count, and 94-name fast enum mapping are covered. Home is 397/471 and Bun is 389/461 classified as implemented. Umbrella #375 remains open solely for external adapters #377; parallel fixture reliability is tracked by #379.

9 days ago

Progress checkpoint: completed exact PicoHeaders adapter #380 in 91c91b3f + 42bcd356. Current private counts are Home 398/471 and Bun 390/461. Umbrella #375/#377 now remains open only for the three versioned UWS/H3 bridge exports in #381.

9 days ago

Progress checkpoint: completed versioned UWS/H3 request bridge #382 in a9e909b4 + 727a1651. Current private counts are Home 400/471 and Bun 392/461. FetchHeaders umbrella #375/#377/#381 now has one remaining symbol: response writer #383.

9 days ago

Progress checkpoint: FetchHeaders umbrella #375 is complete through 2683d572 + 6f44964b. All 25 pinned symbols—including Pico and versioned UWS/H3 request/response adapters—are implemented. Current counts: Home 401/471, Bun 393/461; the broader completion goal continues with the remaining 70/68 profile entries.

9 days ago

Completed roadmap child #366 and all six Core 3 residuals via #384-#389. The exact WG-3.0 profile is now terminal evidence in the release/conformance matrices: 63,964/63,964 applicable; the ten-profile aggregate is 151,802/151,802. Benchmark artifacts and scores were intentionally unchanged because this was correctness/conformance work.

9 days ago

Closed the complete post-MVP WebAssembly chain #287/#265, #268, #300/#267, and umbrella #142 after reconciling terminal inventories and CI evidence. The selected Wasm scope is now exact-pin and green at 151,802/151,802 applicable across ten profiles. #134 remains open for the unrelated private ABI, PR-249 hook, multi-age/parallel GC, optimizing-JIT, and final release-evidence gates.

9 days ago

#145/#365 are complete. The production age-three nursery policy, remembered sets, repeated parallel mid-script minor rendezvous, and terminal stress/fault/leak/TSan evidence are green. Release compatibility is now 7/12 gates green.

9 days ago

Opened #392 for the next #134 implementation slice: process-wide, reentrancy-safe Bun.canReload inspector broadcast across every live Home/Bun private-ABI connection.

9 days ago

Opened #393 for the next exact shared private-ABI slice: received-value diagnostic formatting and abrupt-completion semantics.

9 days ago

Opened #394 under #393 for the exact Bun__inspect fallback reached by falsy-constructor received-value diagnostics. This prevents the private ABI slice from silently treating a broader presentation dependency as complete.

9 days ago

Private-ABI core for #393 landed in 18527d73: Home 410/471 and Bun 402/461, with focused and dual-profile Debug/ReleaseSafe evidence green. #393 intentionally remains open for #394, the exact Bun__inspect fallback; benchmark scores are unchanged.

9 days ago

Opened #395 to close the gap between released-spec scoring and current upstream coverage. The exact wg-1.0 and wg-3.0 pins remain reproducible stable profiles; #395 adds an exact-SHA shadow execution profile for upstream main, beginning with its 21 modified Core files.

9 days ago

Completed #393 and #394 on main through 522e19c: exact received-value type diagnostics now include the pinned Bun inspector fallback, compiled Home/Bun consumer evidence, source-hash validation, and Debug/ReleaseSafe coverage. Private ABI totals remain Home 410/471 and Bun 402/461. Current upstream WebAssembly main execution remains tracked separately in #395 so immutable WG1/WG3 scores are not overwritten.

9 days ago

Roadmap update: #395 is implemented through 44487435. WebAssembly upstream main now has a separately pinned executable shadow profile: 3,368/3,368 applicable commands pass across all 21 files changed from WG3, and 64,055/64,055 pass across the complete 258-file snapshot. Both have zero failures/runner errors and exact inventories; immutable WG1/WG3 scores remain unchanged. Awaiting the final CI run before closing #395.

9 days ago

#396 has landed on main (bf847786, b187b027): all eight shared LifecycleReporter/TestReporter private exports now have exact per-session semantics, pinned upstream contracts, Debug/ReleaseSafe unit coverage, and compiled Home/Bun consumers. Inventories are now Home 418/471 (53 pending) and Bun 410/461 (51 pending). Targeted CI is run 29766523096; #396 remains open until its boundary job is green.

A CI-discovered collection-index backing leak was split to #397 and fixed in 0eb0600f; it likewise remains open for Linux CI confirmation.

9 days ago

Latest main checkpoint c19d255b:

  • #397 follow-up restores ObjectColdState to 192-byte payload / 224-byte raw allocation, with 32 bytes of headroom under its 256-byte class.
  • #399 fixes bounded-heap recovery for interpreter side storage; unit shard 1 is 308/308 and the 4 MiB regression proves collection occurs.
  • #398 implements five exact HTTPServer inspector lifecycle exports. Private ABI coverage is now Home 423/471 (48 pending) and Bun 415/461 (46 pending).
  • Debug/ReleaseSafe focused coverage, dual-profile compiled consumer, both ABI audits, and docs build pass. README counts are current.
  • Local build artifacts were cleaned, reclaiming about 4.9 GB.

Fixing CI: https://github.com/zig-utils/zig-js/actions/runs/29769670857

9 days ago

Private-ABI checkpoint a856d0ec: #400 adds real realm-local native signal delivery with exact pinned signal mapping and (name, number) EventEmitter arguments. Home is now 424/471 (47 pending), Bun 416/461 (45 pending), and README/API/ABI counts are current. Debug/ReleaseSafe focused and dual-profile fixtures, audits, and docs build pass.

9 days ago

Roadmap checkpoint: #395, #396, #398, and #400 are closed with green exact CI jobs from run 29770919015. #397/#399 remain open while their GC-relevant fuzz legs finish. The next Home-only registry slice #401 is implemented in two local commits with Debug/ReleaseSafe, exact linked-consumer, audits, compatibility, and 32-page docs evidence; local caches were cleaned again, reclaiming 1.3 GB.

9 days ago

Roadmap checkpoint: #395–#400 are now closed on exact green CI evidence. #401 and #402 are pushed in separate small chunks through 737bd957, locally green in Debug/ReleaseSafe with ABI audits, compatibility, and docs. Published private coverage is Home 427/471 and Bun 418/461; fixing CI is running.

9 days ago

Heap snapshot/profile child #403 is implemented on main through 7983fca: real VM-wide graph serialization, WebKit/V8 formats, stable relocation-safe IDs, external ArrayBuffer accounting, dominator retained sizes, OOM atomicity, both ownership ABIs, and Debug/ReleaseSafe/TSan evidence. The child remains open only for its exact fixing CI gate.

9 days ago

New tracked child #404 owns the remaining CPU sampling-profiler ABI cluster: per-VM lifecycle, safe cooperative stack sampling, Chrome/Markdown serialization, Home/Bun output ownership, OOM, and sanitizer evidence. This keeps the three profiler symbols out of the broad pending bucket without treating link-only stubs as progress.

9 days ago

Closed ABI children #401, #402, and #403 on green exact private CI. Work has moved to #404 for the remaining pinned CPU profiler boundaries.

9 days ago

CPU profiler boundary #404 is implemented on main through 9ab79698; private ABI pending count is now 75 and the release matrix remains 7/12. Awaiting the exact private CI job before closing #404.

9 days ago

Created roadmap child #405 for the six readable-stream conversions; it explicitly requires native stream semantics rather than link-only Promise stubs.

9 days ago

#404 is complete. Per-VM CPU sampling profiles landed through 9ab796987fe04331761e620b2e928b9534330a4f; the exact fixing-main private-abi-boundary job passed its Debug, ReleaseSafe, and TSan evidence. The pinned counts remain Home 433/471 and Bun 424/461 at that checkpoint; #405 is the next active private-ABI slice.

9 days ago

#405 landed through 4275f7c2 and is now represented in the child map and latest evidence. Counts are Home 439/471 and Bun 430/461; all focused local variants pass, with closure awaiting the exact fixing-main job.

9 days ago

Created #406 for the next coherent boundary: real WebAssembly.compileStreaming/instantiateStreaming plus the pinned JSC__Wasm__StreamingCompiler__addBytes opaque feed. It explicitly preserves the frozen WG1 baseline while validating modern coverage through the existing WG3 and upstream-main profiles.

9 days ago

#407 is implemented on main through a35f025e. Fetch bodies now preserve real streams, derive bodyUsed from disturbance, share all six #405 conversions, and tee live bodies for Response/Request cloning with combined cancellation. Focused Debug, ReleaseSafe, and TSan evidence passes; exact main CI is pending before closure.

9 days ago

WebAssembly streaming child #408 is implemented on main (ea64275b, e457d0b9) with a pinned WG3/Home/Bun contract and focused Debug/ReleaseSafe/TSan evidence. It remains open pending exact main CI; #409 still tracks the private incremental compiler feed, so roadmap #134 remains open.

9 days ago

#409 is implemented on main (1174cbe7, 0cc83217), advancing the pinned private ABI to Home 440/471 and Bun 431/461. Together with #407/#408 it completes the engineered streaming stack; all three await the exact current main private-ABI job. Roadmap #134 remains open for the remaining declared work.

9 days ago

Added child #410 for the final strict streaming integration rather than treating post-EOF stable buffering as #406 completion. #407/#408/#409 may close on exact CI; #406/#143/#134 remain open until actual Response chunks feed the compiler lifecycle before EOF.

9 days ago

WebAssembly streaming parent #406 and children #407-#410 are complete. Direct body chunks now enter the VM-owned StreamingCompiler before EOF; representative MVP/SIMD/threads/exceptions/memory64/GC profiles, precise GC, teardown, sibling realms, external Home/Bun consumers, Debug, ReleaseSafe, and TSan are covered. Exact fixing-main private boundary: https://github.com/zig-utils/zig-js/actions/runs/29787583184/job/88502417191

Current private counts remain Home 440/471 and Bun 431/461. README benchmark and conformance scores remain unchanged because this compatibility path does not alter those workloads.

9 days ago

Private ABI scope is now terminal: #140, #163, and #164 are closed at Home 447/447 and Bun 437/437, with zero pending/unclassified entries. #422/#423/#424 are closed, and exact main e3fdc52385204c75fe6ae5c64d48dae6e5ede418 passed 43/43 jobs. The Wasm relocating-growth race #425 is also closed against that run. Remaining roadmap gates are PR-249 promotion (#143), optimizing JIT (#146 plus #132/#133), and final compatibility/evidence removal (#147/#246); the README limitation must remain until those are genuinely complete.

9 days ago

Latest checkpoint: ec65181 begins the optimizing-tier foundation under #431 and updates the concise README/docs. This adds advisory profiles and deterministic CFG planning only; it does not change conformance claims or PR-249 totals (243 promoted, 10 optimizer-blocked, 6 terminal).

9 days ago

Optimizer checkpoint 3736fc5 completes #431 acceptance item 2 (deterministic CFG/SSA, canonicalization, DCE) and refreshes the concise README. No executable optimizer tier exists yet, so #134 compatibility claims and PR-249 totals remain unchanged.

9 days ago

Optimizer checkpoint 74fd22d now executes the first exact constant-SSA native subset and updates the concise README/status docs. It does not promote any PR-249 optimizer case or change #134 conformance totals; general guarded control/parameter lowering remains under #431.

9 days ago

Optimizing-JIT roadmap checkpoint 951c5c5 is on main. The optimizer now consumes its SSA through a portable virtual-register lowering and executes guarded straight-line Number-parameter arithmetic/comparisons on AArch64. Failed speculation exits before step accounting and retains exact baseline/bytecode semantics. Normal and TSan focused JIT suites pass 108/108; the optimizer filter passes 17/17.

README wording and docs were updated from the former constant-only claim. No #134 completion box closes yet: #431 still needs control-flow/merge lowering, and the broader #146/#429 work remains open. Published benchmark scores and PR-249 totals are unchanged because this slice does not affect either measured corpus.

9 days ago

#431 is complete through e3f411a and its child checkbox is now updated. The shipped boundary is explicit: portable optimizer SSA plus guarded numeric execution and equal-cost two-way branches on AArch64, with unsupported control failing back exactly. Normal/TSan focused JIT pass 110/110 and optimizer filters pass 19/19.

This advances but does not close the #134 optimizing-JIT scope. General control/deoptimization, properties/arrays, lifetime safety, remaining backends, JSC performance evidence, and all ten #429 cases remain open. README benchmark values and corpus totals are unchanged.

9 days ago

Optimizing-JIT deoptimization groundwork landed in d0f8aae and 67e878a: immutable recovery metadata now survives publication, and the VM has an exact non-restarting deoptimization outcome/reconstruction path. Normal/TSan focused JIT remain 110/110 and optimizer filters are 21/21.

This does not close a #134 item yet; generated exits, checkpoint/handler/OSR state, precise stack maps, and the remaining #146 children are still open. README benchmark scores and PR-249 totals are unchanged.

9 days ago

Resumable optimizing execution advanced in 3cbc26a: unequal-cost branches now perform real partial native work and deopt to the selected bytecode successor without restarting or distorting step/checkpoint behavior. Normal/TSan focused JIT pass 111/111 and optimizer filters pass 23/23.

This remains a #432 checkpoint, not a completed #134 surface. README status was updated; benchmark scores and PR-249 totals remain unchanged.

9 days ago

Optimizing-tier roadmap update: ea669989 landed edge-specific OSR states under #432, preserving distinct loop preheader/backedge recovery values after SSA compaction. Focused JIT verification passed 111/111 with zero leaks. This is groundwork, not completion; executable loop OSR and the remaining #432 acceptance scope stay open. README benchmark scores are unchanged because this slice does not affect benchmark workloads.

9 days ago

Optimizing-tier roadmap update: bc8c997f defines exact immutable loop OSR entry contracts under #432, including transactional imports into SSA scratch slots and fail-closed eligibility. Focused JIT verification passed 112/112 with zero leaks. This is not executable loop OSR yet and does not change README benchmark scores.

9 days ago

Roadmap update: 6fba2c4e landed the first executable optimizing-tier loop OSR region under #432. Exact state eligibility, step accounting, body/exit edge reconstruction, and checkpoint fallback are covered end-to-end. Normal and TSan focused JIT gates both passed 113/113 with zero leaks. The README limitation is updated; benchmark scores remain unchanged because the benchmark workloads do not enter this new subset.

9 days ago

Optimizing-tier roadmap update: 70e6cdae and 51bfef3e add fail-closed owner invalidation barriers at VM native-entry/OSR polls and inside optimizer machine code. Rejected entries preserve state and steps exactly; normal and TSan focused checks passed. #432 remains open for resumable polls inside future long-running native loops and the other listed acceptance work.

9 days ago

Roadmap update: optimizer #432 now has linked implementation children #435 (native loop bodies/polls), #436 (calls/exceptions/handlers), and #437 (movable optimized-frame relocation). 254415a1 landed immutable precise stack maps for current recovery points. Focused JIT passed 113/113 with zero leaks; benchmark scores remain unchanged.

9 days ago

Roadmap update: c152d97a advances #435 from header-only OSR to one complete native numeric loop iteration with exact edge recovery and step accounting. README limits and optimizer docs are current. Normal and TSan focused JIT passed 113/113; benchmark scores remain unchanged because the published benchmark workloads do not enter this optimizer subset.

9 days ago

Roadmap update: e65880ca keeps supported numeric optimizer loops native across multiple iterations with exact per-header invalidation and VM-boundary polling. README and optimizer docs are current. Normal and TSan focused JIT passed 113/113; published benchmark scores remain unchanged because their workloads do not enter this subset.

9 days ago

Roadmap update: e9d0dac0 adds cycle-safe parallel OSR edge assignments and exact swapped multi-local backedge/checkpoint recovery under #435. README and optimizer docs are current. Normal and TSan focused JIT passed 115/115; published benchmark scores remain unchanged because their workloads do not enter this subset.

9 days ago

Roadmap update: 9bf10349 extends #435 loop OSR to one equal-cost inner branch diamond with exact path accounting and checkpoint reconstruction. Normal and TSan loop-OSR filters passed 4/4; README/docs are current and published benchmark scores are unchanged.

9 days ago

Roadmap update: #435 is acceptance-complete through 6852f5f2, including exact active-loop invalidation recovery under full normal/TSan JIT (117/117). Broader reducible loop CFGs are tracked by new child #438. README/docs are current; published benchmark scores remain unchanged.

9 days ago

Roadmap update: a8d094a5 begins #436 with immutable catch/finally deoptimization records and transactional VM handler reconstruction. README/docs are current; no optimizer exception execution or benchmark-score change is claimed.

9 days ago

Roadmap update: 321b1593 carries handler-aware optimizer frame states into immutable deoptimization artifacts under #436. Throwing bytecode remains rejected; README/docs are current and benchmark scores are unchanged.

9 days ago

Roadmap update: 1ee7e18a adds handler-aware normal optimizer CFG dataflow and end-to-end active-catch side exits under #436. Unsupported calls/throws still reject. README/docs are current and benchmark scores are unchanged.

9 days ago

The child map is current: #431 and #435 are closed; active optimizer work is #432 with #436/#437/#438, plus #433/#434. Batch 125349c and docs a5c2c6a extend exact deoptimization to the remaining interpreter-owned environment, allocation, object, scope, import, and iterator effects, with focused normal and TSan evidence. README wording is concise and current. Published benchmark scores were not regenerated because this metadata/control-flow batch does not change any benchmark kernel.

9 days ago

Optimizer precise-GC checkpoint: 057a2ef adds live moving collection inside AArch64 optimizer loops, including typed recovery-only object scratch maps and deterministic post-move recovery. 11e4b24 refreshes the concise README and optimizer documentation. Focused safepoint gates pass 9/9 normal and 9/9 TSan; published benchmark scores remain current because these paths activate only for requested compaction. #437 now has four acceptance items complete, with no-GIL relocation stress remaining.

9 days ago

Latest optimizer batch: 40d85b3 adds independent two-latch loop OSR and fixes selected branch-local SSA emission; ae26011 adds no-GIL live relocation; 47902cb keeps README/docs current. The combined optimizer gate passes 39/39 lowering and 68/68 runtime tests in normal and TSan. #437 is now complete and closed. Benchmark scores remain current and unchanged because no published benchmark workload or harness changed.

9 days ago

Optimizing-JIT checkpoint: a95fa40/970256b extend #438 with exact conditional loop-break exits and advance #436 with a host shell-timeout differential at the exact 1,024-step boundary. The concise README capability line now includes shared, independent, and exiting inner arms. TSan passes 40/40 optimizer-lowering and 70/70 optimizer-runtime tests; normal coverage passed as the initial 40/40 + 69 unaffected runtime tests plus the corrected focused differential. Published benchmark scores remain unchanged because neither benchmark kernels nor harnesses changed.

9 days ago

Follow-up optimizer evidence landed in 89fc073/94602c5: cooperative stop, expired watchdog, and shell-timeout requests now have exact optimizer-to-bytecode checkpoint differentials at step 1,024, passing normally and under TSan. #436, #432, and #433 are updated. README benchmark scores remain unchanged because this is correctness coverage, not a benchmark change.

9 days ago

Optimizer batch landed on main in 80055d8/ad0b211/8e72172. #438 now owns an immutable region-scoped chain of sequential conditional exits rather than a single hard-coded break: both exits recover exact locals and cumulative steps, and unrelated post-loop control no longer rejects the loop. #436 now fails closed to bytecode at function entry, loop OSR, and direct-call paths whenever debugger, host, or profiler statement hooks are installed. Combined normal and TSan gates pass 41/41 optimizer-lowering and 72/72 optimizer-runtime tests; focused region-scope/multi-exit reruns also pass in both modes. README wording and detailed docs are current; benchmark scores remain unchanged because no measured kernel or harness changed.

9 days ago

Follow-up #438 batch landed in c99dafa/dfb728e/ad39bae. Conditional-exit prefixes can now compose with one shared or independent-latch branch tail, and a two-entry irreducible witness fails closed before publication. TSan passes 42/42 optimizer-lowering and 74/74 optimizer-runtime tests; focused normal loop coverage is 9/9 plus the mixed source differential. README/docs and #438/#432/#146/#429/#434 are current; benchmark scores remain unchanged because this is correctness coverage.

9 days ago

Another #438 batch landed in 149e065/f8a7343/43a8315. The single branch tail is now an owned sequence: shared joins can feed subsequent diamonds directly or through a linear merge, selected arms account exact incremental steps, and the final segment retains shared/independent latch semantics. Focused normal loop tests pass 9/9 plus the sequential-diamond source differential; combined TSan remains 42/42 lowering and 74/74 runtime. README/docs and #438/#432/#146/#429/#434 are current; benchmark scores remain unchanged.

9 days ago

Optimizer roadmap checkpoint: 50674c6/f7417cc/b8f7bd5 add path-exact conditional continue/backedge chains with three or more latches, a source-level convergence witness, and refreshed README/detailed optimizer scope. Focused normal evidence is 9/9 loop lowering plus 3/3 source tests; combined optimizer TSan evidence is 42/42 lowering and 75/75 runtime/context tests with zero failures or leaks. #438 remains open for nested loops, arbitrary reconvergence, and fully general reducible regions. Published benchmark scores remain unchanged because this batch does not alter benchmark kernels or the harness.

9 days ago

Nested-loop optimizer checkpoint: 0bf1d92/e1a2032/ff0b77f publish one exact innermost OSR entry for multi-header functions, prove it by composing nested execution with the three-latch region, and refresh README/detailed docs. Unmatched outer backedges remain in bytecode. The single batched TSan gate passes 42/42 lowering and 76/76 runtime/context tests with zero failures or leaks. #438 remains open for fused nested-loop regions, arbitrary reconvergence, and fully general reducible control. Benchmark scores remain unchanged.

9 days ago

General optimizer-region checkpoint: a42aaf2/014d910/a148456 add a single-header DAG fallback with edge-owned parallel copies, arbitrary nested reconvergence, exact internal exits, incremental path accounting, and a moving safepoint on every independent latch. Focused source evidence is 4/4; the combined optimizer TSan gate is 42/42 lowering and 79/79 runtime/context tests with zero failures or leaks. #438 is now structurally limited to cyclic/fused nested-loop regions. README and detailed docs were refreshed; benchmark scores remain unchanged because these CFGs are not used by the published kernels.

9 days ago

#438 is complete and closed through 48bfe60/b80e81f/3d78eaf. The optimizer now fuses reducible two- and three-level nested loops from an exact outer OSR entry, validates internal backedges by dominance, preserves edge-owned parallel copies, side-exits exact internal block entries before pending work, and publishes moving safepoints for every inner/outer latch. Focused fused tests pass 4/4 normally and under TSan; the broad optimizer TSan gate passes 42/42 lowering and 80/80 runtime/context tests. README no longer lists optimizer CFG shape as missing; native object effects and additional backends remain. Benchmark scores are unchanged.

9 days ago

JIT roadmap checkpoint 1b812e2/c3833eb: explicit throw→catch is now an exact exceptional SSA edge, and deterministic nested catch/rethrow chains execute natively on AArch64. The full optimizer TSan filter passes 83/83. README missing-surface wording now narrows the remaining exception work to call/finally regions. #436 stays open for native finally dispatch, call/effect exceptional successors, and the complete differential matrix; benchmark scores are unchanged.

9 days ago

JIT roadmap checkpoint e3cb3bb/bd94239 narrows the README gap again: deterministic catch and finally bodies are now native on AArch64; remaining exception work is call-exception regions and dynamic finally completion dispatch. Focused finally tests pass 9/9 and the optimizer TSan filter passes 85/85. #436 remains open and benchmark scores are unchanged because no benchmark kernel/harness changed.

9 days ago

JIT roadmap checkpoint 0cb719d/80281cc completes #436 optimizer modeling for call/effect exception targets and post-unwind handler state. Focused evidence is 4/4 and optimizer TSan is 87/87. README/docs are current; remaining work is native call/effect execution, dynamic finally dispatch, and the final exception differential matrix. Benchmarks are unchanged.

9 days ago

#439 checkpoint e66f4f4/5a227e3 defines the native operation/result ABI needed for optimized calls, effects, and exception dispatch. It preserves distinct runtime outcomes and appends fields without shifting existing native-frame offsets. Focused normal+TSan evidence passes 3/3; README/docs are current and benchmark scores are unchanged.

9 days ago

#439 checkpoint 6c1d86a/443f6f0 completes descriptor staging/publication/lifetime for future native calls and effects. The combined optimizer TSan gate passes 87/87; README/docs are current and benchmark scores are unchanged.

9 days ago

#439 checkpoint 2e401c0/2dcc3c9 adds the validated VM dispatcher behind owned native-operation descriptors, beginning with to_numeric. Focused normal+TSan evidence passes 3/3; README/docs are current and benchmark scores remain unchanged.

9 days ago

Roadmap update: #439 now has an executable AArch64 to_numeric runtime operation with precise callback roots and exact catch/finally continuation after thrown valueOf hooks (c8639bb, docs 95e5675). The operation is not replayed; focused catch/finally differentials and the 149/149 optimizer TSan gate pass. Broader #439 call/effect/completion work remains open.

9 days ago

Optimizing-JIT roadmap update: child #439 now executes ordinary AArch64 calls natively at 19474871, with dynamic arity, precise callback roots, exact normal values, and catch/finally throws resumed without replay. Documentation and the README missing-surface wording were refreshed at c660c72. The batched broad optimizer TSan gate passes 149/149. Benchmark scores remain the latest accepted published matrix because these workloads are unaffected. Main CI: https://github.com/zig-utils/zig-js/actions/runs/29891461400

9 days ago

Optimizing-JIT update: 02a6aba extends native invocation beyond ordinary calls to explicit-this calls and construction; 7ec0384 keeps the concise README and detailed status accurate. Precise dynamic roots, normal constructor return, mixed fallback, and one-shot caught constructor throws are covered. The batched broad optimizer gate passes 150/150 under TSan; benchmark scores are unchanged. Main CI: https://github.com/zig-utils/zig-js/actions/runs/29891834824

9 days ago

Optimizing-JIT roadmap update: 5603c4b adds native named/computed property reads and complete method-call chains; c0a502b keeps README/status wording exact. Names are artifact-owned, receivers/keys are precisely rooted, and ordering plus one-shot getter/key/callee exceptions are verified. Broad optimizer TSan passes 152/152. This is correctness groundwork for #132, not yet its shape-specialized performance completion, so benchmark scores remain unchanged. Main CI: https://github.com/zig-utils/zig-js/actions/runs/29892528373

9 days ago

Roadmap progress: named/computed optimizer property writes are now executable on deterministic AArch64 paths (e81430d), including accessor/proxy semantics, precise GC roots, assignment results, ordering, and catch resumption. The README's missing-surface wording and detailed optimizer status now match main at df57bc7; the batched TSan JIT gate passes 155/155.

Benchmark scores remain unchanged because the publication workloads do not exercise this slice. Remaining optimizer roadmap work continues under #439/#146. Latest main CI: https://github.com/zig-utils/zig-js/actions/runs/29893229195

9 days ago

Roadmap progress: native optimizer membership effects landed in 749c2aa. in, instanceof, and private-brand in now have real effectful SSA lowering, precise callback roots, artifact-owned private names, canonical observable semantics, and exact exception continuation. The batched TSan JIT gate passes 156/156; concise README/status documentation is current at d7773bf.

Benchmark scores remain unchanged because the publication workloads do not exercise this slice. Remaining optimizer roadmap work continues under #439/#432/#146. Latest main CI: https://github.com/zig-utils/zig-js/actions/runs/29893818314

9 days ago

Roadmap progress: the native optimizer unary/coercion batch landed in 7ce8b63, including shared interpreter/VM/native semantics, precise roots, pure void, one-shot caught conversion failures, and exact common-prefix step ownership before Boolean control. The batched TSan JIT gate passes 157/157; concise README/status documentation is current at 4f8ffa0.

Benchmark scores remain unchanged because the publication workloads do not exercise this slice. Remaining optimizer roadmap work continues under #439/#432/#146. Latest main CI: https://github.com/zig-utils/zig-js/actions/runs/29894681886

9 days ago

Roadmap checkpoint: optimizing-JIT child #439 advanced in edae6d74/b169dbf5. AArch64 now executes unary, exponentiation, bitwise, and shift coercions plus the previously landed calls, construction, property access, and membership through rooted runtime callbacks with exact exception continuations. The batched broad optimizer TSan gate passes 158/158 with zero skips, failures, or leaks. README missing-surface wording and optimizer documentation are synchronized; published benchmark scores are unchanged because this slice does not affect the committed workloads. Remaining #439 work is dynamic arithmetic, eval/spread/tail calls, object/array effects, and dynamic-finally dispatch. Latest main CI: https://github.com/zig-utils/zig-js/actions/runs/29895064566

9 days ago

Roadmap checkpoint: optimizing-JIT child #439 advanced in bb28a32b/a5981afb. AArch64 now executes profile-selected dynamic arithmetic, relational, and equality semantics in addition to unary/exponentiation/bitwise coercions, calls, construction, property access, and membership. Per-site atomic profiles preserve the inline Number fast path and are race-free under TSan. Dynamic paths pass 6/6 normally and under TSan; the broad optimizer TSan gate passes 161/161 with zero skips, failures, or leaks. README/docs are synchronized and benchmark scores remain unchanged because the published workloads do not exercise these callbacks. Remaining #439 work is eval/spread/tail calls, object/array effects, and dynamic-finally dispatch. Latest main CI: https://github.com/zig-utils/zig-js/actions/runs/29895820403

9 days ago

Roadmap checkpoint: #439 now executes all non-tail invocation forms natively on deterministic AArch64 optimizer paths at 3a32d9a; README/docs follow at 979d541. Eval and spread have been removed from the README missing-surface list. The broad JIT TSan gate passes 162/162 with zero failures, skips, or leaks. Remaining optimizer items named there are object/array effects, tail calls, dynamic-finally dispatch, and additional backends.

9 days ago

Roadmap checkpoint: proper tail calls are no longer a README missing optimizer surface. Implementation fd687e3 executes all four tail opcodes with bounded native-stack behavior; documentation 06c962f updates the README and optimizer status. Focused tail evidence is 2/2 and broad JIT TSan is 162/162.

9 days ago

Roadmap checkpoint: native optimizer object/array literal effects are complete at ef1c0f8, with README/docs at 6aa623a. The README optimizer gap is now limited to dynamic-finally dispatch and additional architecture backends. Focused construction evidence is 2/2 and broad JIT TSan is 163/163.

9 days ago

Optimizing-JIT recovery child #432 and executable effect/completion child #439 are now complete and checked off in the roadmap map. The final AArch64 batch implements exact five-way native end_finally dispatch with nested catch/finally propagation and malformed-kind fail-closed behavior. Evidence: 164/164 broad JIT TSan plus 7/7 focused full-root native-finally TSan, zero failures/skips/leaks. README now lists only additional optimizer architecture backends for this specific gap; overall README-removal gates remain open under #146/#147/#246 and the other unchecked roadmap items.

9 days ago

#132 advanced through a35ee76/1832e5b: isolated AArch64 now performs direct guarded polymorphic named reads from inline slots, including object-valued results, with exact callback fallback for shared/exotic/external/mismatched cases. Relevant TSan evidence is 5/5 property-cache full-root plus 166/166 broad JIT, zero failures/skips/leaks. #132 remains open for direct writes, complete GC/invalidation differentials, and exact-parent profiling; README capability wording is current and benchmark scores remain unchanged.

9 days ago

July 22 roadmap update:

  • 566b8b90 reconciles the release matrix: 6/12 gates green, private ABI terminal at 0 pending, and automatic compaction/moving-nursery blockers explicitly reopened as #446/#447.
  • #448 is complete in a1307097 with packed existing-index access in deterministic and reducible loop regions; focused normal and TSan gates pass 5/5. Documentation is current in 7b706ea2.
  • #133 remains open through #449 for append, index==length growth/reallocation, exact-parent profiling, and batched broad gates.
  • README benchmark scores remain the accepted July 22 1,540-sample matrix; this optimizer slice does not execute in those workloads, so no scores were regenerated.
9 days ago

#450 is complete on main through 96d54ac2, 59063a77, and d372d0ae: reducible optimizer loops now execute exact allocating calls, construction, and literal effects. Focused normal and TSan gates pass 4/4. #449 remains open for direct append/growth/reallocation specialization, measured tier arbitration against the existing VM packed-push/sum kernels, exact-parent profiling, and broad #133 gates. The accepted README benchmark matrix is unchanged because those published workloads still select the VM kernels.

9 days ago

Optimizing-JIT checkpoint: #451 closed in a2010acc/90de5f08. AArch64 now directly executes guarded spare-capacity exact-end assignment, literal append, and one-argument intrinsic push, with callback fallback for every allocating/observable/shared case. Focused normal and TSan packed/allocating batches pass, the release matrix remains 6/12 green with private ABI pending=0, and README benchmark scores remain the accepted July 22 matrix because the published arrays workload still selects the older VM packed kernels. #133/#449 remain open for reallocation, wider push forms, measured arbitration/profile, and broad evidence.

9 days ago

Packed-array optimizer checkpoint update: #452 and parent #449 are complete through f4916c3/c4436ad. Zero/variadic direct push and precisely rooted reallocating push preserve failure-atomic OOM, canonical observable fallbacks, exact steps, moving-GC roots, and shared semantics. Focused normal/TSan plus normal/TSan shared contention pass. The exact-parent profile keeps the published arrays workload on existing VM packed kernels, so README benchmark scores remain unchanged. #453 tracks one targeted residual-dispatch witness and the single combined full-unit/no-GIL/TSan gate needed to finish #133; #146 and this release umbrella remain open.

9 days ago

#133 and its #448–#453 child chain are complete through 8ec5529. Exact-parent attribution moves all measured reallocations out of general optimizer dispatch, the published arrays workload retains its faster VM-kernel priority, README benchmark scores remain unchanged, and the combined 1,409-unit/no-GIL/TSan/publication/release checkpoint passes. #146 remains open for #433, #434, and #429; this umbrella remains open for its independent GC/reference/final removal gates.

9 days ago

#456/#457 roadmap checkpoint: 01306740 adds mutation-driven Class-A invalidation for published native property assumptions, cooperative-GC-aware conductor acquisition, and the missing outer execution lease for VM functions entered from the tree walker. 427ba867 updates the concise README and checked-in concurrency evidence. Focused normal and TSan Class-A gates pass 4/4.

The two exact PR-249 GC-wait/Class-A cases remain blocked rather than receiving a vacuous promotion: they require inherited-property specialization and dependency watchpoints, now explicitly tracked by #457. Accepted benchmark scores are unchanged because the published workloads and selected tiers did not change.

9 days ago

Roadmap checkpoint from f6f8ef1b: the PR-249 reference surface is terminal. #143, #429, and #430 are complete; the exact pin records 253 promoted, 0 blocked, 6 terminal dispositions, and five helpers. Complete ReleaseSafe serialized/no-GIL evidence is machine-readable and CI-verified. The release matrix is 9/12 green, leaving #446, #447, and #434/#146 as the implementation/evidence blockers before #147/#246.

9 days ago

Roadmap checkpoint 9e51e1ff: #146/#434 are complete, all optimizer checklist items are reconciled, and the generated matrix is 10/12 green. Only #446 and #447 remain as implementation/evidence blockers before #147/#246 can finish.

Sign in to comment on this issue.