# 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.