         defer { semaphore.signal() }
         processDebugInfo = debugInfo
         if let generatedArtifacts = generatedArtifacts {
-          artifacts = generatedArtifacts.filter { $0.hasSuffix(".tulsiinfo") }
+          artifacts = Set(generatedArtifacts.filter { $0.hasSuffix(".tulsiinfo") })
         }
     }
 

  }

  /// Builds a list of RuleEntry instances using the data in the given set of .tulsiinfo files.
  private func extractRuleEntriesFromArtifacts(_ files: [String],
                                               progressNotifier: ProgressNotifier? = nil) -> [BuildLabel: RuleEntry] {
    let fileManager = FileManager.default


                                          localizedMessageLogger: localizedMessageLogger)
      do {
        let events = try reader.readAllEvents()
        let artifacts = Set(events.flatMap { $0.files.lazy.filter { $0.hasSuffix(".tulsiinfo") } })

        if !artifacts.isEmpty {
          extractedEntries = self.extractRuleEntriesFromArtifacts(artifacts,
