Accessibility, and the difference between a claim and a measurement
We have just finished a run of accessibility work — an audit, forty-three raw findings, and three new settings. This post is partly about what changed, and partly about being straight regarding what a fix is worth.
The three settings
Settings now has an Accessibility section with three toggles. Each is tri-state: Follow system, On, Off.
- Higher contrast — raises border and text contrast beyond the default.
- Reduce motion — removes animation and transition.
- Distinguish by shape — stops colour being the only thing carrying a meaning, so a state that is currently a colour also gets a shape.
"Follow system" is the default for all three, and it means what it says: if your operating system already advertises a preference for reduced motion or increased contrast, we honour it without you telling us twice. The explicit On and Off exist because the system setting is a blunt instrument — plenty of people want reduced motion everywhere except the one spinner that tells them something is still happening.
That spinner is a deliberate exception, incidentally. Reduce motion stops decorative animation; it does not stop the loading indicator, because an indicator that does not move is not an indicator.
What the audit actually found
Some of it was the kind of thing you would expect. Controls named only by a
glyph, so a screen reader announced a button as "button". A merge-request badge
that read out as !42Approved — no space — and never spoke the MR title at all.
A status pill that announced one state while representing eight.
Some of it was subtler and more interesting. A heading structure that was correct on a post's own page and wrong on the index page that embedded it, because the same content was rendering at two different depths. Disabled controls that gave no reason for being disabled, which is worse than it sounds: a control you cannot use and cannot find out why is a dead end rather than a locked door.
All of those are fixed.
The part we are not going to dress up
Two things are worth stating plainly.
"Closed opt-in" is not the same as closed. The higher-contrast setting fixes a contrast problem — for the people who find the setting and turn it on. The shipped default still falls short of the 3:1 ratio in places. That is a decision, not an oversight, and it is one we are still arguing with ourselves about. Anyone auditing GitGumbo tomorrow would find it again, and they would be right to.
Closing every finding in a report is not a conformance claim. We addressed every criterion the audit cited, and the serious ones were closed with measured contrast values in a real browser rather than with reasoning about what the values ought to be. That is a real, checkable statement. "GitGumbo is WCAG AA" is a different statement, it would need a fresh audit of the shipped result to support, and we have not done that one, so we are not making it.
The board themes are where the remaining honest gap is. The retro themes — Index Card and Post-it — draw their cards with their own border colour, and the higher-contrast setting does not currently reach it. Turning the setting on does less than it should on those two. It is on the list.
If you hit something that does not work with your setup, we would genuinely rather hear about it than have you work around it.