This is the roadmap for Apso.


Target: 0.2.0
=============

* Fix types. There is an annoying mix of size_t, unsigned int and
  uint8_t.

* Some methods accept pointer to char and size. These should be
  changed to operate on bdata.

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

* Start using singleton all over the code. This will
  make it more readable and less error-prone (the
  current code is very confusing)

* 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

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

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

Target: 0.4.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?)
* PubRepository:
  - Fix setup()
  - Finish rewriting compromise()
* Split the code!
  - The code should be split into:
    + libVCS (supporting mtn, git, mercurial etc)
    + libcrypt (plugabble, etc)
    + libapso
    + apso
* 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
* Start using Monotone's sanity.{hh,cc}

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

* One good thing would be to have CryptEngine and VersionControl
  configurable on-the-fly. Get an instance, and tell it what
  plugin it should use.
* Write a plugin for Crypto++ so we can use the same key taht is
  used in Monotone (see keys.{hh,cc} there)
* Fix the (non-)use of exceptions
* Documentation:
  - Fix index and table of contents in texinfo file
  - Review texinfo file
  - Fix the documentation for Doxygen (it's incomplete)

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

* Optimize
* Send setup of cryptengine and vcrepository to inside the faade, so users
  only need to specify them as strings
* Investigate how we could add Git, Arch, etc
* See if AspectC++ may help with sanity checks & other things
  - I couldn't compile anything (not a single hello, world) with aspectC++ :-(
  - Also, it seems that at this point AspectC++ doesn't work with Boost
* Read options from config file
* Make options nicer to the user
  - Maybe use some defaults?
* Graphical Interface
* Start using other crypto libraries

