-
Notifications
You must be signed in to change notification settings - Fork 51
chore: create dedicated Claude and Codex skills, remove shared skill #1409
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
3d94163
Initial plan
Copilot e066b8f
feat: create dedicated Claude and Codex skills, remove shared skill
Copilot 9abc1b3
Update .codex/skills/a11y-audit/SKILL.md
tyler-dane 1d77519
fix(cursorrules): update accessibility.md to reference only codex skill
Copilot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,7 +1,139 @@ | ||
| --- | ||
| name: codex-a11y-audit | ||
| description: Use when reviewing UI diffs, accessibility audits, or flaky UI tests to catch a11y regressions, semantic issues, keyboard/focus problems, and to recommend minimal fixes plus role-based test selectors. | ||
| version: 1.0.0 | ||
| tags: | ||
| - accessibility | ||
| - ui | ||
| - testing | ||
| --- | ||
|
|
||
| This skill is shared. Read the canonical skill at: | ||
| ../../../skills/a11y-audit/SKILL.md | ||
| # Accessibility Change Audit | ||
|
|
||
| Brief purpose: review UI changes for accessibility regressions and missing improvements, then propose minimal fixes tied to the diff. | ||
|
|
||
| ## Overview | ||
|
|
||
| This skill audits UI diffs for semantics, keyboard access, focus management, ARIA correctness, contrast, and testability. It is diff-first: only evaluate changed lines and their immediate context. | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| - A diff, PR, or change list that includes relevant UI files. | ||
| - Optional: a screenshot or description of the changed UI state. | ||
|
|
||
| ## Instructions | ||
|
|
||
| ### Step 1: Scope the audit to the diff | ||
|
|
||
| Identify changed UI elements, interactions, and styles. Ignore unrelated files. | ||
|
|
||
| ### Step 2: Run the diff-first checklist | ||
|
|
||
| Focus on changes that alter semantics, interaction, or visual affordances. | ||
|
|
||
| ### Step 3: Produce findings and minimal fixes | ||
|
|
||
| Tie each issue to a specific change and propose the smallest reasonable fix. | ||
|
|
||
| ### Step 4: Improve test reliability | ||
|
|
||
| Recommend role- and name-based queries for tests instead of data or class selectors. | ||
|
|
||
| ## Audit Checklist (Diff-First) | ||
|
|
||
| Semantics and structure | ||
|
|
||
| - Headings follow order and are not skipped. | ||
| - Interactive elements are buttons/links, not divs/spans. | ||
| - Landmarks are present for new regions (main, nav, header, footer, aside). | ||
| - Lists and tables use correct elements (ul/ol/li, th/thead/tbody). | ||
|
|
||
| Labels and names | ||
|
|
||
| - Inputs have labels or aria-label/aria-labelledby. | ||
| - Icon-only controls have accessible names. | ||
| - Helper text ties to inputs via aria-describedby. | ||
|
|
||
| Keyboard and focus | ||
|
|
||
| - All interactive elements are keyboard reachable and operable. | ||
| - Focus order follows DOM order (avoid tabIndex > 0). | ||
| - Dialogs/menus trap focus and return focus to trigger. | ||
|
|
||
| ARIA correctness | ||
|
|
||
| - ARIA only when native semantics are insufficient. | ||
| - aria-expanded/controls/pressed reflect actual state. | ||
| - role is correct and not redundant. | ||
|
|
||
| Visual and motion | ||
|
|
||
| - Text and focus indicators meet contrast requirements. | ||
| - Color is not the only indicator. | ||
| - Motion respects reduced-motion preferences. | ||
|
|
||
| Media and imagery | ||
|
|
||
| - Images have meaningful alt or empty alt for decorative. | ||
| - Media controls are accessible and labeled. | ||
|
|
||
| Testing reliability | ||
|
|
||
| - New elements can be found by role and accessible name. | ||
| - Interaction tests use user flows and semantic queries. | ||
|
|
||
| ## Minimal Fix Patterns | ||
|
|
||
| 1. Icon-only button | ||
|
|
||
| - Add visible text or aria-label. | ||
|
|
||
| 2. Clickable non-button | ||
|
|
||
| - Convert to <button> or add role="button", tabIndex=0, and Enter/Space handling. | ||
|
|
||
| 3. Form label | ||
|
|
||
| - Add <label htmlFor> or aria-labelledby and connect helper text with aria-describedby. | ||
|
|
||
| 4. Disclosure | ||
|
|
||
| - Toggle uses aria-expanded and aria-controls; update on state change. | ||
|
|
||
| 5. Dialog | ||
|
|
||
| - Use role="dialog", aria-modal, label by heading, and return focus on close. | ||
|
|
||
| ## Output Format | ||
|
|
||
| Findings (ordered by severity): | ||
|
|
||
| - [severity] path:line - problem and impact | ||
| Fix: minimal change suggestion | ||
|
|
||
| Tests: | ||
|
|
||
| - Recommend updates that use role/name queries and user-driven events. | ||
|
|
||
| UX/Speed Note: | ||
|
|
||
| - Call out any change that impacts perceived speed (layout shifts, heavy DOM, over-rendering). | ||
|
|
||
| Severity scale: blocker, high, medium, low. | ||
|
|
||
| ## Example Review Output | ||
|
|
||
| Findings: | ||
|
|
||
| - high `packages/web/src/views/Example.tsx:42` - Clickable div lacks keyboard support; keyboard users cannot activate it. | ||
| Fix: convert to <button type="button"> or add role, tabIndex, and Enter/Space handlers. | ||
| - medium `packages/web/src/views/Example.tsx:60` - Icon-only control has no accessible name. | ||
| Fix: add aria-label="Add event". | ||
|
|
||
| Tests: | ||
|
|
||
| - Add a role-based query: getByRole("button", { name: /add event/i }). | ||
|
|
||
| UX/Speed Note: | ||
|
|
||
| - No layout shift detected; DOM complexity unchanged. |
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
Oops, something went wrong.
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.
Uh oh!
There was an error while loading. Please reload this page.