This is the roadmap for Apso.


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

* Start using boost::spirit to parse Monotone output

* Also use boost::spirit to parse a configuration file (so the
  long and confusing command-line options will not be necessary
  anymore)

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

* Start using a logging engine, instead of writing to stdout
  The logging engine will keep track of "log aspects" instead of
  "log severity". We may not be interested in "all warnings" or
  "all errors" only -- but we may want to log "all CryptEngine
  method calls", etc.
  The logging engine will also keep a stack of method calls, and
  dump this stack if requested.

* 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.5.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.6.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

