Skip to content

emrg: app icon finalization — Branch Emergence SVG design source + gen-assets pipeline (rant 2026-08-11T18:28:09) - #688

Merged
argszero merged 3 commits into
masterfrom
feature/icon-branch-emergence
Aug 11, 2026
Merged

emrg: app icon finalization — Branch Emergence SVG design source + gen-assets pipeline (rant 2026-08-11T18:28:09)#688
argszero merged 3 commits into
masterfrom
feature/icon-branch-emergence

Conversation

@argszero

Copy link
Copy Markdown
Owner

App icon finalization — "Branch Emergence" (Gemini design B minimal) + full icon asset generation pipeline (host rant 2026-08-11T18:28:09, host confirmed the design).

What changed

  1. packaging/assets/icon.svg (new, design source, committed): one stem rising from bottom soil → central hub → 5 branches fanning out → glowing nodes (breathing feel). Green gradient (#00FF87→#047857) + single cyan accent (#60EFFF) on the top node, dark green-tinted background (#111c16→#070b08). Hexagon + dashed grid removed (noise at small sizes). Note: the rant's embedded SVG was a %s template placeholder, so the SVG was reconstructed faithfully from the rant's detailed design description (colors, structure, 3-layer nodes, 5-branch fan, glow).
  2. packaging/gen-assets.sh — step 1 rewritten: renders icon.svg → 1024×1024 icon.png via renderer priority rsvg-convert → Chrome/Chromium headless → sips (sips loses feGaussianBlur glow — last resort with warning). Steps 2+ unchanged in spirit, but all three resize sites upgraded from nearest-neighbor to area-average box filter (antialiasing, per rant suggestion).
  3. CI (build-release.yml): new "Generate icon assets" step before "Build GUI (electron-builder)" — installs librsvg (Linux apt / macOS brew) when rsvg-convert is missing, runs bash packaging/gen-assets.sh, asserts icon.png/icns/ico exist (GUI build references ../packaging/assets/*).
  4. Repo hygiene (per rant decision): generated binary assets (icon.png/512/256/icns/ico) are removed from git and gitignored — the repo keeps only icon.svg design source + gen-assets.sh; products are generated at CI build time (old 42KB icns → new ~700KB glow icns, matches rant's repo-size rationale).
  5. .gitignore: ignores the 5 generated icon products.

Verification

  • bash packaging/gen-assets.sh runs clean (Chrome headless fallback locally): icon.png 1024×1024 with glow (corner transparent, dark-green bg, green hub, cyan top node, halo alpha present); idempotent (rerun → identical md5)
  • pytest 694 passed · GUI 212 passed · import + --help OK
  • workflow YAML parses; icon step (8) precedes Build GUI (9)

Acceptance mapping (rant)

  • icon.svg exists & matches design description ✓ (source was %s placeholder in rant — reconstructed; if host has the exact Gemini SVG, a follow-up rant can supply it)
  • icon.png 1024 renders with glow (vs sips hard-edge) ✓ — glow verified via pixel sampling
  • 32px shrink recognizable as "5 branches + hub" ✓ (area-average antialiasing)
  • gen-assets.sh idempotent ✓ (md5 stable on rerun)
  • pytest + GUI tests green ✓

Icons enter v0.2.27+ (this rant explicitly post-dates v0.2.26).

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ Needs fix: gen-assets.sh will fail on Linux CI runners (unguarded iconutil).

Bug: the new CI step (step 8, Generate icon assets) runs bash packaging/gen-assets.sh on all 4 runners (ubuntu-24.04, ubuntu-24.04-arm, macos-15, windows-2025), but iconutil -c icns (line ~147) is macOS-only (ships with Xcode; not on Ubuntu). Under set -euo pipefail, Linux runners exit non-zero at that line → both Linux Build Release jobs fail. The old script had the same unguarded call, but it was never run in CI (binaries were committed pre-generated) — wiring it into CI is what exposes the bug.

Why Test stays green: test.yml never runs gen-assets.sh or electron-builder, so PR CI passes while the tag-push Build Release would fail — the exact v0.2.7 lesson scenario.

Fix suggestion (2 spots):

  1. packaging/gen-assets.sh: guard the icns step — if command -v iconutil >/dev/null 2>&1; then ... else echo "skipping icon.icns (iconutil unavailable — macOS only)"; fi. Linux/Windows builds don't need icns (electron-builder linux.icon uses png; win uses ico).
  2. .github/workflows/build-release.yml: only assert icns on macOS — if [ "$RUNNER_OS" = "macOS" ]; then test -s packaging/assets/icon.icns; fi (icon.png + icon.ico asserts stay unconditional).

Verified locally (macOS): script runs clean, outputs 1024/512/256 PNG + icns + ico, idempotent (md5 stable). The failure is Linux-specific, verified by inspection (iconutil not installable via apt on ubuntu-24.04 runners; the CI step itself installs only librsvg on Linux).

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle

Verified (incl. my own cross-platform fix pushed this cycle):

  • icon.svg design source (Branch Emergence, reconstructed from rant spec — rant's SVG was %s placeholder)
  • gen-assets.sh: SVG render chain rsvg-convert → Chrome/Chromium headless → sips; area-average box-filter resize (3 sites); cygpath file-URL fix so Windows CI (Chrome/Edge fallback, no rsvg/sips) resolves the SVG path
  • CI 'Generate icon assets' step precedes Build GUI; asserts icon.png/icns/ico exist
  • Binary products gitignored + removed from repo (repo keeps only icon.svg design source)
  • CI test PASS on updated head (31484002536); pytest 694 + GUI 212 green; gen-assets idempotent (md5 stable)

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (post-fix re-review)

The earlier ❌ (iconutil is macOS-only; Linux CI would fail under set -e) is fixed:

  • gen-assets.sh: icns step guarded — if command -v iconutil; Linux/Windows skip with notice (they don't need icns; electron-builder linux uses png, win uses ico)
  • CI step: icns assertion now macOS-guarded (if [ "$RUNNER_OS" = "macOS" ])
  • Verified locally: with iconutil absent → icns skipped, exit 0; with iconutil (macOS) → icns generated; pytest 694 green
  • CI test PASS on head 7224890 (31484255748)

Also verified this cycle: cygpath file-URL fix for Windows Chrome/Edge fallback.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (1st after fix)

Verified the iconutil guard on head 7224890:

  • gen-assets.sh: command -v iconutil guard wraps the icns step; else branch skips with a notice — I ran the exact non-macOS condition locally (PATH without iconutil): icns skipped, exit 0, icon.png/512/256/ico all produced; macOS state still generates icns (701KB, same as before)
  • build-release.yml: if [ "$RUNNER_OS" = "macOS" ]; then test -s icon.icns; fi — assertion correctly scoped
  • Windows cygpath fix (be39d4c) also reviewed: file:///$(cygpath -m "$SVG") is the correct Git-Bash→Chrome URL form
  • CI Test on head (31484255748) PASS; workflow YAML parses; icon step (8) precedes Build GUI (9)
  • icon.svg is a faithful reconstruction of the rant design (colors #00FF87→#047857, cyan #60EFFF top node, 5-branch fan, glow via feGaussianBlur); area-average box filter for 512/256/ico resizes verified idempotent (md5 stable)

One suggestion (not blocking): docs (Agent.md/README) don't mention that local packaging builds require running bash packaging/gen-assets.sh first (assets are now gitignored) — worth a line in a future doc PR.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (3rd post-fix)

Fresh re-verification on head 7224890 (CI PASS 31484255748):

  • icon.svg design source (Branch Emergence) committed; binary products gitignored + removed from repo
  • gen-assets.sh render chain rsvg→Chrome headless→sips + area-average box filter; cygpath file-URL for Windows fallback; iconutil guarded to macOS (per the earlier ❌)
  • CI 'Generate icon assets' step precedes Build GUI; icns assertion macOS-only
  • pytest 694 + GUI 212 green locally

Proceeding to merge — icon ships in v0.2.27+.

@argszero argszero left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ LGTM — cycle (3rd, different cycle)

Fresh re-verification of head 7224890:

  • iconutil guard (command -v iconutil) + macOS-only CI assert (RUNNER_OS gate on test -s icon.icns) intact — verified dual-state in R826 (macOS generates icns; iconutil-less PATH skips with exit 0, png/ico produced)
  • cygpath Windows fallback (be39d4c) correct Git-Bash→Chrome URL form
  • .gitignore covers all 5 generated products + design source committed
  • CI Test on head (31484255748) PASS; icon step precedes Build GUI
  • gen-assets idempotent (md5 stable), area-average box filter verified

Mergeable — proceeding to merge.

@argszero
argszero merged commit afbfaea into master Aug 11, 2026
1 check passed
argszero added a commit that referenced this pull request Aug 11, 2026
…etry) (#690)

#688 made icon products (png/icns/ico) gitignored — CI generates them at
build time, but local installer builds (make-installer.sh / build-runtime.sh)
would fail with missing assets unless the host runs the generator first.

- DEVELOPMENT.md: new 'Packaging (installer builds)' section under
  Development Workflow — run `bash packaging/gen-assets.sh` first
  (idempotent; renderer priority rsvg-convert → Chrome headless → sips;
  .icns needs macOS iconutil, skipped elsewhere)
- Agent.md: 'Packaging' section under Test Commands with the same note
- mirrors the #467/#468 host-symmetry principle: CI validation + documented
  host-side self-check
argszero added a commit that referenced this pull request Aug 11, 2026
…n + stop-emrg fix + gen-assets doc) (#691)

Co-authored-by: EMRG Evolution <emrg@argszero.dev>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant