arkaos 5.2.0 → 5.4.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 (62) hide show
  1. package/README.md +5 -3
  2. package/THE-ARKAOS-GUIDE.md +2 -2
  3. package/VERSION +1 -1
  4. package/arka/SKILL.md +18 -2
  5. package/config/constitution.yaml +2 -2
  6. package/config/skills-provenance.yaml +10 -0
  7. package/core/governance/evidence_checks.py +55 -10
  8. package/core/hooks/session_start.py +1 -1
  9. package/departments/brand/skills/colors/SKILL.md +3 -1
  10. package/departments/brand/skills/design-dna/SKILL.md +191 -0
  11. package/departments/brand/skills/design-dna/references/design-dna.LICENSE +21 -0
  12. package/departments/brand/skills/design-dna/references/generation-guide.md +209 -0
  13. package/departments/brand/skills/design-dna/references/schema.md +366 -0
  14. package/departments/brand/skills/design-system/SKILL.md +12 -3
  15. package/departments/dev/SKILL.md +25 -0
  16. package/departments/dev/skills/adversarial-review/SKILL.md +5 -0
  17. package/departments/dev/skills/api-design/SKILL.md +8 -0
  18. package/departments/dev/skills/architecture-design/SKILL.md +6 -0
  19. package/departments/dev/skills/build-fix/SKILL.md +8 -2
  20. package/departments/dev/skills/clean-code-review/SKILL.md +8 -0
  21. package/departments/dev/skills/code-review/SKILL.md +14 -0
  22. package/departments/dev/skills/dependency-audit/SKILL.md +8 -0
  23. package/departments/dev/skills/refactor-plan/SKILL.md +7 -0
  24. package/departments/dev/skills/research/SKILL.md +52 -6
  25. package/departments/dev/skills/stack-check/SKILL.md +9 -0
  26. package/harness/codex/AGENTS.md +2 -2
  27. package/harness/copilot/copilot-instructions.md +2 -2
  28. package/harness/cursor/rules/arkaos.mdc +3 -3
  29. package/harness/gemini/GEMINI.md +2 -2
  30. package/harness/opencode/AGENTS.md +2 -2
  31. package/harness/opencode/agents/arka-architect-gabriel.md +1 -1
  32. package/harness/opencode/agents/arka-brand-director-valentina.md +1 -1
  33. package/harness/opencode/agents/arka-cfo-helena.md +1 -1
  34. package/harness/opencode/agents/arka-chief-of-staff-afonso.md +1 -1
  35. package/harness/opencode/agents/arka-community-strategist-beatriz.md +1 -1
  36. package/harness/opencode/agents/arka-content-strategist-rafael.md +1 -1
  37. package/harness/opencode/agents/arka-conversion-strategist-ines.md +1 -1
  38. package/harness/opencode/agents/arka-coo-sofia.md +1 -1
  39. package/harness/opencode/agents/arka-copy-director-eduardo.md +1 -1
  40. package/harness/opencode/agents/arka-cqo-marta.md +1 -1
  41. package/harness/opencode/agents/arka-cto-marco.md +1 -1
  42. package/harness/opencode/agents/arka-design-ops-lead-iris.md +1 -1
  43. package/harness/opencode/agents/arka-ecom-director-ricardo.md +1 -1
  44. package/harness/opencode/agents/arka-knowledge-director-clara.md +1 -1
  45. package/harness/opencode/agents/arka-leadership-director-rodrigo.md +1 -1
  46. package/harness/opencode/agents/arka-marketing-director-luna.md +1 -1
  47. package/harness/opencode/agents/arka-ops-lead-daniel.md +1 -1
  48. package/harness/opencode/agents/arka-pm-director-carolina.md +1 -1
  49. package/harness/opencode/agents/arka-revops-lead-vicente.md +1 -1
  50. package/harness/opencode/agents/arka-saas-strategist-tiago.md +1 -1
  51. package/harness/opencode/agents/arka-sales-director-miguel.md +1 -1
  52. package/harness/opencode/agents/arka-strategy-director-tomas.md +1 -1
  53. package/harness/opencode/agents/arka-tech-director-francisca.md +1 -1
  54. package/harness/opencode/agents/arka-tech-lead-paulo.md +1 -1
  55. package/harness/opencode/agents/arka-video-producer-simao.md +1 -1
  56. package/harness/zed/.rules +2 -2
  57. package/knowledge/commands-keywords.json +10 -2
  58. package/knowledge/commands-registry.json +35 -3
  59. package/knowledge/skills-manifest.json +16 -1
  60. package/package.json +1 -1
  61. package/pyproject.toml +1 -1
  62. package/scripts/skills_catalog_gen.py +15 -6
