musubi-sdd 5.1.0 → 5.6.1

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 (232) hide show
  1. package/README.ja.md +106 -48
  2. package/README.md +110 -32
  3. package/bin/musubi-analyze.js +74 -67
  4. package/bin/musubi-browser.js +27 -26
  5. package/bin/musubi-change.js +48 -47
  6. package/bin/musubi-checkpoint.js +10 -7
  7. package/bin/musubi-convert.js +25 -25
  8. package/bin/musubi-costs.js +27 -10
  9. package/bin/musubi-gui.js +52 -46
  10. package/bin/musubi-init.js +1952 -10
  11. package/bin/musubi-orchestrate.js +327 -239
  12. package/bin/musubi-remember.js +69 -56
  13. package/bin/musubi-resolve.js +53 -45
  14. package/bin/musubi-trace.js +51 -22
  15. package/bin/musubi-validate.js +39 -30
  16. package/bin/musubi-workflow.js +33 -34
  17. package/bin/musubi.js +39 -2
  18. package/package.json +1 -1
  19. package/src/agents/agent-loop.js +94 -95
  20. package/src/agents/agentic/code-generator.js +119 -109
  21. package/src/agents/agentic/code-reviewer.js +105 -108
  22. package/src/agents/agentic/index.js +4 -4
  23. package/src/agents/browser/action-executor.js +13 -13
  24. package/src/agents/browser/ai-comparator.js +11 -10
  25. package/src/agents/browser/context-manager.js +6 -6
  26. package/src/agents/browser/index.js +5 -5
  27. package/src/agents/browser/nl-parser.js +31 -46
  28. package/src/agents/browser/screenshot.js +2 -2
  29. package/src/agents/browser/test-generator.js +6 -4
  30. package/src/agents/function-tool.js +71 -65
  31. package/src/agents/index.js +7 -7
  32. package/src/agents/schema-generator.js +98 -94
  33. package/src/analyzers/ast-extractor.js +158 -146
  34. package/src/analyzers/codegraph-auto-update.js +858 -0
  35. package/src/analyzers/complexity-analyzer.js +536 -0
  36. package/src/analyzers/context-optimizer.js +241 -126
  37. package/src/analyzers/impact-analyzer.js +1 -1
  38. package/src/analyzers/large-project-analyzer.js +766 -0
  39. package/src/analyzers/repository-map.js +77 -81
  40. package/src/analyzers/security-analyzer.js +19 -11
  41. package/src/analyzers/stuck-detector.js +19 -17
  42. package/src/converters/index.js +78 -57
  43. package/src/converters/ir/types.js +12 -12
  44. package/src/converters/parsers/musubi-parser.js +134 -126
  45. package/src/converters/parsers/openapi-parser.js +70 -53
  46. package/src/converters/parsers/speckit-parser.js +239 -175
  47. package/src/converters/writers/musubi-writer.js +123 -118
  48. package/src/converters/writers/speckit-writer.js +124 -113
  49. package/src/generators/rust-migration-generator.js +512 -0
  50. package/src/gui/public/index.html +1365 -1211
  51. package/src/gui/server.js +41 -40
  52. package/src/gui/services/file-watcher.js +23 -8
  53. package/src/gui/services/project-scanner.js +26 -20
  54. package/src/gui/services/replanning-service.js +27 -23
  55. package/src/gui/services/traceability-service.js +8 -8
  56. package/src/gui/services/workflow-service.js +14 -7
  57. package/src/index.js +151 -0
  58. package/src/integrations/cicd.js +90 -104
  59. package/src/integrations/codegraph-mcp.js +643 -0
  60. package/src/integrations/documentation.js +142 -103
  61. package/src/integrations/examples.js +95 -80
  62. package/src/integrations/github-client.js +17 -17
  63. package/src/integrations/index.js +5 -5
  64. package/src/integrations/mcp/index.js +21 -21
  65. package/src/integrations/mcp/mcp-context-provider.js +76 -78
  66. package/src/integrations/mcp/mcp-discovery.js +74 -72
  67. package/src/integrations/mcp/mcp-tool-registry.js +99 -94
  68. package/src/integrations/mcp-connector.js +70 -66
  69. package/src/integrations/platforms.js +50 -49
  70. package/src/integrations/tool-discovery.js +37 -31
  71. package/src/llm-providers/anthropic-provider.js +11 -11
  72. package/src/llm-providers/base-provider.js +16 -18
  73. package/src/llm-providers/copilot-provider.js +22 -19
  74. package/src/llm-providers/index.js +26 -25
  75. package/src/llm-providers/ollama-provider.js +11 -11
  76. package/src/llm-providers/openai-provider.js +12 -12
  77. package/src/managers/agent-memory.js +36 -24
  78. package/src/managers/checkpoint-manager.js +4 -8
  79. package/src/managers/delta-spec.js +19 -19
  80. package/src/managers/index.js +13 -4
  81. package/src/managers/memory-condenser.js +35 -45
  82. package/src/managers/repo-skill-manager.js +57 -31
  83. package/src/managers/skill-loader.js +25 -22
  84. package/src/managers/skill-tools.js +36 -72
  85. package/src/managers/workflow.js +30 -22
  86. package/src/monitoring/cost-tracker.js +48 -46
  87. package/src/monitoring/incident-manager.js +116 -106
  88. package/src/monitoring/index.js +144 -134
  89. package/src/monitoring/observability.js +75 -62
  90. package/src/monitoring/quality-dashboard.js +45 -41
  91. package/src/monitoring/release-manager.js +63 -53
  92. package/src/orchestration/agent-skill-binding.js +39 -47
  93. package/src/orchestration/error-handler.js +65 -107
  94. package/src/orchestration/guardrails/base-guardrail.js +26 -24
  95. package/src/orchestration/guardrails/guardrail-rules.js +50 -64
  96. package/src/orchestration/guardrails/index.js +5 -5
  97. package/src/orchestration/guardrails/input-guardrail.js +58 -45
  98. package/src/orchestration/guardrails/output-guardrail.js +104 -81
  99. package/src/orchestration/guardrails/safety-check.js +79 -79
  100. package/src/orchestration/index.js +38 -55
  101. package/src/orchestration/mcp-tool-adapters.js +96 -99
  102. package/src/orchestration/orchestration-engine.js +21 -21
  103. package/src/orchestration/pattern-registry.js +60 -45
  104. package/src/orchestration/patterns/auto.js +34 -47
  105. package/src/orchestration/patterns/group-chat.js +59 -65
  106. package/src/orchestration/patterns/handoff.js +67 -65
  107. package/src/orchestration/patterns/human-in-loop.js +51 -72
  108. package/src/orchestration/patterns/nested.js +25 -40
  109. package/src/orchestration/patterns/sequential.js +35 -34
  110. package/src/orchestration/patterns/swarm.js +63 -56
  111. package/src/orchestration/patterns/triage.js +150 -109
  112. package/src/orchestration/reasoning/index.js +9 -9
  113. package/src/orchestration/reasoning/planning-engine.js +143 -140
  114. package/src/orchestration/reasoning/reasoning-engine.js +206 -144
  115. package/src/orchestration/reasoning/self-correction.js +121 -128
  116. package/src/orchestration/replanning/adaptive-goal-modifier.js +107 -112
  117. package/src/orchestration/replanning/alternative-generator.js +37 -42
  118. package/src/orchestration/replanning/config.js +63 -59
  119. package/src/orchestration/replanning/goal-progress-tracker.js +98 -100
  120. package/src/orchestration/replanning/index.js +24 -20
  121. package/src/orchestration/replanning/plan-evaluator.js +49 -50
  122. package/src/orchestration/replanning/plan-monitor.js +32 -28
  123. package/src/orchestration/replanning/proactive-path-optimizer.js +175 -178
  124. package/src/orchestration/replanning/replan-history.js +33 -26
  125. package/src/orchestration/replanning/replanning-engine.js +106 -108
  126. package/src/orchestration/skill-executor.js +107 -109
  127. package/src/orchestration/skill-registry.js +85 -89
  128. package/src/orchestration/workflow-examples.js +228 -231
  129. package/src/orchestration/workflow-executor.js +65 -68
  130. package/src/orchestration/workflow-orchestrator.js +72 -73
  131. package/src/phase4-integration.js +47 -40
  132. package/src/phase5-integration.js +89 -30
  133. package/src/reporters/coverage-report.js +82 -30
  134. package/src/reporters/hierarchical-reporter.js +498 -0
  135. package/src/reporters/traceability-matrix-report.js +29 -20
  136. package/src/resolvers/issue-resolver.js +43 -31
  137. package/src/steering/advanced-validation.js +133 -124
  138. package/src/steering/auto-updater.js +60 -73
  139. package/src/steering/index.js +6 -6
  140. package/src/steering/quality-metrics.js +41 -35
  141. package/src/steering/steering-auto-update.js +83 -86
  142. package/src/steering/steering-validator.js +98 -106
  143. package/src/steering/template-constraints.js +53 -54
  144. package/src/templates/agents/claude-code/CLAUDE.md +32 -32
  145. package/src/templates/agents/claude-code/skills/agent-assistant/SKILL.md +13 -5
  146. package/src/templates/agents/claude-code/skills/ai-ml-engineer/mlops-guide.md +23 -23
  147. package/src/templates/agents/claude-code/skills/ai-ml-engineer/model-card-template.md +60 -41
  148. package/src/templates/agents/claude-code/skills/api-designer/api-patterns.md +27 -19
  149. package/src/templates/agents/claude-code/skills/api-designer/openapi-template.md +11 -7
  150. package/src/templates/agents/claude-code/skills/bug-hunter/SKILL.md +4 -3
  151. package/src/templates/agents/claude-code/skills/bug-hunter/root-cause-analysis.md +37 -15
  152. package/src/templates/agents/claude-code/skills/change-impact-analyzer/dependency-graph-patterns.md +36 -42
  153. package/src/templates/agents/claude-code/skills/change-impact-analyzer/impact-analysis-template.md +69 -60
  154. package/src/templates/agents/claude-code/skills/cloud-architect/aws-patterns.md +31 -38
  155. package/src/templates/agents/claude-code/skills/cloud-architect/azure-patterns.md +28 -23
  156. package/src/templates/agents/claude-code/skills/code-reviewer/SKILL.md +61 -0
  157. package/src/templates/agents/claude-code/skills/code-reviewer/best-practices.md +27 -0
  158. package/src/templates/agents/claude-code/skills/code-reviewer/review-checklist.md +29 -10
  159. package/src/templates/agents/claude-code/skills/code-reviewer/review-standards.md +29 -24
  160. package/src/templates/agents/claude-code/skills/constitution-enforcer/SKILL.md +8 -6
  161. package/src/templates/agents/claude-code/skills/constitution-enforcer/constitutional-articles.md +62 -26
  162. package/src/templates/agents/claude-code/skills/constitution-enforcer/phase-minus-one-gates.md +35 -16
  163. package/src/templates/agents/claude-code/skills/database-administrator/backup-recovery.md +27 -17
  164. package/src/templates/agents/claude-code/skills/database-administrator/tuning-guide.md +25 -20
  165. package/src/templates/agents/claude-code/skills/database-schema-designer/schema-patterns.md +39 -22
  166. package/src/templates/agents/claude-code/skills/devops-engineer/ci-cd-templates.md +25 -22
  167. package/src/templates/agents/claude-code/skills/issue-resolver/SKILL.md +24 -21
  168. package/src/templates/agents/claude-code/skills/orchestrator/SKILL.md +148 -63
  169. package/src/templates/agents/claude-code/skills/orchestrator/patterns.md +35 -16
  170. package/src/templates/agents/claude-code/skills/orchestrator/selection-matrix.md +69 -64
  171. package/src/templates/agents/claude-code/skills/performance-engineer/optimization-playbook.md +47 -47
  172. package/src/templates/agents/claude-code/skills/performance-optimizer/SKILL.md +69 -0
  173. package/src/templates/agents/claude-code/skills/performance-optimizer/benchmark-template.md +63 -45
  174. package/src/templates/agents/claude-code/skills/performance-optimizer/optimization-patterns.md +33 -35
  175. package/src/templates/agents/claude-code/skills/project-manager/SKILL.md +7 -6
  176. package/src/templates/agents/claude-code/skills/project-manager/agile-ceremonies.md +47 -28
  177. package/src/templates/agents/claude-code/skills/project-manager/project-templates.md +94 -78
  178. package/src/templates/agents/claude-code/skills/quality-assurance/SKILL.md +20 -17
  179. package/src/templates/agents/claude-code/skills/quality-assurance/qa-plan-template.md +63 -49
  180. package/src/templates/agents/claude-code/skills/release-coordinator/SKILL.md +5 -5
  181. package/src/templates/agents/claude-code/skills/release-coordinator/feature-flag-guide.md +30 -26
  182. package/src/templates/agents/claude-code/skills/release-coordinator/release-plan-template.md +67 -35
  183. package/src/templates/agents/claude-code/skills/requirements-analyst/ears-format.md +54 -42
  184. package/src/templates/agents/claude-code/skills/requirements-analyst/validation-rules.md +36 -33
  185. package/src/templates/agents/claude-code/skills/security-auditor/SKILL.md +77 -19
  186. package/src/templates/agents/claude-code/skills/security-auditor/audit-checklists.md +24 -24
  187. package/src/templates/agents/claude-code/skills/security-auditor/owasp-top-10.md +61 -20
  188. package/src/templates/agents/claude-code/skills/security-auditor/vulnerability-patterns.md +43 -11
  189. package/src/templates/agents/claude-code/skills/site-reliability-engineer/SKILL.md +1 -0
  190. package/src/templates/agents/claude-code/skills/site-reliability-engineer/incident-response-template.md +55 -25
  191. package/src/templates/agents/claude-code/skills/site-reliability-engineer/observability-patterns.md +78 -68
  192. package/src/templates/agents/claude-code/skills/site-reliability-engineer/slo-sli-guide.md +73 -53
  193. package/src/templates/agents/claude-code/skills/software-developer/solid-principles.md +83 -37
  194. package/src/templates/agents/claude-code/skills/software-developer/test-first-workflow.md +38 -31
  195. package/src/templates/agents/claude-code/skills/steering/SKILL.md +1 -0
  196. package/src/templates/agents/claude-code/skills/steering/auto-update-rules.md +31 -0
  197. package/src/templates/agents/claude-code/skills/system-architect/adr-template.md +25 -7
  198. package/src/templates/agents/claude-code/skills/system-architect/c4-model-guide.md +74 -61
  199. package/src/templates/agents/claude-code/skills/technical-writer/doc-templates/documentation-templates.md +70 -52
  200. package/src/templates/agents/claude-code/skills/test-engineer/SKILL.md +2 -0
  201. package/src/templates/agents/claude-code/skills/test-engineer/ears-test-mapping.md +75 -71
  202. package/src/templates/agents/claude-code/skills/test-engineer/test-types.md +85 -63
  203. package/src/templates/agents/claude-code/skills/traceability-auditor/coverage-matrix-template.md +39 -36
  204. package/src/templates/agents/claude-code/skills/traceability-auditor/gap-detection-rules.md +22 -17
  205. package/src/templates/agents/claude-code/skills/ui-ux-designer/SKILL.md +1 -0
  206. package/src/templates/agents/claude-code/skills/ui-ux-designer/accessibility-guidelines.md +49 -75
  207. package/src/templates/agents/claude-code/skills/ui-ux-designer/design-system-components.md +71 -59
  208. package/src/templates/agents/codex/AGENTS.md +74 -42
  209. package/src/templates/agents/cursor/AGENTS.md +74 -42
  210. package/src/templates/agents/gemini-cli/GEMINI.md +74 -42
  211. package/src/templates/agents/github-copilot/AGENTS.md +83 -51
  212. package/src/templates/agents/qwen-code/QWEN.md +74 -42
  213. package/src/templates/agents/windsurf/AGENTS.md +74 -42
  214. package/src/templates/architectures/README.md +41 -0
  215. package/src/templates/architectures/clean-architecture/README.md +113 -0
  216. package/src/templates/architectures/event-driven/README.md +162 -0
  217. package/src/templates/architectures/hexagonal/README.md +130 -0
  218. package/src/templates/index.js +6 -1
  219. package/src/templates/locale-manager.js +16 -16
  220. package/src/templates/shared/delta-spec-template.md +20 -13
  221. package/src/templates/shared/github-actions/musubi-issue-resolver.yml +5 -5
  222. package/src/templates/shared/github-actions/musubi-security-check.yml +3 -3
  223. package/src/templates/shared/github-actions/musubi-validate.yml +4 -4
  224. package/src/templates/shared/steering/structure.md +95 -0
  225. package/src/templates/skills/browser-agent.md +21 -16
  226. package/src/templates/skills/web-gui.md +8 -0
  227. package/src/templates/template-constraints.js +50 -53
  228. package/src/validators/advanced-validation.js +30 -36
  229. package/src/validators/constitutional-validator.js +77 -73
  230. package/src/validators/critic-system.js +49 -59
  231. package/src/validators/delta-format.js +59 -55
  232. package/src/validators/traceability-validator.js +7 -11
