This is not an exhaustive list of TODO items.

* use Fatal qw(system) now works!  Test to make sure it works sensibly
  with Fatal semantics, rather than accidently slipping in autodie
  semantics.  What does it mean for Fatal semantics to exist here?

* Write a bunch of tests for the exception API

* (More?) tests for user defined subs!

* Define roles properly.

* Trawl through perlfunc to find which things autodie may apply to.

* Generate a good way to allow subroutines to register themselves
  with roles and message handlers, possibly defining their own
  exception handler to use.

* Provide an autodie mixin which at least provides expected autodie
  behaviours, even if someone wants to use their own exception class.

* Provide a nicer way to override message handlers.

* Finalise the exception interface.

* Write a huge amount of documentation.

* Write a huge amount of tests.

* Test the many varied forms of sysopen.

* Test fcntl.

* !!! We need a proper way to override exceptions from system!

* Make sure that all the internal subroutines in Fatal continue to
  work using their old wacky interfaces.

* Test open(my $fh, '|-') || exec().

* Consider what happens when import is called at run-time!
  (Both in 5.10 and 5.8, but especially 5.8)

== Wishlist ==

* Reduce the number of lexical guards we need in our array.
  We should be able to combine these, or have a single guard
  that does the right thing.

* Think about padwalker integration.  This can give us really
  pretty errors!

* Catch require/do and remove any autodying subs upon entry.
  At the end of file, replace them.  This is a better solution
  to using leak-guards, which require more time and space at
  run-time.
