Found while auditing the 479 skips for #880. Four modules in the pinned wg-1.0 corpus are never executed — not by design, but because the packing step produced wat that wast2json/parseWat rejects.
data.wast:315 parseWat failed (data.wast:1:32: unexpected token (, expected ).) in generated wat: (module (memor…
data.wast:323 parseWat failed (data.wast:1:40: unexpected token (, expected ).) in generated wat: (module (memor…
elem.wast:281 parseWat failed (elem.wast:1:39: unexpected token (, expected ).) in generated wat: (module (table…
elem.wast:289 parseWat failed (elem.wast:1:47: unexpected token (, expected ).) in generated wat: (module (table…All four are skipped_module, so every directive in them is skipped too. The pattern is consistent: a (module (memory … or (module (table … where the generator's reconstruction of an inline declaration loses a parenthesis, so the emitted single-line wat is unbalanced.
This is distinct from the other 475 skips, which are legitimate:
| count | reason | status |
|---|---|---|
| 430 | .wat text parsing is outside the binary runtime | by design |
| 40 | NaN payload is implementation-defined at the JS API boundary | not observable through JS Number |
| 5 | Core 1.0 vs Core 2.0 rule differences (engine implements 2.0, matching V8) | deliberate, each locked by a named test |
| 4 | generator emitted invalid wat | this issue |
Those 475 are declared with explicit reasons in the inventory, so they satisfy #486's "zero hidden skips" contract. These 4 do not: they are untested surface with no semantic justification.
Reproduce the inventory with:
zig build wasm-spec -Doptimize=ReleaseFast -Dwasm-spec-out=/tmp/inv.jsonthen read files[].skips[] where kind == "skipped_module".
Fixing it means correcting the generator that produced tests/wasm/spec/{manifest.json,modules.bin} and repacking. Small coverage win (4 modules), but it is the only category of skip that is a defect rather than a decision.