### wai-quantum 0.4.2: tile runs, and the WebGPU member in a browser

Additive. The default features, `full`, the per-gate implementation and every existing pin
and digest are unchanged.

- **Tile runs: a second implementation, `wgsl-lanes32-tile/54e443520c020013`.**
  `plan::Config` (`PER_GATE`, `TILED`; `tile_size`, `run_cap`), `plan::Step::Tile`,
  `compile_with`, `schedule`, `execute_from`, `PlannedGate::{new, is_identity,
  is_well_formed}` and `TILE_BITS_MAX`; `PLAN_REVISION` is 2. A tiled plan applies each
  maximal run of consecutive gates that act inside a tile (diagonal gates on any target,
  others with their target inside the tile) to tiles of up to 1024 amplitudes, in
  op-log order, and leaves out exact identities only (circuit/1's `P(19..=32)` is
  `2^30 − 1`, not the identity, and stays). The CPU executor mirrors a tile kernel's
  index arithmetic and equals the per-gate program on any words; every configuration
  certifies with the lanes32 pins. A program whose gate's `diag` disagrees with its
  words, or whose op index is `u32::MAX`, is refused by the executor and by the member.
  `wgsl::TILE_SHADER` (`lanes32.wgsl` followed by `lanes32_tile.wgsl`, entry point
  `apply_tile`: one workgroup of 256 per tile, the tile updated in place in the state
  planes, a storage barrier between gates, the tile size in the run record, never in
  the text; a run record whose tiles or grid do not cover the state exactly once is
  refused) has its own id (`tile_implementation_id`), records (`tile_gate_record`,
  `tile_run_record`), grid (`tile_grid`) and mutants (`TILE_MUTANTS`, with the
  detectors `Race` and `Malformed`, `race_witness`, `malformed_tile_run`).
  `WebGpuMember::tiled()` gives the same device running it, probed and certified on its
  own; the member splits a run into dispatches of at most `SUBMIT_BUDGET` pair-updates.
  Discovery opens per-gate members, which are the fallback. Given both implementations'
  entries for one member and no energy figures, `place` breaks the tie by
  implementation name and places the tile implementation (`wgsl-lanes32-tile/…` sorts
  first). The checker holds `TILE_SHADER` to its own rules, barrier placement and
  barrier uniformity included, and its SPIR-V to the validator; the member's device
  tests, the member script and the browser leg require the four pinned digests under
  both implementations and every tile mutant caught. `tests/fabric_expected.rs` (not
  in the package) holds `quantum-conformance/fabric/expected.json` to the crate.
- **The member in a browser.** wai-web's feature `quantum_webgpu` binds the member for JS
  (`quantum_webgpu_discover`, `QuantumWebGpu`: `certify`, `statevector_hash_hex`) in a
  bundle of its own (`--out-name wai_quantum_webgpu`); the default build and its bundle
  are unchanged. `demo/quantum_webgpu.html` runs the member in a worker, its kernel
  compiled by the browser's own WGSL compiler. `quantum-conformance/browser_webgpu.mjs`
  drives the page headless and requires the four certificates bit-exact with the pinned
  digests (`quantum-conformance/fabric/expected.json`), every vector's statevector hash,
  every reject file refused with its class, and a circuit wider than the member holds
  refused. The `checks` job builds the bundle, and a `browser` job runs the page on macOS.

