Conversation
sunrioa
marked this pull request as draft
September 20, 2026 07:32
sunrioa
force-pushed
the
fix/macos-icon-small-sizes
branch
2 times, most recently
from
September 20, 2026 07:38
b22fe34 to
30164a5
Compare
electron-builder 26.15.2 replaced its icon generator, and from then until 26.15.3 the .icns it produced stored the 16px and 32px faces as PNG data in the legacy icp4/icp5/icp6 slots. macOS does not decode those, so every place that draws the icon small — Finder list rows, the Trash, Activity Monitor, and the installer DMG's own volume icon — showed noise, while 128px and up stayed correct and hid the breakage. 26.16.1 carries the upstream fix (icons toolset 1.2.3), which writes those sizes as ic04/ic05 ARGB again. The icon comes from a toolset the builder downloads at build time, so a version pin alone says nothing about what was produced. The macOS packaging verifier now reads the bundled icon and rejects the broken shape, which is the check that would have caught this before it shipped. The reproducible-ZIP patch moves to the new version unchanged. 26.16.1 sets -mtm=off and -mta=off for 7z archives upstream but still not for zip, which is the branch Windows artifacts take. Refs: electron-userland/electron-builder#9940 Generated-by: Claude Code Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
sunrioa
force-pushed
the
fix/macos-icon-small-sizes
branch
from
September 20, 2026 07:56
30164a5 to
000ceb3
Compare
sunrioa
marked this pull request as ready for review
September 20, 2026 09:16
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
electron-builderfrom 26.15.3 to 26.16.1.app-builder-libpatch to the new version and update itsLICENSEentry.electron-builder 26.15.2 replaced its icon generator, and from then through 26.15.3 the icon it produced stored the 16px and 32px faces as PNG in the legacy
icp4/icp5/icp6slots. macOS does not decode those slots, so Finder list rows, the Trash, Activity Monitor and the mounted installer volume rendered noise while 128px and up stayed correct and hid the breakage. 26.16.0 fixed it upstream by writing those sizes asic04/ic05ARGB again.The icon is produced by a toolset electron-builder downloads at build time, so the version pin does not describe the artifact it yields.
verifyPackagedMacAppnow reads the bundledicon.icnsand rejects PNG in the legacy slots, which is the check that would have caught this before it shipped.The patch is still needed. 26.16.1 sets
-mtm=offand-mta=offfor 7z archives upstream, but still not in thezipbranch that Windows artifacts take, so only the patch filename and itsLICENSEentry change.Fixes #5528
Verification
npm run lintnpm run format:checknpm run typechecknpx knip --workspace apps/desktopnpx knip --workspace packages/uinpm run check:asf-source— 92/92 passednpm run check:release— 206/207 passednode --test scripts/verify-packaged-app.test.mjs— 25/25 passednode --test scripts/verify-packaged-app-icons.test.mjs scripts/generate-app-icons.test.mjs— 7/7 passedapps/desktop/assets/app-icons/sky.png. Toolset 1.1.0, which 26.15.3 pins, reproduced the shipped icon byte for byte at 159,115 bytes with PNG in the legacy slots. Toolset 1.2.3, which 26.16.1 pins, produced 123,793 bytes with ARGB small sizes that render at 16px.patch-package --error-on-failapplies the regenerated patch to a pristineapp-builder-lib@26.16.1, and the zip branch carries both flags again afterwards.The single
check:releasefailure isqualify-released-cli-state-root.test.mjstiming out while a full build ran alongside it. It passes 12/12 in isolation and the file never mentions electron-builder or icons.verify:macosend to end is unrun because it needs the release signing credentials. The icon assertion it gained is covered by the unit tests above and by the artifact run quoted here.CI is green except
test, which failed on two different WorkHub cases across two runs of the same tree:e2e/workhub-layout.spec.ts:26, which also fails on cleanmainat 87ff279 with the same assertion and line, and the WorkHub native browser presentation smoke under xvfb. None of the packages the lockfile moved are imported anywhere underapps/desktop/srcorpackages/*/src, and the Electron version is unchanged, so neither case can reach this diff.To see the defect directly:
Review focus
The lockfile carries the electron-builder family and its transitive drift. The one direction worth a look is
@noble/hashes2.2.0 to 1.8.0, which is not a downgrade this change chose: app-builder-lib 26.16.1 declares^1.8.0where 26.15.3 declared^2.2.0, and nothing outside app-builder-lib and pkijs depends on it. Every newresolvedURL stays onregistry.npmjs.org, and the lockfile was regenerated with the pinned npm 11.19.0.AI use
Select exactly one:
Tool(s) and scope:
Claude Code assisted with the ICNS slot diagnosis, locating the upstream regression and its fix, the verifier guard and its regression tests, and drafting this description. I reproduced both toolsets against the shipped artifacts and reviewed the final diff, the lockfile, and the test results before submission.
Checklist
Does this PR entail a change in behavior?