CUDA-dev-process scorecard — how hard is it to develop a kernel in fak
This grades the CUDA development loop: changing cuda_kernels.cu / cuda_backend.h / cuda.go, building it, proving it correct, and keeping it from rotting — a loop made unusually painful because the canonical dev host has no CUDA toolkit and a walled GPU, so the loop spans a remote GPU node. Every number is re-derived from the git-tracked tree by tools/cuda_dev_scorecard.py — no hand-entry. The headline metric is process-debt: the count of concrete, mechanical defects that make the loop slower or less safe — a missing local gate, no automatic CI compile check, no one-command witness, no dev guide.
Regenerate:
python tools/cuda_dev_scorecard.py --markdown --stamp DATE > docs/CUDA-DEV-SCORECARD.md
Headline
| Metric | Value |
|---|---|
| Process-debt (total HARD defects) | 0 |
| Composite score | 100.0/100 (grade A) |
| Dev loop | author 100 · build 100 · validate 100 · gate 100 · onboard 100 |
| Advisory (soft) signals | 0 |
| Debt by stage | author:0 · build:0 · validate:0 · gate:0 · onboard:0 |
The five stages of the kernel loop
14 KPIs, each 0–100, grouped by the loop stage they gate. debt = units of HARD process-debt.
| Stage | KPI | Score | Debt | Detail |
|---|---|---|---|---|
| author | local_static_check |
100 | 0 | ABI checker + make cuda-check + ci.ps1 mirror all present |
| author | abi_parity |
100 | 0 | 53 prototypes in full parity (0 standby advisory) |
| author | cpuref_parity_coverage |
100 | 0 | 7/7 device op families have a cpuref-parity witness |
| build | build_portable |
100 | 0 | host matrix (WSL · GPU server · cloud · native Windows) + executable arch override + Blackwell (sm_100/sm_120) & PTX floor covered |
| build | toolchain_pinned |
100 | 0 | CUDA version pinned + arch override documented |
| build | task_runner |
100 | 0 | cuda-build/cuda-test/cuda-accept delegate to the real scripts |
| validate | witness_coverage |
100 | 0 | every recorded floor names an on-disk acceptance witness |
| validate | witness_aggregator |
100 | 0 | tools/cuda_acceptance.sh runs every witness with one verdict |
| validate | floor_honesty |
100 | 0 | every recorded floor carries the recorded-not-measured caveat |
| gate | cgo_typecheck_gate |
100 | 0 | go vet -tags cuda runs automatically on every push/PR |
| gate | nvcc_compile_gate |
100 | 0 | an automatic job compiles + links the cuda variant (no GPU) |
| gate | pure_go_guard |
100 | 0 | an automatic gate asserts the default build is pure-Go |
| onboard | dev_guide |
100 | 0 | dev guide present, names real artifacts, covers the loop |
| onboard | entrypoint_surfaced |
100 | 0 | the dev guide is linked from the orientation path and resolves |
Process-debt work-list
No process-debt: the CUDA dev loop has a local gate, automatic CI coverage, a one-command witness, and a documented path. 🎉