I think =WriteRescue()= is pretty straightforward.  The main complication is that there are a bunch of places where we don't write stuff out if =isPartial= is true.  =WriteRescue()= iterates through all of the nodes and calls =WriteNodeToRescue()= on each one.  The main reason for breaking =WriteNodeToRescue()= out of =WriteRescue()= was to reduce the excessive indentation, and make the code easier to read.  Note that this =isPartial= flag is passed to =WriteNodeToRescue()=, because most of the info printed by =WriteNodeToRescue()= is _not_ printed to a partial rescue DAG.
 
+{subsection: Use/parsing of rescue DAG}
 
+=main_init()= (that huge function again!) calls =FindLastRescueDagNum()= to find out if there are any rescue DAGs for the current DAG.  (Oh, yeah -- the user now has to run a rescue DAG by re-submitting the original DAG, not by submitting the rescue DAG directly as they did a long time ago.)  The user can also specify =-DoRescueFrom <number>= on the command line to specify a rescue DAG to run, if they don't want to run the latest one.  If you specify a rescue DAG number, any later rescue DAGs are renamed by =RenameRescueDagsAfter()= (_foo.dag.rescue.005_ -> _foo.dag.rescue.005.old_, etc.).
+
+After parsing the original DAG file(s), DAGMan then parses the rescue DAG (which just sets the status of various nodes to DONE as appropriate, and also possibly changes the number of retries left on some nodes).  At that point, we're ready to actually run the DAG.
 
-{subsection: Use/parsing of rescue DAG}
 {subsection: Additional actions on condor_rm of DAGMan}
 remove jobs
 final node