6 min readOct 11, 2026by jakub
Changelog
Current version: 1.0.0
The suite installs as one metapackage, qoliber/ppwr, but each module carries its own changelog. Entries below are grouped by release, then by module.
1.0.0 — 2026-09-14
PPWR Core
First release — the foundation of PPWR Packaging for Magento Open Source and Mage-OS.
Added
- Legal entities — admin screens for the companies that sell and report, with a completeness check (registered name, address, country and a tax or business identifier) and a default entity provisioned on install.
- Legal entity roles — effective-dated, jurisdiction-scoped roles such as importer or manufacturer. Saving opens a new version and keeps the previous one, so every past decision stays reconstructible.
- Market scopes — which company places packaging on which market, and under which recognition rule, revised rather than edited.
- Versioned regulatory code lists —
bin/magento ppwr:codelist:importimports datasets as drafts, and activation is a separate, audited action with its own permission that retires the previously active version.bin/magento ppwr:codes:statusshows active and pending versions. Ships material category, packaging level, recognition rule, polymer, jurisdiction (all 27 EU Member States) and dimension applicability datasets. - Private document storage — local or S3-compatible adapters, file-signature checks on upload, configurable MIME types and size limit, server-derived retention dates, and downloads behind their own permission with readable file names. Each document remembers the adapter it was stored with.
- Append-only audit trail written through
AuditRecorderInterface, and a shared bitemporal versioning service for effective-dated records. - Permission tree — a PPWR resource group with master data, reviewer, fulfilment operator, report user, auditor and configuration roles.
- Configuration — selling legal entity per website, multi-entity management, document storage and translatable storefront text.
PPWR Packaging
First release — packaging master data with review, approval and traceability.
Added
- Packaging specifications and revisions — draft, in review, approved and superseded. Approved revisions are immutable history; a correction opens a new revision that supersedes the old one, and every transition is audited.
- Quick Create — a specification, its first revision and its material components in one form, optionally with a document and a one-item recipe.
- Completeness check before approval, including configurable evidence document types per packaging level. Approval runs under a row lock, so a concurrent edit can never slip an unchecked revision through.
- Single-user fast path or distinct approver, selectable per website.
- Article 9 compostability advisory on approval for formats expected to be compostable — it advises and never blocks.
- Packaging recipes (bills of materials) — purposes, calculation bases (per unit, per N units, per parcel, per shipment), a BOM editor, grid filters, and a new-version flow for recipes that are already in use.
- Article 22 traceability — supplier-side supply transactions recorded against
approved revisions with server-derived direction and retention, recipient-side
records for business counterparties, and
bin/magento ppwr:traceability:purge-expired, which only ever removes records past their retention date. - REST API — 20 endpoints for specifications, revisions, workflow transitions, recipes, recipe items and traceability, each behind an ACL resource. Every write records the authenticated caller.
- Packaging format code list, including a version carrying Article 9 compostability flags.
PPWR Catalog
First release — packaging on products, in the admin and on the storefront.
Added
- Product assignments — product and website to recipe, effective-dated and system-versioned, with history that survives product deletion and resolves as of any past date.
- Deterministic resolution for simple, configurable, bundle, grouped, virtual and downloadable products, with an optional fallback from a simple product to its configurable parent.
- Assignment CSV import and export with a per-row success and failure report; re-importing revises an assignment instead of duplicating it.
- PPWR Packaging section on the product edit page with the current assignment and a live completeness summary.
- Storefront packaging block for Luma — packaging mass by material, a component table, evidence-gated "Recyclable" and "Compostable" claims, compostability-aware disposal guidance, reuse guidance, a destination-country switcher and the Article 12 note, per store view. Configurable products update the block on variant change without a page reload; merchant text is escaped and the block passes an automated accessibility scan.
- Nothing renders when nothing applies — a product with no packaging resolved produces no block at all, not an empty wrapper.
- Stable region order — the mass bar, composition table, status row and disposal panel hold their places, so the block reads the same however many times a shopper switches configurable variants, on any axis.
- A
data-ppwr-rolehook on every region, so a theme or an integration can address part of the block by role rather than by CSS class. - Wording advisory on storefront guidance text for generic environmental claims listed by the Empowering Consumers Directive (Directive (EU) 2024/825).
- REST API — list, get, upsert-by-SKU and close endpoints for assignments.
- Cache refresh — saving an assignment clears the product's cache, and activating a code list clears cached packaging data.
PPWR Fulfillment
First release — what actually went out with each shipment.
Added
- Parcels & Packaging on the shipment page — capture parcels with their outer carton and other packaging uses, then finalize the manifest.
- REST API —
POST /V1/ppwr/manifestsfor WMS manifests (idempotent replay, all-or-nothing batches) andPOST /V1/ppwr/dispatchfor carrier, WMS or manual dispatch confirmation. - Recognition gates — dispatch assumed from shipment creation with an optional delay, and a packaging gate with a WMS grace period that applies the website's default shipment packaging recipe when no manifest arrives in time.
- Transactional outbox written inside the shipment save transaction, processed by cron every five minutes with leases, skip-locked claiming and retries with backoff, so parallel workers split the backlog and no event is lost.
- Compliance exceptions queue — named failures resolved with a reason on record; resolving re-queues an event that had run out of retries.
bin/magento ppwr:outbox:status— backlog, stalled leases, failures and open exceptions, a per-shipment explanation, and a non-zero exit past a backlog threshold for monitoring.- Fallback packaging cron every fifteen minutes, and a configurable re-check interval for events waiting on a gate.
RecognitionScopeInterfaceextension point for modules that decide a shipment is out of scope.
PPWR EPR
First release — an append-only EPR ledger and reproducible report runs.
Added
- Placed-on-market ledger — one row per packaging material per recognised shipment, immutable and idempotent, with dimension and responsibility snapshots. Corrections are compensating entries with a mandatory reason, including partial corrections and corrected replacements.
- Reportable markets and reporting timezones — explicit markets with per-market IANA timezones (EU 27 plus GB by default), recognition dates in the destination's local calendar, and audited out-of-scope handling for other destinations.
- External packaging movements over REST (
POST /V1/ppwr/movements) and CSV — registered sources, idempotency keys, sales, samples, replacements, inbound unpacking and import receipts recorded as provenance, mapping profiles, explicit dimensions, and Article 22 records for inbound goods. - Source periods — declared expectations that close only when stored movements
match, or are attested with a reason;
bin/magento ppwr:source:materialize-periodsopens periods for every active source. - Reconciliation —
bin/magento ppwr:ledger:reconcilewith per-source scope and compliance exception creation, andbin/magento ppwr:ledger:rebuild-missingwith a dry run. - EPR registrations per legal entity and Member State, with readiness checks that pick the registration valid on the day.
- EPR dashboard — shipment coverage, open exceptions, registrations needing attention and report readiness per market.
- Report runs —
ppwr:report:generate,ppwr:report:validateandppwr:report:finalize, a generic CSV adapter under a versioned adapter registry, a finalization guard that names every blocker, byte-for-byte reproducible regeneration, drill-down from each total to its ledger entries, checksummed artifacts with a separate download permission, and amendments for activity after a run's cutoff. - Admin screens for the ledger explorer, report runs, registrations, movement sources, mapping profiles and source periods.
- EPR Accounting permission group with separate view and adjust, and view and download, resources.
- Jurisdiction registry covering all 27 EU Member States.
PPWR Hyvä
First release — the PPWR packaging block on Hyvä.
Added
- Hyvä template for the storefront packaging block, built with Tailwind and Alpine.js from the same view model and data as the Luma block.
- Compatibility-module registration, so the template is used only when a Hyvä theme is active and stays inert on any other theme.
- Placement below Add to Cart through a Hyvä-only layout handle.
- Variant switching on configurable products through Hyvä's
configurable-selection-changedevent, with no RequireJS or jQuery. - Evidence-gated claims and compostability-aware disposal guidance, identical to the Luma block. The status row appears under the same conditions as Luma's — a reuse status, a recyclability claim or a compostability claim — and nothing renders at all when no packaging resolves for the product.
- The same
data-ppwr-rolehooks as the Luma block for the title, aside, body, mass bar, composition table, status row and material swatches, so a theme or an integration addresses either block the same way. - Tailwind configuration shipped with the module for theme builds.