@@ -9,15 +9,19 @@ Guidelines for creating accessible user interfaces following WCAG 2.1 standards.
9
9
  ## WCAG Principles (POUR)
10
10
 
11
11
  ### 1. Perceivable
12
+
12
13
  Content can be perceived by all users.
13
14
 
14
15
  ### 2. Operable
16
+
15
17
  Interface can be operated by all users.
16
18
 
17
19
  ### 3. Understandable
20
+
18
21
  Content and operation is understandable.
19
22
 
20
23
  ### 4. Robust
24
+
21
25
  Content works with assistive technologies.
22
26
 
23
27
  ---
@@ -28,17 +32,16 @@ Content works with assistive technologies.
28
32
 
29
33
  ```html
30
34
  <!-- Informative image -->
31
- <img src="chart.png" alt="Sales increased 25% from January to March">
35
+ <img src="chart.png" alt="Sales increased 25% from January to March" />
32
36
 
33
37
  <!-- Decorative image -->
34
- <img src="decoration.png" alt="" role="presentation">
38
+ <img src="decoration.png" alt="" role="presentation" />
35
39
 
36
40
  <!-- Complex image -->
37
41
  <figure>
38
- <img src="flowchart.png" alt="User registration process">
42
+ <img src="flowchart.png" alt="User registration process" />
39
43
  <figcaption>
40
- Detailed description: User enters email, confirms via link,
41
- sets password, completes profile.
44
+ Detailed description: User enters email, confirms via link, sets password, completes profile.
42
45
  </figcaption>
43
46
  </figure>
44
47
  ```
