From 81b97ea429b04ed34fa292e51bb44cc9aa3284ef Mon Sep 17 00:00:00 2001 From: debont80 Date: Tue, 23 Jun 2026 13:10:54 -0400 Subject: [PATCH] Add placeholder app icon and wire it into the Windows build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Generate build/icon.svg — a white download glyph on the teal brand square, mirroring the in-app brand mark (Onboarding.tsx) — and rasterise it to a multi-size build/icon.ico (256/128/64/48/32/16) via ImageMagick. Uncomment win.icon in electron-builder.yml so installers stop falling back to the default Electron icon. Marks CODE-AUDIT.md M3 placeholder-done; a designed asset is still wanted before v1.0. Co-Authored-By: Claude Opus 4.8 --- CODE-AUDIT.md | 18 +++++++++++------- build/icon.ico | Bin 0 -> 370070 bytes build/icon.svg | 12 ++++++++++++ electron-builder.yml | 9 +++++---- 4 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 build/icon.ico create mode 100644 build/icon.svg diff --git a/CODE-AUDIT.md b/CODE-AUDIT.md index d62d59b..43bd463 100644 --- a/CODE-AUDIT.md +++ b/CODE-AUDIT.md @@ -270,17 +270,21 @@ Add a note near `parseExtraArgs`: "No escape-sequence support; quotes cannot nes --- -#### M3 — Release polish: app icon commented out +#### M3 — Release polish: app icon -**File:** [electron-builder.yml:45](electron-builder.yml) +**File:** [electron-builder.yml:48](electron-builder.yml) **Severity:** Cosmetic -**Status:** Deferred — TODO(release) comment added; requires a designed icon asset before v1.0 +**Status:** Placeholder done — 2026-06-23; a *designed* asset is still wanted before v1.0 **Description:** -The `icon:` line is commented out pending final icon asset. Bundled binaries are correctly handled (graceful "not found" errors everywhere). +The `icon:` line was commented out pending a final icon asset, so builds fell back to the default Electron icon. Bundled binaries are correctly handled (graceful "not found" errors everywhere). -**Fix:** -Add a `build/icon.ico` before shipping v1.0. +**Fix (done — placeholder):** +Added [build/icon.svg](build/icon.svg) — a white download glyph on the teal brand square, mirroring the in-app brand mark ([Onboarding.tsx](src/renderer/src/components/Onboarding.tsx)) — and rasterised it to a multi-size [build/icon.ico](build/icon.ico) (256/128/64/48/32/16) via ImageMagick. The `win.icon` line is now uncommented. Regenerate with: +``` +magick -background none build/icon.svg -define icon:auto-resize=256,128,64,48,32,16 build/icon.ico +``` +**Still open:** swap the placeholder for a professionally designed icon before cutting v1.0. --- @@ -326,7 +330,7 @@ The following security-critical functions lack tests: | P3 | UX | 15m | Low | Document or enforce concurrency semantics | **Fixed 2026-06-23** (documented) | | M1 | Maint | 15m | Trivial | Extract `cleanError` to shared module | **Fixed 2026-06-23** | | M2 | Maint | 15m | Trivial | Document `parseExtraArgs` limitations | **Fixed 2026-06-23** | -| M3 | Polish | 30m | Trivial | Add icon asset before release | **Deferred** (pre-release TODO) | +| M3 | Polish | 30m | Trivial | Add icon asset before release | **Placeholder done 2026-06-23**; designed asset still wanted pre-v1.0 | | C1 | Correctness | 30m | High | Bundle missing `ffprobe.exe` + document it (found by smoke test) | **Fixed 2026-06-23** | --- diff --git a/build/icon.ico b/build/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..0095f919ca7fafcc35d898280537cc8c96239f7f GIT binary patch literal 370070 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 + + + + + + + + diff --git a/electron-builder.yml b/electron-builder.yml index e5a600c..529d87a 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -42,10 +42,11 @@ win: - portable # Never request admin elevation. requestedExecutionLevel: asInvoker - # TODO(release, audit M3): drop a 256×256 (multi-size) build/icon.ico in place - # and uncomment the next line before cutting v1.0. Until then electron-builder - # falls back to its default Electron icon, which is fine for dev/test builds. - # icon: build/icon.ico + # Placeholder icon (audit M3): white download glyph on the teal brand square, + # mirroring the in-app brand mark. Generated from build/icon.svg as a multi-size + # .ico (256/128/64/48/32/16). Replace with a designed asset before v1.0 — re-run + # magick -background none build/icon.svg -define icon:auto-resize=256,128,64,48,32,16 build/icon.ico + icon: build/icon.ico portable: artifactName: ${productName}-${version}-portable.${ext}