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
-to follwoing action. This gives you a new way to pass a value between actions
+to following action. This gives you a new way to pass a value between actions
in a chain, for example. However any 'auto' actions always have $c->state
forced to be set to 0, which is the way its been for a long time, this way an
auto action is required to return 1 to pass the match. It also exists to maintain
compatibility with anyone that exits an auto action with a detach (which is not a
-documented way to excape matching, but exists in the wild since it worked as a
+documented way to escape matching, but exists in the wild since it worked as a
side effect of the code for a long time).
Additionally, upon $c->detach we also force set state to 0.
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 *