This is an overview of the user-visible changes to Catalyst between major
Catalyst releases.
+=head2 VERSION 5.90105
+
+This version primarily fixed a regression in the way we preserved $c->state
+which the previous version introduced. Now in the case when you forward to
+an action, should that action throw an exception it sets state to 0 and is
+sure that the return value is false. This is to meet expected behavior based
+on the documentation. If you relied on the last update behavior you may not have
+regressions but it was thought that we should make the code behave as documented
+for more than 10 years.
+
+We also changed how we compose the request, response and stats base class. We
+now compose the base class with any configured traits once at the end of the
+application setup, rather than for each request. This reduced request overhead
+when you are composing lots of traits. It possible this may break some code that
+was adding traits after the application setup was finalized. Please shout out if
+this actually causes you trouble and we'll do the best to accommodate.
+
=head2 VERSION 5.90102 - 5.90103
A significant change is that we now preserve the value of $c->state from action
Middleware when such exists and is correct to do so. For example we now use
L<Plack::Middleware::ContentLength> to determine content length of a response
when none is provided. This replaces similar code inlined with L<Catalyst>
-The main advantages to doing this is 1) more similar Catalyst core that is
+The main advantages to doing this is 1) more similar Catalyst core that is
focused on the Catalyst special sauce, 2) Middleware is more broadly shared
so we benefit from better collaboration with developers outside Catalyst, 3)
In the future you'll be able to change or trim the middleware stack to get
such an object and fallback to the previous behavior (where L<Catalyst::Engine>
itself unrolls the filehandle and performs blocking streams). However
this backwards compatibility will be removed in an upcoming release so you should either
-rewrite your custom filehandle objects to support getline or start using the
+rewrite your custom filehandle objects to support getline or start using the
middleware that adapts read for getline L<Plack::Middleware::AdaptFilehandleRead>.
=head3 Response->headers become read-only after finalizing
=head3 Restarter
The development server restarter has been improved to be compatible with
-immutable Moose classes, and also to optionally use
+immutable Moose classes, and also to optionally use
L<B::Hooks::OP::Check::StashChange> to handle more complex application layouts
correctly.
=item *
-New print method which prints @data to the output stream, separated by $,.
-This lets you pass the response object to functions that want to write to an
+New print method which prints @data to the output stream, separated by $,.
+This lets you pass the response object to functions that want to write to an
L<IO::Handle>.
=item *
=item *
-Many reusable extensions which would previously have been plugins or base
+Many reusable extensions which would previously have been plugins or base
classes are better implemented as Moose roles.
=item *
=item *
-Fix a bug in uri_for which could cause it to generate paths with multiple
+Fix a bug in uri_for which could cause it to generate paths with multiple
slashes in them.
=item *