open-standards/wai/ops-conformance
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 9b748c97bd
All checks were successful
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Successful in 3s
no-vanity-metrics / WAI public text names no comparison (pull_request) Successful in 5s
no-vanity-metrics / WAI public text names no company or product (pull_request) Successful in 3s
standards workspaces build + test / arl-rs (pull_request) Successful in 1m9s
standards workspaces build + test / eoc-rs (pull_request) Successful in 1m59s
standards workspaces build + test / jcp-rs (pull_request) Successful in 1m30s
standards workspaces build + test / joule-ui-rs (pull_request) Successful in 1m11s
standards workspaces build + test / joulehook-rs (pull_request) Successful in 1m10s
standards workspaces build + test / proof-rs (pull_request) Successful in 1m14s
standards workspaces build + test / sandbox-rs (pull_request) Successful in 2m23s
standards workspaces build + test / sense-rs (pull_request) Successful in 1m10s
standards workspaces build + test / smart-byte-rs (pull_request) Successful in 4m17s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 14s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 7m41s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 8s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 24s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 48s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 1m52s
wai-ops integer operators / linux-x86_64 (pull_request) Successful in 22s
wai-ops integer operators / wasm32-wasip2 (wasmtime) (pull_request) Successful in 22s
wai-ops integer operators / wasm32 under Node (pull_request) Successful in 19s
wai-ops integer operators / independent checker (Python) (pull_request) Successful in 11s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 4s
WAI section references / cited sections exist (pull_request) Successful in 10s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 2m50s
workflow hygiene / every workflow supersedes its own queue (pull_request) Successful in 4s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 14m47s
wai-pack / wai-pack · linux (pull_request) Successful in 1m6s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 1m46s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 19s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 1m14s
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 20m46s
standards workspaces build + test / aac-rs (pull_request) Successful in 10m39s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 4m15s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 1m29s
standards workspaces build + test / map-rs (pull_request) Successful in 52s
standards workspaces build + test / mesh-rs (pull_request) Successful in 1m15s
standards workspaces build + test / openpay (pull_request) Successful in 5m42s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 13m8s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 56s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 4m22s
wai-ops integer operators / linux-aarch64 (pull_request) Successful in 58s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m57s
standards workspaces build + test / jouledesk-rs (pull_request) Successful in 2m48s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 7m6s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 10m6s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 29s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 3m11s
wai-ops integer operators / macos-arm64 (pull_request) Successful in 25s
wai-pack / wai-pack · macos (pull_request) Successful in 2m13s
ops-conformance: say why the corpus carries no sha256.json
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-10 02:13:04 -04:00
..
certificates wai-ops: a tensor a ReLU reads inside a WHM1 network is derived, as §13.2 says 2026-10-09 19:31:39 -04:00
graphs wai-ops: a vector for each run and load rule the text now states 2026-10-09 19:31:39 -04:00
sets wai-ops: the conformance corpus, its generator, and the WASI and browser-engine legs 2026-10-09 19:31:38 -04:00
stage wai-ops: rate_predict vectors at the i16 extremes with rates near 2^32 2026-10-09 19:31:39 -04:00
vectors wai-ops: the conformance corpus, its generator, and the WASI and browser-engine legs 2026-10-09 19:31:38 -04:00
.gitattributes wai-ops: the conformance corpus, its generator, and the WASI and browser-engine legs 2026-10-09 19:31:38 -04:00
README.md ops-conformance: say why the corpus carries no sha256.json 2026-10-10 02:13:04 -04:00

ops-conformance — the integer operator set

Vectors for wai-ops/1, the integer operator set (extensions/integer-operators.md): its graph operators (§5), its stage operators (§5E), the WHG1 graph form (§10), and the canonical lowerings of the registered integer network forms (§13).

