diff --git a/CHANGELOG.md b/CHANGELOG.md index e643572..1b5a3a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,22 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). +## [0.16.2] - 2026-09-09 + +### Fixed +- `Lunar\Base\ShippingManifest` is a request-lifetime singleton whose `getOptions()` re-runs the + shipping modifier pipeline without ever clearing its `$options` collection first, and whose + `addOption()` keeps the first entry per `getIdentifier()` and silently drops any later one. In + practice, an option resolved for an earlier shipping address (or cart state) shadowed the + correct one after the address/region changed within the same request — e.g. a carrier priced + differently across two zones that both match an address would keep quoting the stale zone's + price, and `ApplyShipping` would price the cart total off that same stale option. Renamed + `Modules\Core\Shipping\Listeners\FlushLivePricingCache` to + `Modules\Core\Shipping\Listeners\InvalidateShippingOptions` and had it additionally call + `ShippingManifest::clearOptions()`, merged in because both invalidations fire on the exact same + event set (`CartLineAdded`, `CartLineUpdated`, `CartLineRemoved`, `CartCleared`, + `ShippingAddressSet`) — the only inputs the shipping modifier pipeline depends on. + ## [0.16.1] - 2026-09-09 ### Fixed diff --git a/composer.json b/composer.json index 4c3353b..1872d99 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "boboko/core", "description": "Core module — authentication and shared panel behaviour", "type": "library", - "version": "0.16.1", + "version": "0.16.2", "autoload": { "psr-4": { "Modules\\Core\\": "src/"