{"record":{"id":"3666014ce9c2ac98","repo":"nodejs/node","slug":"config-s-not-found-in-s","errorCode":null,"errorMessage":"Config \"%s\" not found in %s","messagePattern":"Config \"(.+?)\" not found in (.+?)","errorType":"exception","errorClass":"MBErr","httpStatus":null,"severity":"error","filePath":"deps/v8/tools/mb/mb.py","lineNumber":538,"sourceCode":"      name = fields[0]\n      val = ' '.join(fields[2:])\n      gn_args.append('%s=%s' % (name, val))\n\n    return ' '.join(gn_args)\n\n  def Lookup(self):\n    vals = self.ReadIOSBotConfig()\n    if not vals:\n      self.ReadConfigFile()\n      config = self.ConfigFromArgs()\n      if config.startswith('//'):\n        if not self.Exists(self.ToAbsPath(config)):\n          raise MBErr('args file \"%s\" not found' % config)\n        vals = self.DefaultVals()\n        vals['args_file'] = config\n      else:\n        if not config in self.configs:\n          raise MBErr('Config \"%s\" not found in %s' %\n                      (config, self.args.config_file))\n        vals = self.FlattenConfig(config)\n    return vals\n\n  def ReadIOSBotConfig(self):\n    if not self.args.builder_group or not self.args.builder:\n      return {}\n    path = self.PathJoin(self.chromium_src_dir, 'ios', 'build', 'bots',\n                         self.args.builder_group, self.args.builder + '.json')\n    if not self.Exists(path):\n      return {}\n\n    contents = json.loads(self.ReadFile(path))\n    gn_args = ' '.join(contents.get('gn_args', []))\n\n    vals = self.DefaultVals()\n    vals['gn_args'] = gn_args\n    return vals","sourceCodeStart":520,"sourceCodeEnd":556,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/v8/tools/mb/mb.py#L520-L556","documentation":"When the -c config value is NOT a // path (it's a named config), mb.py checks `config in self.configs`. The configs dict is loaded from mb_config.pyl. If the named config is absent, it raises MBErr('Config \"%s\" not found in %s') naming the config and the config file path.","triggerScenarios":"Running `mb.py gen -c X64.release.debug out/Default` where 'X64.release.debug' is not a key in the configs section of mb_config.pyl. The membership test fails and MBErr is raised.","commonSituations":"Misspelled config name; using a config that exists only on another branch; referencing a config that was renamed/removed; forgetting to pass -f to point at a custom mb_config.pyl that defines it.","solutions":["List available configs: `mb.py list -f <mb_config.pyl>` or grep the `configs = {` block in the file, then use the exact name.","If using a custom config file, pass `-f <path>` so the right configs are loaded.","Add the missing config to mb_config.pyl (composed from mixins) if it should exist."],"exampleFix":"// before\n  mb.py gen -c x64_rel out/Default      // name not in configs\n// after\n  mb.py gen -c x64.release out/Default   // exact key from mb_config.pyl","handlingStrategy":"validation","validationCode":"configs = ast.literal_eval(open(mb_config_path).read())['configs']\nif not config.startswith('//') and config not in configs:\n    sys.exit(f'Config {config!r} not in {mb_config_path}; available: {sorted(configs)[:10]}...')","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Use `mb.py list` to enumerate valid config names before referencing one.","Pass -f explicitly when using a non-default mb_config.pyl so the right configs load.","Pin the config name in CI against a checked-in config file to catch renames."],"tags":["mb","config","lookup","v8-build"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}