chore: the toolbar icons ship as opaque binaries with no in-tree way to regenerate them #378

Open
opened 2026-08-23 21:26:29 +02:00 by clawbot · 0 comments
Collaborator

Follow-up from #371, filed now rather than when the mark first needs changing — the reproduction recipe currently lives only in a commit message, which is exactly where it will be missed.

#376 ships four PNGs (16/32/48/128) produced by a throwaway program that was deliberately not committed. The geometry is fully documented in that commit — both hex colours, the six-coordinate construction, 8x8 supersampling — and the reviewer independently confirmed the files are hand-encoded (only IHDR/IDAT/IEND chunks, filter type 0 on every scanline, no tool metadata or ICC profile). So nothing is lost today.

But the mark cannot currently be modified or reproduced without rewriting the generator from prose, and "placeholder-grade branding on a pre-release" is exactly the kind of thing that quietly becomes permanent.

Definition of done

  • An in-tree generator under script/, in the repo's own language rather than a second one, reproducing the four committed PNGs byte for byte from the documented geometry.
  • A test asserting regeneration matches the committed bytes, so the source and the artefact cannot drift.
  • No new external dependency, and no network fetch — the current files were produced with a hand-rolled encoder precisely to avoid both, and REPO_POLICIES.md forbids an unpinned external reference with zero exceptions.
  • make check green.

Two smaller notes from the same review, worth folding in while someone is in this code:

  • A file named icons/icon48.png that is not actually a PNG passes both make build and make package — only make check's IHDR assertion catches it. Existence is validated; content is not. Consider validating content where the reference is resolved.
  • build.js names the two manifest source paths twice — in the new MANIFEST_SOURCES map and inline in the existing manifest-copy block. Harmless today, but if one moves, copyIcons() could read a different manifest than the one that ships.
Follow-up from https://git.eeqj.de/sneak/AutistMask/issues/371, filed now rather than when the mark first needs changing — the reproduction recipe currently lives only in a commit message, which is exactly where it will be missed. https://git.eeqj.de/sneak/AutistMask/pulls/376 ships four PNGs (16/32/48/128) produced by a throwaway program that was deliberately not committed. The geometry is fully documented in that commit — both hex colours, the six-coordinate construction, 8x8 supersampling — and the reviewer independently confirmed the files are hand-encoded (only IHDR/IDAT/IEND chunks, filter type 0 on every scanline, no tool metadata or ICC profile). So nothing is lost today. But the mark cannot currently be modified or reproduced without rewriting the generator from prose, and "placeholder-grade branding on a pre-release" is exactly the kind of thing that quietly becomes permanent. ## Definition of done - [ ] An in-tree generator under `script/`, in the repo's own language rather than a second one, reproducing the four committed PNGs **byte for byte** from the documented geometry. - [ ] A test asserting regeneration matches the committed bytes, so the source and the artefact cannot drift. - [ ] No new external dependency, and no network fetch — the current files were produced with a hand-rolled encoder precisely to avoid both, and `REPO_POLICIES.md` forbids an unpinned external reference with zero exceptions. - [ ] `make check` green. Two smaller notes from the same review, worth folding in while someone is in this code: - A file named `icons/icon48.png` that is not actually a PNG passes both `make build` and `make package` — only `make check`'s IHDR assertion catches it. Existence is validated; content is not. Consider validating content where the reference is resolved. - `build.js` names the two manifest source paths twice — in the new `MANIFEST_SOURCES` map and inline in the existing manifest-copy block. Harmless today, but if one moves, `copyIcons()` could read a different manifest than the one that ships.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/AutistMask#378