
out_proj  k=6144 n=5120 groups=48
  M=48    vs-fp32 per-token 1.2590e-02  grouped 1.0890e-02  null 1.2590e-02  || rev 4.2571e-02 roll 4.2805e-02
        vs-torch-quantiser per-token 8.7509e-03 grouped 8.7546e-03  || null-vs-ungrouped 8.577e-06  grouped-vs-null 1.099e-02  PASS
  M=64    vs-fp32 per-token 1.2398e-02  grouped 1.0783e-02  null 1.2398e-02  || rev 4.1245e-02 roll 4.0806e-02
        vs-torch-quantiser per-token 8.6553e-03 grouped 8.6581e-03  || null-vs-ungrouped 9.088e-06  grouped-vs-null 1.078e-02  PASS
  M=256   vs-fp32 per-token 1.2457e-02  grouped 1.0811e-02  null 1.2457e-02  || rev 4.1308e-02 roll 4.1139e-02
        vs-torch-quantiser per-token 8.6785e-03 grouped 8.6767e-03  || null-vs-ungrouped 8.427e-06  grouped-vs-null 1.089e-02  PASS
  M=2048  vs-fp32 per-token 1.2485e-02  grouped 1.0835e-02  null 1.2485e-02  || rev 4.1125e-02 roll 4.1145e-02
        vs-torch-quantiser per-token 8.6946e-03 grouped 8.6947e-03  || null-vs-ungrouped 7.796e-06  grouped-vs-null 1.090e-02  PASS

gate_proj  k=5120 n=17408 groups=40
  M=48    vs-fp32 per-token 1.2173e-02  grouped 1.0726e-02  null 1.2173e-02  || rev 3.8863e-02 roll 3.9505e-02
        vs-torch-quantiser per-token 8.6111e-03 grouped 8.6109e-03  || null-vs-ungrouped 7.255e-06  grouped-vs-null 1.055e-02  PASS
  M=64    vs-fp32 per-token 1.2394e-02  grouped 1.0799e-02  null 1.2394e-02  || rev 4.2407e-02 roll 4.1591e-02
        vs-torch-quantiser per-token 8.6426e-03 grouped 8.6413e-03  || null-vs-ungrouped 6.506e-06  grouped-vs-null 1.080e-02  PASS
  M=256   vs-fp32 per-token 1.2330e-02  grouped 1.0785e-02  null 1.2330e-02  || rev 4.0114e-02 roll 4.0550e-02
        vs-torch-quantiser per-token 8.6348e-03 grouped 8.6354e-03  || null-vs-ungrouped 7.858e-06  grouped-vs-null 1.076e-02  PASS
  M=2048  vs-fp32 per-token 1.2303e-02  grouped 1.0776e-02  null 1.2303e-02  || rev 4.0395e-02 roll 4.0435e-02
        vs-torch-quantiser per-token 8.6210e-03 grouped 8.6210e-03  || null-vs-ungrouped 7.880e-06  grouped-vs-null 1.073e-02  PASS

down_proj  k=17408 n=5120 groups=136
  M=48    vs-fp32 per-token 1.2728e-02  grouped 1.0717e-02  null 1.2728e-02  || rev 4.0214e-02 roll 3.9783e-02
        vs-torch-quantiser per-token 8.5688e-03 grouped 8.5690e-03  || null-vs-ungrouped 1.045e-05  grouped-vs-null 1.139e-02  PASS
  M=64    vs-fp32 per-token 1.2937e-02  grouped 1.0739e-02  null 1.2937e-02  || rev 4.1490e-02 roll 4.0741e-02
        vs-torch-quantiser per-token 8.5900e-03 grouped 8.5900e-03  || null-vs-ungrouped 1.017e-05  grouped-vs-null 1.159e-02  PASS
  M=256   vs-fp32 per-token 1.2760e-02  grouped 1.0742e-02  null 1.2760e-02  || rev 4.0876e-02 roll 4.0475e-02
        vs-torch-quantiser per-token 8.5872e-03 grouped 8.5854e-03  || null-vs-ungrouped 1.127e-05  grouped-vs-null 1.137e-02  PASS
  M=2048  vs-fp32 per-token 1.2782e-02  grouped 1.0736e-02  null 1.2782e-02  || rev 4.0605e-02 roll 4.0284e-02
        vs-torch-quantiser per-token 8.5808e-03 grouped 8.5803e-03  || null-vs-ungrouped 1.039e-05  grouped-vs-null 1.142e-02  PASS

  biased drain vs the I2F drain it replaces (must be bit-identical):
    s85 vs s96  out_proj   M=48    torch.equal=True  max|diff|=0.000e+00
    s85 vs s96  out_proj   M=2048  torch.equal=True  max|diff|=0.000e+00
    s85 vs s96  gate_proj  M=48    torch.equal=True  max|diff|=0.000e+00
    s85 vs s96  gate_proj  M=2048  torch.equal=True  max|diff|=0.000e+00
    s80 vs s97  out_proj   M=48    torch.equal=True  max|diff|=0.000e+00
    s80 vs s97  out_proj   M=2048  torch.equal=True  max|diff|=0.000e+00
    s80 vs s97  gate_proj  M=48    torch.equal=True  max|diff|=0.000e+00
    s80 vs s97  gate_proj  M=2048  torch.equal=True  max|diff|=0.000e+00
  BIASED DRAIN: PASS

  REFUSAL (2-D table on an ungrouped shape): PASS -- RuntimeError

GATE 7 (per-128-group activation scale): PASS
