code: func (f *sendReceiveFolder) itemChanged(stat fs.FileInfo, item protocol.FileInfo, hasItem bool, scanChan chan<- string) (changed bool, err error) {
  	defer func() {
  		if changed {
  			scanChan <- item.Name
  		}
  	}()
  
  	if !hasItem || item.Deleted {
  		// The item appeared from nowhere
  		return true, nil
  	}
  
  	// Check that the item on disk is what we expect it to be according
  	// to the database. If there's a mismatch here, there might be local
  	// changes that we don't know about yet and we should scan before
  	// touching the item.
  	statItem, err := scanner.CreateFileInfo(stat, item.Name, f.fs)
  	if err != nil {
  		return false, errors.Wrap(err, "comparing item on disk to db")
  	}
  
  	return !statItem.IsEquivalentOptional(item, f.IgnorePerms, true, protocol.LocalAllFlags), nil
  }
docs: // itemChanged returns true if the given disk file differs from the information
  // in the database and schedules that file for scanning