TODO:
- maintenance: Switch to using inside-out objects (probably Moose)
- maintenance: scripts/clearpress to auto-generate tests & fixture framework
- maintenance: Improve migrations
- maintenance: Improve test coverage (currently at 81%)
- maintenance: Add regression tests
- performance: Config caching

407 - Removed 'model.logged_in' data poking. Use view.logged_in in templates if you need to

405 - build_error_object falls back to ClearPress::view::error if ${ns}::view::error is not present

402 - implemented bounded_select two-arg LIMIT in driver::SQLite

398 - gen_getall orders by secondary_key if specified - much more useful than id_x
    - tweaks to handling for javascript blocks passed to decorator - may take comas

394 - Downgraded requirements for File::Copy & File::Path - RT#62701

393 - Removed empty 'data' dir

392 - /thing/edit/10.xml => 'thing_edit_xml' rather than 'thing_read_edit_xml'
    - Tests for ldap authenticator

387 - Fixed some failing tests

384 - Provides DOM handles for error view's h2 & paragraph.  Without
      needing to override view::error::render, a useful piece of
      jQuery might be:

      $('.warnings').detach().insertAfter('#actions').effect('highlight', 3000);
      $('h2.error').detach().insertAfter('#actions');

380 - Correction to order of initialisation of CGI object (from util, passed to decorator).
    - Provides model::secondary_key support in model::init, allowing load-by-<secondary-field> for most models.

368 - corrected cleaning of error message to not expose module & line number in responses

363 - Default to serving Content-type header with charset=UTF-8

361 - UTF8 support enabled by default in MySQL driver

360 - Error messages escaped for HTML, JSON, XML

357 - Minor tweaks to build-process; adjusted some test data.

351 - Added basic database-backed authenticator. Needs examples.

346 - 0 => "0" bugfix for js_string and xml_filter.

343 - patch to allow multiple settings in config.ini, e.g.
        stylesheet=/css/foo.css,/css/bar.css
    - patch to fix DBI's warning about "rollback without explicit disconnect"

339 - override STDIN in t::request to account for changes in CGI.pm v3.44 (reported by Slaven)
    - attempted a PostgreSQL adapter - could do with someone to test it
    - updated example

334 - sessions saved after processing request, not during

327 - Basic authentication mechanisms - LDAP/AD, passwd/getpwuid

325 - Added support for HTTP_X_FORWARDED_HOST and ...PORT for sitting
      behind a reverse-proxy

323 - Default support for .txt and .xls

320 - Improvements to singleton handling
    - Template-toolkit filter registration for views
    - Revisions for latest perlcritic regex enforcement

317 - Added 'streamed_aspects' view method for easier streamed responses
    - Added model construction with primary key rather than hashref
    - Default to *_ajax aspect with XMLHttpRequest request header

314 - Support loading models with a scalar primary key instead of
      insisting on a hashref

302 - Bugfix affecting SCRIPT_NAME use in the standalone server
    - Application builder now emits mysql schema-loading help with the
      correct precedence

298 - Conformance to Perl::Critic 1.094001

297 - Made js_string and xml_entity filters available by
      default. There's no longer any need to 'USE <x>' them.

294 - Fixed up schema problems when auto-generating SQLite applications.
    - Allow posting XML without XForms:Model. Note it's unadvisable to
      use this feature in the wild.

291 - Added xml_entity TT filter - uses HTML::Entities::encode_entities_numeric

284 - Class::Singleton support moved from ClearPress::driver to
      ClearPress::util. When running in a mod_perl environment
      supporting multiple different ClearPress applications, the
      driver would be a singleton per Apache child process, meaning
      applications would mistakenly share whichever database
      connection is first initialised. As drivers are not usually
      subclassed per-application (only by database back-end platform)
      the singleton support was moved into ClearPress::util. The util
      is commonly subclassed for applications so this should be a
      robust solution, particularly for shared environments.

278 - Support for posting XML

269 - Extended aspect handling:
      /batches/released/cluster.xml routes to
      app::view::batches::read_released_xml with a primary key of
      'cluster' by default, but if
      app::view::batches::list_released_cluster_xml exists that will
      be preferred.

    - Also fixed a niggle - /thing/15.xml;add mixed
      aspect+file-extension would previously have failed but should
      now be correctly routed to app::view::thing::add_xml

267 - Bugfix for aspect checking - previously 'update_*' aspects
      (e.g. update_xml) would have been incorrectly identified as a 'create'
      action. Similarly for 'delete_*' aspects.
    - Added SQLite checks to failing tests

255 - A bunch of new functional tests
    - Test-harness related stuff (t::request)
    - Test data for dummy templates and results

252 - Fixed generation of warnings.tt2 & view::error in bin/clearpress
    - Fixed Y/N on file overwrite in bin/clearpress
    - Auto-generate application-specific util as it's required by the singleton if not passed explicitly to objects
    - Fixed requestor->is_member_of authorisation check if is_member_of is not supported (default not authorised) in ClearPress::view
    - Fixed auto-generation of multiple has_a and has_many (missing whitespace) in bin/clearpress
    - Default RESTish methods (pass-through) for *_ajax and *_json to complement existing *_xml in ClearPress::view
    - Moved scripts/clearpress to bin/clearpress as it's more usual
    - Template caching

236 - driver support for bounded selects (currently basic string concatenation)

235 - Improved test resiliance w.r.t. optional dependencies

222 - ClearPress::driver is now a Class::Singleton. ** TAKE CARE ** if
      your application makes multiple database handles of the same sort
      - they need separate subclassing and will then be singletons
      themselves.

174 - Maintenance release - added missing dependencies to Makefile.PL

173 - Improved tests & code coverage for relation accessors (has_a,
      has_many, has_a_through, has_many_through etc), views and database
      drivers.

    - NEW BEHAVIOUR: database handling has started to be pushed into
      ClearPress::driver:: subclasses. You will commonly see transaction
      errors with applications built using older ClearPress which
      implement their own 'dbh' methods in util.pm .

    - NEW BEHAVIOUR: better handling of NULL/undef, zero and empty
      string may cause issues on applications which previously didn't
      check.

168 - Updated POD
    - Generation script now makes use of has_a and has_many
      friend-accessor-auto-constructors

157 - Improved error handling with some smarts about requested content
      types
    - 'packagemap' config section maps uri entity names to package
      subclasses for exceptions to the systematic naming rules, e.g.
      [packagemap]
      array_feature=feature::array

135 - belongs_to_through now supported in the data model
    - Added missing Config::IniFiles dependency. Hopefully more CPAN
      tests will now pass

132 - has_many_through and belongs_to now supported.
    - Easier access to template subsystem for streamed-output responses.

118 - Update now only saves fields which 'exist' in the object, meaning
      you don't have to force $object->load() before updating.
    - New hasa() and hasmany() for easier relationship definitions.
    - Models can now render ->as_xml() and as_json()
    - Tweaked route processing (action & aspect) to be safer and more
      consistent

99  - reworked url/file-extension & HTTP Accept header handling
      deprecated controller::process_uri in favour of process_request

87  - JSON response support

71  - Buffered output handling, better test coverage

12  - Added application builder in scripts/clearpress