JuliusBrussee/caveman · error
no experiment named %q
Error message
no experiment named %q
What it means
Guard in LoadExperiment: no experiments row matches the given label after trimming whitespace. It fires for unknown or misspelled labels and propagates through StartExperiment, SwitchExperimentArm, StopExperiment, ListExperiments, and BuildExperimentReport, which all load by label.
Source
Thrown at proxy/internal/store/learn_experiment.go:168
if _, err := s.db.Exec(`UPDATE experiment_arms SET ended_at = ?
WHERE experiment_id = ? AND ended_at IS NULL`, now, experiment.id); err != nil {
return Experiment{}, fmt.Errorf("close open arm: %w", err)
}
if _, err := s.db.Exec(`UPDATE experiments SET stopped_at = ? WHERE id = ?`, now, experiment.id); err != nil {
return Experiment{}, fmt.Errorf("stop experiment: %w", err)
}
return s.LoadExperiment(label)
}
func (s *Store) LoadExperiment(label string) (Experiment, error) {
label = strings.TrimSpace(label)
row := s.db.QueryRow(`SELECT id, label, COALESCE(sink_id,''), COALESCE(fix_kind,''),
COALESCE(note,''), created_at, COALESCE(stopped_at,'') FROM experiments WHERE label = ?`, label)
var experiment Experiment
if err := row.Scan(&experiment.id, &experiment.Label, &experiment.SinkID, &experiment.FixKind,
&experiment.Note, &experiment.CreatedAt, &experiment.StoppedAt); err != nil {
if err == sql.ErrNoRows {
return Experiment{}, fmt.Errorf("no experiment named %q", label)
}
return Experiment{}, err
}
rows, err := s.db.Query(`SELECT arm, started_at, COALESCE(ended_at,'')
FROM experiment_arms WHERE experiment_id = ? ORDER BY started_at, id`, experiment.id)
if err != nil {
return Experiment{}, err
}
defer rows.Close()
for rows.Next() {
var arm ExperimentArm
if err := rows.Scan(&arm.Arm, &arm.StartedAt, &arm.EndedAt); err != nil {
return Experiment{}, err
}
experiment.Arms = append(experiment.Arms, arm)
}
return experiment, rows.Err()
}View on GitHub (pinned to 81536f57b3)
Solutions
- Verify the experiment label spelling (leading/trailing whitespace is trimmed before lookup)
- Run ListExperiments to see existing labels
- Create the experiment first with StartExperiment before loading, switching, or stopping it
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at proxy/internal/store/learn_experiment.go:168 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@81536f57b3 (2026-08-27).
Data as JSON: /api/errors/df4d9c461f735231.
Report an issue: GitHub.