1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
# Changelog
All notable changes to this project are documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
How it works:
- Every user-facing change gets a line under **Unreleased** as it lands
(Added / Changed / Fixed / Removed / Deprecated / Security).
- At release time, "Unreleased" is renamed to the new version (e.g.
`## [0.2.0] - 2026-09-xx`) and a fresh Unreleased section is opened.
- The version number comes from `composer.json` and the matching `git tag`
(`v0.2.0`). Bugfix releases bump the patch (`0.2.1`), features bump the
minor (`0.3.0`), and breaking changes bump the major after 1.0 (`2.0.0`).
## [Unreleased]
### Added
- Integration suite (`tests/Integration/RealisticRouteTableTest.php`):
the 22-route brett-parson.com model, `/admin` group + POST-only CSRF
ordering, literal `preview` beating `{id}`, param injection, 5-layer
onion order.
- Regression baselines (`tests/Regression/KnownIssuesTest.php`): six
known-issue probes pinning v0.1.0 behavior, each linked to its v0.2.0
fix bead.
- Benchmark script (`composer bench`, `tests/bench/bench.php`):
registration/dispatch scaling at 100/300/600 routes.
- Router boundary tests: trailing-slash normalization, method
case-insensitivity, case-sensitive paths, leading double slash,
cross-controller duplicate detection, custom not-found handler.
- Composer scripts: `test`, `bench`, `lint`, `check`.
## [0.1.0] - 2026-08-29
### Added
- Attribute route declaration (`Get`, `Post`, `Put`, `Patch`, `Delete`)
compiled by a reflection-based `RouteLoader`.
- Deterministic matching: literal segments beat `{parameter}` segments at
the same position, so registration order never matters.
- Onion middleware pipeline (`MiddlewarePipeline`) with `Middleware`
attributes on classes and methods, plus router-level `group()` prefix
middleware with optional method restriction.
- Controller resolution seam (`ControllerResolverInterface`) so apps plug
in their own container wiring.
- Thin HTTP contracts (`RequestInterface`, `ResponseInterface`) that
application HTTP objects implement.
- Duplicate route detection at registration (`RouteRegistrationException`).
- Unit test suite covering loader, matcher, pipeline, and router.
|