aboutsummaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md52
1 files changed, 52 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..111aaf6
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,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.