ci(plugin): gate that an animated panel declares a reduced-motion guard - #34
Merged
Conversation
DESIGN.md lists `prefers-reduced-motion` in the Mandatory row for plugin surfaces. In 2026-08 all five shipped plugin UIs violated it — five for five, including panels running an infinite spinner and a 3s keyframe. That is not five independent mistakes. Nothing was checking, so the rule lived only in prose, and prose does not fail a build. The check is deliberately coarse. It asks whether a repo that declares motion declares a guard anywhere under src/, not whether the guard covers every animated element. Per-file would be stricter and wrong: a panel legitimately guards motion it does not own — vendored spinners and toggles — from its own stylesheet, and a per-file rule would demand edits to vendored files that carry "do not redesign" headers. A pass means the floor is not zero; it does not mean coverage. Controls, both directions: every plugin repo passes at HEAD, and every one of the same five fails at HEAD~1 — the commit before its design pass. A gate measured in only one direction cannot be told apart from a gate that checks nothing.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
DESIGN.md lists
prefers-reduced-motionin the Mandatory row for pluginsurfaces. In 2026-08 all five shipped plugin UIs violated it — five for
five, including panels running an infinite spinner and a 3s keyframe.
That is not five independent mistakes. Nothing was checking, so the rule
lived only in prose, and prose does not fail a build.
The check is deliberately coarse. It asks whether a repo that declares
motion declares a guard anywhere under src/, not whether the guard covers
every animated element. Per-file would be stricter and wrong: a panel
legitimately guards motion it does not own — vendored spinners and
toggles — from its own stylesheet, and a per-file rule would demand edits
to vendored files that carry "do not redesign" headers. A pass means the
floor is not zero; it does not mean coverage.
Controls, both directions: every plugin repo passes at HEAD, and every
one of the same five fails at HEAD~1 — the commit before its design pass.
A gate measured in only one direction cannot be told apart from a gate
that checks nothing.