devflow-kit 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/CHANGELOG.md +69 -1
  2. package/README.md +23 -6
  3. package/dist/cli.js +2 -0
  4. package/dist/commands/ambient.js +5 -4
  5. package/dist/commands/init.js +4 -2
  6. package/dist/commands/memory.js +4 -4
  7. package/dist/commands/skills.d.ts +11 -0
  8. package/dist/commands/skills.js +116 -0
  9. package/dist/commands/uninstall.js +11 -1
  10. package/dist/plugins.js +67 -3
  11. package/dist/utils/installer.js +20 -2
  12. package/package.json +4 -2
  13. package/plugins/devflow-accessibility/.claude-plugin/plugin.json +22 -0
  14. package/plugins/devflow-ambient/.claude-plugin/plugin.json +4 -2
  15. package/plugins/devflow-ambient/README.md +8 -8
  16. package/plugins/devflow-ambient/commands/ambient.md +14 -14
  17. package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +16 -9
  18. package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +6 -2
  19. package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +1 -1
  20. package/plugins/devflow-code-review/.claude-plugin/plugin.json +13 -6
  21. package/plugins/devflow-code-review/agents/reviewer.md +8 -0
  22. package/plugins/devflow-code-review/commands/code-review-teams.md +11 -1
  23. package/plugins/devflow-code-review/commands/code-review.md +12 -2
  24. package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +1 -1
  25. package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +1 -1
  26. package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +1 -1
  27. package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +1 -1
  28. package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +1 -1
  29. package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +1 -1
  30. package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +1 -1
  31. package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +1 -1
  32. package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +1 -1
  33. package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +1 -1
  34. package/plugins/devflow-core-skills/.claude-plugin/plugin.json +10 -7
  35. package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +5 -8
  36. package/plugins/devflow-debug/.claude-plugin/plugin.json +10 -3
  37. package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +22 -0
  38. package/plugins/devflow-go/.claude-plugin/plugin.json +22 -0
  39. package/plugins/devflow-go/skills/go/SKILL.md +187 -0
  40. package/plugins/devflow-go/skills/go/references/concurrency.md +312 -0
  41. package/plugins/devflow-go/skills/go/references/detection.md +129 -0
  42. package/plugins/devflow-go/skills/go/references/patterns.md +232 -0
  43. package/plugins/devflow-go/skills/go/references/violations.md +205 -0
  44. package/plugins/devflow-implement/.claude-plugin/plugin.json +19 -5
  45. package/plugins/devflow-implement/agents/coder.md +11 -6
  46. package/plugins/devflow-implement/skills/self-review/SKILL.md +1 -1
  47. package/plugins/devflow-java/.claude-plugin/plugin.json +22 -0
  48. package/plugins/devflow-java/skills/java/SKILL.md +183 -0
  49. package/plugins/devflow-java/skills/java/references/detection.md +120 -0
  50. package/plugins/devflow-java/skills/java/references/modern-java.md +270 -0
  51. package/plugins/devflow-java/skills/java/references/patterns.md +235 -0
  52. package/plugins/devflow-java/skills/java/references/violations.md +213 -0
  53. package/plugins/devflow-python/.claude-plugin/plugin.json +22 -0
  54. package/plugins/devflow-python/skills/python/SKILL.md +188 -0
  55. package/plugins/devflow-python/skills/python/references/async.md +220 -0
  56. package/plugins/devflow-python/skills/python/references/detection.md +128 -0
  57. package/plugins/devflow-python/skills/python/references/patterns.md +226 -0
  58. package/plugins/devflow-python/skills/python/references/violations.md +204 -0
  59. package/plugins/devflow-react/.claude-plugin/plugin.json +22 -0
  60. package/plugins/{devflow-core-skills → devflow-react}/skills/react/SKILL.md +1 -1
  61. package/plugins/{devflow-core-skills → devflow-react}/skills/react/references/patterns.md +3 -3
  62. package/plugins/devflow-resolve/.claude-plugin/plugin.json +13 -3
  63. package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +1 -1
  64. package/plugins/devflow-rust/.claude-plugin/plugin.json +22 -0
  65. package/plugins/devflow-rust/skills/rust/SKILL.md +193 -0
  66. package/plugins/devflow-rust/skills/rust/references/detection.md +131 -0
  67. package/plugins/devflow-rust/skills/rust/references/ownership.md +242 -0
  68. package/plugins/devflow-rust/skills/rust/references/patterns.md +210 -0
  69. package/plugins/devflow-rust/skills/rust/references/violations.md +191 -0
  70. package/plugins/devflow-self-review/.claude-plugin/plugin.json +10 -3
  71. package/plugins/devflow-self-review/skills/self-review/SKILL.md +1 -1
  72. package/plugins/devflow-specify/.claude-plugin/plugin.json +15 -4
  73. package/plugins/devflow-typescript/.claude-plugin/plugin.json +22 -0
  74. package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/references/patterns.md +3 -3
  75. package/scripts/hooks/{ambient-prompt.sh → ambient-prompt} +4 -4
  76. package/scripts/hooks/{background-memory-update.sh → background-memory-update} +3 -3
  77. package/scripts/hooks/{ensure-memory-gitignore.sh → ensure-memory-gitignore} +1 -1
  78. package/scripts/hooks/{pre-compact-memory.sh → pre-compact-memory} +2 -2
  79. package/scripts/hooks/run-hook +23 -0
  80. package/scripts/hooks/session-start-memory +151 -0
  81. package/scripts/hooks/{stop-update-memory.sh → stop-update-memory} +4 -4
  82. package/shared/agents/coder.md +11 -6
  83. package/shared/agents/reviewer.md +8 -0
  84. package/shared/skills/ambient-router/SKILL.md +16 -9
  85. package/shared/skills/ambient-router/references/skill-catalog.md +6 -2
  86. package/shared/skills/architecture-patterns/SKILL.md +1 -1
  87. package/shared/skills/complexity-patterns/SKILL.md +1 -1
  88. package/shared/skills/consistency-patterns/SKILL.md +1 -1
  89. package/shared/skills/database-patterns/SKILL.md +1 -1
  90. package/shared/skills/dependencies-patterns/SKILL.md +1 -1
  91. package/shared/skills/documentation-patterns/SKILL.md +1 -1
  92. package/shared/skills/go/SKILL.md +187 -0
  93. package/shared/skills/go/references/concurrency.md +312 -0
  94. package/shared/skills/go/references/detection.md +129 -0
  95. package/shared/skills/go/references/patterns.md +232 -0
  96. package/shared/skills/go/references/violations.md +205 -0
  97. package/shared/skills/java/SKILL.md +183 -0
  98. package/shared/skills/java/references/detection.md +120 -0
  99. package/shared/skills/java/references/modern-java.md +270 -0
  100. package/shared/skills/java/references/patterns.md +235 -0
  101. package/shared/skills/java/references/violations.md +213 -0
  102. package/shared/skills/performance-patterns/SKILL.md +1 -1
  103. package/shared/skills/python/SKILL.md +188 -0
  104. package/shared/skills/python/references/async.md +220 -0
  105. package/shared/skills/python/references/detection.md +128 -0
  106. package/shared/skills/python/references/patterns.md +226 -0
  107. package/shared/skills/python/references/violations.md +204 -0
  108. package/shared/skills/react/SKILL.md +1 -1
  109. package/shared/skills/react/references/patterns.md +3 -3
  110. package/shared/skills/regression-patterns/SKILL.md +1 -1
  111. package/shared/skills/review-methodology/SKILL.md +1 -1
  112. package/shared/skills/rust/SKILL.md +193 -0
  113. package/shared/skills/rust/references/detection.md +131 -0
  114. package/shared/skills/rust/references/ownership.md +242 -0
  115. package/shared/skills/rust/references/patterns.md +210 -0
  116. package/shared/skills/rust/references/violations.md +191 -0
  117. package/shared/skills/security-patterns/SKILL.md +1 -1
  118. package/shared/skills/self-review/SKILL.md +1 -1
  119. package/shared/skills/test-driven-development/SKILL.md +5 -8
  120. package/shared/skills/typescript/references/patterns.md +3 -3
  121. package/src/templates/settings.json +3 -3
  122. package/plugins/devflow-code-review/skills/react/SKILL.md +0 -276
  123. package/plugins/devflow-code-review/skills/react/references/patterns.md +0 -1331
  124. package/plugins/devflow-core-skills/skills/accessibility/SKILL.md +0 -229
  125. package/plugins/devflow-core-skills/skills/accessibility/references/detection.md +0 -171
  126. package/plugins/devflow-core-skills/skills/accessibility/references/patterns.md +0 -670
  127. package/plugins/devflow-core-skills/skills/accessibility/references/violations.md +0 -419
  128. package/plugins/devflow-core-skills/skills/frontend-design/SKILL.md +0 -254
  129. package/plugins/devflow-core-skills/skills/frontend-design/references/detection.md +0 -184
  130. package/plugins/devflow-core-skills/skills/frontend-design/references/patterns.md +0 -511
  131. package/plugins/devflow-core-skills/skills/frontend-design/references/violations.md +0 -453
  132. package/plugins/devflow-core-skills/skills/react/references/violations.md +0 -565
  133. package/plugins/devflow-implement/skills/accessibility/SKILL.md +0 -229
  134. package/plugins/devflow-implement/skills/accessibility/references/detection.md +0 -171
  135. package/plugins/devflow-implement/skills/accessibility/references/patterns.md +0 -670
  136. package/plugins/devflow-implement/skills/accessibility/references/violations.md +0 -419
  137. package/plugins/devflow-implement/skills/frontend-design/SKILL.md +0 -254
  138. package/plugins/devflow-implement/skills/frontend-design/references/detection.md +0 -184
  139. package/plugins/devflow-implement/skills/frontend-design/references/patterns.md +0 -511
  140. package/plugins/devflow-implement/skills/frontend-design/references/violations.md +0 -453
  141. package/scripts/hooks/session-start-memory.sh +0 -126
  142. /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/SKILL.md +0 -0
  143. /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/detection.md +0 -0
  144. /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/patterns.md +0 -0
  145. /package/plugins/{devflow-code-review → devflow-accessibility}/skills/accessibility/references/violations.md +0 -0
  146. /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/SKILL.md +0 -0
  147. /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/detection.md +0 -0
  148. /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/patterns.md +0 -0
  149. /package/plugins/{devflow-code-review → devflow-frontend-design}/skills/frontend-design/references/violations.md +0 -0
  150. /package/plugins/{devflow-code-review → devflow-react}/skills/react/references/violations.md +0 -0
  151. /package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/SKILL.md +0 -0
  152. /package/plugins/{devflow-core-skills → devflow-typescript}/skills/typescript/references/violations.md +0 -0
