Contributions
Shaping the tools I use every day, one pull request at a time
A hand-picked selection: only the contributions worth reading about, not every merged pull request. Articles about Magento and Adobe Commerce are on the blog.
Accept option label "0" in EAV Select/Multiselect validation — on GitHub
Select::validateValue and Multiselect::validateBySource used a loose falsy check on the source’s return value, so an option whose label was literally "0" got rejected with “Attribute X does not contain option with Id Y” since PHP treats the string "0" as false. Swapped in a strict === false comparison so only the real “not found” sentinel triggers the error.
Memoize hasSingleStore() in StoreManager — on GitHub
hasSingleStore() called getStores(true) and counted the result on every single invocation, a TODO left over since MAGETWO-39902 acknowledged it needed caching. Now the result is cached on the instance and invalidated in reinitStores() and _resetState(), so repeated calls skip the store collection load entirely.
Recognize PATCH as a valid HTTP method in the Varnish VCL — on GitHub
The generated VCL rejected PATCH with a synthetic 405, which broke REST clients doing partial updates behind Varnish. One line in the method whitelist, years of head-scratching saved.
Compress the content types Magento actually serves — on GitHub
nginx.conf.sample left PWA manifests and EOT/OTF fonts out of gzip_types, so they shipped uncompressed on every store built from the sample. Also dropped the gzip_disable "msie6" workaround.
Hardcode the xxh128 hash algorithm in product import — on GitHub
Product import derived its row hash from whatever algorithm the environment happened to offer, so the same CSV produced different hashes on different PHP builds and re-imported unchanged rows. Pinned to xxh128.
Preserve cart price rule discounts when editing an order in admin — on GitHub
Editing an order silently dropped rules limited by uses-per-customer: the new quote re-validated usage while the original order — the one about to be canceled — still held the usage slot. Same defect hit coupon validation.
Align the bootstrap PHP version check with what Magento requires — on GitHub
app/bootstrap.php still gated on PHP 8.1 while composer.json demanded 8.3, so anyone on 8.1 or 8.2 sailed past the friendly message and hit an opaque Composer failure instead.
Handle malformed UTF-8 in the CatalogWidget cache key — on GitHub
ProductsList::getCacheKeyInfo() serialized raw $_GET — so a single malformed byte in the query string threw out of json_encode() and took the whole page down to the generic error page. Bots find those bytes for you.
Change quote.applied_rule_ids to TEXT — on GitHub
quote.applied_rule_ids was VARCHAR(255) while quote_item and quote_address_item used TEXT. Past ~100 applied rules the parent column truncated and stopped matching its children.
Only merged work is listed here, and only the parts worth a comment — the full history, including everything still in review, lives on GitHub.
Every marketing parameter Varnish does not strip in
vcl_recvcreates a separate cache entry for the same page, so Instagram, Matomo, HubSpot, Klaviyo, Pinterest or Ceneo traffic split the cache and lowered the hit ratio. The generated VCL now also strips parameters such asigshid,mtm_*,pk_*,hsa_*,_ke,epik,ef_idandceneo_cid, along with common affiliate click IDs.