# Avatars Conformance Corpus Vectors for the avatars extension (`wai.avatar.pose`). The criterion is **pose-equivalence**, a special case of replay-equivalence: given the same world container and the same signed animation op set, a conforming sink MUST compute the identical BLAKE3 **state hash** at every checkpoint — on every machine, no tolerance parameter. The state is the set of per-bone **local transforms** (parent + translation + rotation quaternion + scale, all `wai.det.fixed64`); the forward-kinematics composition into world space and the skinning of a `wai.mesh.glb` are the sink's presentation, never in the hash. The container is the worlds `WWLD`; the sim is `wai.world.sim.skeletal0` (the identity step — a pose changes only when a signed op sets a joint). Mutations: `CREATE` / `DELETE` / `SET_ROTATION` / `SET_TRANSLATION` / `SET_SCALE`, all LWW. The floor is trig-free: rotations are carried as quaternions; axis-angle authoring happens off-line in the generator. ## Layout - `vectors/.wwld` — a sealed `wai.world.replay` avatar; the manifest carries its per-tick checkpoint hashes. - `vectors/.ops` — a raw animation op log delivered against `scene.wwld` in an adversarial arrival order; the manifest carries the one `final_hash` every conformant sink must reach. - `expected_hashes.json` — per vector: `type`, and the expected hashes. Vectors: - `arm_wave` — a 3-bone arm (shoulder → elbow → wrist) waving: the shoulder and elbow rotate about z over four frames. - `humanoid` — a 5-bone humanoid stub (pelvis → spine → head; spine → l_arm, r_arm) struck into a pose: the right arm raises and the head turns. - `arm_wave_shuffled_{1,2,3}` — the arm-wave op stream in three seeded shuffles; all converge to the sealed final pose hash. ## Running ``` cd ../wai-rs cargo run --features world --bin wai_avatar_vectors -- verify ../avatar-conformance cargo run --features world --bin wai_avatar_vectors -- gen ../avatar-conformance # regenerate ``` Pass = checkpoint/final hash equality.