@@ -0,0 +1,209 @@
1
+ # Generation Guide
2
+
3
+ How to use a completed Design DNA JSON to generate designs in Phase 3. Covers all three dimensions.
4
+
5
+ ## Priority Order
6
+
7
+ When generating a design from DNA JSON + content:
8
+
9
+ 1. **Color & Typography** — define 80% of visual identity
10
+ 2. **Spacing & Layout** — structural rhythm
11
+ 3. **Shape & Elevation** — surface treatment
12
+ 4. **Design Style qualitative fields** — mood, personality, composition approach
13
+ 5. **Visual Effects** — special rendering layer (Canvas, WebGL, shaders, etc.)
14
+ 6. **Motion & Interaction** — enhance after static layout and effects are solid
15
+
16
+ ## Dimension 1: design_system → Code
17
+
18
+ ### Tailwind CSS / Utility-First
19
+ ```
20
+ color.primary.hex → --color-primary / bg-[hex]
21
+ typography.font_families → font-family config
22
+ spacing.scale → spacing config values
23
+ shape.border_radius → rounded-{sm|md|lg|full}
24
+ elevation.levels → shadow-{sm|md|lg}
25
+ ```
26
+
27
+ ### Plain CSS / CSS Variables
28
+ Generate a `:root` block with all design tokens:
29
+ ```css
30
+ :root {
31
+ --color-primary: {color.primary.hex};
32
+ --color-secondary: {color.secondary.hex};
33
+ --color-accent: {color.accent.hex};
34
+ --font-heading: {typography.font_families.heading};
35
+ --font-body: {typography.font_families.body};
36
+ --radius-sm: {shape.border_radius.small};
37
+ --radius-md: {shape.border_radius.medium};
38
+ --radius-lg: {shape.border_radius.large};
39
+ --shadow-low: {elevation.levels.low};
40
+ --shadow-med: {elevation.levels.medium};
41
+ --shadow-high: {elevation.levels.high};
42
+ --ease: {motion.easing};
43
+ --duration-micro: {motion.duration_scale.micro};
44
+ --duration-normal: {motion.duration_scale.normal};
45
+ --duration-macro: {motion.duration_scale.macro};
46
+ /* ... map all tokens */
47
+ }
48
+ ```
49
+
50
+ ### Component Decisions
51
+ - `components.button_style` → button classes and variants
52
+ - `components.card_style` → card container treatment
53
+ - `components.navigation_pattern` → nav component choice
54
+ - `interaction_feel.hover_behavior` → :hover / :focus states
55
+ - `motion.easing` + `motion.duration_scale` → transition properties
56
+
57
+ ## Dimension 2: design_style → Subjective Decisions
58
+
59
+ | DNA Field | Guides |
60
+ |---|---|
61
+ | aesthetic.mood | Overall emotional feeling — warm tones, cool precision, etc. |
62
+ | visual_language.whitespace_usage | padding/margin generosity |
63
+ | visual_language.contrast_level | How much elements pop vs. blend |
64
+ | composition.hierarchy_method | What tool to use for emphasis |
65
+ | composition.balance_type | Symmetric layout vs. dynamic asymmetry |
66
+ | imagery.graphic_elements | Decorative SVGs, gradients, patterns |
67
+ | brand_voice_in_ui.tone | Microcopy phrasing |
68
+ | interaction_feel.microinteraction_density | How many hover/click effects |
69
+
70
+ ## Dimension 3: visual_effects → Special Rendering
71
+
72
+ ### Technology Selection by Performance Tier
73
+
74
+ | Tier | Technologies | When to Use |
75
+ |---|---|---|
76
+ | **lightweight** | CSS animations, SVG SMIL, vanilla JS | `overview.performance_tier` = "lightweight" |
77
+ | **medium** | Canvas 2D, GSAP, Lottie, anime.js | `overview.performance_tier` = "medium" |
78
+ | **heavy** | Three.js, custom GLSL, Pixi.js, WebGL | `overview.performance_tier` = "heavy" |
79
+
80
+ ### Implementation Patterns
81
+
82
+ #### Background Effects
83
+ ```
84
+ "none" → skip
85
+ "gradient-animation" → CSS @keyframes on linear-gradient or conic-gradient
86
+ "noise-field" → Canvas 2D with Perlin/simplex noise
87
+ "mesh-gradient" → SVG <mesh> or canvas interpolation
88
+ "video-bg" → <video autoplay muted loop> with poster fallback
89
+ "generative-art" → Canvas 2D or WebGL generative algorithms
90
+ ```
91
+
92
+ #### Particle Systems
93
+ When `particle_systems.enabled: true`:
94
+ - For `count` < 100 and no complex physics → vanilla JS + Canvas 2D
95
+ - For `count` >= 100 or complex interaction → consider Pixi.js or Three.js Points
96
+ - Map `interaction` ("mouse-repel", "mouse-attract") to pointer event handlers
97
+ - Use `requestAnimationFrame` loop; include destroy/cleanup on unmount
98
+
99
+ #### 3D Elements
100
+ When `3d_elements.enabled: true`:
101
+ - Default to Three.js unless DNA specifies otherwise
102
+ - Apply `lighting`, `camera`, `materials` from params
103
+ - Add `post_processing` effects via EffectComposer
104
+ - Handle resize with `ResizeObserver`
105
+ - Load via CDN: `https://cdn.jsdelivr.net/npm/three@latest/build/three.module.js`
106
+
107
+ #### Shader Effects
108
+ When `shader_effects.enabled: true`:
109
+ - Create vertex/fragment shaders based on `type`
110
+ - Pass `uniforms` from params (time, resolution, mouse position)
111
+ - For "noise-distortion": use noise functions matching `noise_type`
112
+ - Animate via `requestAnimationFrame` updating `u_time` uniform
113
+
114
+ #### Scroll Effects
115
+ - **Parallax**: Use `transform: translateY()` with scroll offset × layer speed
116
+ - **Scroll-triggered**: Use `IntersectionObserver` with `threshold` array
117
+ - **Scrub behavior**: If "scrubbed", animation progress = scroll progress. If "triggered", play once on enter.
118
+
119
+ #### Text Effects
120
+ ```
121
+ "split-letter-animate" → Split text into <span> per char/word, stagger CSS animation
122
+ "typewriter" → CSS steps() or JS interval revealing chars
123
+ "glitch" → Layered clip-path + color offset animation
124
+ "gradient-fill" → background-clip: text with animated gradient
125
+ "3d-extrude" → text-shadow stack or WebGL text geometry
126
+ ```
127
+
128
+ #### Cursor Effects
129
+ When `cursor_effects.enabled: true`:
130
+ - Hide default cursor: `cursor: none`
131
+ - Create custom cursor element following `pointermove`
132
+ - "magnetic-buttons": Apply transform pull on hover proximity
133
+ - "spotlight": Radial gradient mask following cursor
134
+ - "trail": Spawn fading elements on move
135
+
136
+ #### Glassmorphism / Neumorphism
137
+ ```
138
+ "glass" → backdrop-filter: blur({blur_radius}); background: rgba(..., {transparency})
139
+ "neumorphic-light" → Dual box-shadow (light + dark offset) on light bg
140
+ "neumorphic-dark" → Dual box-shadow (inverted) on dark bg
141
+ "frosted-layers" → Stacked blur layers with varying opacity
142
+ ```
143
+
144
+ #### Canvas Drawings
145
+ When `canvas_drawings.enabled: true`:
146
+ - Initialize canvas with `width/height` matching container
147
+ - Use `draw_method` to select rendering approach
148
+ - Animate with `requestAnimationFrame`
149
+ - Handle `responsiveness` via ResizeObserver
150
+
151
+ #### SVG Animations
152
+ When `svg_animations.enabled: true`:
153
+ - "path-draw": Animate `stroke-dashoffset` from path length to 0
154
+ - "morph-shapes": Interpolate `d` attribute between two paths
155
+ - "stroke-animation": Animate stroke properties (dasharray, width, color)
156
+
157
+ ### Fallback Strategy
158
+
159
+ Always implement the fallback defined in `overview.fallback_strategy`:
160
+
161
+ ```js
162
+ // Example: reduce to CSS on low-end devices
163
+ const prefersReduced = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
164
+ const isLowEnd = navigator.hardwareConcurrency <= 2;
165
+ if (prefersReduced || isLowEnd) {
166
+ // Apply fallback: static CSS version, disable canvas/WebGL
167
+ }
168
+ ```
169
+
170
+ ## Output Format
171
+
172
+ Generate output as a single self-contained HTML file with inline CSS and JS (unless user specifies a framework). Include:
173
+
174
+ 1. CSS custom properties block from `design_system` tokens
175
+ 2. Component styles from `design_system.components` + `design_style`
176
+ 3. Layout structure per `design_system.layout`
177
+ 4. Content populated from user-provided content
178
+ 5. Visual effects implemented per `visual_effects` specification
179
+ 6. Animations/transitions if `design_system.motion.philosophy` is not "none"
180
+ 7. Fallback handling for effects
181
+
182
+ For heavy effects requiring external libraries, load via CDN `<script>` tags:
183
+ ```html
184
+ <!-- Three.js -->
185
+ <script type="importmap">{"imports":{"three":"https://cdn.jsdelivr.net/npm/three@latest/build/three.module.js"}}</script>
186
+
187
+ <!-- GSAP -->
188
+ <script src="https://cdn.jsdelivr.net/npm/gsap@latest/dist/gsap.min.js"></script>
189
+
190
+ <!-- Lottie -->
191
+ <script src="https://cdn.jsdelivr.net/npm/lottie-web@latest/build/player/lottie.min.js"></script>
192
+ ```
193
+
194
+ ## Quality Checks
195
+
196
+ Before delivering, verify:
197
+ - [ ] Every color in output traces back to DNA palette
198
+ - [ ] Font families match DNA specification
199
+ - [ ] Spacing rhythm matches DNA scale
200
+ - [ ] Border radius matches DNA shape tokens
201
+ - [ ] Overall mood matches `design_style.aesthetic.mood`
202
+ - [ ] Component patterns match DNA `components` descriptions
203
+ - [ ] Contrast ratios meet WCAG AA minimum (4.5:1 body text, 3:1 large text)
204
+ - [ ] Visual effects match `visual_effects` specification (type, technology, params)
205
+ - [ ] Fallback strategy is implemented for effects
206
+ - [ ] `prefers-reduced-motion` is respected
207
+ - [ ] No effects render when their `enabled` flag is `false`
208
+ - [ ] Canvas/WebGL contexts are properly sized and handle resize
209
+ - [ ] Animation loops use `requestAnimationFrame` (no `setInterval`)
@@ -0,0 +1,366 @@
1
+ # Design DNA Schema
2
+
3
+ Three-dimensional design profile:
4
+ - **design_system** — measurable tokens
5
+ - **design_style** — qualitative perception
6
+ - **visual_effects** — special rendering such as Canvas, WebGL, 3D, particles, shaders, scroll effects, cursor effects, SVG animation, and glassmorphism
7
+
8
+ Every field below must appear in the final JSON output.
9
+
10
+ ## Top-Level Structure
11
+
12
+ ### `meta`
13
+ - `name`
14
+ - `description`
15
+ - `source_references`
16
+ - `created_at`
17
+
18
+ ### `design_system`
19
+ The structural and measurable layer.
20
+
21
+ #### `design_system.color`
22
+ - `palette_type`
23
+ - `primary.hex`
24
+ - `primary.role`
25
+ - `secondary.hex`
26
+ - `secondary.role`
27
+ - `accent.hex`
28
+ - `accent.role`
29
+ - `neutral.scale`
30
+ - `neutral.usage`
31
+ - `semantic.success`
32
+ - `semantic.warning`
33
+ - `semantic.error`
34
+ - `semantic.info`
35
+ - `surface.background`
36
+ - `surface.card`
37
+ - `surface.elevated`
38
+ - `contrast_strategy`
39
+
40
+ #### `design_system.typography`
41
+ - `type_scale.display.size`
42
+ - `type_scale.display.weight`
43
+ - `type_scale.display.line_height`
44
+ - `type_scale.display.tracking`
45
+ - `type_scale.heading_1.size`
46
+ - `type_scale.heading_1.weight`
47
+ - `type_scale.heading_1.line_height`
48
+ - `type_scale.heading_1.tracking`
49
+ - `type_scale.heading_2.size`
50
+ - `type_scale.heading_2.weight`
51
+ - `type_scale.heading_2.line_height`
52
+ - `type_scale.heading_2.tracking`
53
+ - `type_scale.heading_3.size`
54
+ - `type_scale.heading_3.weight`
55
+ - `type_scale.heading_3.line_height`
56
+ - `type_scale.heading_3.tracking`
57
+ - `type_scale.body.size`
58
+ - `type_scale.body.weight`
59
+ - `type_scale.body.line_height`
60
+ - `type_scale.body.tracking`
61
+ - `type_scale.body_small.size`
62
+ - `type_scale.body_small.weight`
63
+ - `type_scale.body_small.line_height`
64
+ - `type_scale.body_small.tracking`
65
+ - `type_scale.caption.size`
66
+ - `type_scale.caption.weight`
67
+ - `type_scale.caption.line_height`
68
+ - `type_scale.caption.tracking`
69
+ - `type_scale.overline.size`
70
+ - `type_scale.overline.weight`
71
+ - `type_scale.overline.line_height`
72
+ - `type_scale.overline.tracking`
73
+ - `font_families.heading`
74
+ - `font_families.body`
75
+ - `font_families.mono`
76
+ - `font_style_notes`
77
+
78
+ #### `design_system.spacing`
79
+ - `base_unit`
80
+ - `scale`
81
+ - `content_density`
82
+ - `section_rhythm`
83
+
84
+ #### `design_system.layout`
85
+ - `grid_system`
86
+ - `max_content_width`
87
+ - `columns`
88
+ - `gutter`
89
+ - `breakpoints`
90
+ - `alignment_tendency`
91
+
92
+ #### `design_system.shape`
93
+ - `border_radius.small`
94
+ - `border_radius.medium`
95
+ - `border_radius.large`
96
+ - `border_radius.pill`
97
+ - `border_usage`
98
+ - `divider_style`
99
+
100
+ #### `design_system.elevation`
101
+ - `shadow_style`
102
+ - `levels.low`
103
+ - `levels.medium`
104
+ - `levels.high`
105
+ - `depth_cues`
106
+
107
+ #### `design_system.iconography`
108
+ - `style`
109
+ - `stroke_weight`
110
+ - `size_scale`
111
+ - `preferred_set`
112
+
113
+ #### `design_system.motion`
114
+ - `easing`
115
+ - `duration_scale.micro`
116
+ - `duration_scale.normal`
117
+ - `duration_scale.macro`
118
+ - `entrance_pattern`
119
+ - `exit_pattern`
120
+ - `philosophy`
121
+
122
+ #### `design_system.components`
123
+ - `button_style`
124
+ - `input_style`
125
+ - `card_style`
126
+ - `navigation_pattern`
127
+ - `modal_style`
128
+ - `list_style`
129
+ - `component_notes`
130
+
131
+ ### `design_style`
132
+ The qualitative and perceptual layer.
133
+
134
+ #### `design_style.aesthetic`
135
+ - `mood`
136
+ - `visual_metaphor`
137
+ - `era_influence`
138
+ - `genre`
139
+ - `personality_traits`
140
+ - `adjectives`
141
+
142
+ #### `design_style.visual_language`
143
+ - `complexity`
144
+ - `ornamentation`
145
+ - `whitespace_usage`
146
+ - `visual_weight_distribution`
147
+ - `focal_strategy`
148
+ - `contrast_level`
149
+ - `texture_usage`
150
+
151
+ #### `design_style.composition`
152
+ - `hierarchy_method`
153
+ - `balance_type`
154
+ - `flow_direction`
155
+ - `grouping_strategy`
156
+ - `negative_space_role`
157
+
158
+ #### `design_style.imagery`
159
+ - `photo_treatment`
160
+ - `illustration_style`
161
+ - `graphic_elements`
162
+ - `pattern_usage`
163
+ - `image_shape`
164
+
165
+ #### `design_style.interaction_feel`
166
+ - `feedback_style`
167
+ - `hover_behavior`
168
+ - `transition_personality`
169
+ - `loading_style`
170
+ - `microinteraction_density`
171
+
172
+ #### `design_style.brand_voice_in_ui`
173
+ - `tone`
174
+ - `formality`
175
+ - `cta_style`
176
+ - `empty_state_approach`
177
+ - `error_tone`
178
+
179
+ ### `visual_effects`
180
+ The special rendering and advanced visual behavior layer.
181
+
182
+ #### `visual_effects.overview`
183
+ - `effect_intensity`
184
+ - `performance_tier`
185
+ - `fallback_strategy`
186
+ - `primary_technology`
187
+
188
+ #### `visual_effects.background_effects`
189
+ - `type`
190
+ - `description`
191
+ - `technology`
192
+ - `params.color_palette`
193
+ - `params.speed`
194
+ - `params.density`
195
+ - `params.opacity`
196
+ - `params.blend_mode`
197
+
198
+ #### `visual_effects.particle_systems`
199
+ - `enabled`
200
+ - `type`
201
+ - `description`
202
+ - `technology`
203
+ - `params.count`
204
+ - `params.shape`
205
+ - `params.size_range`
206
+ - `params.movement_pattern`
207
+ - `params.color_behavior`
208
+ - `params.interaction`
209
+ - `params.spawn_area`
210
+
211
+ #### `visual_effects.3d_elements`
212
+ - `enabled`
213
+ - `type`
214
+ - `description`
215
+ - `technology`
216
+ - `params.renderer`
217
+ - `params.lighting`
218
+ - `params.camera`
219
+ - `params.materials`
220
+ - `params.geometry`
221
+ - `params.post_processing`
222
+ - `params.interaction_model`
223
+
224
+ #### `visual_effects.shader_effects`
225
+ - `enabled`
226
+ - `type`
227
+ - `description`
228
+ - `technology`
229
+ - `params.uniforms`
230
+ - `params.vertex_manipulation`
231
+ - `params.fragment_output`
232
+ - `params.noise_type`
233
+ - `params.distortion`
234
+
235
+ #### `visual_effects.scroll_effects.parallax`
236
+ - `enabled`
237
+ - `layers`
238
+ - `depth_range`
239
+ - `speed_curve`
240
+
241
+ #### `visual_effects.scroll_effects.scroll_triggered_animations`
242
+ - `enabled`
243
+ - `trigger_points`
244
+ - `animation_type`
245
+ - `scrub_behavior`
246
+
247
+ #### `visual_effects.scroll_effects.scroll_morphing`
248
+ - `enabled`
249
+ - `description`
250
+
251
+ #### `visual_effects.text_effects`
252
+ - `type`
253
+ - `description`
254
+ - `technology`
255
+ - `params.split_strategy`
256
+ - `params.animation_per_unit`
257
+ - `params.stagger`
258
+ - `params.effect_style`
259
+
260
+ #### `visual_effects.cursor_effects`
261
+ - `enabled`
262
+ - `type`
263
+ - `description`
264
+ - `params.shape`
265
+ - `params.size`
266
+ - `params.blend_mode`
267
+ - `params.trail`
268
+ - `params.interaction_zone`
269
+
270
+ #### `visual_effects.image_effects`
271
+ - `type`
272
+ - `description`
273
+ - `technology`
274
+ - `params.filter_pipeline`
275
+ - `params.hover_transform`
276
+ - `params.reveal_animation`
277
+ - `params.distortion_type`
278
+
279
+ #### `visual_effects.glassmorphism_neumorphism`
280
+ - `enabled`
281
+ - `style`
282
+ - `params.blur_radius`
283
+ - `params.transparency`
284
+ - `params.border_treatment`
285
+ - `params.shadow_type`
286
+ - `params.light_source_angle`
287
+
288
+ #### `visual_effects.canvas_drawings`
289
+ - `enabled`
290
+ - `type`
291
+ - `description`
292
+ - `technology`
293
+ - `params.draw_method`
294
+ - `params.animation_loop`
295
+ - `params.color_scheme`
296
+ - `params.responsiveness`
297
+ - `params.interaction`
298
+
299
+ #### `visual_effects.svg_animations`
300
+ - `enabled`
301
+ - `type`
302
+ - `description`
303
+ - `params.animation_method`
304
+ - `params.path_morphing`
305
+ - `params.stroke_animation`
306
+ - `params.filter_effects`
307
+
308
+ #### `visual_effects.composite_notes`
309
+ - Free-text notes for layered effects, implementation ambiguity, performance trade-offs, or screenshot-only observations
310
+
311
+ ## Field Guidance
312
+
313
+ ### `design_system` (Dimension 1: Structural / Measurable)
314
+ Concrete, token-level values. Extract exact values where visible; estimate from visual inspection otherwise.
315
+
316
+ - **`color.palette_type`**: "monochromatic", "complementary", "analogous", "triadic", "split-complementary"
317
+ - **`color.contrast_strategy`**: How text/background contrast is managed — "high contrast", "subtle layers", "dark-on-light dominant"
318
+ - **`typography.font_style_notes`**: e.g. "geometric sans with humanist touches"
319
+ - **`spacing.content_density`**: "compact", "comfortable", "spacious"
320
+ - **`spacing.section_rhythm`**: How vertical spacing varies between sections
321
+ - **`layout.alignment_tendency`**: "strict grid", "centered", "asymmetric", "mixed"
322
+ - **`shape.border_usage`**: "none", "subtle 1px", "bold borders", "only on inputs"
323
+ - **`elevation.shadow_style`**: "none", "soft diffused", "hard drop", "layered"
324
+ - **`elevation.depth_cues`**: "shadows", "overlapping layers", "blur/glass", "color intensity"
325
+ - **`motion.philosophy`**: "minimal functional", "playful bouncy", "cinematic", "none"
326
+ - **`components`**: Describe observed patterns — e.g. "ghost buttons with thick borders, rounded inputs with inner shadow"
327
+
328
+ ### `design_style` (Dimension 2: Qualitative / Perceptual)
329
+ Subjective assessments. Use descriptive language.
330
+
331
+ - **`aesthetic.mood`**: Array of 3–5 mood words, e.g. ["calm", "professional", "warm"]
332
+ - **`aesthetic.genre`**: e.g. "corporate SaaS", "indie creative", "luxury editorial", "neo-brutalist"
333
+ - **`aesthetic.personality_traits`**: As if the design were a person, e.g. ["confident", "approachable", "meticulous"]
334
+ - **`visual_language.complexity`**: "minimal", "moderate", "rich", "maximal"
335
+ - **`visual_language.ornamentation`**: "none", "subtle accents", "decorative", "heavily ornamented"
336
+ - **`visual_language.focal_strategy`**: "single hero element", "distributed interest", "progressive reveal"
337
+ - **`composition.hierarchy_method`**: "scale contrast", "color weight", "spatial isolation", "typographic hierarchy"
338
+ - **`composition.balance_type`**: "symmetric", "asymmetric", "radial", "mosaic"
339
+ - **`interaction_feel.transition_personality`**: "snappy", "smooth glide", "bouncy elastic", "fade-subtle"
340
+ - **`brand_voice_in_ui.cta_style`**: "direct imperative", "friendly invitation", "urgent scarcity", "subtle suggestion"
341
+
342
+ ### `visual_effects` (Dimension 3: Special Rendering / Visual Wizardry)
343
+ Effects beyond standard CSS. These often require Canvas, WebGL, SVG animation, shader programs, or JS animation libraries. When not directly observable from static code, describe them from screenshots or video.
344
+
345
+ - **`overview.effect_intensity`**: "none", "subtle-accent", "moderate", "heavy-immersive"
346
+ - **`overview.performance_tier`**: "lightweight" (CSS + simple JS), "medium" (Canvas 2D, SVG anim), "heavy" (WebGL, Three.js, shaders)
347
+ - **`overview.fallback_strategy`**: What happens on low-end devices — "disable effects", "reduce to CSS", "static snapshot"
348
+ - **`overview.primary_technology`**: "CSS only", "Canvas 2D", "WebGL/Three.js", "GSAP", "Lottie", "SVG SMIL", "Pixi.js"
349
+ - **`background_effects.type`**: "gradient-animation", "noise-field", "mesh-gradient", "video-bg", "generative-art", "none"
350
+ - **`particle_systems.type`**: "floating-dots", "confetti", "snow", "fireflies", "connected-nodes", "custom"
351
+ - **`particle_systems.params.interaction`**: "mouse-repel", "mouse-attract", "click-burst", "none"
352
+ - **`3d_elements.type`**: "hero-model", "product-viewer", "scene-bg", "text-extrusion", "abstract-geometry"
353
+ - **`3d_elements.params.post_processing`**: e.g. ["bloom", "FXAA", "depth-of-field", "chromatic-aberration"]
354
+ - **`shader_effects.type`**: "noise-distortion", "wave", "morph", "color-shift", "custom-GLSL"
355
+ - **`shader_effects.params.noise_type`**: "perlin", "simplex", "worley", "fbm"
356
+ - **`scroll_effects.parallax.layers`**: Number of depth layers, e.g. "3"
357
+ - **`scroll_effects.scroll_triggered_animations.animation_type`**: "fade-up", "scale-in", "clip-reveal", "counter", "draw-SVG"
358
+ - **`text_effects.type`**: "split-letter-animate", "typewriter", "glitch", "gradient-fill", "3d-extrude", "none"
359
+ - **`text_effects.params.split_strategy`**: "by-char", "by-word", "by-line"
360
+ - **`cursor_effects.type`**: "custom-cursor", "magnetic-buttons", "spotlight", "trail", "none"
361
+ - **`image_effects.type`**: "hover-distortion", "reveal-clip", "parallax-tilt", "rgb-shift", "none"
362
+ - **`image_effects.params.distortion_type`**: "barrel", "wave", "liquid", "glitch"
363
+ - **`glassmorphism_neumorphism.style`**: "glass", "neumorphic-light", "neumorphic-dark", "frosted-layers", "none"
364
+ - **`canvas_drawings.type`**: "generative-lines", "interactive-blobs", "data-visualization", "pattern-fill", "none"
365
+ - **`svg_animations.type`**: "path-draw", "morph-shapes", "logo-reveal", "decorative-loop", "none"
366
+ - **`composite_notes`**: Free-text description of how multiple effects layer together, performance trade-offs, or effects visible only in screenshots that cannot be fully captured in structured fields
@@ -6,9 +6,11 @@ description: >
6
6
  pages), WCAG 2.2 AA conformance report, Storybook CSF3 story stubs, and an
