This is the roadmap for Apso.


Target: 0.3.0
=============

* Start using a logging engine, instead of writing to stdout

* Come up with a test framework, and include some tests

* Be more defensive in the code:
  + Start using Monotone's sanity.{hh,cc}
  + Fix the (non-)use of exceptions
  + Check existence and types of all files and directories that we
    need:
    . If it's missing, create it
    . if it's the wrong type (file/directory), throw an exception

Target: 0.4.0
=============

* Some cleanup to the faade and also to apso.cpp

* Split keystore. There are two things being kept in the keystore:
  - The keymap (which is global)
  - The user's list of keys
  These should be two separate classes

* Rework the classes:
  - Cryptengine
  - Repository
  - VCRepository
  They should be singleton classes that keep sets of instances of
  their subclasses, selectable by a parameter see (directory.h)

Target: 0.5.0
=============

* Cleanup PubRepository
  - Fix setup()
  - Finish rewriting compromise()
  - Review error handling all over the code

Later:
======

* Fix the random number generator!
  - Reseed Yarrow periodically, using two sources of entropy
* Monotone:
  - Include more operations (add_symlink, for example)
  - Checkout actually does setup.
  - Stop using ccutils and find a better way to call Monotone? (Lua?)
* Split the code!
  - The code should be split into:
    + libVCS (supporting mtn, git, mercurial etc) [ write a C++ api for Tailor? ]
    + libcrypt (plugabble, etc)
    + libapso
    + apso

Even later
==========

* Write a plugin for Crypto++ so we can use the same key taht is
  used in Monotone (see keys.{hh,cc} there)
* Write a plugin for GPG so we can use people's GPG keys
* Fix the documentation for Doxygen (it's incomplete)

Far away in the future
======================

* Optimize
* Investigate how we could add Git, Arch, etc
* Read options from config file
* Make options nicer to the user
  - Maybe use some defaults?
* Graphical Interface
* Start using other crypto libraries

