training_batch.timesteps was assigned t_pf only after the two teacher CFG passes, so their set_forward_context(current_timestep=...) carried the stale random timesteps from prepare_batch — wrong VSA sparsity gating when attn_kind == "vsa". Assign before any forward.