Move JavaScript-target testing from Node to Deno; drop the webgpu npm package
Context
render's WebGPU render-pass tests were unreliable under Node with the `webgpu` npm package (a Dawn N-API binding that documents itself as WIP): isolated through extensive testing that shader compilation and pipeline creation alone were stable (8/8), but actual render-pass execution through this codebase's real device-acquisition path was only ~20-25% reliable even run completely standalone via `node script.mjs` (no gleeunit involved) -- crashing the rest with native errors (std::system_error, glibc pthread_mutex assertions, or hangs). Every individual piece of the technique (the shader math, the per-entity draw loop, dynamic imports) was 100% reliable as a hand-written isolated probe; only the combination going through the shared device module was unreliable. The user separately flagged, while observing this investigation, that repeatedly writing disposable JavaScript verification scripts for this wasn't a sustainable pattern, and asked for durable, Gleam-primary test infrastructure instead, plus a fresh look at whether Node was even the right runtime to depend on.
Options considered
Decision
Set javascript.runtime = "deno" in gleam.toml as the project default; added deno.json with unstable: ["webgpu"]; removed the webgpu npm dependency, package.json, package-lock.json, and node_modules entirely; simplified gpu_ffi.mjs to require navigator.gpu directly (throwing a clear error naming Deno if it's absent) instead of falling back to the npm package; added Deno to asdf for version pinning, matching how Erlang/rebar are already managed; added test/glemy/render_test.gleam (previously nonexistent -- render had zero automated coverage) asserting real rendered pixel bytes.
Verification
The exact production shader pattern (multi-entity loop, uniform buffers, world-to-NDC transform) that was ~20-25% reliable under Node was 8/8 clean as an isolated Deno probe, then 20/20 clean through the full gleeunit suite via Deno (plus a further 15/15 confirmation run and a 10/10 run of the pre-existing io/pe/cs suite alone). Independently confirmed Deno is using its native WebGPU, not silently falling back to an npm package, by temporarily removing node_modules and re-running the suite (still 32/32 passed).
Consequences
Node is no longer a supported way to run this project's JavaScript-target tests or code -- gpu_ffi.mjs now throws a clear, actionable error if navigator.gpu is missing, rather than silently degrading. This project has no npm/node_modules footprint at all as of this decision. The disposable verification scripts written during the original Node investigation (_verify_render.mjs and similar) were deleted rather than kept, since their entire purpose was diagnosing a problem that no longer exists; the investigation itself is preserved here and in project memory instead of in throwaway code.