% Round-2 methods (pre-registered in PREREG_v2 before any round-2 run; deviations in Appendix~\ref{app:dev}). \section{Baselines without self-improvement}\label{sec:round2} The first round shows where the loops' gains come from. It does not show whether a loop was needed to find them. A second pre-registration fixed four baselines (B1--B4 below: textbook moves, random diagnosis, one-shot redesign and a lineage ablation; the placebo loops were registered in the first round), three generality checks, and a test of published systems, before any of them ran. \paragraph{Textbook moves (B1).} The engineered seed differs from the DGM seed in four files, and each difference is a standard engineering move: E, a string-replace editor (view with line ranges, create, replace a unique string, insert); B, a non-interactive shell with closed standard input, a per-command timeout and clipped output; L, a model loop that allows 16{,}000 output tokens, answers every tool call in a response, re-prompts once after an output cut off by the cap and stops after 40 turns; P, a workflow prompt that asks for sample tests, a brute-force cross-check and a timing check. We build all 16 combinations by copying the chosen files into the DGM seed and evaluate each twice on all 232 fresh problems, interleaving agents problem by problem so that every agent sees the same hours. \paragraph{Random diagnosis (B2).} Three loops run the DGM procedure unchanged except that each diagnosis is replaced by one request drawn uniformly from a fixed list of 20 generic improvement requests (for example, ``Add a step that writes a brute-force reference solution and compares it with the main solution on random small inputs''). The list was written after the first round and before any second-round run; none of its requests mentions the output cap, but one asks the agent to recover from responses that contain neither text nor a tool call, and two are close to it: one reruns the agent when the solution file was not changed, and one logs the stop reason and usage of each response. This is search over textbook requests instead of diagnoses. \paragraph{One-shot redesign (B3).} A language model receives, once, the seed's code and the logs of five failed selection-set runs of the seed (the material the DGM's diagnosis step sees) and returns the files it would change. It gets no evaluation feedback. We draw five samples from Claude Opus~5.5 (pre-registered) and five from Claude Sonnet~5.5, the loops' diagnosis model (added to separate the design from model strength). This is diagnosis without search. \paragraph{Lineage ablation (B4).} For the best agent of each first-round DGM loop we rebuild the agent from the seed by applying its lineage's patches in order, and build variants with one patch left out and with one patch alone. We also revert the output cap in loop 3's best agent while keeping all its other code. \paragraph{Generality.} Three more DGM loops and three more placebo loops on the same seed and tasks double the number of loops per arm. Three loops replace the DGM's parent choice with HGM-style Thompson sampling: each archive member's clade (the member and all its evaluated descendants) contributes its passed and failed selection runs to a Beta posterior, and the parent is the member with the largest draw \citep{wang2026hgm}. Three DGM loops and one placebo loop use gpt-oss-120b as task and self-editing model (20 generations). As an exploratory addition, two DGM loops and one placebo loop use Claude Haiku~4.5, a model that rarely exhausts the seed's output cap, so that the cap fix is not available to the search. \paragraph{Analysis rules.} Gains and intervals are computed as in \S\ref{sec:setup}. These intervals hold the realized loops fixed, so arm-level comparisons are also tested at the level of loops. Comparisons that pair agents from two batches (H6, H8 and the comparison of L with one retry in \S\ref{sec:results2}) are reported as raw differences in the text and also seed-adjusted, with the batch times and seed drifts, in Appendix~\ref{app:batches}. When a best candidate is chosen among several (15 combinations, five redesigns), it is chosen on the first half of the fresh problems and compared on the second half, a rule fixed after the pre-registration but before any result was summarized (Appendix~\ref{app:dev}, item 4); we also report the literal registered reading. The non-inferiority margin is 3 points. The final batch re-evaluates every loop's reported best agent, the seed, the cap-only seed and L together on all fresh problems, twice. \paragraph{Published systems.} For the DGM's SWE-bench run we rebuild the initial agent as it ran in 2025: the released repository's history starts after the run, and two small differences from the run-time code (a later retry in the model call and an example line in the editor) are inferred from the context lines of the archive's patches, after which all six patches of the reported best agent's lineage apply without a rejected hunk. We compare the initial agent, the reported best agent, the initial agent with textbook moves (the string-replace editor, a 16{,}000-token output budget and five workflow steps in the prompt) and the same with up to three attempts selected by the repository's regression tests, built from helper functions that the DGM's initial agent already contains. All four run inside each task's container through the DGM's own harness, on SWE-bench Verified tasks outside the DGM's 200-task evaluation set and on the DGM's 60 selection tasks, keeping only tasks whose reference patch passes under today's environments. For ADAS we take the archived agent with the best validation score in each domain and compare it with chain-of-thought self-consistency \citep{wang2023selfconsistency} given the same number of model calls, on ADAS's own test sets, with Claude Haiku~5.5 replacing gpt-3.5. ADAS's search and evaluation code is imported unchanged; we raise the output limit from 4{,}096 to 16{,}000 tokens for every agent, score a question 0 instead of aborting the run when an agent raises an error, read every agent's JSON with the same tolerant parser, run 7 to 16 workers instead of 48, and send no sampling temperature, which the API no longer accepts. \paragraph{Third round.} A third pre-registration, frozen after the second-round results and before any of its runs, addressed three weaknesses of the first two rounds: the output limit that differs between the DGM's agents and the textbook agent on SWE-bench, the random-diagnosis list, which contained a request aimed at empty responses, and the failure logs that both the engineered seed and the one-shot redesigns had seen. It reruns the SWE-bench comparison at equal output budget (\S\ref{sec:swe-equal}), makes one-shot redesigns without failure logs (\S\ref{sec:redesign-logfree}) and repeats the random-diagnosis loops with a clean request list (\S\ref{sec:random-clean}). Every primary contrast of this round is within one batch; Table~\ref{tab:hyp3} lists its hypotheses (H11--H15) and verdicts.