@@ -1,229 +0,0 @@
1
- ---
2
- name: accessibility
3
- description: This skill should be used when the user asks to "add accessibility", "check ARIA", "handle keyboard navigation", "add focus management", or creates UI components, forms, or interactive elements. Provides WCAG 2.1 AA patterns for keyboard navigation, ARIA roles and states, focus management, color contrast, and screen reader support.
4
- user-invocable: false
5
- allowed-tools: Read, Grep, Glob
6
- activation:
7
- file-patterns:
8
- - "**/*.tsx"
9
- - "**/*.jsx"
10
- - "**/*.css"
11
- - "**/*.scss"
12
- exclude:
13
- - "node_modules/**"
14
- - "**/*.test.*"
15
- - "**/*.spec.*"
16
- ---
17
-
18
- # Accessibility Patterns
19
-
20
- Reference for web accessibility (WCAG 2.1 AA compliance), keyboard navigation, screen reader support, and inclusive design.
21
-
22
- ## Iron Law
23
-
24
- > **EVERY INTERACTION MUST BE POSSIBLE WITHOUT A MOUSE**
25
- >
26
- > If a user cannot complete an action using only keyboard, the feature is broken.
27
- > Mouse-only interactions exclude users with motor disabilities, power users,
28
- > and anyone navigating with assistive technology. Tab order, focus management,
29
- > and keyboard shortcuts are not optional enhancements.
30
-
31
- ## When This Skill Activates
32
-
33
- - Creating interactive UI components
34
- - Building forms and inputs
35
- - Working with React/JSX code
36
- - Discussing focus, ARIA, or screen readers
37
- - Reviewing color schemes or contrast
38
-
39
- ---
40
-
41
- ## Keyboard Navigation
42
-
43
- ### Focus Management
44
-
45
- ```tsx
46
- // CORRECT: Focus trap in modal
47
- function Modal({ isOpen, onClose, children }) {
48
- const firstFocusable = useRef<HTMLButtonElement>(null);
49
-
50
- useEffect(() => {
51
- if (isOpen) firstFocusable.current?.focus();
52
- }, [isOpen]);
53
-
54
- return (
55
- <div role="dialog" aria-modal="true" onKeyDown={(e) => {
56
- if (e.key === 'Escape') onClose();
57
- }}>
58
- <button ref={firstFocusable}>First action</button>
59
- {children}
60
- </div>
61
- );
62
- }
63
-
64
- // VIOLATION: No focus management, no escape handler
65
- function BadModal({ children }) {
66
- return <div className="modal">{children}</div>;
67
- }
68
- ```
69
-
70
- ### Skip Links
71
-
72
- ```tsx
73
- // CORRECT: Skip to main content
74
- <a href="#main-content" className="sr-only focus:not-sr-only">
75
- Skip to main content
76
- </a>
77
- <main id="main-content" tabIndex={-1}>...</main>
78
- ```
79
-
80
- ---
81
-
82
- ## ARIA and Semantic HTML
83
-
84
- ### Prefer Semantic Elements
85
-
86
- ```tsx
87
- // CORRECT: Native semantics
88
- <button onClick={handleClick}>Submit</button>
89
- <nav aria-label="Main"><ul>...</ul></nav>
90
- <article><header>...</header></article>
91
-
92
- // VIOLATION: Div with role instead of semantic element
93
- <div role="button" onClick={handleClick}>Submit</div>
94
- <div role="navigation">...</div>
95
- ```
96
-
97
- ### Live Regions
98
-
99
- ```tsx
100
- // CORRECT: Announce dynamic changes
101
- <div aria-live="polite" aria-atomic="true">
102
- {message && <p>{message}</p>}
103
- </div>
104
-
105
- // For errors (assertive)
106
- <div role="alert">{errorMessage}</div>
107
- ```
108
-
109
- ---
110
-
111
- ## Color and Contrast
112
-
113
- | Element | Minimum Ratio | WCAG Level |
114
- |---------|--------------|------------|
115
- | Normal text (<18px) | 4.5:1 | AA |
116
- | Large text (>=18px bold, >=24px) | 3:1 | AA |
117
- | UI components | 3:1 | AA |
118
- | Enhanced | 7:1 | AAA |
119
-
120
- ### Never Color-Only Meaning
121
-
122
- ```tsx
123
- // VIOLATION: Only color indicates error
124
- <input style={{ borderColor: hasError ? 'red' : 'gray' }} />
125
-
126
- // CORRECT: Icon + text + color
127
- <input aria-invalid={hasError} aria-describedby="error-msg" />
128
- {hasError && <span id="error-msg" role="alert">Required field</span>}
129
- ```
130
-
131
- ---
132
-
133
- ## Motion and Animation
134
-
135
- ```tsx
136
- // CORRECT: Respect user preferences
137
- const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
138
-
139
- <div className={prefersReduced ? 'no-animation' : 'animate-fade'}>
140
- Content
141
- </div>
142
-
143
- // CSS approach
144
- @media (prefers-reduced-motion: reduce) {
145
- *, *::before, *::after {
146
- animation-duration: 0.01ms !important;
147
- transition-duration: 0.01ms !important;
148
- }
149
- }
150
- ```
151
-
152
- ---
153
-
154
- ## Touch and Pointer
155
-
156
- ### Minimum Target Size
157
-
158
- ```css
159
- /* CORRECT: 44x44px minimum touch target */
160
- .button {
161
- min-width: 44px;
162
- min-height: 44px;
163
- padding: 12px 16px;
164
- }
165
-
166
- /* VIOLATION: Tiny tap targets */
167
- .icon-button {
168
- width: 20px;
169
- height: 20px;
170
- }
171
- ```
172
-
173
- ---
174
-
175
- ## Forms and Errors
176
-
177
- ```tsx
178
- // CORRECT: Associated labels and error linking
179
- <div>
180
- <label htmlFor="email">Email</label>
181
- <input
182
- id="email"
183
- type="email"
184
- aria-invalid={!!error}
185
- aria-describedby={error ? 'email-error' : undefined}
186
- />
187
- {error && <span id="email-error" role="alert">{error}</span>}
188
- </div>
189
-
190
- // VIOLATION: Placeholder as label
191
- <input placeholder="Enter email" />
192
- ```
193
-
194
- ---
195
-
196
- ## Extended References
197
-
198
- For additional patterns and detection rules:
199
- - `references/violations.md` - Extended accessibility violations
200
- - `references/patterns.md` - Extended correct patterns
201
- - `references/detection.md` - Grep patterns for finding issues
202
-
203
- ---
204
-
205
- ## Severity Guidelines
206
-
207
- | Severity | Criteria |
208
- |----------|----------|
209
- | CRITICAL | No keyboard access, missing form labels, zero contrast |
210
- | HIGH | Missing focus indicators, no skip links, color-only meaning |
211
- | MEDIUM | Missing ARIA labels, poor focus order, small touch targets |
212
- | LOW | Missing optional enhancements, could improve announcements |
213
-
214
- ---
215
-
216
- ## Checklist
217
-
218
- - [ ] All interactive elements reachable via Tab
219
- - [ ] Visible focus indicators on all focusable elements
220
- - [ ] Escape closes modals/dropdowns
221
- - [ ] Skip link to main content
222
- - [ ] All form inputs have associated labels
223
- - [ ] Errors linked via aria-describedby
224
- - [ ] Color contrast meets 4.5:1 (text) / 3:1 (UI)
225
- - [ ] No color-only meaning
226
- - [ ] prefers-reduced-motion respected
227
- - [ ] Touch targets minimum 44x44px
228
- - [ ] aria-live for dynamic content
229
- - [ ] Semantic HTML preferred over ARIA roles
@@ -1,171 +0,0 @@
1
- # Accessibility Detection Patterns
2
-
3
- Grep and regex patterns for detecting accessibility issues. Use with `Grep` tool.
4
-
5
- ## Keyboard Access Issues
6
-
7
- ```bash
8
- # onClick without keyboard handler
9
- rg 'onClick=\{[^}]+\}' --type tsx | rg -v 'onKeyDown|onKeyPress|onKeyUp|<button|<a '
10
-
11
- # Non-focusable interactive elements
12
- rg '<(div|span)\s+[^>]*onClick' --type tsx
13
-
14
- # tabIndex with positive values (breaks natural order)
15
- rg 'tabIndex=\{?[1-9]' --type tsx
16
-
17
- # Drag-only interactions
18
- rg 'onDrag(Start|End|Over)' --type tsx | rg -v 'onKey'
19
- ```
20
-
21
- ## Missing Labels
22
-
23
- ```bash
24
- # Input without id (likely missing label association)
25
- rg '<input[^>]*>' --type tsx | rg -v 'id='
26
-
27
- # Button with only icon (no text or aria-label)
28
- rg '<button[^>]*>\s*<[A-Z][a-zA-Z]*Icon' --type tsx | rg -v 'aria-label'
29
-
30
- # Image without alt
31
- rg '<img[^>]*>' --type tsx | rg -v 'alt='
32
-
33
- # Links without text content
34
- rg '<a[^>]*>\s*<(img|[A-Z])' --type tsx | rg -v 'aria-label'
35
- ```
36
-
37
- ## ARIA Misuse
38
-
39
- ```bash
40
- # Redundant role on semantic elements
41
- rg '<button[^>]*role="button"' --type tsx
42
- rg '<nav[^>]*role="navigation"' --type tsx
43
- rg '<a[^>]*role="link"' --type tsx
44
-
45
- # aria-hidden on focusable elements
46
- rg 'aria-hidden="true"[^>]*(tabIndex|onClick|href)' --type tsx
47
-
48
- # Missing required ARIA attributes
49
- rg 'role="slider"' --type tsx | rg -v 'aria-value(now|min|max)'
50
- rg 'role="checkbox"' --type tsx | rg -v 'aria-checked'
51
- rg 'role="tab"' --type tsx | rg -v 'aria-selected'
52
- ```
53
-
54
- ## Focus Management Issues
55
-
56
- ```bash
57
- # Focus removal (outline: none without replacement)
58
- rg 'outline:\s*none' --type css --type scss | rg -v 'focus-visible|focus-ring'
59
-
60
- # Dialogs without role or aria-modal
61
- rg 'modal|dialog' --type tsx -i | rg -v 'role="dialog"|aria-modal'
62
-
63
- # Missing escape key handler in modals
64
- rg '(Modal|Dialog|Popup)' --type tsx | rg -v 'Escape|onKeyDown'
65
- ```
66
-
67
- ## Color and Contrast
68
-
69
- ```bash
70
- # Light gray text (potential contrast issue)
71
- rg 'color:\s*#[a-fA-F0-9]{3,6}' --type css | rg -i '(#[cdef]{3}|#[cdef]{6})'
72
-
73
- # Color-only indicators
74
- rg 'color.*error|color.*success|color.*warning' --type css -i
75
-
76
- # Placeholder as only label indicator
77
- rg '<input[^>]*placeholder=' --type tsx | rg -v '<label|aria-label'
78
- ```
79
-
80
- ## Form Issues
81
-
82
- ```bash
83
- # Missing error association
84
- rg 'aria-invalid' --type tsx | rg -v 'aria-describedby'
85
-
86
- # Form without noValidate (may conflict with custom validation)
87
- rg '<form[^>]*>' --type tsx | rg 'onSubmit' | rg -v 'noValidate'
88
-
89
- # Submit button without type
90
- rg '<button[^>]*>Submit' --type tsx | rg -v 'type="submit"'
91
- ```
92
-
93
- ## Motion Issues
94
-
95
- ```bash
96
- # Animation without reduced motion check
97
- rg 'animation(-duration)?:' --type css | rg -v 'prefers-reduced-motion'
98
-
99
- # Transition without reduced motion check
100
- rg 'transition(-duration)?:' --type css | rg -v 'prefers-reduced-motion'
101
-
102
- # Autoplay video/audio
103
- rg '<(video|audio)[^>]*autoPlay' --type tsx
104
-
105
- # Infinite animation loops
106
- rg 'animation:.*infinite' --type css
107
- ```
108
-
109
- ## Touch Target Issues
110
-
111
- ```bash
112
- # Small fixed dimensions
113
- rg '(width|height):\s*(1[0-9]|2[0-9]|3[0-9])px' --type css
114
-
115
- # Icon buttons without adequate sizing
116
- rg '\.icon(-btn|Button)' --type css -A5 | rg '(width|height)'
117
- ```
118
-
119
- ## Screen Reader Issues
120
-
121
- ```bash
122
- # Generic link text
123
- rg '>click here<|>here<|>read more<|>learn more<' --type tsx -i
124
-
125
- # aria-label duplicating visible text
126
- rg 'aria-label="([^"]+)"[^>]*>\1<' --type tsx
127
-
128
- # Missing landmark regions
129
- rg '<div[^>]*class="(header|footer|nav|sidebar|main)"' --type tsx | rg -v 'role='
130
- ```
131
-
132
- ## Live Region Issues
133
-
134
- ```bash
135
- # Dynamic content without aria-live
136
- rg '(loading|spinner|toast|notification|alert)' --type tsx -i | rg -v 'aria-live|role="alert"|role="status"'
137
-
138
- # Missing aria-atomic on live regions
139
- rg 'aria-live=' --type tsx | rg -v 'aria-atomic'
140
- ```
141
-
142
- ## Semantic HTML Issues
143
-
144
- ```bash
145
- # Div/span used instead of semantic elements
146
- rg '<div[^>]*role="(button|link|navigation|main|banner|contentinfo)"' --type tsx
147
- rg '<span[^>]*role="(button|link)"' --type tsx
148
-
149
- # Heading level skips (partial detection)
150
- rg '<h[1-6]' --type tsx
151
-
152
- # List items outside lists
153
- rg '<li[^>]*>' --type tsx | rg -v '<ul|<ol'
154
- ```
155
-
156
- ## Testing Commands
157
-
158
- ```bash
159
- # Full accessibility audit on changed files
160
- git diff --name-only HEAD~1 | xargs -I{} rg -l 'onClick|<input|<button|<a ' {} 2>/dev/null
161
-
162
- # Count potential issues by category
163
- echo "=== Potential Keyboard Issues ==="
164
- rg '<(div|span)\s+[^>]*onClick' --type tsx -c
165
-
166
- echo "=== Potential Label Issues ==="
167
- rg '<input[^>]*>' --type tsx | rg -v 'id=' | wc -l
168
-
169
- echo "=== Potential ARIA Issues ==="
170
- rg '<button[^>]*role="button"' --type tsx -c
171
- ```