{"record":{"id":"5ff3de55d608de64","repo":"nodejs/node","slug":"must-specify-either-c-config-or-m-builder-g","errorCode":null,"errorMessage":"Must specify either -c/--config or (-m/--builder-group and -b/--builder)","messagePattern":"Must specify either -c/--config or \\(-m/--builder-group and -b/--builder\\)","errorType":"exception","errorClass":"MBErr","httpStatus":null,"severity":"error","filePath":"deps/v8/tools/mb/mb.py","lineNumber":605,"sourceCode":"              'Duplicate targets in isolate map files: %s.' %\n              ', '.join(duplicates))\n        isolate_maps.update(isolate_map)\n      except SyntaxError as e:\n        raise MBErr('Failed to parse isolate map file \"%s\": %s' %\n                    (isolate_map, e)) from e\n    return isolate_maps\n\n  def ConfigFromArgs(self):\n    if self.args.config:\n      if self.args.builder_group or self.args.builder:\n        raise MBErr(\n          'Can not specific both -c/--config and -m/--builder-group or '\n          '-b/--builder')\n\n      return self.args.config\n\n    if not self.args.builder_group or not self.args.builder:\n      raise MBErr('Must specify either -c/--config or '\n                  '(-m/--builder-group and -b/--builder)')\n\n    if not self.args.builder_group in self.builder_groups:\n      raise MBErr('Builder groups name \"%s\" not found in \"%s\"' %\n                  (self.args.builder_group, self.args.config_file))\n\n    config = _v8_builder_fallback(\n        self.args.builder, self.builder_groups[self.args.builder_group])\n\n    if not config:\n      raise MBErr(\n        'Builder name \"%s\"  not found under builder_groups[%s] in \"%s\"' %\n        (self.args.builder, self.args.builder_group, self.args.config_file))\n\n    if isinstance(config, dict):\n      if self.args.phase is None:\n        raise MBErr('Must specify a build --phase for %s on %s' %\n                    (self.args.builder, self.args.builder_group))","sourceCodeStart":587,"sourceCodeEnd":623,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/v8/tools/mb/mb.py#L587-L623","documentation":"ConfigFromArgs() requires exactly one selection mode: if neither -c/--config is set nor both -m/--builder-group AND -b/--builder are set, it raises MBErr('Must specify either -c/--config or (-m/--builder-group and -b/--builder)'). Passing only -m without -b (or vice versa) also trips it.","triggerScenarios":"Running `mb.py gen out/Default` with no selection flags, or `mb.py gen -m tryserver.v8 out/Default` (missing -b), or `mb.py gen -b \"V8 Linux\" out/Default` (missing -m). The `not ... or not ...` guard fires.","commonSituations":"Forgetting the selection flags entirely; passing only the builder group or only the builder; a wrapper script that drops one of the pair.","solutions":["Provide -c <config>, or provide BOTH -m <group> and -b <builder>.","If unsure of valid group/builder names, use -c with a config from `mb.py list`."],"exampleFix":"// before\n  mb.py gen -m tryserver.v8 out/Default          // missing -b\n// after\n  mb.py gen -m tryserver.v8 -b \"V8 Linux\" out/Default","handlingStrategy":"validation","validationCode":"has_named = bool(args.config)\nhas_pair = bool(args.builder_group and args.builder)\nif not has_named and not has_pair:\n    sys.exit('Must specify -c/--config or both -m/--builder-group and -b/--builder')","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Always pass a complete selection: -c alone, or -m AND -b together.","Validate the flag pair in wrapper scripts before invoking mb.","Use argparse mutually_exclusive_group / required_together checks upstream."],"tags":["mb","args","required-argument","v8-build"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}