class_docstr: some values were different, but should have been the same
code: def details(self):
      basic_message = super().details
  
      if self.stack[0] != ".FeatureCount" or self.merger is None:
          return basic_message
  
      assert self.stack[0] == ".FeatureCount"
      offender_index, _ = self.offender
      bad_ttf = self.merger.ttfs[offender_index]
      good_ttf = next(
          ttf
          for ttf in self.merger.ttfs
          if self.stack[-1] in ttf
          and ttf[self.stack[-1]].table.FeatureList.FeatureCount
          == self.cause["expected"]
      )
  
      good_features = [
          x.FeatureTag
          for x in good_ttf[
              self.stack[-1]
          ].table.FeatureList.FeatureRecord
      ]
      bad_features = [
          x.FeatureTag
          for x in bad_ttf[
              self.stack[-1]
          ].table.FeatureList.FeatureRecord
      ]
      return basic_message + (
          "\nIncompatible features between masters.\n"
          f"Expected: {', '.join(good_features)}.\n"
          f"Got: {', '.join(bad_features)}.\n"
      )
  
imports: import textwrap
label_desc: Use image node_id 1 for calling the ShouldBeConstant obj's underlying member method code with example usage: obj.details() and returns: unknown, basic_message