specleap-framework 2.0.7 → 2.0.9
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.
- package/.claude/skills/ui-ux-pro-max/SKILL.md +377 -0
- package/.claude/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/.claude/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/.claude/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/.claude/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/.claude/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/.claude/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/.claude/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/.claude/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/.claude/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/.claude/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/.claude/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/.claude/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/.claude/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-314.pyc +0 -0
- package/.claude/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-314.pyc +0 -0
- package/.claude/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-314.pyc +0 -0
- package/.claude/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/.claude/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/.claude/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/.clinerules +219 -0
- package/.coderabbit.yaml +261 -0
- package/.continue/rules/01-sdd-methodology.md +57 -0
- package/.continue/rules/02-spec-format.md +76 -0
- package/.continue/rules/03-code-standards.md +64 -0
- package/.continue/rules/04-git-workflow.md +80 -0
- package/.continue/rules/05-testing-report.md +63 -0
- package/.continuerules +40 -0
- package/.cursorrules +44 -0
- package/.github/copilot-instructions.md +54 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/markdown.css +235 -0
- package/.vscode/settings.json +33 -0
- package/CLAUDE.md +357 -0
- package/package.json +10 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
UI/UX Pro Max Search - BM25 search engine for UI/UX style guides
|
|
5
|
+
Usage: python search.py "<query>" [--domain <domain>] [--stack <stack>] [--max-results 3]
|
|
6
|
+
python search.py "<query>" --design-system [-p "Project Name"]
|
|
7
|
+
python search.py "<query>" --design-system --persist [-p "Project Name"] [--page "dashboard"]
|
|
8
|
+
|
|
9
|
+
Domains: style, prompt, color, chart, landing, product, ux, typography
|
|
10
|
+
Stacks: html-tailwind, react, nextjs
|
|
11
|
+
|
|
12
|
+
Persistence (Master + Overrides pattern):
|
|
13
|
+
--persist Save design system to design-system/MASTER.md
|
|
14
|
+
--page Also create a page-specific override file in design-system/pages/
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import sys
|
|
19
|
+
import io
|
|
20
|
+
from core import CSV_CONFIG, AVAILABLE_STACKS, MAX_RESULTS, search, search_stack
|
|
21
|
+
from design_system import generate_design_system, persist_design_system
|
|
22
|
+
|
|
23
|
+
# Force UTF-8 for stdout/stderr to handle emojis on Windows (cp1252 default)
|
|
24
|
+
if sys.stdout.encoding and sys.stdout.encoding.lower() != 'utf-8':
|
|
25
|
+
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
|
26
|
+
if sys.stderr.encoding and sys.stderr.encoding.lower() != 'utf-8':
|
|
27
|
+
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def format_output(result):
|
|
31
|
+
"""Format results for Claude consumption (token-optimized)"""
|
|
32
|
+
if "error" in result:
|
|
33
|
+
return f"Error: {result['error']}"
|
|
34
|
+
|
|
35
|
+
output = []
|
|
36
|
+
if result.get("stack"):
|
|
37
|
+
output.append(f"## UI Pro Max Stack Guidelines")
|
|
38
|
+
output.append(f"**Stack:** {result['stack']} | **Query:** {result['query']}")
|
|
39
|
+
else:
|
|
40
|
+
output.append(f"## UI Pro Max Search Results")
|
|
41
|
+
output.append(f"**Domain:** {result['domain']} | **Query:** {result['query']}")
|
|
42
|
+
output.append(f"**Source:** {result['file']} | **Found:** {result['count']} results\n")
|
|
43
|
+
|
|
44
|
+
for i, row in enumerate(result['results'], 1):
|
|
45
|
+
output.append(f"### Result {i}")
|
|
46
|
+
for key, value in row.items():
|
|
47
|
+
value_str = str(value)
|
|
48
|
+
if len(value_str) > 300:
|
|
49
|
+
value_str = value_str[:300] + "..."
|
|
50
|
+
output.append(f"- **{key}:** {value_str}")
|
|
51
|
+
output.append("")
|
|
52
|
+
|
|
53
|
+
return "\n".join(output)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
parser = argparse.ArgumentParser(description="UI Pro Max Search")
|
|
58
|
+
parser.add_argument("query", help="Search query")
|
|
59
|
+
parser.add_argument("--domain", "-d", choices=list(CSV_CONFIG.keys()), help="Search domain")
|
|
60
|
+
parser.add_argument("--stack", "-s", choices=AVAILABLE_STACKS, help="Stack-specific search (html-tailwind, react, nextjs)")
|
|
61
|
+
parser.add_argument("--max-results", "-n", type=int, default=MAX_RESULTS, help="Max results (default: 3)")
|
|
62
|
+
parser.add_argument("--json", action="store_true", help="Output as JSON")
|
|
63
|
+
# Design system generation
|
|
64
|
+
parser.add_argument("--design-system", "-ds", action="store_true", help="Generate complete design system recommendation")
|
|
65
|
+
parser.add_argument("--project-name", "-p", type=str, default=None, help="Project name for design system output")
|
|
66
|
+
parser.add_argument("--format", "-f", choices=["ascii", "markdown"], default="ascii", help="Output format for design system")
|
|
67
|
+
# Persistence (Master + Overrides pattern)
|
|
68
|
+
parser.add_argument("--persist", action="store_true", help="Save design system to design-system/MASTER.md (creates hierarchical structure)")
|
|
69
|
+
parser.add_argument("--page", type=str, default=None, help="Create page-specific override file in design-system/pages/")
|
|
70
|
+
parser.add_argument("--output-dir", "-o", type=str, default=None, help="Output directory for persisted files (default: current directory)")
|
|
71
|
+
|
|
72
|
+
args = parser.parse_args()
|
|
73
|
+
|
|
74
|
+
# Design system takes priority
|
|
75
|
+
if args.design_system:
|
|
76
|
+
result = generate_design_system(
|
|
77
|
+
args.query,
|
|
78
|
+
args.project_name,
|
|
79
|
+
args.format,
|
|
80
|
+
persist=args.persist,
|
|
81
|
+
page=args.page,
|
|
82
|
+
output_dir=args.output_dir
|
|
83
|
+
)
|
|
84
|
+
print(result)
|
|
85
|
+
|
|
86
|
+
# Print persistence confirmation
|
|
87
|
+
if args.persist:
|
|
88
|
+
project_slug = args.project_name.lower().replace(' ', '-') if args.project_name else "default"
|
|
89
|
+
print("\n" + "=" * 60)
|
|
90
|
+
print(f"✅ Design system persisted to design-system/{project_slug}/")
|
|
91
|
+
print(f" 📄 design-system/{project_slug}/MASTER.md (Global Source of Truth)")
|
|
92
|
+
if args.page:
|
|
93
|
+
page_filename = args.page.lower().replace(' ', '-')
|
|
94
|
+
print(f" 📄 design-system/{project_slug}/pages/{page_filename}.md (Page Overrides)")
|
|
95
|
+
print("")
|
|
96
|
+
print(f"📖 Usage: When building a page, check design-system/{project_slug}/pages/[page].md first.")
|
|
97
|
+
print(f" If exists, its rules override MASTER.md. Otherwise, use MASTER.md.")
|
|
98
|
+
print("=" * 60)
|
|
99
|
+
# Stack search
|
|
100
|
+
elif args.stack:
|
|
101
|
+
result = search_stack(args.query, args.stack, args.max_results)
|
|
102
|
+
if args.json:
|
|
103
|
+
import json
|
|
104
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
105
|
+
else:
|
|
106
|
+
print(format_output(result))
|
|
107
|
+
# Domain search
|
|
108
|
+
else:
|
|
109
|
+
result = search(args.query, args.domain, args.max_results)
|
|
110
|
+
if args.json:
|
|
111
|
+
import json
|
|
112
|
+
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
113
|
+
else:
|
|
114
|
+
print(format_output(result))
|
package/.clinerules
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# SpecLeap Framework — AI Assistant Rules
|
|
2
|
+
|
|
3
|
+
## 🎯 Contexto del Proyecto
|
|
4
|
+
|
|
5
|
+
Estás trabajando en un proyecto **SpecLeap** — Spec-Driven Development Framework.
|
|
6
|
+
|
|
7
|
+
**Metodología:** Primero CONTRATO.md (especificación), luego código.
|
|
8
|
+
|
|
9
|
+
## 📁 Estructura del Proyecto
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
specleap-framework/
|
|
13
|
+
├── .agents/ # 3 agentes especializados (backend, frontend, producto)
|
|
14
|
+
├── .commands/ # 10 comandos SpecLeap
|
|
15
|
+
├── .specleap/ # Configuración (tokens, idioma)
|
|
16
|
+
├── proyectos/ # Proyectos del usuario
|
|
17
|
+
│ └── _template/ # Plantilla CONTRATO.md
|
|
18
|
+
├── rules/ # Reglas de desarrollo
|
|
19
|
+
└── scripts/ # Instaladores y generadores
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## 🤖 Comandos Disponibles
|
|
23
|
+
|
|
24
|
+
**SIEMPRE** reconoce estos comandos cuando el usuario los escribe:
|
|
25
|
+
|
|
26
|
+
### Comandos Principales
|
|
27
|
+
- `ayuda` → Muestra lista completa de comandos + flujo SDD
|
|
28
|
+
- `planificar` → Lee CONTRATO.md, genera backlog Asana
|
|
29
|
+
- `implementar <ticket>` → Desarrolla según spec del ticket
|
|
30
|
+
- `refinar` → Mejora CONTRATO.md existente
|
|
31
|
+
- `documentar` → Genera/actualiza docs del proyecto
|
|
32
|
+
- `adoptar` → Integra SpecLeap en proyecto existente
|
|
33
|
+
|
|
34
|
+
### Comandos de Gestión
|
|
35
|
+
- `inicio` → Wizard proyecto nuevo (cuestionario 59 preguntas)
|
|
36
|
+
- `crear-tickets` → Genera estructura Asana desde CONTRATO.md
|
|
37
|
+
- `explicar <concepto>` → Explica metodología SDD
|
|
38
|
+
|
|
39
|
+
### Comandos Avanzados
|
|
40
|
+
- `nuevo/questions-base.yaml` → Cuestionario customizable
|
|
41
|
+
- Ver `.commands/` para más detalles
|
|
42
|
+
|
|
43
|
+
## 🔄 Flujo de Trabajo SDD
|
|
44
|
+
|
|
45
|
+
### 1. Crear CONTRATO.md
|
|
46
|
+
```bash
|
|
47
|
+
# Opción A: Cuestionario guiado
|
|
48
|
+
./scripts/generate-contrato.sh
|
|
49
|
+
|
|
50
|
+
# Opción B: Manual
|
|
51
|
+
cp proyectos/_template/CONTRATO.md proyectos/mi-proyecto/
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 2. Planificar en Asana
|
|
55
|
+
```
|
|
56
|
+
Usuario: planificar
|
|
57
|
+
```
|
|
58
|
+
→ Lee CONTRATO.md
|
|
59
|
+
→ Genera épicas + user stories
|
|
60
|
+
→ Crea estructura en Asana
|
|
61
|
+
|
|
62
|
+
### 3. Implementar por Tickets
|
|
63
|
+
```
|
|
64
|
+
Usuario: implementar PROJ-123
|
|
65
|
+
```
|
|
66
|
+
→ Descarga spec del ticket Asana
|
|
67
|
+
→ Implementa según especificación
|
|
68
|
+
→ Crea tests
|
|
69
|
+
→ Documenta cambios
|
|
70
|
+
|
|
71
|
+
### 4. Review Automático
|
|
72
|
+
→ Push a GitHub
|
|
73
|
+
→ CodeRabbit revisa automáticamente
|
|
74
|
+
→ Aplica feedback
|
|
75
|
+
|
|
76
|
+
## 📋 Reglas de Desarrollo
|
|
77
|
+
|
|
78
|
+
### OBLIGATORIAS (ver `rules/`)
|
|
79
|
+
1. **Spec-First:** NUNCA codificar sin CONTRATO.md aprobado
|
|
80
|
+
2. **Git Workflow:** Siempre feature branches (`feature/PROJ-123-descripcion`)
|
|
81
|
+
3. **Testing:** Tests obligatorios para lógica de negocio
|
|
82
|
+
4. **Environment Protection:** NUNCA hardcodear credenciales
|
|
83
|
+
|
|
84
|
+
### Activar Agente Especializado
|
|
85
|
+
|
|
86
|
+
**Según el contexto, carga:**
|
|
87
|
+
- `.agents/backend.md` → Laravel, APIs, base de datos
|
|
88
|
+
- `.agents/frontend.md` → React, UI/UX, componentes
|
|
89
|
+
- `.agents/producto.md` → Decisiones de producto, UX, priorización
|
|
90
|
+
|
|
91
|
+
**Detecta automáticamente** según archivos del proyecto o comando del usuario.
|
|
92
|
+
|
|
93
|
+
## 🎨 Estilo de Respuestas
|
|
94
|
+
|
|
95
|
+
### Cuando Usuario Dice "Hola" o Inicia Sesión
|
|
96
|
+
```
|
|
97
|
+
¡Hola! Soy tu asistente SpecLeap.
|
|
98
|
+
|
|
99
|
+
📋 Comandos disponibles:
|
|
100
|
+
• ayuda → Lista completa + flujo SDD
|
|
101
|
+
• planificar → Generar backlog desde CONTRATO.md
|
|
102
|
+
• implementar <ticket> → Desarrollar feature
|
|
103
|
+
• inicio → Crear proyecto nuevo
|
|
104
|
+
|
|
105
|
+
🔧 Estado del proyecto:
|
|
106
|
+
[Verificar si existe CONTRATO.md en proyectos/]
|
|
107
|
+
✅ CONTRATO.md encontrado: proyectos/mi-proyecto/CONTRATO.md
|
|
108
|
+
o
|
|
109
|
+
⚠️ No hay CONTRATO.md. Ejecuta:
|
|
110
|
+
./scripts/generate-contrato.sh
|
|
111
|
+
o escribe: inicio
|
|
112
|
+
|
|
113
|
+
¿En qué puedo ayudarte?
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### Formato de Respuestas
|
|
117
|
+
- **Conciso:** Directo al punto, sin relleno
|
|
118
|
+
- **Estructurado:** Usa listas, headings, code blocks
|
|
119
|
+
- **Bilingüe:** Español (default), English si el usuario prefiere
|
|
120
|
+
- **Contexto:** Siempre referencia CONTRATO.md cuando exista
|
|
121
|
+
|
|
122
|
+
## ⚠️ Verificaciones Antes de Codificar
|
|
123
|
+
|
|
124
|
+
### SIEMPRE Verifica:
|
|
125
|
+
1. ¿Existe `proyectos/*/CONTRATO.md`?
|
|
126
|
+
- ❌ NO → Pedir crearlo: `./scripts/generate-contrato.sh` o `inicio`
|
|
127
|
+
- ✅ SÍ → Leerlo ANTES de implementar
|
|
128
|
+
|
|
129
|
+
2. ¿El usuario dio un ticket Asana?
|
|
130
|
+
- ❌ NO → Preguntar: "¿Qué ticket Asana implementamos?"
|
|
131
|
+
- ✅ SÍ → Descargar spec del ticket
|
|
132
|
+
|
|
133
|
+
3. ¿Hay tests para esta funcionalidad?
|
|
134
|
+
- ❌ NO → Crearlos AHORA
|
|
135
|
+
- ✅ SÍ → Ejecutarlos antes de considerar completo
|
|
136
|
+
|
|
137
|
+
## 🚫 Prohibiciones Absolutas
|
|
138
|
+
|
|
139
|
+
1. **NUNCA** codificar sin CONTRATO.md aprobado
|
|
140
|
+
2. **NUNCA** hacer commit directo a `main`/`master`
|
|
141
|
+
3. **NUNCA** hardcodear credenciales (usar `.env`)
|
|
142
|
+
4. **NUNCA** ignorar el comando del usuario (si dice `planificar`, ejecutar planificar)
|
|
143
|
+
5. **NUNCA** asumir stack tecnológico (leer CONTRATO.md primero)
|
|
144
|
+
|
|
145
|
+
## 🎯 Comandos Especiales
|
|
146
|
+
|
|
147
|
+
### Si Usuario Escribe "ayuda"
|
|
148
|
+
Leer y mostrar contenido de `.commands/ayuda.md`
|
|
149
|
+
|
|
150
|
+
### Si Usuario Escribe "planificar"
|
|
151
|
+
1. Leer `.commands/planificar.md`
|
|
152
|
+
2. Verificar CONTRATO.md existe
|
|
153
|
+
3. Ejecutar `scripts/generate-asana-structure.sh`
|
|
154
|
+
4. Reportar épicas/stories creadas
|
|
155
|
+
|
|
156
|
+
### Si Usuario Escribe "implementar <ticket>"
|
|
157
|
+
1. Leer `.commands/implementar.md`
|
|
158
|
+
2. Descargar spec del ticket Asana
|
|
159
|
+
3. Implementar según spec
|
|
160
|
+
4. Crear tests
|
|
161
|
+
5. Actualizar docs
|
|
162
|
+
|
|
163
|
+
### Si Usuario Escribe "inicio"
|
|
164
|
+
1. Leer `.commands/inicio.md`
|
|
165
|
+
2. Ejecutar `./scripts/generate-contrato.sh`
|
|
166
|
+
3. Guiar wizard 59 preguntas
|
|
167
|
+
4. Generar CONTRATO.md completo
|
|
168
|
+
|
|
169
|
+
## 📦 Integración con Herramientas
|
|
170
|
+
|
|
171
|
+
### Asana
|
|
172
|
+
- Token configurado en `.specleap/config.json`
|
|
173
|
+
- Workspace ID en `.env`
|
|
174
|
+
- Scripts: `scripts/generate-asana-structure.sh`, `scripts/create-asana-tasks.sh`
|
|
175
|
+
|
|
176
|
+
### CodeRabbit
|
|
177
|
+
- Configuración: `.coderabbit.yaml`
|
|
178
|
+
- Review automático en PRs
|
|
179
|
+
- Feedback en español
|
|
180
|
+
|
|
181
|
+
### Agent Skills (20 skills en ~/.skills/)
|
|
182
|
+
- `verification-before-completion` → Verificar antes de finalizar
|
|
183
|
+
- `systematic-debugging` → Debug metodológico
|
|
184
|
+
- `laravel-specialist`, `react-expert`, etc.
|
|
185
|
+
|
|
186
|
+
## 🌐 Multiidioma
|
|
187
|
+
|
|
188
|
+
**Default:** Español
|
|
189
|
+
**Soporta:** English (si usuario prefiere)
|
|
190
|
+
|
|
191
|
+
**Detectar idioma del usuario** y responder en el mismo.
|
|
192
|
+
|
|
193
|
+
## 📊 Reporting
|
|
194
|
+
|
|
195
|
+
### Al Completar Tareas
|
|
196
|
+
```
|
|
197
|
+
✅ Tarea completada: [descripción]
|
|
198
|
+
|
|
199
|
+
📋 Cambios realizados:
|
|
200
|
+
• Archivo X: [cambio]
|
|
201
|
+
• Archivo Y: [cambio]
|
|
202
|
+
|
|
203
|
+
🧪 Tests:
|
|
204
|
+
• test_feature_x: ✅ PASS
|
|
205
|
+
• test_feature_y: ✅ PASS
|
|
206
|
+
|
|
207
|
+
📄 Documentación:
|
|
208
|
+
• README.md actualizado
|
|
209
|
+
• CONTRATO.md: sin cambios
|
|
210
|
+
|
|
211
|
+
🔗 Próximos pasos:
|
|
212
|
+
1. Commit: git commit -m "feat(scope): descripción"
|
|
213
|
+
2. Push: git push origin feature/PROJ-123
|
|
214
|
+
3. CodeRabbit revisará automáticamente
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
**Recuerda:** SpecLeap es sobre **specs primero, código después**. SIEMPRE verifica CONTRATO.md antes de implementar.
|
package/.coderabbit.yaml
ADDED
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
# CodeRabbit Configuration — DevFlow Pro
|
|
2
|
+
# Copiar este archivo a la raíz de cada repositorio
|
|
3
|
+
# yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
|
|
4
|
+
|
|
5
|
+
# Idioma de los reviews
|
|
6
|
+
language: "es"
|
|
7
|
+
|
|
8
|
+
# Tono personalizado
|
|
9
|
+
tone_instructions: |
|
|
10
|
+
Eres un reviewer senior enfocado en calidad y mantenibilidad.
|
|
11
|
+
Sé constructivo pero riguroso. Señala problemas de seguridad como críticos.
|
|
12
|
+
Verifica que el código sigue las specs definidas en openspec/.
|
|
13
|
+
Idioma: español.
|
|
14
|
+
|
|
15
|
+
# Configuración de reviews
|
|
16
|
+
reviews:
|
|
17
|
+
# Perfil: assertive = más feedback (recomendado para equipos que buscan calidad)
|
|
18
|
+
profile: "assertive"
|
|
19
|
+
|
|
20
|
+
# Workflow de cambios solicitados
|
|
21
|
+
request_changes_workflow: true
|
|
22
|
+
|
|
23
|
+
# Resumen de alto nivel
|
|
24
|
+
high_level_summary: true
|
|
25
|
+
high_level_summary_in_walkthrough: true
|
|
26
|
+
|
|
27
|
+
# Diagramas de secuencia
|
|
28
|
+
sequence_diagrams: true
|
|
29
|
+
|
|
30
|
+
# Estimación de esfuerzo de review
|
|
31
|
+
estimate_code_review_effort: true
|
|
32
|
+
|
|
33
|
+
# Evaluar issues vinculados
|
|
34
|
+
assess_linked_issues: true
|
|
35
|
+
|
|
36
|
+
# Sugerir labels
|
|
37
|
+
suggested_labels: true
|
|
38
|
+
labeling_instructions:
|
|
39
|
+
- label: "needs-spec"
|
|
40
|
+
instructions: "Aplicar cuando el PR no tiene spec de referencia en openspec/"
|
|
41
|
+
- label: "has-tests"
|
|
42
|
+
instructions: "Aplicar cuando el PR incluye tests"
|
|
43
|
+
- label: "breaking-change"
|
|
44
|
+
instructions: "Aplicar cuando hay cambios que rompen compatibilidad"
|
|
45
|
+
- label: "security"
|
|
46
|
+
instructions: "Aplicar cuando hay cambios relacionados con seguridad"
|
|
47
|
+
- label: "performance"
|
|
48
|
+
instructions: "Aplicar cuando hay optimizaciones de rendimiento"
|
|
49
|
+
|
|
50
|
+
# Auto-aplicar labels sugeridos
|
|
51
|
+
auto_apply_labels: true
|
|
52
|
+
|
|
53
|
+
# Sugerir reviewers
|
|
54
|
+
suggested_reviewers: true
|
|
55
|
+
|
|
56
|
+
# Sin poemas ni fortunes (profesional)
|
|
57
|
+
poem: false
|
|
58
|
+
in_progress_fortune: false
|
|
59
|
+
|
|
60
|
+
# Path filters - excluir archivos generados
|
|
61
|
+
path_filters:
|
|
62
|
+
- "!**/node_modules/**"
|
|
63
|
+
- "!**/vendor/**"
|
|
64
|
+
- "!**/dist/**"
|
|
65
|
+
- "!**/build/**"
|
|
66
|
+
- "!**/*.min.js"
|
|
67
|
+
- "!**/*.min.css"
|
|
68
|
+
- "!**/package-lock.json"
|
|
69
|
+
- "!**/composer.lock"
|
|
70
|
+
- "!**/*.generated.*"
|
|
71
|
+
|
|
72
|
+
# Instrucciones por ruta
|
|
73
|
+
path_instructions:
|
|
74
|
+
- path: "src/**"
|
|
75
|
+
instructions: |
|
|
76
|
+
Verificar:
|
|
77
|
+
- TypeScript strict mode
|
|
78
|
+
- Manejo de errores
|
|
79
|
+
- Tipos correctos (no any)
|
|
80
|
+
- Comentarios en español
|
|
81
|
+
|
|
82
|
+
- path: "**/*.spec.ts"
|
|
83
|
+
instructions: |
|
|
84
|
+
Verificar:
|
|
85
|
+
- Cobertura de casos edge
|
|
86
|
+
- Nombres descriptivos en español
|
|
87
|
+
- Arrange-Act-Assert pattern
|
|
88
|
+
|
|
89
|
+
- path: "**/*.test.ts"
|
|
90
|
+
instructions: |
|
|
91
|
+
Verificar:
|
|
92
|
+
- Cobertura de casos edge
|
|
93
|
+
- Nombres descriptivos en español
|
|
94
|
+
- Arrange-Act-Assert pattern
|
|
95
|
+
|
|
96
|
+
- path: "openspec/**"
|
|
97
|
+
instructions: |
|
|
98
|
+
Verificar:
|
|
99
|
+
- Formato correcto de spec
|
|
100
|
+
- GIVEN/WHEN/THEN completos
|
|
101
|
+
- Criterios de aceptación claros
|
|
102
|
+
- Referencias cruzadas válidas
|
|
103
|
+
|
|
104
|
+
- path: "**/*.php"
|
|
105
|
+
instructions: |
|
|
106
|
+
Verificar:
|
|
107
|
+
- PSR-12 compliance
|
|
108
|
+
- Type hints en parámetros y retornos
|
|
109
|
+
- Validación de inputs
|
|
110
|
+
- Sin SQL raw (usar Eloquent)
|
|
111
|
+
|
|
112
|
+
- path: "**/migrations/**"
|
|
113
|
+
instructions: |
|
|
114
|
+
Verificar:
|
|
115
|
+
- Migración reversible
|
|
116
|
+
- Índices necesarios
|
|
117
|
+
- Sin pérdida de datos
|
|
118
|
+
|
|
119
|
+
- path: "docs/**"
|
|
120
|
+
instructions: |
|
|
121
|
+
Verificar:
|
|
122
|
+
- Español correcto
|
|
123
|
+
- Enlaces funcionan
|
|
124
|
+
- Ejemplos actualizados
|
|
125
|
+
|
|
126
|
+
# Auto review
|
|
127
|
+
auto_review:
|
|
128
|
+
enabled: true
|
|
129
|
+
auto_incremental_review: true
|
|
130
|
+
drafts: false
|
|
131
|
+
ignore_title_keywords:
|
|
132
|
+
- "WIP"
|
|
133
|
+
- "DO NOT MERGE"
|
|
134
|
+
- "DRAFT"
|
|
135
|
+
labels:
|
|
136
|
+
- "!skip-review"
|
|
137
|
+
|
|
138
|
+
# Finishing touches
|
|
139
|
+
finishing_touches:
|
|
140
|
+
docstrings:
|
|
141
|
+
enabled: true
|
|
142
|
+
unit_tests:
|
|
143
|
+
enabled: true
|
|
144
|
+
|
|
145
|
+
# Pre-merge checks
|
|
146
|
+
pre_merge_checks:
|
|
147
|
+
docstrings:
|
|
148
|
+
mode: "warning"
|
|
149
|
+
threshold: 80
|
|
150
|
+
title:
|
|
151
|
+
mode: "warning"
|
|
152
|
+
requirements: |
|
|
153
|
+
El título debe seguir conventional commits:
|
|
154
|
+
tipo(alcance): descripción
|
|
155
|
+
Tipos: feat, fix, refactor, docs, test, chore, style, perf
|
|
156
|
+
description:
|
|
157
|
+
mode: "warning"
|
|
158
|
+
issue_assessment:
|
|
159
|
+
mode: "warning"
|
|
160
|
+
custom_checks:
|
|
161
|
+
- name: "Spec Reference"
|
|
162
|
+
mode: "warning"
|
|
163
|
+
instructions: |
|
|
164
|
+
Verificar que el PR hace referencia a una spec en openspec/.
|
|
165
|
+
El PR description debe incluir una línea como:
|
|
166
|
+
Spec: openspec/specs/domain/nombre.spec.md
|
|
167
|
+
Si no hay spec, el check falla.
|
|
168
|
+
- name: "Testing Report"
|
|
169
|
+
mode: "warning"
|
|
170
|
+
instructions: |
|
|
171
|
+
Verificar que el PR incluye resultados de tests.
|
|
172
|
+
Debe haber evidencia de que los tests pasan.
|
|
173
|
+
Si es un cambio de código, debe haber tests nuevos o modificados.
|
|
174
|
+
|
|
175
|
+
# Herramientas de análisis
|
|
176
|
+
tools:
|
|
177
|
+
# JavaScript/TypeScript
|
|
178
|
+
eslint:
|
|
179
|
+
enabled: true
|
|
180
|
+
biome:
|
|
181
|
+
enabled: true
|
|
182
|
+
|
|
183
|
+
# PHP
|
|
184
|
+
phpstan:
|
|
185
|
+
enabled: true
|
|
186
|
+
level: "max"
|
|
187
|
+
phpcs:
|
|
188
|
+
enabled: true
|
|
189
|
+
phpmd:
|
|
190
|
+
enabled: true
|
|
191
|
+
|
|
192
|
+
# Python (si aplica)
|
|
193
|
+
ruff:
|
|
194
|
+
enabled: true
|
|
195
|
+
pylint:
|
|
196
|
+
enabled: true
|
|
197
|
+
|
|
198
|
+
# Seguridad
|
|
199
|
+
gitleaks:
|
|
200
|
+
enabled: true
|
|
201
|
+
semgrep:
|
|
202
|
+
enabled: true
|
|
203
|
+
|
|
204
|
+
# Markdown/Docs
|
|
205
|
+
markdownlint:
|
|
206
|
+
enabled: true
|
|
207
|
+
languagetool:
|
|
208
|
+
enabled: true
|
|
209
|
+
level: "picky"
|
|
210
|
+
|
|
211
|
+
# YAML
|
|
212
|
+
yamllint:
|
|
213
|
+
enabled: true
|
|
214
|
+
|
|
215
|
+
# Docker
|
|
216
|
+
hadolint:
|
|
217
|
+
enabled: true
|
|
218
|
+
|
|
219
|
+
# GitHub Actions
|
|
220
|
+
actionlint:
|
|
221
|
+
enabled: true
|
|
222
|
+
|
|
223
|
+
# Shell
|
|
224
|
+
shellcheck:
|
|
225
|
+
enabled: true
|
|
226
|
+
|
|
227
|
+
# Chat
|
|
228
|
+
chat:
|
|
229
|
+
auto_reply: true
|
|
230
|
+
art: false
|
|
231
|
+
integrations:
|
|
232
|
+
jira:
|
|
233
|
+
usage: "enabled"
|
|
234
|
+
linear:
|
|
235
|
+
usage: "disabled"
|
|
236
|
+
|
|
237
|
+
# Knowledge base
|
|
238
|
+
knowledge_base:
|
|
239
|
+
opt_out: false
|
|
240
|
+
web_search:
|
|
241
|
+
enabled: true
|
|
242
|
+
code_guidelines:
|
|
243
|
+
enabled: true
|
|
244
|
+
filePatterns:
|
|
245
|
+
- "**/AGENTS.md"
|
|
246
|
+
- "**/CLAUDE.md"
|
|
247
|
+
- "**/.cursorrules"
|
|
248
|
+
- "**/openspec/**/*.md"
|
|
249
|
+
learnings:
|
|
250
|
+
scope: "global"
|
|
251
|
+
issues:
|
|
252
|
+
scope: "global"
|
|
253
|
+
jira:
|
|
254
|
+
usage: "enabled"
|
|
255
|
+
pull_requests:
|
|
256
|
+
scope: "global"
|
|
257
|
+
|
|
258
|
+
# Generación de código
|
|
259
|
+
code_generation:
|
|
260
|
+
docstrings:
|
|
261
|
+
language: "es"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: SDD Methodology - Spec-Driven Development
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
description: Metodología principal de desarrollo basada en especificaciones
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Spec-Driven Development (SDD)
|
|
8
|
+
|
|
9
|
+
## Principio Fundamental
|
|
10
|
+
> **Primero la especificación, luego el código. Nunca al revés.**
|
|
11
|
+
|
|
12
|
+
## Flujo de Trabajo
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
USER STORY → REFINED STORY → PROPOSAL → IMPLEMENTATION → VERIFICATION → DELIVERY
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Fases del Desarrollo
|
|
19
|
+
|
|
20
|
+
### Fase 1: Discovery
|
|
21
|
+
- Analizar requisitos y alcance
|
|
22
|
+
- Documentar en `project-brief.md`
|
|
23
|
+
- Investigar arquitectura
|
|
24
|
+
|
|
25
|
+
### Fase 2: Especificación
|
|
26
|
+
- Crear spec en `openspec/specs/<domain>/`
|
|
27
|
+
- Usar formato GIVEN/WHEN/THEN para escenarios
|
|
28
|
+
- Cada feature tiene spec ANTES de codificar
|
|
29
|
+
|
|
30
|
+
### Fase 3: Propuesta de Cambio
|
|
31
|
+
- Crear carpeta en `openspec/changes/CHANGE-XXXX-nombre/`
|
|
32
|
+
- Incluir: proposal.md, design.md, tasks.md
|
|
33
|
+
- Documentar delta specs
|
|
34
|
+
|
|
35
|
+
### Fase 4: Implementación
|
|
36
|
+
- Crear branch desde develop
|
|
37
|
+
- Implementar según spec
|
|
38
|
+
- Escribir tests (unit + integration)
|
|
39
|
+
- Documentar cambios
|
|
40
|
+
|
|
41
|
+
### Fase 5: Verificación
|
|
42
|
+
- Ejecutar todos los tests
|
|
43
|
+
- Generar Testing Report
|
|
44
|
+
- Code review OBLIGATORIO
|
|
45
|
+
- Resolver comentarios
|
|
46
|
+
|
|
47
|
+
### Fase 6: Entrega
|
|
48
|
+
- Merge a develop/main
|
|
49
|
+
- Actualizar spec → "implemented"
|
|
50
|
+
- Archivar propuesta
|
|
51
|
+
|
|
52
|
+
## Reglas Importantes
|
|
53
|
+
|
|
54
|
+
1. **Sin spec no hay código** - Siempre crear/actualizar spec antes de implementar
|
|
55
|
+
2. **Testing Report obligatorio** - Cada feature documenta sus tests
|
|
56
|
+
3. **Code review obligatorio** - Ningún PR se mergea sin review
|
|
57
|
+
4. **Documentación en español** - Código en inglés, docs en español
|