D068 - The logo is one file, committed, and the drawn mark is gone

D060 put selfish's own mark on every package that arrives without an icon, and drew it here rather than committing one: a glyph table and a few loops, so it reads in a diff like everything else. It also said what should happen next, in as many words - when there is a real logo it can replace default_icon wholesale; nothing else has to move.

There is now a real logo, so that is what happened. assets/logo.svg is the source of truth and assets/logo.png is a 512×512 raster of it, embedded with include_bytes!. The glyph table, the border, the word and the hand-rolled indexed-PNG encoder are deleted.

The reason to do it wholesale rather than keep both is that two logos diverge. A drawn mark in the tool and a real one in the readme stay identical exactly until either changes, and the one that ends up on a console is the one nobody is looking at. One asset, one place.

What is lost is real and worth naming: a committed binary cannot be reviewed in a diff, which was D060's argument for drawing it. Two things make that an acceptable trade rather than a quiet regression. The SVG is reviewable - it is text, and it is the source of truth, so a change to the mark shows up as a readable diff. And the PNG is regenerated from it by a recipe written down out of band with any SVG rasteriser and committed. Its viewBox crops to the artwork and its corner radius matches the mask a console lays over every home-screen icon, so both live in the SVG rather than in a build step.

Two tests stand in for the review the diff no longer gives: the embedded bytes start with the PNG signature, and IHDR still says 512×512. Both exist because the raster is produced by a step outside cargo, and a truncated or wrongly-sized asset would otherwise reach a package and surface as a tile that will not draw.

A rasteriser is not being added to this repository. Nothing here rasterises SVG, a formats library is the wrong home for one, and the cost of the alternative is one 3 KB file and a documented command. The recipe records the trap that cost the first attempt: a file:// fetch of an SVG is blocked by CORS, and the rasteriser writes a well-formed blank PNG that is about the same size as the real one, so "it produced a file" is not evidence it worked.