### WA²ISM™'s float level: the probe and its vectors, and the JPEG AI exact decoder as its module of record - **The probe of waism §9.3**, `wai-module-check/planted/probe.wasm`, built by `planted/build.py` from §9.3's table: its twelve operations on operands loaded at run time from a data segment, each result stored in order, in a memory of one page whose minimum is its maximum. Beside it, `probe.txt`: each case's operands and the result the deterministic profile prescribes, and the probe's bytes, the 80 bytes its `wai_run` gives on an engine set to that profile's NaN rule. Both checkers hold it at the float level and refuse it R3 at the integer level, in `planted/cases.txt`. - **`wai-det-jpegai`**, the JPEG AI exact decoder as a module of the float level: one WebAssembly module with the interface of waism §5 and nothing else that decodes `wai.image.jpegai` through `wai-rs`'s exact decoder, the decode a native sink runs when it holds the integer weight bundle. The bundle arrives as the set, the file sequence of `norm.json` and `weights/*.json`. Refusals are the capability's codes; a codestream outside the decoder's one configuration, for which the capability's text gives no code, traps. Both checkers hold it at the float level and refuse it R3 at the integer level. `record/` keeps the module of record, built on Linux x86_64 and named by its SHA-256 in `record/manifest.json`. - **The module corpus**, `corpus.json`, written by `corpus.py`: the reference codestream over the pinned `jpegai/v1` bundle, to the SHA-256 of the RGB8 the native exact decoder gives, and three refusal fixtures (a member missing, `set_incomplete`; `norm.json` and `weights/icci.json` not JSON, `model_mismatch`). It does not hold §9.2's grow-refusal cases. - **F1.** `host/` runs the probe on wasmtime 50.0.1 with Cranelift, Winch and Pulley, each with its NaN canonicalisation on and off, and on Wasmi 2.0.0 built with its `deterministic` feature. With the NaN rule set every engine gives the probe's bytes; with it unset each wasmtime engine gives other bytes, on Linux x86_64 and Linux arm64. - **F2.** The module of record decodes the corpus's vector to the native exact decoder's pinned RGB8, and gives each refusal fixture its code, on the four engines set to the NaN rule, each run after the probe in the same process, on Linux x86_64 and Linux arm64, and so does Linux arm64's own build of the source, whose bytes are other: one run digest for every engine, build and host. - **The planted faults.** `planted/probe-nan-branch.wasm`, the probe with a branch on whether each result is a NaN that writes the canonical NaN itself, gives the probe's bytes on every engine and fails F1. The decoder built with `planted-nan-branch`, a branch on the sign of a NaN made at run time, decodes to the pinned RGB8 on the engines the probe holds and to another output on the engine with the NaN rule unset, which the probe refuses first. - **CI.** `module-check.sh` holds `wai-det-jpegai/record/` to its manifest, at the float level and refused R3 at the integer level by both checkers, and the corpus to `corpus.py`. `wai-det-jpegai.yml` runs the build, F1, F2 and the planted faults on Linux x86_64 and Linux arm64.