Files
mokosh/icons/icon48.png
Mark 7732a302cd feat(01-12): wave-2 task-1 — rasterize Loom mark to icons/icon{16,48,128}.png (overwrites Bug A placeholders)
scripts/rasterize-icons.sh (80 lines) is the one-off rasterization
recipe. It reads src/shared/brand/mokosh-mark.svg and emits the three
toolbar icon sizes via rsvg-convert, with assets-spec.md size FLOOR
sanity checks embedded.

Before:
  icons/icon16.png  574 B  16-bit/color RGB     (Bug A placeholder)
  icons/icon48.png  1153 B 16-bit/color RGB     (Bug A placeholder)
  icons/icon128.png 2615 B 16-bit/color RGB     (Bug A placeholder)

After:
  icons/icon16.png  406 B  8-bit/color RGBA     (Loom mark — D-01)
  icons/icon48.png  784 B  8-bit/color RGBA     (Loom mark — D-01)
  icons/icon128.png 1952 B 8-bit/color RGBA     (Loom mark — D-01)

All three clear assets-spec.md Chrome imageUtil silent-rejection floors
(16≥200B, 48≥500B, 128≥1024B). Sizes match RESEARCH §3 verification.

Per D-06 (Neutral mark + dynamic badge): single neutral mark per size;
no per-state PNG sets. The dynamic chrome.action.setBadgeBackgroundColor
in src/background/index.ts does state communication via colored badge.

Per RESEARCH §3 anti-pattern: PNGs are COMMITTED as static artifacts;
not regenerated at build time. scripts/rasterize-icons.sh is the
documented re-run recipe (for when src/shared/brand/mokosh-mark.svg
changes).

Verification:
- tests/build/icons-present.test.ts: 15/15 GREEN (existence, FLOOR,
  PNG signature, dimensions, color-type byte === 6 RGBA)
- Bug A regression check: file content differs from prior placeholders
  (verified via git diff binary status); the placeholder fingerprint
  used by harness A19 (Wave 6) will distinguish on first 32 bytes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 22:30:23 +02:00

784 B
48x48px