Archive sprite-referencing SVG instead of skipping it
The harvester was refusing every inline SVG that drew its shape from a
`<use>` reference to a sprite symbol, on the grounds that the element's own
markup paints nothing. That was 4,169 of the 14,770 named controls a real
harvest found, 28 percent, and it was not a neutral loss: a site with a
well-built icon sprite is usually a site that labels its icons, so the
exclusion skewed the corpus toward worse alt text.
harvest.mjs now assembles a standalone SVG document for every inline SVG:
the element's own markup, the referenced symbols copied into a `<defs>`
block, the namespace declared, and the symbol's `viewBox` borrowed when the
element had none. It goes in a new field, `image_svg`, and fetch-images.mjs
writes it out byte for byte instead of re-deriving anything from
`element_html`. Only a sprite in another file is still out of scope, because
that needs a request for bytes the page never carried.
`element_html` is untouched and still a character-exact slice; a self-test
asserts that the assembled graphic is not one. The pool files are now
gitignored: 20 MB of regenerable JSON Lines.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>