verify-pixelslisted
Install: claude install-skill playcanvas/skills
# Prove pixels unchanged
Choose the gate before building the capture harness. Both classes require controlled captures
that cover the affected surfaces.
## Classify the change
| Change | Gate |
| --- | --- |
| Batching, instancing, mesh indexing, chunking, pooling that preserves RNG order, an asset format swap with identical decoded data | Byte-exact matrix |
| Re-rolled or re-sampled procedural noise, a changed RNG consumption order, math moved between CPU and GPU, changed precision, fewer octaves or samples | Not byte-gateable: side-by-side review |
For the second class, sampled values or precision can change. Report it as "not byte-gateable" and
use the side-by-side gate after the shared capture setup below; do not invent uncalibrated perceptual
thresholds to approve it.
## Cover every touched surface
List every touched material or surface and a capture pose it dominates. Use at least two
representative poses, adding as many as coverage requires; a horizon strip does not cover a water
shader change. For animated surfaces, include a second phase mid-animation.
## Make the frame deterministic
For both gates, load assets fully and match the scene state, camera, canvas size, lighting, and
animation time between builds. Seed incidental randomness so only the intended change varies.
- Drive every animated shader or vertex effect from one app-owned time value, never `Date.now()` or
`performance.now()` read inside the render path, so a captured phase is exactly reproduc