# Haptics Conformance Corpus Vectors for the haptics extension's **sample-equivalence** criterion: given the same `wai.haptic.signal`, a conforming sink MUST reconstruct the identical canonical `u8` buffer (per-channel interleaved `[intensity, sharpness]`), hence the identical BLAKE3 — on every machine, no tolerance parameter. The touch counterpart of replay/mixdown-equivalence, with the tick replaced by the haptic sample. **Provenance.** Generated here: `wai_haptic_vectors gen` writes every vector from envelopes authored in code. No recording. All vectors reconstruct in the `wai.det.fixed64` floor (Fx linear interpolation of the keyframed envelope → u8). Signals are self-contained (no external sources), so each vector is just a `.whap` file + its expected `signal_hash`. ## Layout - `vectors/.whap` — the `WHAP` container (contract + channel signals). - `expected_hashes.json` — per signal: `channels` and `signal_hash`. Vectors: - `ramp` — intensity 0→1 over the duration. - `thud` — full sharp hit, decaying. - `dual_pulse` — two channels (dual-rumble): a strong pulse + a soft steady channel. ## Running ``` cd ../wai-rs cargo run --features haptic --bin wai_haptic_vectors -- verify ../haptic-conformance cargo run --features haptic --bin wai_haptic_vectors -- gen ../haptic-conformance # regenerate ``` Pass = hash equality.