# Reference resolution and remaining contract mismatch Paper: https://arxiv.org/html/2601.20802v2; code: https://github.com/lasgroup/SDPO/tree/7c457fc1b1f636ae794eb0362ba37d4743b06fbc The saved method explicitly selects sampled-token reverse-KL advantages, not the authors YAML defaults (full-logit/top-100+tail distillation, alpha=0.5, EMA teacher). The CPU reference therefore invokes the authors implemented sampled branch with full_logit_distillation=False, alpha=1, is_clip=None, token-mean. A second diagnostic uses the authors is_clip=2 option. Neither variant was used for training. This is not a claim that sampled reverse-KL is the default SDPO recipe. Let l=current student logprob, o=immutable sampled student logprob, t=teacher logprob, N=masked token count. Specified IS surrogate: L_IS=-sum(mask*exp(l-o)*detach(t-o))/N. Authors sampled reverse-KL surrogate: L_ref=sum(mask*detach(l-t)*l)/N. At l=o their parameter gradients coincide, but raw loss values need not. With stale inputs they can also have different gradients. This suggests a surrogate/reference acceptance-contract mismatch, not an inactive treatment or an SDPO-vs-GRPO outcome. All measured gradients cover the complete 5x11 toy policy parameter matrix, NOT Qwen model parameters. The authors generic reprompt template appends solution/feedback and asks to correctly solve the original question. It is preserved in authors-actor.yaml. No tau-bench-specific chat rendering, empty-critique behavior, real feedback injection, reward mixing, demo threshold, or clipping choice has been certified for remote training. No unchanged settings were silently replaced. Exact zero/zero gradients in the disabled-teacher control have null cosine (undefined). The validator leaves the mandatory min_cosine check unverified. No fabricated cosine=1 is supplied. Pinning the saved UNRESOLVED revision strings in an effective spec eliminates revision mismatch, but does not eliminate the measured loss failure or undefined-zero-cosine check. Cheapest next diagnostic: revise only the correctness contract before spending GPU: explicitly select the sampled-token variant and an on-policy one-update lag contract; define whether to compare a source-justified scalar surrogate or a predeclared detached-value alignment, and define zero/zero gradient acceptance. Rerun the retained CPU fixture. Do not simply raise tolerances. If a stale-input regime must be equivalent, change/justify the objective explicitly and revalidate all gradients. Only then probe actual Spindle sampler/trainer logprob alignment, active Adam config and matched init, followed by the authorized timing and activation pilots. No revised training was executed. ## Paper appendix A (plain-text extraction, including math annotation text) A.1 Gradient Estimators In this seciton, we discuss two possible gradient estimators for the KL divergence between the current policy πθ​(y∣x)\pi_{\theta}(y\mid x) and the teacher policy qθ​(y∣x,f)q_{\theta}(y\mid x,f). Per-token estimator. Deriving the gradient of the SDPO loss as defined in Equation 1: ℒtoken(θ):=𝔼y∼stopgrad(πθ(⋅∣x))[∑t=1TKL(πθ(⋅∣x,yty_{>t} (due to the additional dependence on Πθ\Pi_{\theta}). Amini et al. (2025) show that the corresponding gradient estimator is given by ∇ℒseq(θ)=∇ℒtoken(θ)+𝔼y∼πθ(⋅∣x)[∑t=1TKL(πθ(⋅∣st)∥qθ(⋅∣st,f))∇θlogΠθ(st)].\boldsymbol{\nabla}\mathcal{L}_{\text{seq}}(\theta)=\boldsymbol{\nabla}\mathcal{L}_{\text{token}}(\theta)+\mathbb{E}_{y\sim\pi_{\theta}(\cdot\mid x)}\left[\sum_{t=1}^{T}\mathrm{KL}\left(\pi_{\theta}(\cdot\mid s_{t})\|q_{\theta}(\cdot\mid s_{t},f)\right)\boldsymbol{\nabla}_{\!\!\theta}\,\log\Pi_{\theta}(s_{t})\right]. (8) The additional term of the sequence-level gradient captures how prefixes influence the self-distillation divergence of future tokens. We also experimented with this sequence-level gradient estimator but did not find measurable gains relative to its additional complexity. A.2 Regularized teacher In contrast to standard distillation, the teacher in SDPO changes throughout training. This bootstrapping enables the teacher to improve, but it may also lead to training instability. To stabilize training, we seek to prevent the teacher qq from quickly diverging from the initial teacher qθref\smash{q_{\theta_{{\mathrm{ref}}}}}. We can achieve this by placing an explicit trust-region constraint on qq (Schulman et al., 2015; Peng et al., 2019), that is: ∑tKL(q(yt∣x,f,y0.\sum_{t}\mathrm{KL}\left(q(y_{t}\mid x,f,y_{0. (9) This trust-region can be implemented in two ways: 1. Explicit trust-region: We can define the teacher as the policy closest to qθq_{\theta} while satisfying the trust-region constraint. This teacher can be expressed as q⁡(yt∣x,f,y