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.com and 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 allowed is 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 order breaking 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 type and Website both default to "any".
  • Stop after this rule is 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 applicable defaults 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_plan affect 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.
Changelog — 3D Box Packing — Checkout & Shipping — Extensions | qoliber Docs