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>