\section*{Appendix: implementation and CPU evidence}
\vspace{-2pt}
\begin{minipage}{\textwidth}
\centering
\includegraphics[width=0.94\linewidth]{../figures/fig4_cpu_learning.pdf}
\captionsetup{hypcap=false}
\captionof{figure}{\textbf{Complete CPU training histories.} Each run uses 128 current-correctness training states and the same 32 development states. The three lines are training seeds, not independent test cohorts. Development Brier is non-monotone for some seeds. These are not action-utility learning curves.}
\label{fig:cpu_learning}
\end{minipage}
\vspace{12pt}

\noindent\begin{minipage}[t]{0.48\textwidth}
\section{Implementation}
\paragraph{Restoring history.}
Serialized tool arguments are converted into the objects required by the chat template. Historical reasoning text is preserved explicitly inside assistant messages because the template otherwise strips it after a new user message. This preserves text, not the original token stream. Overlength histories are recorded rather than silently truncated. Retry resets both code and history.

\paragraph{Verifier state.}
The executor records the starting tree and exports the final patch. Changes to selected public tests are flagged. Before grading, the Git index is reset while preserving the worktree, because some official verifiers depend on staged/untracked distinctions. The agent phase remains network-isolated.

\paragraph{Input boundary.}
Only issue text, patch text, existing public observations, test descriptions, and known budgets enter the controller. Source-trial paths, bookkeeping hashes, official labels, and future observations remain outside it. Repository-relative code and test paths stay visible.

\vspace{6pt}
\centering\small
\begin{tabular}{@{}lrrr@{}}
\toprule
CPU seed & Accuracy & Brier & Hours\\
\midrule
0 & .781 & .175 & 2.05\\
1 & .719 & .191 & 1.91\\
2 & .813 & .187 & 1.93\\
\bottomrule
\end{tabular}
\captionsetup{hypcap=false}
\captionof{table}{Final epoch-three development results. Hours are elapsed time per process; the runs overlap in wall time.}
\label{tab:seed_details}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\textwidth}
\section{CPU measurements}
\label{sec:cpu_measurements}
The LoRA runs use rank 16, learning rate $10^{-4}$, effective batch 32, and three epochs. Every seed reaches its lowest development log loss at the common final epoch. Inputs have a 4,096-token cap.

\vspace{5pt}
\centering
\includegraphics[width=\linewidth]{../figures/fig2_cpu_latency.pdf}
\captionsetup{hypcap=false}
\captionof{figure}{\textbf{CPU latency.} Eight threads, FP32, batch one. Medians and ranges use three timed repetitions after warmup. Tokenization and loading are excluded.}
\label{fig:cpu_latency}
\vspace{6pt}
\raggedright\normalsize
The hosts use Intel Xeon Platinum 8350C processors. Profiling uses fixed-length synthetic token sequences with no generation or persistent KV cache. Cumulative peak RSS is 4.13 GiB through inference. A subsequent 1,024-token training-step probe takes 6.976 seconds and raises that cumulative peak to 4.97 GiB; it is not a model-quality result.

\vspace{5pt}
Development intervals resample eight tasks 5,000 times. LoRA metrics are averaged across seeds before task resampling, without probability ensembling. Intervals condition on the trained models; individual seed ticks show the observed run variation.
\end{minipage}
