From an independent review of the tile implementation (no input gave wrong
bits); each finding fixed:
- expected.json is authoritative: tests/fabric_expected.rs (excluded from the
package, so publishing is unaffected; cargo drops its target and verification
builds the library only) requires quantum-conformance/fabric/expected.json to
be exactly the four certificates of the pinned corpora (gateset, corpus, seed,
cases, wide circuits, the digest the CPU computes) and both implementation ids;
a missing file fails. The browser job runs it in place of the grep step, whose
comment now says what is checked. A copy giving fabric-v1 random-v1's digests
fails it.
- The checker's step 6 adds a uniformity taint check: a barrier must not sit
under a condition, or after a return, break or continue under a condition,
that depends on the invocation's ids or on memory other invocations write
(read-write storage, workgroup memory, atomics), directly or through a
variable or a call. Uniform buffers, read-only storage, buffer lengths and
the workgroup id, count and size are uniform. Planted early returns on
local_invocation_index (the reviewer's variant among them), on a read-write
load, through a variable and through a call each fail; the real shaders pass.
- The tile kernel refuses a run record (bit 4, nothing touched) unless its
tiles cover each state plane exactly and its grid (num_workgroups, one deep)
holds every tile once with x_groups to a row. The tile implementation id is
now wgsl-lanes32-tile/54e443520c020013, re-pinned in wgsl.rs and
expected.json.
- PlannedGate::is_well_formed: diag must match the words and the op index must
not be u32::MAX (the tile kernel's "no op"). plan::execute_from returns None
and the member refuses Internal(4) otherwise; compile never makes either.
- The member splits a tile step into dispatches of at most SUBMIT_BUDGET
pair-updates (splitting a run is exact), so every submission keeps the budget
the module and POLL_TIMEOUT documents state.
- g12 adds, for the tile member: starts other than zero; a first out-of-range
op in a later submission with circuit/1 P(19) as filler (never skipped); a
600-gate run at 20 qubits that the member splits; ill-formed planned gates
refused by both implementations; and, inside WAI_QUANTUM_WEBGPU_WIDE only,
the widest sizes (run cap 16, grid (8, 8192) at 26 qubits), which the member
script then requires.
- Placement's tie order is documented as it is: with both implementations'
entries for one member and no energy figures, place picks the tile
implementation (its name sorts first); discovery opens per-gate members,
which are the fallback. A test pins the order.
- wai/wai-web/src/lib.rs is in the workflow's paths; the wasip2 job requires
the new unit test by name.
Co-Authored-By: Claude Opus 5.5 <[email protected]>