open-standards/wai/wai-int-module/node-worker.mjs
Transaction Science 98d646dc92 wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine
wai/wai-int-module is one WebAssembly module with the interface of waism §5 and nothing else:
no import, one memory with a declared maximum, and every allocation trapping where memory
cannot grow (R13). It decodes the integer payloads (WIV1, WIH1, WIA1, WIS1), int_synth,
int_mlicpp, opus.dred.int and avatar.face through wai-rs's integer decoders, whose networks
run on wai-ops/1; networks and weights arrive as each capability's set.

- record/: the scalar and SIMD128 builds (7,099 vector instructions), named by SHA-256 in
  manifest.json, each held at the integer level by the Rust checker and check-module.mjs.
  build.sh builds both with the machine's paths remapped and checks both with both checkers.
  A build on another host has other bytes (the compiler's crate hashes take in each path
  dependency's absolute path and the host) and gives every case the same outcome.
- corpus.json (corpus.py): every committed vector and refusal fixture of those
  capabilities, 120 cases, from the committed corpora.
- host/ (wasmtime 50.0.1 Cranelift and Winch, Wasmi 2.0.0 with floats off), run-node.mjs and
  browser/run-browser.mjs run every case as a sink does and print one run digest; every run,
  on Linux x86_64, Linux arm64 and macOS arm64, gives the same.
- plant.py plants a float or a relaxed vector instruction in a module, for the checkers.
- waism §5, The set: one file as its bytes, several as their file sequence. avatars §6 names
  generator.wfg and identity.wfi; avatars §7.8, opus-dred §4.8 and determinism-tiers §5 state
  the module as a fabric.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-08 16:45:56 -05:00

15 lines
701 B
JavaScript

// node-worker.mjs: the worker run-node.mjs starts for one module. It compiles the module,
// decodes every case through sink.mjs in order, and posts each case's start and result;
// run-node.mjs ends it from outside when a case passes the wall-clock limit.
import { parentPort, workerData } from 'node:worker_threads';
import { decode } from './sink.mjs';
const { moduleBytes, cases } = workerData;
const module = await WebAssembly.compile(moduleBytes);
for (let i = 0; i < cases.length; i++) {
const c = cases[i];
parentPort.postMessage({ start: i });
const r = await decode(module, c.cap, c.payload, c.set);
parentPort.postMessage({ done: i, r });
}
parentPort.postMessage({ end: true });