{"record":{"id":"c8e54ab3b7ddfa7b","repo":"grafana/k6","slug":"scenario-s-has-configuration-errors-s","errorCode":null,"errorMessage":"scenario %s has configuration errors: %s","messagePattern":"scenario (.+?) has configuration errors: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"lib/executors.go","lineNumber":203,"sourceCode":"\t\t}\n\t\tconfig, err := GetParsedExecutorConfig(k, v.executorType, v.rawJSON)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tresult[k] = config\n\t}\n\n\t*scs = result\n\n\treturn nil\n}\n\n// Validate checks if all of the specified executor options make sense\nfunc (scs ScenarioConfigs) Validate() (errors []error) {\n\tfor name, exec := range scs {\n\t\tif execErr := exec.Validate(); len(execErr) != 0 {\n\t\t\terrors = append(errors,\n\t\t\t\tfmt.Errorf(\"scenario %s has configuration errors: %s\", name, ConcatErrors(execErr, \", \")))\n\t\t}\n\t}\n\treturn errors\n}\n\n// GetSortedConfigs returns a slice with the executor configurations,\n// sorted in a consistent and predictable manner. It is useful when we want or\n// have to avoid using maps with string keys (and tons of string lookups in\n// them) and avoid the unpredictable iterations over Go maps. Slices allow us\n// constant-time lookups and ordered iterations.\n//\n// The configs in the returned slice will be sorted by their start times in an\n// ascending order, and alphabetically by their names (which are unique) if\n// there are ties.\nfunc (scs ScenarioConfigs) GetSortedConfigs() []ExecutorConfig {\n\tconfigs := make([]ExecutorConfig, len(scs))\n\n\t// Populate the configs slice with sorted executor configs","sourceCodeStart":185,"sourceCodeEnd":221,"githubUrl":"https://github.com/grafana/k6/blob/01ffac6f245854c1b8adc6a69857c76a15f90022/lib/executors.go#L185-L221","documentation":"Aggregating error from ScenarioConfigs.Validate: it runs each scenario's own Validate and, when any scenario returns validation errors, wraps them all (joined with commas) under the scenario's name. The real cause is in the nested errors.","triggerScenarios":"Thrown at lib/executors.go:203 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Read the nested error details to find which scenario option is invalid","Fix each reported scenario's options (VU counts, durations, rates, stages)","Re-run k6 until per-scenario validation passes"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ffac6f245854c1b8adc6a69857c76a15f90022","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}