@@ -48,18 +51,13 @@ Content works with assistive technologies.
48
51
  ```html
49
52
  <!-- Label association -->
50
53
  <label for="email">Email address</label>
51
- <input type="email" id="email" name="email" required
52
- aria-describedby="email-hint">
54
+ <input type="email" id="email" name="email" required aria-describedby="email-hint" />
53
55
  <span id="email-hint">We'll never share your email.</span>
54
56
 
55
57
  <!-- Error handling -->
56
58
  <label for="password">Password</label>
57
- <input type="password" id="password"
58
- aria-invalid="true"
59
- aria-describedby="password-error">
60
- <span id="password-error" role="alert">
61
- Password must be at least 8 characters.
62
- </span>
59
+ <input type="password" id="password" aria-invalid="true" aria-describedby="password-error" />
60
+ <span id="password-error" role="alert"> Password must be at least 8 characters. </span>
63
61
  ```
64
62
 
65
63
  ### Buttons
@@ -74,11 +72,7 @@ Content works with assistive technologies.
74
72
  </button>
75
73
 
76
74
  <!-- Toggle button -->
77
- <button type="button"
78
- aria-pressed="false"
79
- onclick="toggleDarkMode()">
80
- Dark Mode
81
- </button>
75
+ <button type="button" aria-pressed="false" onclick="toggleDarkMode()">Dark Mode</button>
82
76
  ```
83
77
 
84
78
  ### Navigation
@@ -131,28 +125,25 @@ Content works with assistive technologies.
131
125
 
132
126
  ```html
