Add placeholder app icon and wire it into the Windows build

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 <noreply@anthropic.com>
This commit is contained in:
2026-06-23 13:10:54 -04:00
parent af9300d5e3
commit d17b4a8234
4 changed files with 28 additions and 11 deletions
+11 -7
View File
@@ -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** |
---
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

+12
View File
@@ -0,0 +1,12 @@
<svg width="256" height="256" viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg">
<!-- Placeholder app icon (audit M3). Mirrors the in-app brand mark in
Onboarding.tsx: a white download arrow on a rounded square in the default
"teal" accent (theme.ts teal[80] = colorBrandBackground in light mode).
Replace with a designed asset before v1.0; regenerate icon.ico from this. -->
<rect x="0" y="0" width="256" height="256" rx="52" ry="52" fill="#148185"/>
<g fill="#ffffff">
<rect x="112" y="46" width="32" height="88" rx="12" ry="12"/>
<polygon points="82,114 174,114 128,176"/>
<rect x="66" y="190" width="124" height="20" rx="10" ry="10"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 699 B

+5 -4
View File
@@ -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}