sft_scope:"full" over the prefix-shared concat: the full-scope chosen NLL
gathers the PROMPT predictions too — hidden position t (t = 0..P-2) predicts
prompt token t+1 — and combines them with the response mean ℓw:
NLL_full = -((P-1)·promptMean + Rc·ℓw) / (P-1+Rc). The prompt head routes
through the same branchLogpMeanGathered tier as the responses (whole-vocab /
fused / flash), sharing the one concat forward's hiddens. Returns [1]
(caller owns); lw is NOT disposed. P=1 (no prompt predictions) → -ℓw.
sft_scope:"full" over the prefix-shared concat: the full-scope chosen NLL gathers the PROMPT predictions too — hidden position t (t = 0..P-2) predicts prompt token t+1 — and combines them with the response mean ℓw: NLL_full = -((P-1)·promptMean + Rc·ℓw) / (P-1+Rc). The prompt head routes through the same branchLogpMeanGathered tier as the responses (whole-vocab / fused / flash), sharing the one concat forward's hiddens. Returns [1] (caller owns); lw is NOT disposed. P=1 (no prompt predictions) → -ℓw.