anchor.diff:  
   == Configuration
   
  +In order to run `test161`, it needs to know about which <<tests>>, 
  +<<targets>>, and <<commands>> it can run, and what to expect from  each command.
  +Additionally, `test161` needs to know where to find your root directory for
  +testing and your repository for submission. This information is specified in your
  +`.test161.conf` file, which can be located in your `$HOME` directory, or whichever
  +directory you plan to run `test161` in. If you run `test161 run` without a config
  +file set up, an example will be displayed on screen.  You can redirect this output
  +to `.test161.conf` and edit it accordingly.
  +
  +[source,bash]
  +----
  +test161 run > ~/.test161.conf
  +vim ~/.test161.conf
  +----
  +
   == Usage
   
  -`test161` requires a set of arguments. The following can be provided either
  -on the command line or in a YAML configuration file:
  -
  -* `root:` or `--root`: the location of a directory containing the kernel
  -binary to test and any associated executables that are required, probably
  -`~/root/` or `~/os161/root` depending on how you have configured your OS/161
  -source tree
  -* `tests:` or `--tests`: a list of directories containing testing scripts.
  +=== Running Tests
  +
  +To run a tests, group of tests, or target, use the `test161 run <names>` sub-command.
  +Here, names can be a single target, a list of tests, or a list of <<tags>>.footnote:[In the case
  +that tag and target names conflict, specify -tag if you mean tag.] For test files,
  +<names> is a list of http://www.linuxjournal.com/content/globstar-new-bash-globbing-option [globstar]
  +style file names.  The following are all valid commands:
  +
  +[source,bash]
  +----
  +test161 run snyc/*.t         # Run all tests in the tests/sync
  +test161 run **/l*.t          # Run all tests in all sub-directories beginning with 'l'
  +test161 run syncprobs/sp*.t  # Run the syncprobs
  +test161 run sync/lt1.t       # Run lock test 1
  +test161 run locks            # Run all lock tests (tests tagged with 'locks')
  +test161 run asst1            # Run the asst1 target
  +----
  +
  +==== Command Line Flags
  +There are several command line flags that can be specified to customize how `test161` runs tests.
  +
  +* -dry-run (-r): Show the tests that would be run, but don't run them.
  +* -sequential (-s): By default the output of all tests are interleaved, which can be hard to debug.
  +Specify this option to run tests one at a time.
  +* -dependencies (-d): Run the given tests and their dependencies. In test files, you can specify a
  +test's dependencies, and the test will be skipped if the dependency fails.
  +* -verbose (-v): There are 3 levels of output: loud (default), quiet, and whishper.
   
   == Requirements
   
  
positive.code:     progress: 60
  ....
  
  == Features
  
  === Testfile Syntactic Sugar
  
negative.code: also checks to ensure that there are no user cycles generated when we are
  running in kernel mode, which could be caused by a hung progress.
  
  
  === Running multiple tests and dependencies
  
  === Correctness vs. Grading
  
  === Multiple output strategies
  
  `test161` supports different output strategies through its PersistenceManager
  interface. Each TestEnvironment as a PersistenceManager which receives
  callbacks when events happen, like when scores changes, status change, or when
  output lines are added. This allows multiple implementations to handle output
  as they wish. The test161 client utility implements the interface through
  its ConsolePersistence type, which writes all input to stdout. The server uses
  a MongoPersistence type which outputs JSON data to our mongo backend server.
  
  
  == TODOs
  
  === Nits
  