7
7
  integration guide. TRIGGER: "design system", "cria o design system", "design
8
8
  tokens", "component library", "biblioteca de componentes", "/brand
9
- design-system". SKIP: only a color palette -> brand/colors; implementing the
10
- components in application code -> dev frontend workflows (this skill
11
- specifies the system, it does not build the app); reviewing an existing UI
9
+ design-system". SKIP: only a color palette -> brand/colors; reproducing the
10
+ look of an existing reference (screenshot, image, URL) -> brand/design-dna
11
+ (it reverse-engineers a system; this one specifies a new one); implementing
12
+ the components in application code -> dev frontend workflows (this skill
13
+ specifies the system; it does not build the app); reviewing an existing UI
12
14
  against brand guidelines -> brand/design-review.
13
15
  allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
14
16
  metadata:
@@ -72,6 +74,13 @@ A production design system in 5 deliverables:
72
74
 
73
75
  ## Study mode (design DNA extraction)
74
76
 
77
+ > **Entry point:** a request that leads with a reference now routes to
78
+ > `brand/design-dna`, which runs this same protocol with the same
79
+ > guardrails and adds the qualitative and visual-effects dimensions. This
80
+ > section stays because the study still runs *inside* a design-system
81
+ > engagement whenever a reference turns up mid-brief — the protocol below
82
+ > is the one both skills execute.
83
+
75
84
  When the operator brings a **reference** — a screenshot or a live URL —
