open-standards/wai/wai-int-module
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science e0285b049b
Some checks failed
joule-moq-room room service / joule-moq-room · does this change touch it (push) Successful in 26s
wai-app and Create / wai-app · does this change touch it (push) Successful in 18s
wai-audit collector and player integration / does this change touch it (push) Successful in 26s
joule-moq-web browser client / joule-moq-web · does this change touch it (push) Successful in 26s
WAI operation catalogue / does this change touch it (push) Successful in 13s
wai-fleet service / does this change touch it (push) Successful in 23s
wai-int-module WAISM module of record / does this change touch it (push) Successful in 21s
wai-ledger service / does this change touch it (push) Successful in 12s
wai-ops integer operators / does this change touch it (push) Successful in 18s
wai media golden suite on RISC-V (emulated) / does this change touch it (push) Successful in 17s
wai-quantum for JavaScript / does this change touch it (push) Successful in 16s
wai-quantum studio and desktop / does this change touch it (push) Successful in 13s
wai-sink-android native sink library / does this change touch it (push) Successful in 13s
wai-sink-swift native sink package / does this change touch it (push) Successful in 13s
WAI Studio / does this change touch it (push) Successful in 12s
joule-moq-remote host agent / joule-moq-remote · does this change touch it (push) Successful in 3m13s
wai cross-architecture byte-equality / does this change touch it (push) Successful in 3m35s
wai formal verification (integer core) / does this change touch it (push) Successful in 3m17s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (push) Successful in 8s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 7m22s
wai-ops integer operators / linux-aarch64 (push) Successful in 2m53s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (push) Successful in 2m1s
wai cross-architecture byte-equality / linux-aarch64 (push) Successful in 59s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (push) Successful in 34s
wai-int-module WAISM module of record / linux-arm64 · both checkers, wasmtime (Cranelift, Winch), Wasmi and Node (push) Successful in 7m34s
wai-int-module WAISM module of record / the module of record in Chromium (push) Successful in 9s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (push) Successful in 7m58s
wai-audit collector and player integration / collector · linux (push) Successful in 4m24s
wai-fleet service / service · linux (push) Successful in 3m49s
wai-ops integer operators / independent checker (Python) (push) Successful in 21s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (push) Successful in 47s
wai-ops integer operators / wasm32 under Node (push) Successful in 50s
wai-ops integer operators / linux-x86_64 (push) Successful in 1m41s
wai media golden suite on RISC-V (emulated) / golden suite · riscv64 (emulated) (push) Successful in 1m3s
wai-ledger service / service · linux (push) Successful in 2m32s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (push) Successful in 2m13s
wai-int-module WAISM module of record / linux · both checkers, wasmtime (Cranelift, Winch), Wasmi and Node (push) Successful in 6m0s
wai-fleet service / service · macos (push) Successful in 41s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (push) Successful in 2m0s
wai formal verification (integer core) / every harness in one shard (push) Successful in 21s
wai cross-architecture byte-equality / linux-x86_64 (push) Successful in 49s
WAI operation catalogue / the catalogue and every door · linux (push) Successful in 8m50s
wai-ledger service / service · macos (push) Successful in 54s
wai-quantum for JavaScript / javascript · linux (push) Successful in 5m10s
wai-ops integer operators / macos-arm64 (push) Successful in 1m18s
joule-moq-room room service / joule-moq-room, every target (push) Successful in 18m19s
wai-quantum studio and desktop / studio · browser (push) Successful in 5m59s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (push) Failing after 2m1s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (push) Successful in 6m31s
wai formal verification (integer core) / kani (stage) (push) Successful in 4m6s
wai-quantum studio and desktop / desktop app · macos (push) Successful in 3m30s
wai-quantum studio and desktop / desktop app · linux (push) Successful in 8m56s
wai-quantum studio and desktop / desktop app · windows (push) Successful in 9m48s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (push) Successful in 5m9s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (push) Successful in 9m1s
wai formal verification (integer core) / kani (integer-core) (push) Successful in 9m41s
WAI Studio / Studio in WebKit · linux (push) Successful in 15m29s
wai formal verification (integer core) / kani (plan) (push) Successful in 13m48s
wai formal verification (integer core) / kani (arith) (push) Successful in 14m52s
wai formal verification (integer core) / kani (isqrt512) (push) Successful in 30m57s
WAI Studio / Studio in Chromium and Firefox · macos (push) Successful in 8m36s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (push) Successful in 12m14s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (push) Successful in 50s
wai cross-architecture byte-equality / windows-x86_64 (push) Successful in 1m4s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (push) Successful in 22m42s
wai cross-architecture byte-equality / macos-arm64 (reference) (push) Successful in 25s
wai formal verification (integer core) / kani (sound) (push) Successful in 22m37s
wai formal verification (integer core) / kani (stage-long) (push) Successful in 27m23s
wai formal verification (integer core) / kani (rans64-t2) (push) Successful in 15m3s
wai.neural.int_hyper: leaves, a parameter set of WAI's own, trained on generated pictures and held to one decode natively and in WebAssembly
The set: tools/wai_int_hyper_train.py at 40db6ee57 (the commit that brought it) trained a
mean-scale hyperprior, 48 synthesis and 64 latent channels, from seed 20261110 on the
dead-leaves pictures tools/wai_int_synth_real.py generates from that seed, streams 1 to 4096:
30,000 steps of 16, Adam at 1e-3 then 1e-4 for the last quarter, lambda 0.0483, on the CPU at 8
threads with deterministic algorithms (Python 3.11.17, torch 2.14.0+cpu, numpy 1.26.4,
compressai 1.2.8; the Framework build host, Linux x86_64). Exported by export_model and coded on
stream 0 (128 x 128). Listing digest (the set's identity):
ab796bb19cb202115400ea2ce16724617c3da035a2f4429d6266d419ab705ac0. Its record,
wai-rs/tests/vectors/int_hyper/leaves_set.json, reads Own: Apache-2.0, a start from a seed, and
training and coded pictures generated by a tool below wai/ with no third-party source; the
tools' blob ids are their blobs at 40db6ee57.

Reproducibility: two runs from the same seeds, side by side on that host, wrote the same bytes
in every file (float model 2ce350db..., all three members, the bitstream, the decode and the
record), and logged the same loss at every logged step. 300-step runs at 8 and at 4 threads
from the same seeds agree at step 0 and differ by step 299 (float models 1820d9ec... and
699bfbea...): the thread count is part of the recipe, and the record states it.

Where its decode is held, each to the one digest in int_hyper/sha256.json
(3ea9b4c3026e7c81683f3845f8256b1f0e1e8268284d81f3f16f290a5dde1374):
- int-payload-conformance gains `leaves`, a WIH1 payload (SHA-256 048c7c0d...), decoded natively
  by wai_int_payload_vectors verify; int_payload_verify.py parses and converts it independently.
- wai-int-module/corpus.json, 121 cases: both modules of record gave every case its outcome on
  wasmtime 50.0.1 (Cranelift, Winch) and Wasmi 2.0.0, run digest f245b5f0... (Framework). The
  browser crate's Node check names the payload too (CI).
- byte-exact-conformance: wih1_trained_set_is_golden, by the sink's decode and through the
  lowering under the reference and the fast kernels, on every leg of the matrix.
- ops-conformance certifies it (index and two lowered graphs): acc64, first acc32 failure at
  h_s's input range, 43 bits; int_hyper_ops holds the set and the vector to them.

verifiers/int-hyper-set.sh runs `check --own` and `self-test`: the unchanged record and a copy
started from a set that reads Own read Own, and 11 planted faults are caught (one weight moved
by one; a third-party source in the training record, beside generated pictures, or in the
start's record; a start from a checkpoint that is not WAI's; each of three seeds removed; the
coded picture among the training pictures; a decode digest changed; the decode of another
picture with its digest restated). The trainer's check of a start from a set now reads a start
that does not read Own as `not own`, rather than failing.

Run through rb on the Framework (Linux x86_64), each passed: wai_int_payload_vectors verify
(release and debug), int_payload_verify.py, check --own, self-test, corpus.py --check, wai-verify
vectors verify, wai_ops_check.py, byte-exact-conformance (release), int_payload (debug),
int_hyper_ops (debug and release), corpus_provenance, the module host on all 121 cases. Decode-side
plants, each caught, with the committed case passing first: a WebAssembly decode of the set with
one g_s weight moved (0 of 1 cases the corpus's), and the same drift in the committed file under
the native corpus verify, the record check and the byte-exact golden.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-10 13:41:55 -05:00
..
browser wai-int-module: the browser run ends when the page goes silent, with the browser's last words 2026-11-09 00:20:50 -05:00
host wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
record wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
src wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
build.rs wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
build.sh wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
Cargo.lock wai 0.6.0 2026-11-09 16:17:06 -05:00
Cargo.toml wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
cases.mjs wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
corpus.json wai.neural.int_hyper: leaves, a parameter set of WAI's own, trained on generated pictures and held to one decode natively and in WebAssembly 2026-11-10 13:41:55 -05:00
corpus.py wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
node-worker.mjs wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
plant.py wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
README.md wai.neural.int_hyper: leaves, a parameter set of WAI's own, trained on generated pictures and held to one decode natively and in WebAssembly 2026-11-10 13:41:55 -05:00
run-node.mjs wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00
sink.mjs wai-int-module: the first WA²ISM module of record, the operator-set module held at the integer level on every engine 2026-11-08 16:45:56 -05:00

wai-int-module — the operator-set module

The first module of record of WA²ISM™'s integer level (extensions/waism.md, waism/1-int): one WebAssembly module, with the interface of waism §5 and nothing else, that decodes WAI's integer capabilities. Its decoders are wai-rs's, whose networks run on the integer operator set (wai-ops/1, integer-operators). The networks and their weights are not in the module: each arrives as its capability's parameter set, data a sink holds to its digest, so one checked module serves every capability below.

capability payload set output
wai.neural.int_hyper WIH1 the file sequence of entropy.json, g_s.whm, h_s.whm RGB8
wai.video.int_hyper WIV1, keyframe 1 the same each frame's SHA-256, in order
wai.video.int_motion WIV1, keyframe 0 none each frame's SHA-256, in order
wai.audio.int_codec WIA1 model.wam int16 PCM, little-endian
wai.splat.int_codec WIS1 g_s.whm the attribute tensor
wai.neural.int_synth the latent int_synth.json RGB8
wai.neural.int_mlicpp the coded image model.wmb RGB8
wai.audio.opus.dred.int an Opus packet the draft's weights file the feature rows, i32 little-endian; none for a packet with no DRED
wai.avatar.face WFK1 the file sequence of generator.wfg, identity.wfi the frames' RGB8, one after another

Each output is the capability's canonical buffer (waism §5 step 5): for video, a per-frame hash, whose SHA-256 is the clip digest the integer-payload corpus states. A refusal is the capability's own code, with wai_run returning 1. A set of one file is that file's bytes; a set of several is their file sequence (waism §5, The set).

What holds it

  • No floating point, no import, a fixed interface. Both of the profile's checkers (../wai-module-check), the Rust checker and check-module.mjs, hold each build at the integer level. Every allocation traps where memory cannot grow, so a failed memory.grow inside wai_run ends in a trap and never in an output (R13); wai_alloc alone returns 0.
  • The module corpus. corpus.json, written by corpus.py from the committed corpora: every vector and refusal fixture of the capabilities above, 121 cases, each with its capability, payload, set and the SHA-256 of the output or the refusal code. Its sources are int-payload-conformance/, neural-conformance/, wai-rs/tests/vectors/int_mlicpp/, live-conformance/dred/ (whose weights file live-conformance/dred/fetch.sh fetches and checks) and live-conformance/avatar-face/ (each frame vector as a segment of one frame).
  • The engines. Each runner decodes every case on an instance of its own, as waism §5 and §6 checks 11 to 13 state, holds every output to the corpus, and prints a run digest: the SHA-256 of one line a case, its name and its outcome. Every run gives the same run digest.
runner engine
host/ wasmtime 50.0.1 with Cranelift, and with Winch; Wasmi 2.0.0 with its floating point turned off
run-node.mjs Node, each module in a worker under a wall-clock limit
browser/run-browser.mjs Chromium, headless: each case in a page's worker, each output sent back as bytes and held to the corpus outside the page

The modules of record

record/ holds two builds of this crate for wasm32-unknown-unknown, named by their SHA-256 in record/manifest.json:

file build instructions of them 128-bit vector instructions
wai_int.wasm scalar 314,437 0
wai_int.simd128.wasm SIMD128 313,155 7,099

The SIMD128 build is the same source, which the compiler lowers to WebAssembly's integer vector instructions where it can. Its output is the scalar build's: every case gives the same outcome in both, on every engine.

Each module of record gave every case of the corpus its stated outcome, with run digest 0098ef57a0c75c4563b842e8969778b7744a258872ae7ae48917fb1a93b3aaf5, on these (macOS arm64: the build of this source made over wai 0.4.0, before its version moved to 0.5.0, with SHA-256 80e64e02…1441 and f0f9e1df…1fc1):

host wasmtime 50.0.1, Cranelift wasmtime 50.0.1, Winch Wasmi 2.0.0 Node Chromium, headless
Linux x86_64 yes yes yes 22.23.4 148.0.7778.96
Linux arm64 yes yes yes 24.22.2
macOS arm64 26.13.0 156.0.8078.4

That run digest is of the corpus's first 120 cases. With the 121st, int-payload/leaves (a WIH1 payload decoded against the set trained on generated pictures, wai-rs/tests/vectors/int_hyper/leaves_set.json), both modules of record gave every case its stated outcome on Linux x86_64 under wasmtime 50.0.1 (Cranelift and Winch) and Wasmi 2.0.0, with run digest f245b5f0b7e7dc3b1aa8c3974fa413cfc4d87097b790dcfe3f5478fa5c457836.

The module is the same source on every host, and its bytes are not: the compiler's crate hashes take in the absolute path of each path dependency and the host it runs on, and they order what it emits. Linux arm64's build of this source has other bytes (765,514 and 773,603), and on wasmtime with both compilers, Wasmi and Node there it gave every case the same outcome, the same run digest. So record/ is named by its SHA-256, and a build is held to the corpus, not to record/'s bytes.

Building and running

bash build.sh [--out DIR]                        # both builds, each held by both checkers
bash ../live-conformance/dred/fetch.sh DRED      # the weights file the corpus names
(cd host && cargo run --release -- --external DRED ../corpus.json ../record/wai_int.wasm ../record/wai_int.simd128.wasm)
node run-node.mjs --external DRED corpus.json record/wai_int.wasm record/wai_int.simd128.wasm
node browser/run-browser.mjs --browser PATH --external DRED corpus.json record/wai_int.wasm
python3 -I corpus.py --check                     # corpus.json is the committed corpora's
python3 -I plant.py float|relaxed IN OUT         # a rule-breaking instruction, for the checkers

build.sh names no path of the machine that runs it in the module: the checkout, the Cargo home and the toolchain are remapped.

CI: .github/wai-conformance/verifiers/module-check.sh holds record/ to its manifest and both builds at the integer level by both checkers, and refuses the module of record with a float instruction planted, and with a relaxed vector instruction, at the rule and offset the plant gives; .github/workflows/wai-int-module.yml runs the engines.