Haptics.
The sink makes the buzz.
A wai.haptic.signal carries a few hundred bytes — a keyframed
intensity / sharpness envelope, the pair every actuator API maps to — not a recorded
waveform. Your device reconstructs the per-sample signal with the same deterministic Rust
engine (compiled to WASM) that made the conformance corpus, and checks its BLAKE3 against the
corpus's expected hash: sample-equivalence, touch's counterpart of replay-equivalence.
Press play — if a gamepad is connected you'll feel it; otherwise watch the envelope.
Touch as instructions
An effect is a keyframed envelope — kilobytes at most. The sink reconstructs it and drives whatever actuators it has (gamepad rumble, phone vibration). Lever 3 for the third sense.
Sample-equivalence
Reconstruction is bit-exact: the wai.det.fixed64 floor, linear interpolation,
integer quantization — and trig-free by construction (intensity + sharpness, not a
modulated carrier), so the floor needs only + − × ÷. The hash in the HUD equals
the one in haptic-conformance/expected_hashes.json, on any machine.
One floor, three senses
The same fixed-point floor and conformance discipline as worlds (replay), spatial audio (mixdown), and now haptics (sample). Sight, hearing, touch — one standard, three -equivalences, no reinvention.