133
127
  <!-- Natural tab order -->
134
- <input type="text">
128
+ <input type="text" />
135
129
  <button>Submit</button>
136
130
 
137
131
  <!-- Skip decorative elements -->
138
132
  <div tabindex="-1">Decorative</div>
139
133
 
140
134
  <!-- Custom focusable element -->
141
- <div role="button" tabindex="0"
142
- onkeydown="handleKeyDown(event)">
143
- Custom Button
144
- </div>
135
+ <div role="button" tabindex="0" onkeydown="handleKeyDown(event)">Custom Button</div>
145
136
  ```
146
137
 
147
138
  ### Keyboard Shortcuts
148
139
 
149
140
  ```javascript
150
- document.addEventListener('keydown', (e) => {
141
+ document.addEventListener('keydown', e => {
151
142
  // Escape to close modal
152
143
  if (e.key === 'Escape' && modalOpen) {
153
144
  closeModal();
154
145
  }
155
-
146
+
156
147
  // Arrow keys for navigation
157
148
  if (e.key === 'ArrowDown') {
158
149
  focusNextItem();
@@ -166,19 +157,21 @@ document.addEventListener('keydown', (e) => {
166
157
 
167
158
  ### Contrast Requirements
168
159
 
169
- | Element | Ratio | Level |
170
- |---------|-------|-------|
171
- | Normal text | 4.5:1 | AA |
172
- | Large text (18px+) | 3:1 | AA |
173
- | UI components | 3:1 | AA |
174
- | Enhanced | 7:1 | AAA |
160
+ | Element | Ratio | Level |
161
+ | ------------------ | ----- | ----- |
162
+ | Normal text | 4.5:1 | AA |
163
+ | Large text (18px+) | 3:1 | AA |
164
+ | UI components | 3:1 | AA |
165
+ | Enhanced | 7:1 | AAA |
175
166
 
176
167
  ### Color Independence
177
168
 
178
169
  ```css
179
170
  /* Don't rely on color alone */
180
171
  /* Bad */
181
- .error { color: red; }
172
+ .error {
173
+ color: red;
174
+ }
182
175
 
183
176
  /* Good */
184
177
  .error {
@@ -186,7 +179,7 @@ document.addEventListener('keydown', (e) => {
186
179
  border: 2px solid red;
187
180
  }
188
181
  .error::before {
189
- content: "";
182
+ content: '';
190
183
  }
191
184
  ```
192
185
 
@@ -197,10 +190,7 @@ document.addEventListener('keydown', (e) => {
197
190
  ### Modal Dialog
198
191
 
199
192
  ```html
200
- <div role="dialog"
201
- aria-modal="true"
202
- aria-labelledby="dialog-title"
203
- aria-describedby="dialog-desc">
193
+ <div role="dialog" aria-modal="true" aria-labelledby="dialog-title" aria-describedby="dialog-desc">
204
194
  <h2 id="dialog-title">Confirm Action</h2>
205
195
  <p id="dialog-desc">Are you sure you want to delete?</p>
206
196
  <button onclick="confirm()">Yes, delete</button>
@@ -212,50 +202,26 @@ document.addEventListener('keydown', (e) => {
212
202
 
213
203
  ```html
214
204
  <div role="tablist" aria-label="Settings">
215
- <button role="tab"
216
- id="tab-1"
217
- aria-selected="true"
218
- aria-controls="panel-1">
219
- General
220
- </button>
221
- <button role="tab"
222
- id="tab-2"
223
- aria-selected="false"
224
- aria-controls="panel-2"
225
- tabindex="-1">
205
+ <button role="tab" id="tab-1" aria-selected="true" aria-controls="panel-1">General</button>
206
+ <button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">
226
207
  Privacy
227
208
  </button>
228
209
  </div>
229
- <div role="tabpanel"
230
- id="panel-1"
231
- aria-labelledby="tab-1">
232
- General settings content
233
- </div>
234
- <div role="tabpanel"
235
- id="panel-2"
236
- aria-labelledby="tab-2"
237
- hidden>
238
- Privacy settings content
239
- </div>
210
+ <div role="tabpanel" id="panel-1" aria-labelledby="tab-1">General settings content</div>
211
+ <div role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>Privacy settings content</div>
240
212
  ```
241
213
 
242
214
  ### Live Regions
243
215
 
244
216
  ```html
245
217
  <!-- Status messages -->
246
- <div role="status" aria-live="polite">
247
- Form submitted successfully!
248
- </div>
218
+ <div role="status" aria-live="polite">Form submitted successfully!</div>
249
219
 
250
220
  <!-- Important alerts -->
251
- <div role="alert" aria-live="assertive">
252
- Session expiring in 2 minutes!
253
- </div>
221
+ <div role="alert" aria-live="assertive">Session expiring in 2 minutes!</div>
254
222
 
255
223
  <!-- Loading indicator -->
256
- <div role="status" aria-busy="true" aria-live="polite">
257
- Loading results...
258
- </div>
224
+ <div role="status" aria-busy="true" aria-live="polite">Loading results...</div>
259
225
  ```
260
226
 
261
227
  ---
@@ -263,11 +229,13 @@ document.addEventListener('keydown', (e) => {
263
229
  ## Testing Checklist
264
230
 
265
231
  ### Automated
232
+
266
233
  - [ ] Run axe-core or Lighthouse
267
234
  - [ ] Validate HTML
268
235
  - [ ] Check color contrast
269
236
 
270
237
  ### Manual
238
+
271
239
  - [ ] Navigate with keyboard only
272
240
  - [ ] Test with screen reader
273
241
  - [ ] Zoom to 200%
@@ -275,6 +243,7 @@ document.addEventListener('keydown', (e) => {
275
243
  - [ ] Check focus order
276
244
 
277
245
  ### Screen Readers
246
+
278
247
  - [ ] VoiceOver (macOS/iOS)
279
248
  - [ ] NVDA (Windows)
280
249
  - [ ] JAWS (Windows)
@@ -284,13 +253,13 @@ document.addEventListener('keydown', (e) => {
284
253
 
285
254
  ## Common Issues
286
255
 
287
- | Issue | Impact | Fix |
288
- |-------|--------|-----|
289
- | Missing alt text | Blind users can't understand images | Add descriptive alt |
290
- | No focus indicator | Keyboard users get lost | Add visible outline |
291
- | Color only meaning | Colorblind miss info | Add text/icons |
292
- | No labels | Screen readers can't identify fields | Associate labels |
293
- | Mouse-only UI | Keyboard users blocked | Add keyboard support |
256
+ | Issue | Impact | Fix |
257
+ | ------------------ | ------------------------------------ | -------------------- |
258
+ | Missing alt text | Blind users can't understand images | Add descriptive alt |
259
+ | No focus indicator | Keyboard users get lost | Add visible outline |
260
+ | Color only meaning | Colorblind miss info | Add text/icons |
261
+ | No labels | Screen readers can't identify fields | Associate labels |
262
+ | Mouse-only UI | Keyboard users blocked | Add keyboard support |
294
263
 
295
264
  ---
296
265
 
@@ -302,15 +271,20 @@ document.addEventListener('keydown', (e) => {
302
271
  [Company] is committed to ensuring accessibility for all users.
303
272
 
304
273
  ## Standards
274
+
305
275
  We aim to conform to WCAG 2.1 Level AA standards.
306
276
 
307
277
  ## Current Status
278
+
308
279
  We are continuously improving accessibility. Known issues:
280
+
309
281
  - [Issue 1]: [Expected fix date]
310
282
  - [Issue 2]: [Expected fix date]
311
283
 
312
284
  ## Feedback
285
+
313
286
  If you encounter accessibility barriers:
287
+
314
288
  - Email: accessibility@example.com
315
289
  - Phone: 1-800-XXX-XXXX
316
290
 
@@ -14,13 +14,13 @@ Guidelines for creating and maintaining design system components.
14
14
  Atoms → Molecules → Organisms → Templates → Pages
15
15
  ```
16
16
 
17
- | Level | Description | Examples |
18
- |-------|-------------|----------|
19
- | Atoms | Basic elements | Button, Input, Label |
20
- | Molecules | Simple groups | Form field, Card |
21
- | Organisms | Complex sections | Header, Form, Table |
22
- | Templates | Page layouts | Dashboard layout |
23
- | Pages | Specific instances | Home page |
17
+ | Level | Description | Examples |
18
+ | --------- | ------------------ | -------------------- |
19
+ | Atoms | Basic elements | Button, Input, Label |
20
+ | Molecules | Simple groups | Form field, Card |
21
+ | Organisms | Complex sections | Header, Form, Table |
22
+ | Templates | Page layouts | Dashboard layout |
23
+ | Pages | Specific instances | Home page |
24
24
 
25
25
  ---
26
26
 
@@ -33,19 +33,19 @@ interface ButtonProps {
33
33
  // Variants
34
34
  variant?: 'primary' | 'secondary' | 'ghost' | 'danger';
35
35
  size?: 'sm' | 'md' | 'lg';
36
-
36
+
37
37
  // States
38
38
  disabled?: boolean;
39
39
  loading?: boolean;
40
-
40
+
41
41
  // Content
42
42
  children: React.ReactNode;
43
43
  leftIcon?: React.ReactNode;
44
44
  rightIcon?: React.ReactNode;
45
-
45
+
46
46
  // Actions
47
47
  onClick?: () => void;
48
-
48
+
49
49
  // Accessibility
50
50
  'aria-label'?: string;
51
51
  }
@@ -55,7 +55,7 @@ interface ButtonProps {
55
55
 
56
56
  ```tsx
57
57
  // Bad: Props explosion
58
- <Card
58
+ <Card
59
59
  title="Title"
60
60
  subtitle="Subtitle"
61
61
  image="/img.jpg"
@@ -92,18 +92,18 @@ interface ButtonProps {
92
92
  --color-primary-500: #3b82f6;
93
93
  --color-primary-600: #2563eb;
94
94
  --color-primary-900: #1e3a8a;
95
-
95
+
96
96
  /* Semantic colors */
97
97
  --color-success: #22c55e;
98
98
  --color-warning: #f59e0b;
99
99
  --color-error: #ef4444;
100
100
  --color-info: #3b82f6;
101
-
101
+
102
102
  /* Text colors */
103
103
  --color-text-primary: #111827;
104
104
  --color-text-secondary: #6b7280;
105
105
  --color-text-disabled: #9ca3af;
106
-
106
+
107
107
  /* Background colors */
108
108
  --color-bg-primary: #ffffff;
109
109
  --color-bg-secondary: #f9fafb;
@@ -116,14 +116,14 @@ interface ButtonProps {
116
116
  ```css
117
117
  :root {
118
118
  --space-0: 0;
119
- --space-1: 0.25rem; /* 4px */
120
- --space-2: 0.5rem; /* 8px */
121
- --space-3: 0.75rem; /* 12px */
122
- --space-4: 1rem; /* 16px */
123
- --space-6: 1.5rem; /* 24px */
124
- --space-8: 2rem; /* 32px */
125
- --space-12: 3rem; /* 48px */
126
- --space-16: 4rem; /* 64px */
119
+ --space-1: 0.25rem; /* 4px */
120
+ --space-2: 0.5rem; /* 8px */
121
+ --space-3: 0.75rem; /* 12px */
122
+ --space-4: 1rem; /* 16px */
123
+ --space-6: 1.5rem; /* 24px */
124
+ --space-8: 2rem; /* 32px */
125
+ --space-12: 3rem; /* 48px */
126
+ --space-16: 4rem; /* 64px */
127
127
  }
128
128
  ```
129
129
 
@@ -134,22 +134,22 @@ interface ButtonProps {
134
134
  /* Font families */
135
135
  --font-sans: 'Inter', system-ui, sans-serif;
136
136
  --font-mono: 'Fira Code', monospace;
137
-
137
+
138
138
  /* Font sizes */
139
- --text-xs: 0.75rem; /* 12px */
140
- --text-sm: 0.875rem; /* 14px */
141
- --text-base: 1rem; /* 16px */
142
- --text-lg: 1.125rem; /* 18px */
143
- --text-xl: 1.25rem; /* 20px */
144
- --text-2xl: 1.5rem; /* 24px */
145
- --text-3xl: 1.875rem; /* 30px */
146
-
139
+ --text-xs: 0.75rem; /* 12px */
140
+ --text-sm: 0.875rem; /* 14px */
141
+ --text-base: 1rem; /* 16px */
142
+ --text-lg: 1.125rem; /* 18px */
143
+ --text-xl: 1.25rem; /* 20px */
144
+ --text-2xl: 1.5rem; /* 24px */
145
+ --text-3xl: 1.875rem; /* 30px */
146
+
147
147
  /* Font weights */
148
148
  --font-normal: 400;
149
149
  --font-medium: 500;
150
150
  --font-semibold: 600;
151
151
  --font-bold: 700;
152
-
152
+
153
153
  /* Line heights */
154
154
  --leading-tight: 1.25;
155
155
  --leading-normal: 1.5;
@@ -163,7 +163,7 @@ interface ButtonProps {
163
163
 
164
164
  ### Component Card Template
165
165
 
166
- ```markdown
166
+ ````markdown
167
167
  # Button
168
168
 
169
169
  Buttons are used to trigger actions or navigation.
@@ -175,17 +175,18 @@ import { Button } from '@/components';
175
175
 
176
176
  <Button variant="primary" size="md">
177
177
  Click me
178
- </Button>
178
+ </Button>;
179
179
  ```
180
+ ````
180
181
 
181
182
  ## Props
182
183
 
183
- | Prop | Type | Default | Description |
184
- |------|------|---------|-------------|
185
- | variant | 'primary' \| 'secondary' \| 'ghost' | 'primary' | Visual style |
186
- | size | 'sm' \| 'md' \| 'lg' | 'md' | Button size |
187
- | disabled | boolean | false | Disabled state |
188
- | loading | boolean | false | Loading state |
184
+ | Prop | Type | Default | Description |
185
+ | -------- | ----------------------------------- | --------- | -------------- |
186
+ | variant | 'primary' \| 'secondary' \| 'ghost' | 'primary' | Visual style |
187
+ | size | 'sm' \| 'md' \| 'lg' | 'md' | Button size |
188
+ | disabled | boolean | false | Disabled state |
189
+ | loading | boolean | false | Loading state |
189
190
 
190
191
  ## Variants
191
192
 
@@ -217,7 +218,8 @@ import { Button } from '@/components';
217
218
  ✅ Use ghost for less important actions
218
219
  ❌ Don't use more than one primary per view
219
220
  ❌ Don't disable without explanation
220
- ```
221
+
222
+ ````
221
223
 
222
224
  ---
223
225
 
@@ -229,48 +231,46 @@ import { Button } from '@/components';
229
231
  .button {
230
232
  /* Default */
231
233
  background: var(--color-primary-500);
232
-
234
+
233
235
  /* Hover */
234
236
  &:hover:not(:disabled) {
235
237
  background: var(--color-primary-600);
236
238
  }
237
-
239
+
238
240
  /* Active */
239
241
  &:active:not(:disabled) {
240
242
  background: var(--color-primary-700);
241
243
  transform: scale(0.98);
242
244
  }
243
-
245
+
244
246
  /* Focus */
245
247
  &:focus-visible {
246
248
  outline: 2px solid var(--color-primary-500);
247
249
  outline-offset: 2px;
248
250
  }
249
-
251
+
250
252
  /* Disabled */
251
253
  &:disabled {
252
254
  opacity: 0.5;
253
255
  cursor: not-allowed;
254
256
  }
255
257
  }
256
- ```
258
+ ````
257
259
 
258
260
  ### Loading State
259
261
 
260
262
  ```tsx
261
263
  function Button({ loading, children, ...props }) {
262
264
  return (
263
- <button
264
- disabled={loading}
265
- aria-busy={loading}
266
- {...props}
267
- >
265
+ <button disabled={loading} aria-busy={loading} {...props}>
268
266
  {loading ? (
269
267
  <>
270
268
  <Spinner aria-hidden="true" />
271
269
  <span className="sr-only">Loading...</span>
272
270
  </>
273
- ) : children}
271
+ ) : (
272
+ children
273
+ )}
274
274
  </button>
275
275
  );
276
276
  }
@@ -290,24 +290,32 @@ function Button({ loading, children, ...props }) {
290
290
  --breakpoint-xl: 1280px;
291
291
  }
292
292
 
293
- @media (min-width: 640px) { /* sm */ }
294
- @media (min-width: 768px) { /* md */ }
295
- @media (min-width: 1024px) { /* lg */ }
296
- @media (min-width: 1280px) { /* xl */ }
293
+ @media (min-width: 640px) {
294
+ /* sm */
295
+ }
296
+ @media (min-width: 768px) {
297
+ /* md */
298
+ }
299
+ @media (min-width: 1024px) {
300
+ /* lg */
301
+ }
302
+ @media (min-width: 1280px) {
303
+ /* xl */
304
+ }
297
305
  ```
298
306
 
299
307
  ### Responsive Components
300
308
 
301
309
  ```tsx
302
310
  // Responsive button sizing
303
- <Button
311
+ <Button
304
312
  size={{ base: 'sm', md: 'md', lg: 'lg' }}
305
313
  >
306
314
  Responsive Button
307
315
  </Button>
308
316
 
309
317
  // Stack to row on larger screens
310
- <Stack
318
+ <Stack
311
319
  direction={{ base: 'column', md: 'row' }}
312
320
  gap={4}
313
321
  >
@@ -321,24 +329,28 @@ function Button({ loading, children, ...props }) {
321
329
  ## Component Checklist
322
330
 
323
331
  ### Design
332
+
324
333
  - [ ] Follows design tokens
325
334
  - [ ] Has all necessary variants
326
335
  - [ ] Responsive behavior defined
327
336
  - [ ] Dark mode support
328
337
 
329
338
  ### Development
339
+
330
340
  - [ ] TypeScript types defined
331
341
  - [ ] Props documented
332
342
  - [ ] Unit tests written
333
343
  - [ ] Storybook stories created
334
344
 
335
345
  ### Accessibility
346
+
336
347
  - [ ] Keyboard navigation
337
348
  - [ ] Screen reader tested
338
349
  - [ ] Focus management
339
350
  - [ ] Color contrast
340
351
 
341
352
  ### Documentation
353
+
342
354
  - [ ] Usage examples
343
355
  - [ ] Props table
344
356
  - [ ] Do's and don'ts