{"record":{"id":"220523aec84ad72f","repo":"gitlabhq/gitlabhq","slug":"unrecognized-report-type-report-type","errorCode":null,"errorMessage":"Unrecognized report type: #{report_type}","messagePattern":"Unrecognized report type: #(.+?)","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"app/models/ci/job_artifact.rb","lineNumber":137,"sourceCode":"\n    def self.partition_groups\n      Gitlab::Database::SharedModel.using_connection(connection) do\n        Gitlab::Database::PostgresPartition\n          .for_parent_table(table_name)\n          .map(&:list_partition_ids)\n          .select(&:any?)\n          .sort_by(&:min)\n      end\n    end\n\n    def self.of_report_type(report_type)\n      file_types = file_types_for_report(report_type)\n\n      with_file_types(file_types)\n    end\n\n    def self.file_types_for_report(report_type)\n      Enums::Ci::JobArtifact.report_file_types.fetch(report_type) { raise ArgumentError, \"Unrecognized report type: #{report_type}\" }\n    end\n\n    def self.associated_file_types_for(file_type)\n      return unless file_types.include?(file_type)\n\n      [file_type]\n    end\n\n    def self.erasable_file_types\n      self.file_types.keys - Enums::Ci::JobArtifact.non_erasable_file_types\n    end\n\n    def self.total_size\n      self.sum(:size)\n    end\n\n    def self.artifacts_size_for(project)\n      self.where(project: project).sum(:size)","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/gitlabhq/gitlabhq/blob/55ee20384a1f55cb0e362dee1d07149613b1b9bf/app/models/ci/job_artifact.rb#L119-L155","documentation":"Ci::JobArtifact.file_types_for_report (app/models/ci/job_artifact.rb:137) looks the report_type up in Enums::Ci::JobArtifact.report_file_types and raises ArgumentError \"Unrecognized report type: #{report_type}\" via Hash#fetch's block. Only artifact file types flagged as reports (sast, dependency_scanning, container_scanning, dast, etc.) are keys; anything else — including valid non-report file types like trace or archive — is rejected.","triggerScenarios":"Calling Ci::JobArtifact.of_report_type(:trace), of_report_type('junit') where junit maps differently, or a typo like :sastt. Passing a String where the enum keys are Symbols (or vice versa) also misses the fetch and raises.","commonSituations":"Building features that iterate over artifact types and assume every file_type is a report; refactors renaming enum keys; specs using placeholder types; version upgrades that rename or remove report types.","solutions":["Pass one of the report file types: check Enums::Ci::JobArtifact.report_file_types.keys for the exact set and spelling.","Match types exactly (symbol vs string) — normalize with to_sym when needed.","Guard calls: only invoke of_report_type when report_file_types.key?(report_type).","If you need non-report artifacts, use Ci::JobArtifact.with_file_types([...]) directly."],"exampleFix":"# before\nCi::JobArtifact.of_report_type(:trace) # -> ArgumentError: Unrecognized report type: trace\n\n# after\nCi::JobArtifact.of_report_type(:sast)\n# or, for non-report types:\nCi::JobArtifact.with_file_types([:trace])","handlingStrategy":"validation","validationCode":"report_type = report_type.to_sym\nunless Enums::Ci::JobArtifact.report_file_types.key?(report_type)\n  raise ArgumentError, \"not a report type: #{report_type} (valid: #{Enums::Ci::JobArtifact.report_file_types.keys.sample(5).join(', ')}...)\"\nend\nCi::JobArtifact.of_report_type(report_type)","typeGuard":"def report_type?(value)\n  Enums::Ci::JobArtifact.report_file_types.key?(value.to_s.to_sym)\nend","tryCatchPattern":"begin\n  Ci::JobArtifact.of_report_type(t)\nrescue ArgumentError\n  # unknown report type: skip or log, but never guess a substitute\n  raise\nend","preventionTips":["Derive allowed values from Enums::Ci::JobArtifact.report_file_types.keys, never hardcode.","Normalize symbol/string at the boundary.","Use with_file_types for non-report artifact types."],"tags":["ci","artifacts","enum","argumenterror","ruby"],"backgroundTag":"unknown-enum-value","analyzedSha":"55ee20384a1f55cb0e362dee1d07149613b1b9bf","analyzedAt":"2026-08-21T14:22:27.782Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}