0.8
 * i18n internationalization.
 * Quick Create Ticket form sets product based on context and forwards
   values to the ticket form when "More fields" is selected.
 * Fixed caching issue that prevented product-scope trac-admin commands
   from taking effect immediately.
 * Improved presentation of the Products page.
 * Improvements to ticket timeline (comments section).
 * BloodhoundSearch now supports Whoosh >= 2.5.1 (upgraded from 2.4.1).
 * Fixed several errors in BloodhoundRelations validation logic.
 * Bootstrap template for the Roadmap and Edit Product views.
 * Bloodhound installer support for MySQL database.
 * Product edits were always reported as anonymous.
 * Quick Create Ticket displays the last created ticket for a short time
   after it is created.
 * Numerous other important fixes and minor enhancements.


 * Not fixed for this release
  * Cache is not properly refreshed for resources including wiki pages,
    components and permissions; leading to stale data being displayed
    after INSERTs and DELETEs (#614, #620, #681, #719, #748).
  * Products cannot be deleted (#517).
  * Duplicate relation is not added when batch modifying tickets (#761).
  * TicketDeleter component can't be used with BloodhoundTheme (#427).
  * No product-scope permission checks on the global dashboard (#572).
  * Inconsistencies in query views when running PostgreSQL (#730).

0.7
 * Duplicate ticket relation is integrated to the ticket workflow.
 * Several fixes for multiproduct installations with products that map to subdomains.
 * Numerous important fixes and minor enhancements.

 * Not fixed for this release:
   * No major outstanding issues

0.6

 * Added support for multiple products.
 * Added support for ticket relations.
 * Numerous improvements to the BloodhoundSearch module.
 * Redesigned the Ticket page.
 * Implemented Bootstrap templates for Timeline and AccountManagerPlugin.

 * Not fixed for this release:
  * No major outstanding issues

0.5.3

 * Removed reference to BloodhoundSearch docs in setup script, which was causing installation to fail.
 * Updated installation document so that site-packages are inherited in the virtualenv.

 * Not fixed for this release:
   * No major outstanding issues


0.5.2

 * Updated this file with 0.5.1 changes.

 * Not fixed for this release:
   * No major outstanding issues


0.5.1

 * Removed "contrib", "doc" and "sample-plugins" directories from the trac directory since they lack the appropriate license headers.
 * Various improvements to the ticket page and a fix for ticket submits failing due to the attachment form being nested within the ticket properties form.
 * Various bug fixes and enhancements.
 
 * Not fixed for this release:
   * No major outstanding issues


0.5

 * Added beta version of bhsearch plugin. Find more information on https://issues.apache.org/bloodhound/wiki/BloodhoundSearch
 * Implemented Bootstrap templates for the repository browser, log viewer and attachment pages.
 * Added responsive layout support for better experience on tablets and phones
 * Upgraded Bootstrap to version 2.3.1.
 * Upgraded Trac to version 1.0.1.
 * Various bug fixes and enhancements.

 * Not fixed for this release:
   * No major outstanding issues


0.4

 * Replaces ticket edit form with a new 'in-place' edit and workflow control
 * Added white-labelling for error messages and basic branding
 * Improvements to the quick ticket creation form including ability to specify the select fields and their order.
 * Various bug fixes

 * Not fixed for this release:
   * No major outstanding issues


0.3

 * Removes minified files from Bloodhound
 * Upgrades to trac 1.0
 * Various bug fixes

 * Not fixed for this release:
   * No major outstanding bugs


0.2

 * Fixes incubator release issues from 0.1.0
 * Various bug fixes relating to the new UI
 * Upgraded to Bootstrap 2.1

 * Not fixed for this release:
   * Some issues with the installer remain
   * Custom text area fields break layout in ticket view


0.1.0

 * added multi-product
 * added dashboard and theme
 * added simplified installation

 * Not fixed for this release:
   * Widget error for product page with no versions defined (#136)

Project Initiation (Tue, 10 Jan 2012)
 
 * Trunk created in Apache svn repositories as an incubator project

