#parse("relnotes.vm")
#stdHeader("0.7")

  * Fixed a couple bugs in the sparse vector copy methods.

  * Split new modules <<<lenskit-data-structures>>> and
    <<<lenskit-api>>> out of <<<lenskit-core>>> to contain interesting
    data structures we use.  The main purpose of the API abstraction
    is to make the core recommendation API in a separate module so
    that re-implementing it on top of another framework such as Mahout
    does not pull in all of LensKit.  It will also provide us a good
    layer at which to make API stability guarantees.

    This resulted in some additional class moves:

    * Moved sorted array sets, scored lists, and interval lists into
      the <<<o.g.l.collections>>> package.

    * Renamed <<<o.g.l.data.vector>>> to <<<o.g.l.vectors>>> and moved
      the <<<UserVector>>> and <<<ItemVector>>> classes into
      <<<o.g.l.data.history>>>.

    * Pushed DAO-based <<<open>>> method from <<<RecommenderEngine>>>
      to <<<LenskitRecommenderEngine>>>, as the API layer knows
      nothing about DAOs.

    * Pushed <<<getDataAccessObject()>> from <<<Recommender>>> down
      to <<<LenskitRecommender>>>.

    * Moved <<<UserHistory>>> and <<<Event>>> interfaces into
      <<<o.g.l.data>>> in the <<<lenskit-api>>> packages.  The
      implementations remain in <<<lenskit-core>>> in their respective
      <<<.history>>> and <<<.event>>> packages.

    * Moved <<<SortOrder>>> into the DAO package.

    * Moved <<<Index>>> and <<<Indexer>>> to <<<o.g.l.util>>>.

    * Moved abstract classes, <<<Lenskit*>>> classes, and
      <<<Builder>>> from <<<o.g.lenskit>>> to <<<o.g.lenskit.core>>>,
      so only <<<lenskit-api>>> provides classes directly in
      <<<org.grouplens.lenskit>>>.

    []

  * Moved cursors from GL Common into <<<lenskit-data-structures>>> in
    the new package <<<org.grouplens.lenskit.cursors>>>.

  []
