   end
 
   @doc """
-  Runs a `task` with the given `args`.
-
-  If the task was not yet invoked, it runs the task and
-  returns the result.
-
-  If there is an alias with the same name, the alias
-  will be invoked instead of the original task.
-
-  If the task or alias were already invoked, it does not
-  run them again and simply aborts with `:noop`.
-
-  It may raise an exception if an alias or a task can't
-  be found or the task is invalid. Check `get!/1` for more
-  information.
+  Conditionally runs the task (or alias) with the given `args`.
+
+  If there exists a task matching the given task name and it has not yet been
+  invoked, this will run the task with the given `args` and return the result.
+
+  If there is an [alias](https://hexdocs.pm/mix/Mix.html#module-aliases) defined
+  for the given task name, the alias will be invoked instead of the original
+  task.
+
+  If the task or alias has already been invoked, subsequent calls to `run/2`
+  will _abort_ without executing and return `:noop`.
+
+  Remember: by default, tasks will only run _once_, even when called repeatedly!
+  If you need to run a task multiple times, you need to re-enable it via
+  `reenable/1` or call it using `rerun/2`.
+
+  `run/2` raises an exception if an alias or a task cannot be found or if the
+  task is invalid. See `get!/1` for more information.
   """
   @spec run(task_name, [any]) :: any
   def run(task, args \\ [])

  end

  @doc """
  Receives a task name and returns the task module if found.

  Otherwise returns `nil` in case the module
  exists, but it isn't a task or cannot be found.
  """
  @spec get(task_name) :: task_module | nil
  def get(task) do


  Define the `@shortdoc` attribute if you wish to make the task
  publicly visible on `mix help`. Omit this attribute if you do
  not want your task to be listed via `mix help`.

  If a task has requirements, they can be listed using the
  `@requirements` attribute. For example:
