0.8
 * i18n internationalization.
 * Multiproduct support for CommitTicketUpdater.
 * 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 errors in BloodhoundRelations validation logic.
 * Bootstrap template for the Roadmap and Edit Product views.
 * Bloodhound installer support for MySQL database.
 * Numerous other important fixes and minor enhancements.


 * Not fixed for this release
  * Cache is not properly refreshed for resources including wiki pages,
    milestones, components and permissions; leading to stale data being
    displayed after INSERTs and DELETEs (#613, #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

