D131 - GPU kernels are files, and the kernel list is generated

Status: decided Date: 2026-09-26

Each GPU kernel is a .comp file under src/shaders/ declaring its arity. obscene-tool shaders embeds them as SPIR-V in a committed header and emits one X-macro list that the section sweep and the protocol's gpu verb both expand. Multi-operand kernels report through gpuop records, leaving the unary gpu record unchanged.

Why: adding a kernel is adding a file, with no second table to keep in step. The build needs no shader compiler; only regeneration does. A new record keeps an existing field's meaning fixed.

Rejected: hand-written dispatch tables - drift from the kernel set. Widening the gpu record - changes a field's meaning under existing parsers.