← ClaudeAtlas

visual-checklisted

Verify a Workmelt change by looking at the rendered picture — captures, screenshots, image diffs, baselines, the goal/visibility/cost gate, and the browser playtests. Use this skill whenever the work calls for a capture or a screenshot, whenever a change touches shading, post-processing, materials, lighting, layout or the HUD and someone needs to see whether the frame is right, whenever `tools/capture.mjs` / `imagediff.mjs` / `goal.mjs` / `visibility.mjs` / `cost.mjs` / `profile.mjs` are involved, and whenever performance or quality-tier work needs measuring. Also use it before reporting fps or a perf number, and before claiming a visual check passed.
eriknomitch/workmelt · ★ 3 · Web & Frontend · score 71
Install: claude install-skill eriknomitch/workmelt
# Look at the picture The engine's cheap coverage is the Node-only self-tests; this skill is for the part they cannot reach — whether the frame is actually right. Two rules govern everything below, and both are about honesty rather than technique: 1. **A command exiting 0 is not a visual check.** The picture is. If a `.png` was written and nobody read it, no check happened. 2. **A skipped render reported as a pass is much worse than a skipped render.** Say plainly that you skipped it and why. ## First: should you render at all? Usually not. The seventeen Node-only self-tests (see `AGENTS.md`) carry most of the real coverage and run in ~10 s combined. Run those plus `npm run build` and stop there **unless the change is genuinely a function of the image** — shading, post-processing, materials, lighting, layout, or a HUD/menu surface. Collision is the sharpest example of the inverse: it is authored separately from the mesh, so an invisible wall is invisible *in a capture too*. The frame is correct and the thing that is wrong is the thing that is not drawn. `node src/world/collision.selftest.mjs` catches it; no screenshot can. ## Detect the environment before reaching for a browser Claude Code on the web runs in a container with **no GPU**: `ls /dev/dri` is empty, `$DISPLAY` is unset, `CLAUDE_CODE_REMOTE=true`. WebGL2 still works, but only through ANGLE's SwiftShader backend, rasterising every pixel on 4 shared CPU cores. `tools/lib/harness.mjs`'s `resolveGpuMode()`