5 min readOct 16, 2026by jakub
Changelog
Current version: 1.0.1
All notable changes to Qoliber 3D Box Packing are recorded here. This project adheres to Semantic Versioning.
[Unreleased]
Nothing yet.
[1.0.1] - 2026-10-09
Fixed
- Customer-group shipping rules now resolve the group from the quote when Magento's checkout rate request does not supply it. Explicit request groups, including guest group zero, still take precedence.
- Equal-weight, equal-volume items now have deterministic sorting by dimensions, handling constraints and SKU, so cart order cannot change packing or per-package pricing.
- Packaging assigned to "All Store Views" is available to every storefront.
- Packaging collections load store assignments in one query, preserving them when an admin reopens and saves a box and when repositories return collection results. Edit-form store IDs are converted to strings so Magento's multiselect displays the saved selections.
- Packing timeouts are recorded separately from permanently unpackable carts and are never cached. Changing the packing time limit also changes the plan cache key.
- A new cache-key namespace prevents reuse of plans computed by the 1.0.0 sorting algorithm. Existing order plans remain readable with the updated serialization format.
Tests
- Added unit, integration and Playwright regression coverage for customer-group rates, deterministic packing, global and scoped packaging, edit-form round trips and timeout recovery.
- Configurable-product integration tests now use Magento fixtures instead of skipping when sample data is absent.
- Verified 232 unit tests and 58 integration tests without skips. All 24 unique Playwright functional tests passed across staged runs. See the 1.0.1 release notes for verification scope.
Release
- Composer source metadata points to
gitlab.qoliber.comand the matching 1.0.1 tag.
[1.0.0] - 2026-08-24
First release. Everything below describes the module as it ships; nothing preceded it, so there is nothing here that was changed or removed.
Packing
- Three-dimensional packing of the cart into the merchant's own packaging catalogue, built on
dvdoug/boxpacker, with rotation, stacking and weight limits. - Packaging catalogue with admin grid and form, seeded with nine common European formats. Containers and trailers install inactive: the packer minimises the number of packages, and an active container will happily swallow a mid-sized order at seven per cent full.
- Packing profiles - fragile, this side up, bearable load, courier allowed - set once and
assigned to many products.
Courier allowedis enforced at placement time, not merely recorded: a product a courier may not carry is never packed into courier packaging. - Stack pressure is cumulative, so several individually light items cannot together exceed a bearing item's rating.
- Product attributes for packing length, width, height and profile. Magento Open Source ships no product dimension attributes of its own.
- Volumetric weight, calculated per package and then summed, the way carriers bill it.
- Packaging is selected by size first, with
Sort orderbreaking ties between packaging of the same size. Sort order is not an override: a newly created bulk carton must not leap ahead of every parcel and quote a 2 kg order at 60 kg volumetric weight.
Rates
- Rate rules matching on country, region, postcode (exact, wildcard, range, list), billable
weight, order subtotal, item quantity, customer group and required packaging type, with four
price modes.
Required packaging typeandWebsiteboth default to "any". Stop after this ruleis honoured: a matching rule that does not stop processing can be overridden by a later match.- A shipping carrier that prices from the packing result and withholds the method, with a configurable message, whenever the order cannot be packed or no rule matches.
- When nothing in the cart can be measured - which is every catalogue on the day the module is
installed - the carrier says nothing at all rather than announcing a failure beside carriers
that are working.
Show method if not applicabledefaults to off. - Method visibility: courier methods can be hidden when the packing produced freight packaging or contains an item couriers may not carry. Nothing is hidden on the strength of an incomplete plan, and other carriers' rates are untouched when this carrier is disabled.
- Website assignment on rate rules and store-view assignment on packaging.
- Server-side validation for rate rules, packing profiles and packaging; zero dimensions and negative available quantities are refused.
Storefront and admin
- A packing summary telling the customer how their order packs - "Packs into 2 packages", and the packaging by name with how full each one is - in the cart and at checkout. It is plain markup with no theme-specific classes, so the same template serves Luma and Hyvä, and it follows the cart through a customer-data section rather than being frozen at page render - at checkout the page never reloads.
- A cart that cannot be packed at all shows its manual-quote notice.
- The packing plan is recorded against every order the module can pack, whichever carrier the customer chose, and shown on a Packing Plan tab in admin with loading order, positions and placed sizes.
Operations
- The plan cache binds to its own cache type, so the admin toggle and cache flush for
qoliber_packaging3d_planaffect it. Cached plans carry a schema version and restore every field, including the flags that decide which shipping methods a customer may choose. - A packing profile deleted while still assigned to products logs a warning rather than silently dropping every handling restriction.
- Unit, integration and Playwright test suites.
- A release script that builds the module-rooted archive and installs what it built before calling it a release.
- A GitLab pipeline that runs everything this module claims: the source parsed on every PHP version it supports, static analysis and the floor guard, the unit suite per version, the integration suite against MySQL and OpenSearch, a clean install through setup:di:compile, the Playwright journeys against a real served store, and the release archive built and then installed.
Not in this release
- Hyvä Checkout has no adapter. The module's only storefront output is the packing summary, and Hyvä Checkout renders its own shipping step; a merchant who wants the summary inside that step has to place it themselves. See README.
- Packaging stock is recorded and shown, but not reserved. Two concurrent orders can both be quoted the last carton.
- Packaging availability is a single figure per packaging type, not per MSI source.