pub async fn generate_challenger_with_picker(
storage: &Storage,
registry: &AdapterRegistry,
llm: &dyn LlmClient,
picker: &MutatorPicker,
project: &Project,
rng: &mut ChaCha8Rng,
) -> Result<(ConfigId, ExperimentId)>Expand description
Generate a challenger from the current champion using one mutator, persist it as an AgentConfig row with role=Challenger, start a new Experiment with traffic_share=0.5 (proper A/B — half of new sessions go to each variant, decided by the SessionStart hook), and apply the challenger config to disk via the adapter as the initial deployment for the next session.
If llm is a NoOpLlmClient (or any client that returns
NoLlmAvailable), pass a picker built via [picker_for_environment(false)]
so we don’t pick the LLM-rewrite mutator and silently fail.