34f6e50091
The TC_W4A16 branch of coli_cuda_expert_group handled every expert in a per-expert loop: rows >= threshold got the Tensor Core path, everything below fell back to 4 naive launches per expert. At decode every expert has 1 row, so the whole group rode the fallback — ~981 quant_matmul micro-launches per token (#431's measured flood) — while the grouped 3-launch path (grouped_hidden_w4_dual + silu + grouped_down_w4) sat one else-if below, unreachable whenever the PREFILL tuning flag was set. Gate the branch on 'at least one expert reaches the TC row threshold': all-small groups (decode) now fall through to the grouped kernels. Measured on 6x RTX 5090 (full residency, 39 forwards under nsys): expert-side quant_matmul instances drop 981 -> 337 per forward, total launches ~1,490 -> ~850 per token (-43%). Wall-clock is parity at the A/B operating point — the win is structural (PR-C graph node count, launch-tax share at champion speed). Behavioural fix folded in: before this change, toggling TC_W4A16 — a prefill-only optimization — changed DECODE output text (kernel-family divergence, #100 class). After it, decode always uses the grouped family: TC_W4A16=1 and =0 now produce byte-identical decode text (verified, 96-token greedy A/B), and the flag affects only the prefill it was built for.