StructuralRolloutResult (src/runtime/structural-rollout.ts:489) extends StrategyResult with selection: SelectionReceipt[], repairStop, and check counts — but not the winning candidate's artifact text.
Every consumer that needs to grade or persist the final artifact must wrap the CheckRunner to record it as a side effect. The first live self-improvement campaign had to do exactly this (the recordingRunner hack in the campaign smoke, agent-runtime-swe commit 3b93916).
Add a first-class artifact field (the selected candidate's final text) to the strategy result so the winner is part of the deliverable, not something reconstructed from runner side effects.
StructuralRolloutResult(src/runtime/structural-rollout.ts:489) extendsStrategyResultwithselection: SelectionReceipt[],repairStop, and check counts — but not the winning candidate's artifact text.Every consumer that needs to grade or persist the final artifact must wrap the
CheckRunnerto record it as a side effect. The first live self-improvement campaign had to do exactly this (therecordingRunnerhack in the campaign smoke, agent-runtime-swe commit 3b93916).Add a first-class artifact field (the selected candidate's final text) to the strategy result so the winner is part of the deliverable, not something reconstructed from runner side effects.