76
85
  instead of a brief, run the study protocol in
77
86
  `references/design-dna-study.md`: it extracts structural DNA
@@ -37,6 +37,7 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent, WebFetch, WebSearch]
37
37
  | `/dev performance <target>` | Performance audit (CWV, API latency, DB) | Focused |
38
38
  | `/dev pipeline <project>` | CI/CD pipeline design and setup | Focused |
39
39
  | `/dev clean-review <file>` | Clean Code + SOLID compliance review | Specialist |
40
+ | `/dev research <topic>` | Library evaluation and pattern discovery (KB + Context7 + gh-grep + web) | Specialist |
40
41
  | `/dev spec <description>` | Create feature specification (mandatory pre-impl) | Specialist |
41
42
  | `/dev scaffold <type> <name>` | Project scaffolding from starter repos | Specialist |
42
43
  | `/dev do <description>` | Smart routing to the right dev command | Orchestrator |
@@ -81,6 +82,30 @@ Diagnose step: `get_architecture` for the structural map,
81
82
  PRIOR, not ground truth: verify with Read before editing. When the MCP
82
83
  is absent the phases run as before (Grep/Read exploration).
83
84
 
85
+ ## Real-world grounding (gh-grep MCP)
86
+
87
+ `codebase-memory` answers "how does OUR code do this". When the question
88
+ is "how does anyone do this", call `mcp__gh-grep__searchGitHub` — literal
89
+ grep with regex over public repositories — in Phase 1 RESEARCH and in
90
+ Diagnose, whenever an external API, library idiom, or error signature is
91
+ unfamiliar or disputed.
92
+
93
+ Query it with **code tokens**: `useSyncExternalStore`, `from
94
+ sqlalchemy.orm import`, `Cannot read properties of undefined`. Filter by
95
+ language and path. A natural-language sentence returns noise, so a first
96
+ attempt that phrases the question in prose will look like the tool failing
97
+ when it is the query that failed.
98
+
99
+ Pair it with Context7, which answers the complementary question: Context7
100
+ gives the documented contract; gh-grep gives the practice N teams actually
101
+ shipped. Where they disagree, the docs win and the divergence itself is
102
+ worth reporting. Treat results as a prior about practice — they carry no
103
+ authority over our own code, which you still read directly.
104
+
105
+ Skip it for private code (it indexes public repositories only — use
106
+ `codebase-memory` or the KB), for documentation lookups (Context7), and for
107
+ anything that is not code (WebSearch, Firecrawl).
108
+
84
109
  ## Focused Workflow (4 Phases)
