anchor.diff:          let stamp = StampFileNameTask cache ctok fileInfo
   
           if currentStamp <> stamp then
  -            // Something changed, the finalized view of the project must be invalidated.
  -            finalizedSemanticModel <- None
  -
  -            // Invalidate the file and all files below it.
  -            stampedFileNames.[slot..]
  -            |> Array.iteri (fun j _ -> 
  -                stampedFileNames.[slot + j] <- StampFileNameTask cache ctok fileNames.[slot + j]
  -                semanticModels.[slot + j] <- None
  -            )
  +            match semanticModels.[slot] with
  +            // This prevents an implementation file that has a backing signature file from invalidating the rest of the build.
  +            | Some(semanticModel) when enablePartialTypeChecking && semanticModel.BackingSignature.IsSome ->
  +                semanticModel.Invalidate()
  +            | _ ->
  +                // Something changed, the finalized view of the project must be invalidated.
  +                finalizedSemanticModel <- None
  +
  +                // Invalidate the file and all files below it.
  +                stampedFileNames.[slot..]
  +                |> Array.iteri (fun j _ -> 
  +                    stampedFileNames.[slot + j] <- StampFileNameTask cache ctok fileNames.[slot + j]
  +                    semanticModels.[slot + j] <- None
  +                )
   
           if semanticModels.[slot].IsNone then
               cont slot fileInfo
  
positive.code:     let stampedFileNames = Array.init fileNames.Length (fun _ -> DateTime.MinValue)
      let stampedReferencedAssemblies = Array.init referencedAssemblies.Length (fun _ -> DateTime.MinValue)
      let mutable initialSemanticModel = None
      let semanticModels = Array.zeroCreate fileNames.Length
      let mutable finalizedSemanticModel = None
  
      let computeStampedFileName (cache: TimeStampCache) (ctok: CompilationThreadToken) slot fileInfo cont =
  
negative.code:             | Some syntaxTree ->
                  let sigNameOpt =
                      if partialCheck then
                          this.BackingSignature
                      else
                          None
                  match syntaxTree.Parse sigNameOpt with
  