vellum 0.6.5
Two accessibility fixes, both found while wiring vellumplot's accessibility pass.
vl_lint()'s contrast rule no longer cries wolf
It sampled the backdrop at four points just outside a label's box and took the worst of them. So any label whose 2 px probe happened to graze a nearby tick, gridline or axis rule read as roughly 1:1 contrast — which meant dark axis text on a white panel was flagged on essentially every plot.
It now takes the second-worst of the four sides. Incidental adjacent ink on one side is ignored, while a label genuinely sitting on a low-contrast field (all four sides) or straddling a dark region (two sides) is still caught.
A linter that fires on every plot is a linter people switch off, so this is the difference between the rule being useful and being noise.
Gridlines are decorative in tagged PDF
A node with role = "grid" — the role a downstream sets so an interactive SVG host can find and hide the gridlines — was becoming a bogus Figure in the PDF structure tree. It now joins "presentation", "none" and "decorative" as a PDF artifact, skipped by assistive technology.
The SVG role is unchanged, so any host selector relying on it still works. This matters for the same reason the artifact handling did in 0.6.0: a screen reader announcing every gridline is worse than one announcing none.
Note
Third release running whose bug came from using the engine from vellumplot rather than testing it in isolation. The accessibility arc in particular only shows its rough edges when the four pieces — CVD simulation, linting, hatching, tagged PDF — are wired up together on a real figure.