Provenance. Generated here by wai-ops vectors gen from fixed SplitMix64 sequences: every graph, parameter, input and stream under vectors/, stage/, graphs/ and sets/ is generated integers, with no media. The lowered graphs under certificates/ are those of the sets this corpus generates and of the parameter sets other corpora commit, which keep their own provenance (certificates/index.json names each one's corpus).

Equivalence. An operator implementation of a profile (§7) conforms when it reproduces every vector tagged with that profile, refusals included: the same load outcome, and for every decode the same output integers or the same refusal code. A lowering conforms when it writes every lowered graph byte for byte.

Layout

  • vectors/<operator>.jsonl — graph vectors whose graph has one operator (§14.1).
  • stage/<operator>.jsonl — stage-operator vectors (§14.1).
  • graphs/<name>.jsonl — graph vectors whose graph has several operators (§14.2):
    • phase — a transposed convolution and the same computed as phase convolutions, interleaved by pixel_shuffle and cropped (§9.3), as the graph's two outputs;
    • state — state inputs carried across decodes (§10.3), a refused decode among them;
    • load — a graph refused at each load check of §10.5, steps 1–7, and a crop planned at load (§5.10);
    • run — a decode refused at each step of §4's run, and the order between them and within step 3 (the caps, then the shape rule, then max_elems);
    • lower_<form> — each lowering of §13 on a small set from sets/.
  • sets/<name>/ — the small parameter sets the lower_* vectors lower, one per lowering, in their registered forms.
  • certificates/<capability>/<set digest>/<role>.whg1 — each lowered graph (§14.3).
  • certificates/index.json — every set lowered here: its capability, its lowering, its members (the name in the set and the file, relative to wai/, that holds it), its digest, and the path of each lowered graph, in §13.0's role order.

Files are compared as bytes; .gitattributes turns off line-ending conversion.

This corpus has no sha256.json sidecar (SPEC §7 Digests). Every vector states its output integers in full, or its refusal code, and never a digest of them. The only digest in certificates/ is each set's SHA-256, which identifies a parameter set. The output digests that a capability reproduces through its lowering (integer-operators §14.4) stay in that capability's own corpus.

The vector files

Every file follows integer-operators §14.1, which is normative for every field: the graph vector and its decodes, the stage vector with its modes, each operator's in and expect (the predictors' layouts included), and the refusal index at. In short:

  • Every file is JSON Lines: one canonical JSON value per line (§8.5's rules), each line ending with one line feed.
  • A graph vector's decodes list the graph's data inputs only; the decodes of one vector are one sequence, and a refused decode changes no state (§10.3).
  • load is the outcome of load steps 1–8 (§10.5); every vector here loads or is refused at steps 1–7 (see below). A vector whose load is refused has no decodes and lists both profiles; one that loads lists exactly the profiles its verdict meets.
  • at is −1 for a refusal before any symbol or element, the symbol's index for rans64_decode (the number of symbols for a refusal after the last one), and, for mans_decode, the position whose step refuses, or, for a flush that belongs to no single position, the last position whose in step ran.
  • A vector of graphs/lower_<form>.jsonl has the id <file>/<set>/<role>/…: its graph is that role of the set sets/<set>/ as lowered.

What this corpus does not cover yet

Load step 8 has no implementation in wai-ops yet: its bounds pass and verdict land with the certifier. Until then the uncertified switch skips it, and the generator writes no vector whose outcome depends on it; a generated case whose graph meets no profile is dropped, and vectors gen reports the count. So these coverage classes of §14.1 item 6, each a load refusal at step 8, are not here yet:

  • sigmoid and elu on an input range that reaches −2^63, refused at load (the corpus has the decoding side, ranges that stop at −(2^63 − 1));
  • an rq whose q passes 64 bits while y fits, refused at load under acc64 (conv, conv_transpose, rescale, chscale, mul, gram, apply);
  • a lut16 whose input range passes [−32767, 32767], and a check range that no value of its producer can meet (§8.1);
  • a graph refused at step 8 in graphs/load.jsonl.

The independent checker already runs step 8 and recomputes every vector's profiles from its own bounds pass, so these vectors are checked the day they land.

The lowered sets

certificates/index.json lists every set. A set of one file is identified by its file's SHA-256, and a set of several files by the SHA-256 of its wai.prior.set listing over the member names the index gives (SPEC §3.1). wai.world.model has no registered set yet: its two networks are named T.whm and g_s.whm here, and its lowering's latent channel count, which the initial latent fixes, is the entry's c.

Generation and verification

cd wai/wai-ops
cargo run --release --features uncertified --bin wai-ops -- vectors gen ..

writes every file here but this README and .gitattributes.

cargo run --release --features uncertified --bin wai-ops -- vectors verify ..

recomputes every vector file from its inputs, re-lowers every set, and regenerates the corpus, and requires every byte to equal the committed one. The same check runs built for wasm32-wasip2 under a WASI runtime, and, for the vector files, wai-ops/node/verify.mjs runs the recomputation as a wasm32-unknown-unknown module under a browser's engine.

python3 -I tools/wai_ops_check.py ops-conformance

is the independent checker: Python standard library only, sharing no code with wai-ops, and held to the extension's text: where the two disagree, the text decides, and the disagreement is a bug in one of them. It rewrites every vector file from its inputs, load (steps 1–8) and profiles from its own bounds pass and verdict (§8.1–§8.5) included; re-lowers every set and requires each lowered graph, and that each loads; and requires each lowering vector's graph to be the role its id names. Every byte must equal the committed one.