- Both the "tail" and "fg" commands in supervisorctl have tests to verify
  their error handling but not actual operation.  We should add some additional 
  tests to verify their operation for completeness.

- Finish process group reloading that was merged into trunk. We decided to
  implement addProcessGroup() such that at the time it is called, it reads the
  config from disk and then adds the group if found. It will have no other
  side effects and will not require a sort of "refresh" command to be called
  prior. We decided that a supervisorctl "avail" command will not be
  implemented. We decided that we are not going to implement any kind of DWIM
  or "smart" config reloading in the foreseeable future and will remove the
  process group "diffing" functionality that attempts to compare the runtime
  config to that on disk.

- Add an option that allows numprocs for an existing process group to be
  adjusted at runtime.  Requested by Roger Hoover.

- Subprocess logging appears to stop when the subprocess moves to the "killing"
  state.  Reported to the mailing list by Nicolas Grilly on 2008-04-13.

- supervisor.tailProcessLog() may return too many bytes when the number of
  bytes requested exceeds the number logged.  This is not certain and needs
  investigation.  Reported by Chris McDonough.

- Allow effective user to switch to a particular group instead of
  defaulting to the user's primary group:
  http://www.plope.com/software/collector/233.

- Allow sockchown group only: http://www.plope.com/software/collector/214

- Implement event max_retry counter that means "after X retries of a
  rejected event, go into FATAL state".

- FATAL state for supervisor.

   - When we try to clear the main log file and we get an IOError or an
     OSError (clearLog)

   - When we attempt to remove a process log file via os.remove (or
     equivalent all into handlers) and we get an IOError or an OSError
     (clearProcessLog)

   - When we try to kill a process and the os.kill command raises an
     exception (stopProcess)
     
   - If eventlisteners repeatedly reject (or crash on) an event, causing
     the event to be rebuffered above a reasonable threshold.

- General speed improvement wrangling:

  - Play around with creating a select trigger file descriptor for
    each event pool.  Maybe when an event is accepted by the pool,
    write to the file descriptor.  This will cause select to time out
    and fall through.  In an asyncore dispatcher represented by the
    file descriptor, attempt to dispatch the event.

- Revisit test_startProcessGroup and test_startAllProcesses (see XXX
  comment about ordering).

- Address outstanding collector issues.

- We *might* be able to delay shutdown until all buffered events have
  been processed (or a timeout has been reached).

- Web interface:

   - Unit tests for meld classes and ui server.

   - Meta-refresh on tail page.

   - Organize processes by group and allow groups to be started/stopped.

   - Support operations against both stderr and stdout logs.
   
   - Allow a supervisorctl-like command line through the web interface.

   - Display more information about Supervisor (identification, pid, etc.)

- Expat error on Jens' system running slapd as root after reload.

- Unit tests for log rotation.

- Command-line arg tests.
