* [Profiles/Platform/Plugins] Profiles are now a reusable service that is available to plugins.  They provide a permalink location to display detailed information about a particular object, as well as several conveniences.  This should remove the need to create a page controller for many plugins that implement custom record types.
[UI/Aesthetics] Style tweaks for display pages
* [Calendars/Profiles] Implemented a profile page for calendar events. This provides a space for comment conversations and Virtual Attendant scheduled behavior.
* [Virtual Attendants/Workers/Setup] Fixed a bug where deleting roles, groups, or workers could remove Virtual Attendant behavior from ID=1 for those objects.
* [Virtual Attendant/Scheduled Behavior] When editing an object that has scheduled behavior on it, any relative dates (e.g. "4 hours before task due") will be rescheduled if those dates are changed.  For example, if you change a task's due date from 8 hours in the future to 12, then a scheduled behavior of "2 hours before due date" will move from 6 hours in the future to 10 hours.

* [Devblocks/Events/Platform/Plugins] Added a 'context.update' abstract event.
* [Virtual Attendants/Scheduled Behavior/Usability] Virtual Attendant behavior can now be scheduled relative to any dates found on a record.  This also includes custom field dates.  For example, you can schedule a reminder for "2 hours before task is due" or "1 day before calendar event starts".  Previously you could only schedule behavior using either absolute dates or dates relative to the current time.
* [Calendar/Scheduled Behavior] Scheduled behavior is now shown on the calendar event popup.
[Code Cleanup]
5.8-dev checkpoint
* [CHD-2894] [Search] Quick fulltext searches weren't matching wildcards like "*meet*" when using 'phrase' or 'all words'.  Added 'expert' mode to quick search for messages and comments.
[Translations/Performance/Plugins] Optimized the translation importing when enabling plugins. This used to read from all plugins, and now it just reads from the one being enabled.
[Smarty/Windows] Yet another patch to fix Smarty filename issues on Windows (colons).
* [Mail/Performance/Usability] Refactored the Mail section.  Moved the /tickets pages to /mail for terminological consistency.  Most of the built-in mail tabs (Search Tickets, Search Messages, Drafts) are being relocated to where they're more reusable.  This frees up a lot of screen space for customized mail workspaces.  This also helps with performance since the code for the mail section is broken up into many smaller files rather than one massive file.
[Performance/Sessions] Optimized the DAO_Worker::update() call for setting a worker's last activity.  This will no longer constantly update scheduled behavior on each page request.
* [Workspaces/Usability] A 'Current Worker' placeholder is now available for all worker-based filters on shared worklists.  For example, a group can now share a 'My Assignments' worklist that will reflect the assignments of the worker who is looking at it.
* [Aesthetics/UI] Improved the colors, contrast, and stylization of the top navigation menu and page submenus.
* [Quick Search/Usability/Keyboard] The newly remodeled Quick Search functionality now provides much more flexibility.  Previously you could only search a few hand-picked text fields; now you can search text, date, number, checkbox, worker, picklist, and multi-checkbox fields -- including all custom fields.  Additionally, quick searches will now add or change filters rather than resetting them.  If you quick search on any field with a blank value it will be cleared.

* [Quick Search/Usability/Keyboard] When using Quick Search on numeric fields, you can now prefix search terms with != (not equal to), >, <, >=, and <=.  For example "# nonspam > 5".

* [Quick Search/Usability/Keyboard] When using Quick Search on textual fields, you can now prefix search terms with '!' (exclamation) for negation.  You can also use an '*' (asterisk) for wildcards.  These can be combined, for example: "subject: !spam*".

* [Quick Search/Usability/Keyboard] When using Quick Search on date fields, you can now specify a range of dates using the word 'to'.  For example: "-5 days to +10 months".  If you only specify a single date, 'now' will automatically be included as the second boundary.  If your date is in the future then 'now' will be the lower boundary (i.e. from date), otherwise 'now' be added as the upper boundary (i.e. to date).

* [Quick Search/Usability/Keyboard] When using Quick Search on checkbox fields, you can enter true/yes/y/t/1 or false/no/n/f/0.  When searching for false checkboxes on custom fields, an "is blank or false" operator will be selected for you automatically to include checkboxes that aren't set at all.

* [Quick Search/Usability/Keyboard] When using Quick Search on pick list and multi-checkbox fields, you can now specify multiple terms by separating them with commas.  You can prefix your search terms with '!' to negate your search (e.g. list does *not* include these terms).  You can also specify terms by entering their first few characters, for example "v.i.p, prior" would match 'V.I.P.' and 'Priority Support' in a picklist custom field for Service Levels.

* [Quick Search/Usability/Keyboard] When using Quick Search on worker or watcher fields, you can now specify multiple people by separating them with commas.  You can prefix your search terms with '!' to negate your search (e.g. watchers does *not* include these workers).  You can specify workers by entering a few characters from their name, for example "Jeff, Da" would match 'Jeff', 'Dan', and 'Darren'.  You can also specify 'me' as a shortcut for yourself.

* [Quick Search/Devblocks/Plugins] Implemented 'Quick Search' as a platform service in Devblocks.  This means all object types, including those from plugins, can implement quick search functionality without any custom code.
[Worklist/Usability] Fixed the display output in worklists to say 'to' between dates (rather than 'or'), and to not include the scope in fulltext searches.
[Devblocks/Sorter] Fixed a bug in DevblocksPlatform::sortObjects() where it didn't properly sort arrays that included NULL values.
[Usability/Aesthetics/UI] Replaced several instances of the Unicode down-arrow character with an image so the display is more consistent between browsers and fonts.