arggon-harness 0.1.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 (170) hide show
  1. package/README.md +229 -0
  2. package/config/default-opencode.json +21 -0
  3. package/dist/init.d.ts +3 -0
  4. package/dist/init.d.ts.map +1 -0
  5. package/dist/init.js +406 -0
  6. package/dist/init.js.map +1 -0
  7. package/dist/plugin/engine/artifact-graph.d.ts +38 -0
  8. package/dist/plugin/engine/artifact-graph.d.ts.map +1 -0
  9. package/dist/plugin/engine/artifact-graph.js +137 -0
  10. package/dist/plugin/engine/artifact-graph.js.map +1 -0
  11. package/dist/plugin/engine/config.d.ts +21 -0
  12. package/dist/plugin/engine/config.d.ts.map +1 -0
  13. package/dist/plugin/engine/config.js +146 -0
  14. package/dist/plugin/engine/config.js.map +1 -0
  15. package/dist/plugin/engine/delta-apply.d.ts +23 -0
  16. package/dist/plugin/engine/delta-apply.d.ts.map +1 -0
  17. package/dist/plugin/engine/delta-apply.js +153 -0
  18. package/dist/plugin/engine/delta-apply.js.map +1 -0
  19. package/dist/plugin/engine/git.d.ts +32 -0
  20. package/dist/plugin/engine/git.d.ts.map +1 -0
  21. package/dist/plugin/engine/git.js +61 -0
  22. package/dist/plugin/engine/git.js.map +1 -0
  23. package/dist/plugin/engine/integrity.d.ts +45 -0
  24. package/dist/plugin/engine/integrity.d.ts.map +1 -0
  25. package/dist/plugin/engine/integrity.js +98 -0
  26. package/dist/plugin/engine/integrity.js.map +1 -0
  27. package/dist/plugin/engine/registry.d.ts +39 -0
  28. package/dist/plugin/engine/registry.d.ts.map +1 -0
  29. package/dist/plugin/engine/registry.js +191 -0
  30. package/dist/plugin/engine/registry.js.map +1 -0
  31. package/dist/plugin/engine/state.d.ts +31 -0
  32. package/dist/plugin/engine/state.d.ts.map +1 -0
  33. package/dist/plugin/engine/state.js +116 -0
  34. package/dist/plugin/engine/state.js.map +1 -0
  35. package/dist/plugin/engine/task-tracker.d.ts +66 -0
  36. package/dist/plugin/engine/task-tracker.d.ts.map +1 -0
  37. package/dist/plugin/engine/task-tracker.js +124 -0
  38. package/dist/plugin/engine/task-tracker.js.map +1 -0
  39. package/dist/plugin/engine/types.d.ts +349 -0
  40. package/dist/plugin/engine/types.d.ts.map +1 -0
  41. package/dist/plugin/engine/types.js +3 -0
  42. package/dist/plugin/engine/types.js.map +1 -0
  43. package/dist/plugin/engine/validator.d.ts +52 -0
  44. package/dist/plugin/engine/validator.d.ts.map +1 -0
  45. package/dist/plugin/engine/validator.js +457 -0
  46. package/dist/plugin/engine/validator.js.map +1 -0
  47. package/dist/plugin/engine/verifier.d.ts +61 -0
  48. package/dist/plugin/engine/verifier.d.ts.map +1 -0
  49. package/dist/plugin/engine/verifier.js +441 -0
  50. package/dist/plugin/engine/verifier.js.map +1 -0
  51. package/dist/plugin/hooks/context-injection.d.ts +11 -0
  52. package/dist/plugin/hooks/context-injection.d.ts.map +1 -0
  53. package/dist/plugin/hooks/context-injection.js +88 -0
  54. package/dist/plugin/hooks/context-injection.js.map +1 -0
  55. package/dist/plugin/hooks/event-handlers.d.ts +9 -0
  56. package/dist/plugin/hooks/event-handlers.d.ts.map +1 -0
  57. package/dist/plugin/hooks/event-handlers.js +10 -0
  58. package/dist/plugin/hooks/event-handlers.js.map +1 -0
  59. package/dist/plugin/hooks/workflow-gate.d.ts +24 -0
  60. package/dist/plugin/hooks/workflow-gate.d.ts.map +1 -0
  61. package/dist/plugin/hooks/workflow-gate.js +78 -0
  62. package/dist/plugin/hooks/workflow-gate.js.map +1 -0
  63. package/dist/plugin/index.d.ts +423 -0
  64. package/dist/plugin/index.d.ts.map +1 -0
  65. package/dist/plugin/index.js +253 -0
  66. package/dist/plugin/index.js.map +1 -0
  67. package/dist/plugin/tools/spec-artifact-instr.d.ts +7 -0
  68. package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -0
  69. package/dist/plugin/tools/spec-artifact-instr.js +73 -0
  70. package/dist/plugin/tools/spec-artifact-instr.js.map +1 -0
  71. package/dist/plugin/tools/spec-change-archive.d.ts +6 -0
  72. package/dist/plugin/tools/spec-change-archive.d.ts.map +1 -0
  73. package/dist/plugin/tools/spec-change-archive.js +62 -0
  74. package/dist/plugin/tools/spec-change-archive.js.map +1 -0
  75. package/dist/plugin/tools/spec-change-list.d.ts +3 -0
  76. package/dist/plugin/tools/spec-change-list.d.ts.map +1 -0
  77. package/dist/plugin/tools/spec-change-list.js +38 -0
  78. package/dist/plugin/tools/spec-change-list.js.map +1 -0
  79. package/dist/plugin/tools/spec-change-new.d.ts +7 -0
  80. package/dist/plugin/tools/spec-change-new.d.ts.map +1 -0
  81. package/dist/plugin/tools/spec-change-new.js +47 -0
  82. package/dist/plugin/tools/spec-change-new.js.map +1 -0
  83. package/dist/plugin/tools/spec-change-status.d.ts +6 -0
  84. package/dist/plugin/tools/spec-change-status.d.ts.map +1 -0
  85. package/dist/plugin/tools/spec-change-status.js +43 -0
  86. package/dist/plugin/tools/spec-change-status.js.map +1 -0
  87. package/dist/plugin/tools/spec-design-critique.d.ts +20 -0
  88. package/dist/plugin/tools/spec-design-critique.d.ts.map +1 -0
  89. package/dist/plugin/tools/spec-design-critique.js +412 -0
  90. package/dist/plugin/tools/spec-design-critique.js.map +1 -0
  91. package/dist/plugin/tools/spec-design-hifi.d.ts +119 -0
  92. package/dist/plugin/tools/spec-design-hifi.d.ts.map +1 -0
  93. package/dist/plugin/tools/spec-design-hifi.js +653 -0
  94. package/dist/plugin/tools/spec-design-hifi.js.map +1 -0
  95. package/dist/plugin/tools/spec-design-wireframe.d.ts +91 -0
  96. package/dist/plugin/tools/spec-design-wireframe.d.ts.map +1 -0
  97. package/dist/plugin/tools/spec-design-wireframe.js +357 -0
  98. package/dist/plugin/tools/spec-design-wireframe.js.map +1 -0
  99. package/dist/plugin/tools/spec-init.d.ts +9 -0
  100. package/dist/plugin/tools/spec-init.d.ts.map +1 -0
  101. package/dist/plugin/tools/spec-init.js +58 -0
  102. package/dist/plugin/tools/spec-init.js.map +1 -0
  103. package/dist/plugin/tools/spec-integrity-check.d.ts +6 -0
  104. package/dist/plugin/tools/spec-integrity-check.d.ts.map +1 -0
  105. package/dist/plugin/tools/spec-integrity-check.js +19 -0
  106. package/dist/plugin/tools/spec-integrity-check.js.map +1 -0
  107. package/dist/plugin/tools/spec-registry-update.d.ts +3 -0
  108. package/dist/plugin/tools/spec-registry-update.d.ts.map +1 -0
  109. package/dist/plugin/tools/spec-registry-update.js +34 -0
  110. package/dist/plugin/tools/spec-registry-update.js.map +1 -0
  111. package/dist/plugin/tools/spec-schema-list.d.ts +3 -0
  112. package/dist/plugin/tools/spec-schema-list.d.ts.map +1 -0
  113. package/dist/plugin/tools/spec-schema-list.js +28 -0
  114. package/dist/plugin/tools/spec-schema-list.js.map +1 -0
  115. package/dist/plugin/tools/spec-specs-apply.d.ts +7 -0
  116. package/dist/plugin/tools/spec-specs-apply.d.ts.map +1 -0
  117. package/dist/plugin/tools/spec-specs-apply.js +49 -0
  118. package/dist/plugin/tools/spec-specs-apply.js.map +1 -0
  119. package/dist/plugin/tools/spec-task-progress.d.ts +8 -0
  120. package/dist/plugin/tools/spec-task-progress.d.ts.map +1 -0
  121. package/dist/plugin/tools/spec-task-progress.js +96 -0
  122. package/dist/plugin/tools/spec-task-progress.js.map +1 -0
  123. package/dist/plugin/tools/spec-validate.d.ts +21 -0
  124. package/dist/plugin/tools/spec-validate.d.ts.map +1 -0
  125. package/dist/plugin/tools/spec-validate.js +182 -0
  126. package/dist/plugin/tools/spec-validate.js.map +1 -0
  127. package/dist/plugin/tools/spec-verify.d.ts +7 -0
  128. package/dist/plugin/tools/spec-verify.d.ts.map +1 -0
  129. package/dist/plugin/tools/spec-verify.js +50 -0
  130. package/dist/plugin/tools/spec-verify.js.map +1 -0
  131. package/dist/plugin/tools/util.d.ts +25 -0
  132. package/dist/plugin/tools/util.d.ts.map +1 -0
  133. package/dist/plugin/tools/util.js +33 -0
  134. package/dist/plugin/tools/util.js.map +1 -0
  135. package/package.json +61 -0
  136. package/src/agents/orchestrator.md +158 -0
  137. package/src/agents/spec-apply.md +114 -0
  138. package/src/agents/spec-archive.md +103 -0
  139. package/src/agents/spec-propose.md +120 -0
  140. package/src/agents/spec-verify.md +103 -0
  141. package/src/commands/spec-init.md +6 -0
  142. package/src/commands/spec-onboard.md +6 -0
  143. package/src/commands/spec-status.md +6 -0
  144. package/src/commands/spec-sync.md +6 -0
  145. package/src/schemas/hybrid.yaml +144 -0
  146. package/src/schemas/spec-driven.yaml +155 -0
  147. package/src/schemas/tdd.yaml +203 -0
  148. package/src/skills/playwright-cli/SKILL.md +388 -0
  149. package/src/skills/playwright-cli/references/element-attributes.md +23 -0
  150. package/src/skills/playwright-cli/references/playwright-tests.md +39 -0
  151. package/src/skills/playwright-cli/references/request-mocking.md +87 -0
  152. package/src/skills/playwright-cli/references/running-code.md +241 -0
  153. package/src/skills/playwright-cli/references/session-management.md +225 -0
  154. package/src/skills/playwright-cli/references/spec-driven-testing.md +305 -0
  155. package/src/skills/playwright-cli/references/storage-state.md +275 -0
  156. package/src/skills/playwright-cli/references/test-generation.md +134 -0
  157. package/src/skills/playwright-cli/references/tracing.md +139 -0
  158. package/src/skills/playwright-cli/references/video-recording.md +143 -0
  159. package/src/skills/spec-init/SKILL.md +61 -0
  160. package/src/skills/spec-onboard/SKILL.md +178 -0
  161. package/src/skills/spec-status/SKILL.md +72 -0
  162. package/src/skills/spec-sync/SKILL.md +63 -0
  163. package/src/templates/config.yaml +14 -0
  164. package/src/templates/design-hifi.yaml +580 -0
  165. package/src/templates/design-tech.yaml +42 -0
  166. package/src/templates/design-wireframe.yaml +114 -0
  167. package/src/templates/proposal.yaml +43 -0
  168. package/src/templates/registry.yaml +3 -0
  169. package/src/templates/spec.yaml +56 -0
  170. package/src/templates/tasks.yaml +58 -0
