Open Source
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.
Use the hex-tag JSON serializer for data embedded in templates — on GitHub
A User module view model serialized data for output with the plain JSON serializer, which breaks the moment the content carries markup — precisely the case JsonHexTag exists for.
Make checkout failure logs groupable by reason, not quote ID — on GitHub
The quote ID was baked into the log message, so Kibana, New Relic and Sentry each saw every checkout failure as a unique event and aggregated nothing. Event data moved to the PSR-3 context, leaving a stable message to group on.
Prefetch orders to kill an N+1 in the admin grid — on GitHub
The orders grid issued one query per row for Mailchimp data. Prefetching cut over 20% of the grid load locally — more on any environment with real network latency to the database.
Stop setup:install hanging in integration test runs — on GitHub
Any prompt raised during install left the test bootstrap waiting for an answer nobody could type, so CI hung until it timed out. --no-interaction turns that into a clean failure.
Install ps so Magento integration tests stop crashing — on GitHub
Without ps in the image, Magento’s memory estimation fell through to its Windows code path and died with sh: tasklist.exe: not found. A genuinely great error message to debug on Linux.
Run ExtensionChecker without a working Magento install — on GitHub
The dependency scanner required a fully bootstrapped Magento, which is precisely what you do not have when auditing a pile of modules in CI.
Correct the documented PHP compatibility range — on GitHub
composer.json and reality both said PHP 8.1 worked; the README still said otherwise, and teams believe the README.
Fix ignored date parameters in the transaction backfill command — on GitHub
taxjar:transactions:sync -f 2022/02/10 silently ignored the date: the observer read from/to while the command passed from_date/to_date. Every backfill quietly synced the wrong range.
Remove the redundant COUNT() call on the first page of results — on GitHub
Every paginated grid calculated the last page number so it could redirect out-of-range requests — including when you were already on page one. Admin category edit was one of many pages paying for it.
Only merged work is listed here, and only the parts worth a comment — the full history, including everything still in review, lives on GitHub.
customer-data.jsreadevent.target.methodto check the form method — but with an input namedmethodin the form, that resolves to the element, not the attribute. Two lines, one very confusing class of checkout bugs.