{"record":{"id":"83954c03f0668e93","repo":"puppetlabs/puppet","slug":"name-class-name-is-not-a-valid-face-name","errorCode":null,"errorMessage":"%{name} (%{class_name}) is not a valid face name","messagePattern":"%(.+?) \\(%(.+?)\\) is not a valid face name","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/puppet/interface/face_collection.rb","lineNumber":135,"sourceCode":"\n    # ...guess we didn't find the file; return a much better problem.\n    nil\n  rescue SyntaxError => e\n    raise unless e.message =~ /#{path}\\.rb:\\d+: /\n\n    Puppet.err _(\"Failed to load face %{name}:\\n%{detail}\") % { name: name, detail: e }\n    # ...but we just carry on after complaining.\n    nil\n  end\n\n  def self.register(face)\n    @faces[underscorize(face.name)][face.version] = face\n  end\n\n  def self.underscorize(name)\n    unless name.to_s =~ /^[-_a-z][-_a-z0-9]*$/i then\n      # TRANSLATORS 'face' refers to a programming API in Puppet\n      raise ArgumentError, _(\"%{name} (%{class_name}) is not a valid face name\") %\n                           { name: name.inspect, class_name: name.class }\n    end\n\n    name.to_s.downcase.split(/[-_]/).join('_').to_sym\n  end\nend\n","sourceCodeStart":117,"sourceCodeEnd":142,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/interface/face_collection.rb#L117-L142","documentation":"Error \"%{name} (%{class_name}) is not a valid face name\" thrown in puppetlabs/puppet.","triggerScenarios":"Thrown at lib/puppet/interface/face_collection.rb:135 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}