Encoder: xor_diff + encode_region (per damage rectangle). Decoder: apply_region (decompress + XOR apply to framebuffer). Both live in wayray-protocol::encoding for shared access. 14 tests including 3 end-to-end round-trip integration tests.