@@ -0,0 +1,580 @@
1
+ # High-Fidelity Design Template
2
+ #
3
+ # Instructions:
4
+ # - Define the full design system specification
5
+ # - Use hex format (#RRGGBB) for all color values
6
+ # - Define a type scale covering h1-h6, body, body-small, caption
7
+ # - Include component variants with interactive states
8
+ # - Remove comment lines (starting with #) before saving
9
+ # - Keep the structure intact
10
+
11
+ id: <change-name>
12
+ schema: <schema-name>
13
+
14
+ agent:
15
+ context_files:
16
+ - <relevant files>
17
+ affected_paths:
18
+ - <paths affected>
19
+
20
+ body:
21
+ # ── Color Palette ────────────────────────────────────────────────
22
+ # Defines the complete color system. Use hex values (#RRGGBB).
23
+ # Each color group has a base value plus interactive states.
24
+ color_palette:
25
+ primary:
26
+ base: "#3B82F6"
27
+ hover: "#2563EB"
28
+ active: "#1D4ED8"
29
+ disabled: "#93C5FD"
30
+ contrast: "#FFFFFF"
31
+ secondary:
32
+ base: "#8B5CF6"
33
+ hover: "#7C3AED"
34
+ active: "#6D28D9"
35
+ disabled: "#C4B5FD"
36
+ contrast: "#FFFFFF"
37
+ accent:
38
+ base: "#F59E0B"
39
+ hover: "#D97706"
40
+ active: "#B45309"
41
+ disabled: "#FCD34D"
42
+ contrast: "#1F2937"
43
+ neutral:
44
+ base: "#6B7280"
45
+ hover: "#4B5563"
46
+ active: "#374151"
47
+ disabled: "#D1D5DB"
48
+ contrast: "#FFFFFF"
49
+ semantic:
50
+ success: "#10B981"
51
+ warning: "#F59E0B"
52
+ error: "#EF4444"
53
+ info: "#3B82F6"
54
+ surfaces:
55
+ background: "#F9FAFB"
56
+ foreground: "#111827"
57
+ card: "#FFFFFF"
58
+ border: "#E5E7EB"
59
+ muted: "#F3F4F6"
60
+
61
+ # ── Typography ────────────────────────────────────────────────────
62
+ # Define font families and a modular type scale.
63
+ # Families: list font stacks for heading, body, and monospace roles.
64
+ # Scale: exhaustive list of every type size used in the system.
65
+ typography:
66
+ families:
67
+ - name: inter
68
+ stack: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif"
69
+ role: heading
70
+ - name: inter
71
+ stack: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif"
72
+ role: body
73
+ - name: jetbrains-mono
74
+ stack: "'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace"
75
+ role: monospace
76
+
77
+ scale:
78
+ - name: h1
79
+ size: "2.5rem"
80
+ weight: 700
81
+ line_height: 1.2
82
+ letter_spacing: "-0.025em"
83
+ role: h1
84
+ - name: h2
85
+ size: "2rem"
86
+ weight: 700
87
+ line_height: 1.25
88
+ letter_spacing: "-0.02em"
89
+ role: h2
90
+ - name: h3
91
+ size: "1.5rem"
92
+ weight: 600
93
+ line_height: 1.3
94
+ letter_spacing: "-0.015em"
95
+ role: h3
96
+ - name: h4
97
+ size: "1.25rem"
98
+ weight: 600
99
+ line_height: 1.35
100
+ letter_spacing: "-0.01em"
101
+ role: h4
102
+ - name: h5
103
+ size: "1.125rem"
104
+ weight: 600
105
+ line_height: 1.4
106
+ letter_spacing: "0em"
107
+ role: h5
108
+ - name: h6
109
+ size: "1rem"
110
+ weight: 600
111
+ line_height: 1.45
112
+ letter_spacing: "0em"
113
+ role: h6
114
+ - name: body
115
+ size: "1rem"
116
+ weight: 400
117
+ line_height: 1.6
118
+ letter_spacing: "0em"
119
+ role: body
120
+ - name: body-small
121
+ size: "0.875rem"
122
+ weight: 400
123
+ line_height: 1.5
124
+ letter_spacing: "0em"
125
+ role: body-small
126
+ - name: caption
127
+ size: "0.75rem"
128
+ weight: 400
129
+ line_height: 1.4
130
+ letter_spacing: "0.025em"
131
+ role: caption
132
+
133
+ # ── Spacing System ────────────────────────────────────────────────
134
+ # base_unit: the atomic spacing unit in pixels
135
+ # scale: array of multipliers applied to base_unit (0 = 0px, 1 = base_unit, etc.)
136
+ spacing:
137
+ base_unit: 4
138
+ scale:
139
+ - 0
140
+ - 1
141
+ - 2
142
+ - 3
143
+ - 4
144
+ - 6
145
+ - 8
146
+ - 12
147
+ - 16
148
+ - 24
149
+ - 32
150
+ - 48
151
+ - 64
152
+
153
+ # ── Component Library ────────────────────────────────────────────
154
+ # Define every interactive component with its variants and states.
155
+ # Each component variant lists visual properties and per-state overrides.
156
+ component_library:
157
+ button:
158
+ - name: primary
159
+ description: |
160
+ Primary call-to-action button. Used for the most important
161
+ action on a page or section.
162
+ properties:
163
+ background: "{color_palette.primary.base}"
164
+ color: "{color_palette.primary.contrast}"
165
+ border: none
166
+ border_radius: "0.375rem"
167
+ padding: "0.5rem 1rem"
168
+ font_size: "0.875rem"
169
+ font_weight: 500
170
+ cursor: pointer
171
+ transition: "all 150ms ease"
172
+ states:
173
+ - name: default
174
+ properties:
175
+ background: "{color_palette.primary.base}"
176
+ - name: hover
177
+ properties:
178
+ background: "{color_palette.primary.hover}"
179
+ box_shadow: "0 1px 3px rgba(0,0,0,0.15)"
180
+ - name: active
181
+ properties:
182
+ background: "{color_palette.primary.active}"
183
+ transform: "translateY(0.5px)"
184
+ - name: disabled
185
+ properties:
186
+ background: "{color_palette.primary.disabled}"
187
+ cursor: not-allowed
188
+ opacity: 0.6
189
+ - name: focus
190
+ properties:
191
+ outline: "2px solid {color_palette.primary.base}"
192
+ outline_offset: 2
193
+
194
+ - name: secondary
195
+ description: |
196
+ Secondary action button. Used for supporting actions
197
+ that are less prominent than primary.
198
+ properties:
199
+ background: "{color_palette.secondary.base}"
200
+ color: "{color_palette.secondary.contrast}"
201
+ border: none
202
+ border_radius: "0.375rem"
203
+ padding: "0.5rem 1rem"
204
+ font_size: "0.875rem"
205
+ font_weight: 500
206
+ cursor: pointer
207
+ transition: "all 150ms ease"
208
+ states:
209
+ - name: default
210
+ properties:
211
+ background: "{color_palette.secondary.base}"
212
+ - name: hover
213
+ properties:
214
+ background: "{color_palette.secondary.hover}"
215
+ box_shadow: "0 1px 3px rgba(0,0,0,0.15)"
216
+ - name: active
217
+ properties:
218
+ background: "{color_palette.secondary.active}"
219
+ transform: "translateY(0.5px)"
220
+ - name: disabled
221
+ properties:
222
+ background: "{color_palette.secondary.disabled}"
223
+ cursor: not-allowed
224
+ opacity: 0.6
225
+ - name: focus
226
+ properties:
227
+ outline: "2px solid {color_palette.secondary.base}"
228
+ outline_offset: 2
229
+
230
+ - name: ghost
231
+ description: |
232
+ Ghost button. Minimal visual weight; used for tertiary
233
+ actions, toolbar items, or close buttons.
234
+ properties:
235
+ background: transparent
236
+ color: "{color_palette.neutral.base}"
237
+ border: none
238
+ border_radius: "0.375rem"
239
+ padding: "0.5rem 1rem"
240
+ font_size: "0.875rem"
241
+ font_weight: 500
242
+ cursor: pointer
243
+ transition: "all 150ms ease"
244
+ states:
245
+ - name: default
246
+ properties:
247
+ background: transparent
248
+ - name: hover
249
+ properties:
250
+ background: "{color_palette.surfaces.muted}"
251
+ - name: active
252
+ properties:
253
+ background: "{color_palette.surfaces.border}"
254
+ - name: disabled
255
+ properties:
256
+ opacity: 0.4
257
+ cursor: not-allowed
258
+ - name: focus
259
+ properties:
260
+ outline: "2px solid {color_palette.primary.base}"
261
+ outline_offset: 2
262
+
263
+ - name: outline
264
+ description: |
265
+ Outline button. Borders but no background fill.
266
+ Used for secondary CTAs alongside primary buttons.
267
+ properties:
268
+ background: transparent
269
+ color: "{color_palette.primary.base}"
270
+ border: "1px solid {color_palette.primary.base}"
271
+ border_radius: "0.375rem"
272
+ padding: "0.5rem 1rem"
273
+ font_size: "0.875rem"
274
+ font_weight: 500
275
+ cursor: pointer
276
+ transition: "all 150ms ease"
277
+ states:
278
+ - name: default
279
+ properties:
280
+ background: transparent
281
+ - name: hover
282
+ properties:
283
+ background: "{color_palette.primary.base}"
284
+ color: "{color_palette.primary.contrast}"
285
+ - name: active
286
+ properties:
287
+ background: "{color_palette.primary.active}"
288
+ color: "{color_palette.primary.contrast}"
289
+ - name: disabled
290
+ properties:
291
+ opacity: 0.4
292
+ cursor: not-allowed
293
+ border_color: "{color_palette.neutral.disabled}"
294
+ - name: focus
295
+ properties:
296
+ outline: "2px solid {color_palette.primary.base}"
297
+ outline_offset: 2
298
+
299
+ card:
300
+ - name: default
301
+ description: |
302
+ Standard content card with rounded corners and shadow.
303
+ Used for dashboards, feature grids, and content listings.
304
+ properties:
305
+ background: "{color_palette.surfaces.card}"
306
+ border: "1px solid {color_palette.surfaces.border}"
307
+ border_radius: "0.5rem"
308
+ box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
309
+ padding: "1.5rem"
310
+ transition: "all 200ms ease"
311
+ states:
312
+ - name: default
313
+ properties:
314
+ box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
315
+ - name: hover
316
+ properties:
317
+ box_shadow: "0 4px 12px rgba(0,0,0,0.12)"
318
+ transform: "translateY(-2px)"
319
+ - name: focus
320
+ properties:
321
+ outline: "2px solid {color_palette.primary.base}"
322
+ outline_offset: 2
323
+
324
+ - name: elevated
325
+ description: |
326
+ Elevated card with stronger shadow. Used for modals,
327
+ dropdowns, and content that should float above the page.
328
+ properties:
329
+ background: "{color_palette.surfaces.card}"
330
+ border: "1px solid {color_palette.surfaces.border}"
331
+ border_radius: "0.5rem"
332
+ box_shadow: "0 8px 24px rgba(0,0,0,0.15)"
333
+ padding: "1.5rem"
334
+ states:
335
+ - name: default
336
+ properties:
337
+ box_shadow: "0 8px 24px rgba(0,0,0,0.15)"
338
+
339
+ - name: interactive
340
+ description: |
341
+ Clickable card with hover lift. Used for navigation cards,
342
+ selection grids, and gallery items.
343
+ properties:
344
+ background: "{color_palette.surfaces.card}"
345
+ border: "1px solid {color_palette.surfaces.border}"
346
+ border_radius: "0.5rem"
347
+ box_shadow: "0 1px 3px rgba(0,0,0,0.08)"
348
+ padding: "1.5rem"
349
+ cursor: pointer
350
+ transition: "all 200ms ease"
351
+ states:
352
+ - name: default
353
+ properties:
354
+ border_color: "{color_palette.surfaces.border}"
355
+ - name: hover
356
+ properties:
357
+ border_color: "{color_palette.primary.base}"
358
+ box_shadow: "0 4px 12px rgba(0,0,0,0.12)"
359
+ transform: "translateY(-2px)"
360
+ - name: selected
361
+ properties:
362
+ border_color: "{color_palette.primary.base}"
363
+ background: "{color_palette.primary.base}10"
364
+ - name: disabled
365
+ properties:
366
+ opacity: 0.5
367
+ cursor: not-allowed
368
+
369
+ input:
370
+ - name: default
371
+ description: |
372
+ Standard text input field. Used for forms, search bars,
373
+ and data entry across the application.
374
+ properties:
375
+ background: "{color_palette.surfaces.card}"
376
+ color: "{color_palette.surfaces.foreground}"
377
+ border: "1px solid {color_palette.surfaces.border}"
378
+ border_radius: "0.375rem"
379
+ padding: "0.5rem 0.75rem"
380
+ font_size: "0.875rem"
381
+ font_weight: 400
382
+ line_height: 1.5
383
+ transition: "all 150ms ease"
384
+ width: "100%"
385
+ states:
386
+ - name: default
387
+ properties:
388
+ border_color: "{color_palette.surfaces.border}"
389
+ - name: hover
390
+ properties:
391
+ border_color: "{color_palette.neutral.base}"
392
+ - name: focus
393
+ properties:
394
+ border_color: "{color_palette.primary.base}"
395
+ box_shadow: "0 0 0 3px {color_palette.primary.base}20"
396
+ outline: none
397
+ - name: disabled
398
+ properties:
399
+ background: "{color_palette.surfaces.muted}"
400
+ cursor: not-allowed
401
+ opacity: 0.6
402
+ - name: error
403
+ properties:
404
+ border_color: "{color_palette.semantic.error}"
405
+ box_shadow: "0 0 0 3px {color_palette.semantic.error}20"
406
+
407
+ - name: textarea
408
+ description: |
409
+ Multi-line text input. Used for longer form responses,
410
+ descriptions, and comment fields.
411
+ properties:
412
+ background: "{color_palette.surfaces.card}"
413
+ color: "{color_palette.surfaces.foreground}"
414
+ border: "1px solid {color_palette.surfaces.border}"
415
+ border_radius: "0.375rem"
416
+ padding: "0.75rem"
417
+ font_size: "0.875rem"
418
+ font_weight: 400
419
+ line_height: 1.5
420
+ resize: vertical
421
+ min_height: "6rem"
422
+ transition: "all 150ms ease"
423
+ width: "100%"
424
+ states:
425
+ - name: default
426
+ properties:
427
+ border_color: "{color_palette.surfaces.border}"
428
+ - name: focus
429
+ properties:
430
+ border_color: "{color_palette.primary.base}"
431
+ box_shadow: "0 0 0 3px {color_palette.primary.base}20"
432
+ outline: none
433
+ - name: disabled
434
+ properties:
435
+ background: "{color_palette.surfaces.muted}"
436
+ cursor: not-allowed
437
+ opacity: 0.6
438
+
439
+ - name: select
440
+ description: |
441
+ Dropdown select field. Used for choosing from a predefined
442
+ list of options.
443
+ properties:
444
+ background: "{color_palette.surfaces.card}"
445
+ color: "{color_palette.surfaces.foreground}"
446
+ border: "1px solid {color_palette.surfaces.border}"
447
+ border_radius: "0.375rem"
448
+ padding: "0.5rem 2rem 0.5rem 0.75rem"
449
+ font_size: "0.875rem"
450
+ font_weight: 400
451
+ cursor: pointer
452
+ transition: "all 150ms ease"
453
+ width: "100%"
454
+ appearance: none
455
+ states:
456
+ - name: default
457
+ properties:
458
+ border_color: "{color_palette.surfaces.border}"
459
+ - name: hover
460
+ properties:
461
+ border_color: "{color_palette.neutral.base}"
462
+ - name: focus
463
+ properties:
464
+ border_color: "{color_palette.primary.base}"
465
+ box_shadow: "0 0 0 3px {color_palette.primary.base}20"
466
+ outline: none
467
+
468
+ navigation:
469
+ - name: navbar
470
+ description: |
471
+ Top-level horizontal navigation bar. Used for the main
472
+ application header and primary page navigation.
473
+ properties:
474
+ background: "{color_palette.surfaces.card}"
475
+ border_bottom: "1px solid {color_palette.surfaces.border}"
476
+ height: "3.5rem"
477
+ padding: "0 1.5rem"
478
+ display: flex
479
+ align_items: center
480
+ gap: "1.5rem"
481
+ states:
482
+ - name: default
483
+ properties:
484
+ background: "{color_palette.surfaces.card}"
485
+
486
+ - name: sidebar
487
+ description: |
488
+ Vertical side navigation panel. Used for secondary
489
+ navigation, settings menus, and dashboard sidebars.
490
+ properties:
491
+ background: "{color_palette.surfaces.background}"
492
+ border_right: "1px solid {color_palette.surfaces.border}"
493
+ width: "16rem"
494
+ padding: "1rem"
495
+ display: flex
496
+ flex_direction: column
497
+ gap: "0.25rem"
498
+ states:
499
+ - name: default
500
+ properties:
501
+ background: "{color_palette.surfaces.background}"
502
+
503
+ - name: tabs
504
+ description: |
505
+ Tab-based navigation. Used for switching between
506
+ related content sections without page navigation.
507
+ properties:
508
+ display: flex
509
+ gap: 0
510
+ border_bottom: "1px solid {color_palette.surfaces.border}"
511
+ states:
512
+ - name: default
513
+ properties:
514
+ border_bottom: "1px solid {color_palette.surfaces.border}"
515
+ - name: active
516
+ properties:
517
+ color: "{color_palette.primary.base}"
518
+ border_bottom: "2px solid {color_palette.primary.base}"
519
+ font_weight: 600
520
+
521
+ - name: breadcrumb
522
+ description: |
523
+ Breadcrumb trail navigation. Used to show the user's
524
+ current location within a hierarchy.
525
+ properties:
526
+ display: flex
527
+ align_items: center
528
+ gap: "0.5rem"
529
+ font_size: "0.875rem"
530
+ color: "{color_palette.neutral.base}"
531
+ states:
532
+ - name: default
533
+ properties:
534
+ color: "{color_palette.neutral.base}"
535
+ - name: active
536
+ properties:
537
+ color: "{color_palette.surfaces.foreground}"
538
+ font_weight: 500
539
+
540
+ # ── Responsive Breakpoints ────────────────────────────────────────
541
+ # Define the responsive grid system breakpoints.
542
+ # Each breakpoint defines where it activates (min_width), the column
543
+ # count for that viewport, and any layout rules that apply.
544
+ breakpoints:
545
+ - name: mobile
546
+ min_width: 0
547
+ columns: 4
548
+ rules:
549
+ - "Single-column layouts"
550
+ - "Collapse sidebar to drawer overlay"
551
+ - "Stack navigation vertically"
552
+ - "Reduce padding to 1rem"
553
+
554
+ - name: tablet
555
+ min_width: 640
556
+ columns: 8
557
+ rules:
558
+ - "Two-column grid layouts"
559
+ - "Show sidebar as collapsed icon bar"
560
+ - "Maintain horizontal nav with reduced labels"
561
+ - "Padding: 1.5rem"
562
+
563
+ - name: desktop
564
+ min_width: 1024
565
+ columns: 12
566
+ rules:
567
+ - "Full grid system"
568
+ - "Expanded sidebar with labels"
569
+ - "Multi-column content layouts"
570
+ - "Padding: 2rem"
571
+ - "Max content width: 1200px"
572
+
573
+ - name: wide
574
+ min_width: 1440
575
+ columns: 12
576
+ rules:
577
+ - "All desktop rules apply"
578
+ - "Max content width: 1440px"
579
+ - "Optional sidebar pinned open"
580
+ - "Extra whitespace around content areas"
@@ -0,0 +1,42 @@
1
+ # Design Template
2
+ #
3
+ # Instructions:
4
+ # - Focus on HOW to implement
5
+ # - Include alternatives considered
6
+ # - Only create if change is complex enough
7
+
8
+ id: <change-name>
9
+ schema: <schema-name>
10
+
11
+ agent:
12
+ context_files:
13
+ - <relevant files>
14
+ affected_paths:
15
+ - <paths affected>
16
+
17
+ body:
18
+ context: |
19
+ <Background, current state, constraints>
20
+
21
+ goals:
22
+ - <What this design achieves>
23
+ - <Another goal>
24
+
25
+ non_goals:
26
+ - <What's explicitly out of scope>
27
+ - <Another non-goal>
28
+
29
+ decisions:
30
+ - title: <decision title>
31
+ approach: |
32
+ <Chosen approach and rationale>
33
+ alternatives: |
34
+ <Alternatives considered and why not chosen>
35
+
36
+ - title: <another decision>
37
+ approach: |
38
+ <approach>
39
+
40
+ risks:
41
+ - <Risk and mitigation strategy>
42
+ - <Another risk>