Files
pixa/TODO.md
T
clawbot efbf05a6fa
check / check (push) Canceled after 0s
Support SVG sources (closes #68)
The fetcher accepts image/svg+xml and internal/magic detects SVG. orig
of an SVG at the orig size is the SVG unchanged, cached as a variant; at
another size it is ErrSVGNotOriginalSize (400). Any other format renders
it with libvips' thumbnail at the least size covering the output, at
most 8192 on a side, so it stays sharp. An SVG's own size is not
limited; one with a side over 8192 times the other is ErrSVGTooThin
(415). The cache reads up to 1024 first bytes to find a file's format.
Tests that pinned the SVG refusal now expect SVG to be read. Render time
and memory are unbounded: P1 in TODO.md until the owner decides on
#68.

Model: opus-5-5
2026-11-11 13:21:12 +00:00

1.5 KiB

Workflow

  • branch per issue from next
  • do the work in Next Step
  • delete Next Step from TODO.md
  • TODO.md merges with git's union merge (.gitattributes), which never reports a conflict: read the merged entries after every merge or rebase
  • move the top item of Future Steps into Next Step
  • commit (TODO.md changes in the same commit as the work)
  • open a PR based on next
  • an independent reviewer who did not write the change gates it
  • the manager squash-merges the PR into next once review passes
  • next stays green and mergeable to main at any time; only the owner merges next into main, via the single milestone PR
  • push

Status

pre-1.0. The 1.0.0 milestone is in progress.

Next Step

P1: security: bound the time and memory of rendering an SVG source. Both grow with what the SVG draws, such as filter effects. govips cannot stop or limit a render. The bound is the owner's decision on #68.

Future Steps

  • P2: security
    • per-origin rate limiting
  • P2: HTTP response handling
    • Last-Modified headers
  • P2: operational
    • Prometheus metrics still missing:
      • cache hits and misses, split into source images and variants
      • cache size on disk and its limit
      • evictions and the bytes they free
      • upstream fetch duration and errors
      • transcode duration
      • images in processing
    • measure the 1k to 5k req/s target with script/loadtest on a machine not shared with other work