ReviewOS

zig-utils/zig-js

Conformance: promote PR-249 WebAssembly, JIT, and shell hooks

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

Parent: #134 Related: #1, #132, #133

Turn the exact PR-249 reference corpus into maintained runtime coverage or verifier-enforced terminal dispositions—never filename-only skips or fake shell-hook passes.

Acceptance

  • Check in a machine-readable inventory of every reference file and required shell hook.
  • Classify every entry by runtime dependency and linked implementation owner.
  • Resolve all 14 non-JIT reference executables through real promotion or explicit incompatible-premise dispositions (#428).
  • Promote all 10 optimizing-tier executables through real #146 behavior (#429).
  • Remove ad hoc filename/premise exclusions; retain only verifier-enforced terminal dispositions.
  • Publish exact terminal execution totals with reasons and no generic skips (#430).
  • Fail on unclassified additions, disappearing files, allowlist drift, hook drift, disposition drift, and execution-artifact drift.

Children

  • #311 — pinned complete 339-file inventory and drift gate.
  • #314 — race-free shared no-GIL debugger script/location registries.
  • #406 — streaming WebAssembly compilation and private compiler feed.
  • #428 — resolved the non-JIT reference tail through promotion and terminal dispositions.
  • #429 — promoted all ten optimizing-JIT executables through real tier evidence.
  • #430 — published the terminal 259-executable runtime inventory.

Completion evidence

Completed by f6f8ef1b. The exact 3a14f2a8 pin contains 339 files: 259 executable = 253 promoted + 6 verifier-enforced terminal dispositions, with five helpers/preloads outside the denominator and zero blockers.

The final ReleaseSafe reproduction passes all 246 serialized-required promoted cases and all 253 no-GIL-required promoted cases with zero failures/skips. Each of the six terminal dispositions matches in both modes. The terminal artifact binds every executable to its vendored SHA-256, required mode, result, duration, measured commit, and implementation/disposition owner; CI rejects all drift.

Evidence: terminal execution artifact, reference inventory, terminal scan.

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

Heap snapshot/profile serialization child #403 is complete and closed on green exact private CI. CPU sampling/profile output continues in #404.

9 days ago

CPU profiler serialization child #404 is implemented on main through 9ab79698, including stable definition nodes, position ticks, recursive/async stacks, per-VM isolation, and Home/Bun output ownership. Awaiting exact CI closure gate.

9 days ago

Created #405 for the next serializer/conversion cluster: one real stream consumption path feeding ArrayBuffer, bytes, text, JSON, Blob, and FormData.

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 is implemented on main through 4275f7c2: all six pinned ReadableStream consumers now share realm-local stream/reader/controller machinery, exact Home/Bun contracts, and compiled Debug/ReleaseSafe/TSan fixtures. Inventories are now Home 439/471 (32 pending) and Bun 430/461 (31 pending). #405 remains open only for its exact fixing-main CI gate.

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

The Wasm StreamingCompiler private feed in #409 is implemented on main (1174cbe7, 0cc83217) and is now the lifecycle beneath compileStreaming/instantiateStreaming. The pinned symbol, token ownership, finalization, teardown, and Home/Bun external consumers are contract-gated; closure awaits exact main CI.

9 days ago

Added #410 beneath #406 to track the remaining direct Response-chunk → StreamingCompiler integration. This keeps the roadmap honest: the standard Web API and private feed are implemented independently, but #406 is not complete until real chunks reach that lifecycle before EOF.

9 days ago

#406 is complete: streaming WebAssembly APIs, direct Response-chunk compiler feeding, and the pinned private compiler lifecycle all pass exact fixing-main CI. The PR-249 inventory was also reconciled to its existing #403 heap-snapshot disposition and is green at 339 files / 235 promoted / 24 reference-only. Certification: https://github.com/zig-utils/zig-js/actions/runs/29787583184/job/88502417191

#143 remains open for the other reference-only JIT/shell/collector hooks.

9 days ago

Update for main@37f4d9b:

  • Added checked-in PR-249 unpromoted scan evidence: docs/.data/pr249-unpromoted-scan-2026-07-28.json.
  • zig build release-compatibility-check now validates the scan against pr249-reference-inventory.json: promoted/executable counts, blocked files, helper/preload files, terminal dispositions, full scan coverage, zero disposition drift, and explicit explanations for blocked passes without optimizer publication evidence.
  • README now links both the PR-249 inventory and the unpromoted scan from the generated What Is Not Implemented notice.
  • docs/threads/testing.md documents the refresh command and release-check guard.

Verification:

  • python3 -m py_compile tools/threads-reference-audit.py tools/release-compatibility.py
  • python3 tools/threads-reference-audit.py --format json --scan-unpromoted --output docs/.data/pr249-unpromoted-scan-2026-07-28.json -> drift 0
  • python3 tools/release-compatibility.py --update-readme
  • python3 tools/release-compatibility.py
  • python3 tools/threads-reference-audit.py --check-inventory --self-test-inventory --format json
  • zig build release-compatibility-check --summary failures
  • bun run docs:build -> 33 pages
  • ./zig-out/bin/test262 --list-excluded -> # total 0
  • ./zig-out/bin/test262 --list-skips -> # total 0
  • zig build test262 -Doptimize=ReleaseFast --summary failures -> VALID 48,506/48,506, NEGATIVE 4,669/4,669, skipped 0

Cases flipped: 0

9 days ago

PR-249 evidence refresh pushed to main: 0bd8e67 chore(pr249): verify declared nogil blocker evidence.\n\nWhat changed:\n- The unpromoted scan now runs a declared no-GIL probe for blocked files that request --useThreadGILOffUnsafe=1.\n- cve/mc-aint-poll-resume-stale-elided.js no longer carries the stale nogil-binding-resolution dependency. Its declared no-GIL probe passes, but the runner prints no optimizing-tier publication evidence, so it correctly remains blocked on #429/shell evidence rather than being promoted.\n- release-compatibility now requires that declared no-GIL probe in the checked-in scan.\n\nVerification:\n- python3 -m py_compile tools/threads-reference-audit.py tools/release-compatibility.py\n- python3 tools/threads-reference-audit.py --format json --scan-unpromoted --output docs/.data/pr249-unpromoted-scan-2026-07-28.json\n- python3 tools/threads-reference-audit.py --check-inventory --self-test-inventory --format json\n- python3 tools/release-compatibility.py\n- zig build release-compatibility-check --summary failures\n- zig build threads-test -Doptimize=ReleaseSafe -Dthreads-parallel-js=true -Dthreads-case=cve/mc-aint-poll-resume-stale-elided.js --summary failures => pass, cooperative GC collection observed, no optimizer publication evidence\n- ./zig-out/bin/test262 --list-excluded && ./zig-out/bin/test262 --list-skips => 0/0\n- zig build test262 -Doptimize=ReleaseFast --summary failures => VALID 48,506/48,506; NEGATIVE 4,669/4,669; skipped 0\n- bun run docs:build\n- git diff --check\n\nCases flipped: 0

9 days ago

d46282d6 (fix(atomics): serialize indexed property definitions) fixes the ReleaseSafe no-GIL regression reported by CI for the already-promoted cve/mc-prim-indexed-missing-define-race.js witness.

Root cause: property-mode Atomics.store could check an indexed property as missing, then race Object.defineProperty across the object’s separate descriptor and element locks. The store could publish value 9 after the definition published {value:1000,writable:false}, yielding the impossible mixed descriptor {value:9,writable:false}.

Fix:

  • add one narrow per-object indexed-property transaction above descriptor/element locks;
  • share it across indexed property Atomics, ordinary defineProperty, and delete;
  • keep descriptor coercion/proxy/host user code outside the transaction;
  • make the Atomics Missing arm a direct own-property write, so inherited setters cannot run while locked.

Evidence:

  • before: repeated ReleaseSafe no-GIL isolation failed by iteration 5, then reproduced immediately with the mixed descriptor;
  • after: 200/200 ReleaseSafe no-GIL isolated runs pass;
  • exact no-GIL TSan case passes in 20,080 ms with no race;
  • focused property-Atomics unit clusters pass;
  • zig build test-parallel: 1,446/1,446 passed, 0 leaked;
  • flips 0 Test262 cases; no expectations changed.

This repairs one promoted-case CI regression; #143’s five optimizer-blocked promotions and terminal inventory work remain open.

9 days ago

PR-249 parent checkpoint: bf590377 promotes jit/ic-publish-reset-loops.js and cve/mc-aint-poll-resume-stale-elided.js on measured real optimizer and sanitizer evidence. The verifier now reports 250/259 promoted, 3 optimizer-blocked, 6 terminal dispositions, with zero scan drift and 7/7 inventory drift self-tests. Release compatibility and reference probes pass. The remaining executable promotion tail is exactly checktraps-invalidation.js, cve/mc-code-calllink-writer-writer.js, and cve/mc-jit-stale-base-grow-oob.js; #429 has the per-case premise gaps.

9 days ago

Parent checkpoint after 821a5242: #429 is complete and the PR-249 promotion tail is empty.

The checked 339-file inventory now classifies all 259 executables as 253 promoted / 0 blocked / 6 terminal dispositions, plus 5 helper/preload files outside the denominator. Inventory self-tests pass 7/7, the regenerated terminal scan reports zero disposition drift, and the generated README now reports zero shell/JIT blockers.

#430 is the sole remaining child and now has an unambiguous input set for the complete serialized/no-GIL execution publication. #143 remains open for that artifact rather than closing on promotion counts alone.

9 days ago

Completion landed in f6f8ef1b. #430 now supplies the terminal artifact for all 259 executables, so every #143 acceptance item and child is complete. The release matrix consumes the artifact and marks this gate green; #143 is closed with 253 promoted, 0 blocked, 6 terminal dispositions, and zero required-mode failures/skips.

Sign in to comment on this issue.