{"record":{"id":"df4d9c461f735231","repo":"JuliusBrussee/caveman","slug":"no-experiment-named-q","errorCode":null,"errorMessage":"no experiment named %q","messagePattern":"no experiment named %q","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"proxy/internal/store/learn_experiment.go","lineNumber":168,"sourceCode":"\tif _, err := s.db.Exec(`UPDATE experiment_arms SET ended_at = ?\n\t\tWHERE experiment_id = ? AND ended_at IS NULL`, now, experiment.id); err != nil {\n\t\treturn Experiment{}, fmt.Errorf(\"close open arm: %w\", err)\n\t}\n\tif _, err := s.db.Exec(`UPDATE experiments SET stopped_at = ? WHERE id = ?`, now, experiment.id); err != nil {\n\t\treturn Experiment{}, fmt.Errorf(\"stop experiment: %w\", err)\n\t}\n\treturn s.LoadExperiment(label)\n}\n\nfunc (s *Store) LoadExperiment(label string) (Experiment, error) {\n\tlabel = strings.TrimSpace(label)\n\trow := s.db.QueryRow(`SELECT id, label, COALESCE(sink_id,''), COALESCE(fix_kind,''),\n\t\tCOALESCE(note,''), created_at, COALESCE(stopped_at,'') FROM experiments WHERE label = ?`, label)\n\tvar experiment Experiment\n\tif err := row.Scan(&experiment.id, &experiment.Label, &experiment.SinkID, &experiment.FixKind,\n\t\t&experiment.Note, &experiment.CreatedAt, &experiment.StoppedAt); err != nil {\n\t\tif err == sql.ErrNoRows {\n\t\t\treturn Experiment{}, fmt.Errorf(\"no experiment named %q\", label)\n\t\t}\n\t\treturn Experiment{}, err\n\t}\n\trows, err := s.db.Query(`SELECT arm, started_at, COALESCE(ended_at,'')\n\t\tFROM experiment_arms WHERE experiment_id = ? ORDER BY started_at, id`, experiment.id)\n\tif err != nil {\n\t\treturn Experiment{}, err\n\t}\n\tdefer rows.Close()\n\tfor rows.Next() {\n\t\tvar arm ExperimentArm\n\t\tif err := rows.Scan(&arm.Arm, &arm.StartedAt, &arm.EndedAt); err != nil {\n\t\t\treturn Experiment{}, err\n\t\t}\n\t\texperiment.Arms = append(experiment.Arms, arm)\n\t}\n\treturn experiment, rows.Err()\n}","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/JuliusBrussee/caveman/blob/81536f57b3303b7de7f5bc5b564cc344f9112d68/proxy/internal/store/learn_experiment.go#L150-L186","documentation":"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.","triggerScenarios":"Thrown at proxy/internal/store/learn_experiment.go:168 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"81536f57b3303b7de7f5bc5b564cc344f9112d68","analyzedAt":"2026-08-27T02:25:50.681Z","contentChangedAt":"2026-08-27T02:25:50.681Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}