               do: {path, Mix.Utils.last_modified_and_size(path)}
 
         # Plus the sources that have changed in disk
-        changed_paths =
+        changed =
           for source(source: source, external: external, size: size) <- all_sources,
               {last_mtime, last_size} = Map.fetch!(sources_stats, source),
               times = Enum.map(external, &(sources_stats |> Map.fetch!(&1) |> elem(0))),

      |> MapSet.difference(all_paths)
      |> MapSet.to_list()

    {changed, sources_stats} =
      if force do
        # A config, path dependency or manifest has
        # changed, let's just compile everything
        all_paths = MapSet.to_list(all_paths)

        sources_stats =
          for path <- all_paths,
              into: %{},
              do: {path, Mix.Utils.last_modified_and_size(path)}

        {all_paths, sources_stats}
      else
        # Otherwise let's start with the new sources
        new_paths =

              into: new_paths,
              do: source

        {modules, structs, changed} =
          update_stale_entries(
            all_modules,
            all_sources,
            removed ++ changed,
            stale_local_deps(manifest, modified),
            %{}
          )

        {modules, structs, changed, sources_stats}
      end

    stale = changed -- removed

