ReviewOS

zig-utils/zig-js

WebAssembly: implement versioned post-MVP feature profiles

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

Parent: #134 Depends on: #141

Define explicit feature profiles and implement them without hidden partial support.

Acceptance:

  • Version and inventory selected proposals, including bulk memory, reference types, multi-value, SIMD, threads, exceptions, tail calls, memory64, and Wasm GC as applicable.
  • Validate feature dependencies and reject disabled proposals deterministically.
  • Integrate shared memories/atomics with the no-GIL worker and GC model.
  • Publish upstream spec-test results per enabled profile with explicit exclusions.
  • Document host/architecture support and performance evidence.

Child issue map

  • #262 — versioned feature registry and deterministic gates
  • #269 — sign-extension and nontrapping numeric operations
  • #263 — bulk memory, reference types, and multi-value baseline
  • #264 — SIMD
  • #265 — threads, shared memory, and atomics
    • #315 — no-GIL Memory wrapper growth publication (landed; awaiting replacement full CI)
  • #266 — exceptions and tail calls
  • #267 — memory64 and Wasm GC
    • #318 — spec-correct canonical recursive identity witness
    • #305 — independent multi-memory binary, runtime, robustness, and terminal corpus
  • #268 — versioned upstream conformance matrix
    • #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

Implementation order

Land #262 first. Proposal implementations may then proceed independently where their dependency graphs permit; #268 closes only after every declared supported profile has committed evidence. Unsupported profiles remain disabled and must reject deterministically rather than partially decoding.

Latest evidence

The independently gated multi-memory profile #305 is complete: all 829/829 commands across 38 pinned proposal files pass with zero failures, skips, or runner errors. Failure-atomic lifecycle, mixed memory32/memory64, deterministic store fuzzing, Linux TSan, and ReleaseSafe coverage are documented; the feature remains disabled by default.

9 days ago

Profile progress: the reference-types child chain #271/#274/#275 is complete with decoder, validator, typed slot/precise-GC, JS boundary, explicit multi-table, and cross-instance evidence. #263 remains open for bulk memory #272 and the exact structural profile score #273; the later profile children remain unchanged.

9 days ago

Profile progress: structural implementations #270 (multi-value), #271 (reference types), and #272 (bulk memory) are complete. #263 now has only exact pinned structural-profile inventory/score #273 remaining before it can close.

9 days ago

Core 2 structural baseline #263 is complete and closed through its full child chain #270-#273. Exact committed evidence: 27,437/27,437 applicable commands pass across all 90 pinned wg-2.0 core files, 581 text-format commands are explicitly n/a, and failures/runner errors are both zero. Inventory: 12ce485; bounded CI: a593fde; README/docs: 66a953a. Remaining work under this umbrella is deliberately limited to #264-#268 (SIMD, Threads, exceptions/tail calls, memory64/GC, and final multi-profile evidence).

9 days ago

Fixed-width SIMD child #264 is complete and closed with all children #279–#283.

Terminal evidence: 25,466 / 25,466 applicable commands pass in the exact pinned 56-file corpus, 510 text-format commands are explicit n/a, and failures/runner errors are zero. The 224-sample integer/float/shuffle/memory scalar-and-system-JSC benchmark, exact pins, bounded CI, portable architecture/fallback declaration, raw evidence, README, and reproduction landed through be438ae.

The remaining post-MVP implementation frontier is now #265 (threads/shared memory/atomics), #266 (exceptions/tail calls), #267 (memory64/GC), followed by terminal matrix #268.

9 days ago

Threads child #285 is now complete on main (a62e0c5, docs e321f04). The threads profile has exact opcode/decode/validation inventory plus stable shared WebAssembly.Memory ownership across grow, imports, shared-realm Thread, structured clone, and isolated Worker boundaries. Remaining profile work is #286 execution/wait/notify and #287 terminal corpus/TSan/scaling evidence.

9 days ago

Threads execution child #286 is complete: 67 atomic forms execute, exact threads/atomic.wast passes 372/372, the complete unit root passes 1,069/1,069 with zero skips/failures/leaks, and focused overlapping-access TSan witnesses are clean. Parent #265 now has only terminal evidence child #287 remaining.

9 days ago

#266 is now decomposed into #288–#292: tail-call inventory/validation, bounded execution/GC, exception core/unwinding, JS Tag/Exception identity, and terminal upstream/CI evidence. The dependency order is recorded on #266 so implementation can proceed in reviewable slices without hiding partial profile support.

9 days ago

#266 is complete: exception handling and tail calls now include exact proposal pins, binary/validation/runtime support, JavaScript identity boundaries, precise-GC and sanitizer evidence, and complete no-hidden-filter upstream totals. Remaining children are #265, #267, and terminal matrix #268.

9 days ago

Wasm Threads child #315 is complete in 7650986. The full acceptance workflow and all no-GIL TSan shards are green: https://github.com/zig-utils/zig-js/actions/runs/29697559754. The versioned post-MVP umbrella remains open for the other profile gates.

9 days ago

Core 3 child #366 is complete and terminal green: 63,964/63,964 applicable commands across all 258 exact WG-3.0 files, 1,235 explicit text-format N/A, zero failures/runner errors. The published ten-profile aggregate is 151,802/151,802 applicable. Remaining parent work is correctly isolated to #265, #267, and #268.

9 days ago

Closed terminal Threads chain #287/#265 and conformance publication #268 after reconciling the already-green evidence. The only remaining implementation child is #267/#300 (Memory64/GC host/CI publication gate).

9 days ago

Completed. Every selected post-MVP profile is exact-pin, dependency-gated, terminally inventoried, represented in the ten-profile 151,802/151,802 aggregate, covered by bounded CI and deliberate full-run commands, and documented with host/performance boundaries.

Sign in to comment on this issue.