code: def scorable_block_completion(sender, **kwargs):  # pylint: disable=unused-argument
      
      if not waffle.waffle().is_enabled(waffle.ENABLE_COMPLETION_TRACKING):
          return
      course_key = CourseKey.from_string(kwargs['course_id'])
      block_key = UsageKey.from_string(kwargs['usage_id'])
      block_cls = XBlock.load_class(block_key.block_type)
      if XBlockCompletionMode.get_mode(block_cls) != XBlockCompletionMode.COMPLETABLE:
          return
      if getattr(block_cls, 'has_custom_completion', False):
          return
      user = User.objects.get(id=kwargs['user_id'])
      if kwargs.get('score_deleted'):
          completion = 0.0
      else:
          completion = 1.0
      if not kwargs.get('grader_response'):
          BlockCompletion.objects.submit_completion(
              user=user,
              course_key=course_key,
              block_key=block_key,
              completion=completion,
          )
docs: When a problem is scored, submit a new BlockCompletion for that block.