   import Record
 
   defrecordp :module, [:module, :kind, :source, :beam, :binary]
-
-  defrecordp :file, [:file, :compile, :runtime]
-
-  defrecordp :source, [:source, :files]
+  defrecordp :source, [:source, compile: [], runtime: [], external: []]
 
   @doc """
   Compiles stale Elixir files.


    # Starts a server responsible for keeping track which files
    # were compiled and the dependencies between them.
    {:ok, pid} = Agent.start_link(fn -> {modules, files, sources} end)
    long_compilation_threshold = opts[:long_compilation_threshold] || 5

    try do


  defp parse_manifest(data, state) do
    Enum.reduce data, state, fn
      module() = module, {modules, sources} ->
        {[module | modules], sources}
      source() = source, {modules, sources} ->
        {modules, [source | sources]}
    end
  end

  defp write_manifest(manifest, [], []) do
    File.rm(manifest)
    :ok
  end

  defp write_manifest(manifest, modules, sources) do
    File.mkdir_p!(Path.dirname(manifest))

    File.open!(manifest, [:write], fn device ->
