Repository navigation
2.0.4
Post-release reconciliation/idempotency fixes for the v2 line, driven by feedback from real project use. No config-format breaks. Several components were re-saving (or noisily logging) on every configurator:run instead of settling to skipped once in sync; a few also failed outright in maintain mode.
Components now settle to a skip when unchanged
- Categories — gained the per-entity diff the other components already had. In
maintainmode it previously re-saved every category every run, and the no-op re-save regenerated URL rewrites and threwUrlAlreadyExistsException, aborting the component. Unchanged categories now skip the save entirely. - TaxRules — previously re-imported the rule every run (
updated 1that never settled to0). Now loads the full rule (rate/class ids live in association tables) and diffs ids + scalars before saving. - Widgets —
page_groupswere compared against a value that isn't loaded on the collection item and that uses different stored column names, so the compare never matched and forced a re-save every run (which, per the report, then surfaced "Layout update is invalid"). The instance is now hydrated and compared in the simplified shape; built groups are always carried onto the model so an unrelated change can't drop them.getPageGroups()also now reads the correct stored columns. - Pages —
setStores()was called unconditionally (a magic data-setter), marking the model dirty and producing a phantom "Save page" every run. Stores are now only re-assigned when the assignment actually differs.
Other fixes
- TaxRates — the generated import CSV now carries Magento's canonical header (
Code,Country,State,…) in the data's actual column order, instead of the source machine-key header in a mismatched order. - Attributes — stopped logging "… does not exist or is not mapped" for valid
addAttribute-only keys (sort_order,group,visible,position) that aren't readable on the loaded attribute row. Keys the entity type does expose are still diffed, and genuinely unknown keys still log.
Quality
- Unit suite expanded to 455 tests, covering the new unchanged/skip paths and format fixes per component, green on PHPUnit 9.6 in a real Magento install.
- The Widgets fix was additionally verified end-to-end against a live store:
create → skip → skip, DB unchanged.
Full changelog: 2.0.3...2.0.4