85
110
 
86
111
  For `/dev debug`, `/dev refactor`, `/dev db`, `/dev performance`, `/dev pipeline`: Diagnose → Implement with tests → Rita validates → Quality Gate (Marta).
@@ -85,6 +85,11 @@ allowed-tools: [Read, Bash, Grep, Glob, Agent]
85
85
  - [ ] Assume every variable could be null/undefined
86
86
  - [ ] Assume every external call will fail
87
87
  - [ ] Ask: "If I deleted this change, what would break?"
88
+ - [ ] For an abuse vector that depends on how a third-party library
89
+ behaves, confirm the behaviour with `mcp__gh-grep__searchGitHub`
90
+ (real call-sites) plus Context7 (documented contract) before
91
+ raising it as CRITICAL — a hostile persona that invents the
92
+ library's behaviour is refuting itself, not the code
88
93
 
89
94
  ## Verdicts
90
95
 
@@ -28,6 +28,14 @@ allowed-tools: [Read, Write, Edit, Bash, Grep, Glob, Agent]
28
28
  7. **Consistent response** — `{ "data": ..., "meta": { "pagination": ... } }`
29
29
  8. **Error format** — `{ "error": { "code": "VALIDATION_FAILED", "message": "...", "details": [...] } }`
30
30
 
31
+ When the contract has to interoperate with something you do not control — a
32
+ partner API, an SDK's expectations, a webhook consumer — check the shape
33
+ that already exists in the wild. `mcp__gh-grep__searchGitHub` on the field
34
+ names or the header (`X-Idempotency-Key`, `"cursor":`) shows what clients
35
+ are already written against. Matching an established shape costs nothing
36
+ and removes a whole class of integration surprise; diverging from one is a
37
+ decision that belongs in the ADR with its reason.
38
+
31
39
  ## Output: OpenAPI Snippet
32
40
 
33
41
  ```yaml
@@ -35,6 +35,12 @@ allowed-tools: [Read, Write, Edit, Grep, Glob, Agent, WebFetch]
35
35
  - Ask user: What system/feature needs architecture?
36
36
  - Clarify: Scale requirements, team size, tech constraints
37
37
  - Identify: Domain boundaries, data flows, external integrations
38
+ - Where the design leans on a specific framework or infrastructure
39
+ primitive, check the precedent with `mcp__gh-grep__searchGitHub`: grep
40
+ the structural tokens (a config key, a base class, a directory
41
+ convention) and read how real systems wired it. Feed what you find into
42
+ Step 4's Alternatives Considered — a pattern that public repos abandoned
43
+ is an alternative you can rule out with evidence instead of taste.
38
44
 
39
45
  ### Step 3: Architecture Design
40
46
  Apply the appropriate pattern: