don-cheli-sdd 1.22.0 → 1.23.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.
- package/CHANGELOG.md +12 -0
- package/CLAUDE.md +18 -10
- package/README.es.md +5 -1
- package/README.md +5 -1
- package/README.pt.md +5 -1
- package/VERSION +1 -1
- package/comandos/dc/comenzar.md +34 -9
- package/comandos/dc/especificar.md +10 -0
- package/comandos/dc/revisar.md +4 -0
- package/comandos/especdev/comenzar.md +34 -9
- package/comandos/especdev/especificar.md +10 -0
- package/comandos/especdev/revisar.md +4 -0
- package/package.json +1 -1
- package/scripts/.claude/commands/dc/comenzar.md +60 -7
- package/scripts/.claude/commands/dc/especificar.md +11 -1
- package/scripts/.claude/commands/dc/revisar.md +15 -1
- package/scripts/.claude/commands/especdev/comenzar.md +60 -7
- package/scripts/.claude/commands/especdev/especificar.md +11 -1
- package/scripts/.claude/commands/especdev/revisar.md +15 -1
- package/scripts/.claude/don-cheli/VERSION +1 -1
- package/scripts/.claude/don-cheli/scripts/actualizar.sh +22 -5
- package/scripts/.claude/don-cheli/scripts/instalar.sh +3 -2
- package/scripts/actualizar.sh +22 -5
- package/scripts/generar-config.sh +56 -31
- package/scripts/instalar.sh +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ Todos los cambios notables en Don Cheli SDD Framework.
|
|
|
4
4
|
|
|
5
5
|
Formato basado en [Conventional Commits](https://www.conventionalcommits.org/).
|
|
6
6
|
|
|
7
|
+
## [1.23.1](https://github.com/doncheli/don-cheli-sdd/compare/v1.23.0...v1.23.1) (2026-04-07)
|
|
8
|
+
|
|
9
|
+
### Correcciones
|
|
10
|
+
|
|
11
|
+
* auditoría completa del instalador — 11 bugs corregidos en 6 archivos ([80af310](https://github.com/doncheli/don-cheli-sdd/commit/80af310d21c5f01a2f7a9e9ac6d7500d7a1aa410))
|
|
12
|
+
|
|
13
|
+
## [1.23.0](https://github.com/doncheli/don-cheli-sdd/compare/v1.22.0...v1.23.0) (2026-04-07)
|
|
14
|
+
|
|
15
|
+
### Nuevas Funcionalidades
|
|
16
|
+
|
|
17
|
+
* integrar PRD como fase 0 opcional en el pipeline SDD ([6e6fdd2](https://github.com/doncheli/don-cheli-sdd/commit/6e6fdd2e9e595994f343a7943bbd6f753ca061d8))
|
|
18
|
+
|
|
7
19
|
## [1.22.0](https://github.com/doncheli/don-cheli-sdd/compare/v1.21.1...v1.22.0) (2026-04-07)
|
|
8
20
|
|
|
9
21
|
### Nuevas Funcionalidades
|
package/CLAUDE.md
CHANGED
|
@@ -32,16 +32,24 @@ Lee bajo demanda:
|
|
|
32
32
|
|
|
33
33
|
## Auto-actualización al inicio de sesión
|
|
34
34
|
Al inicio de la **primera interacción** de cada sesión:
|
|
35
|
-
1. Leer `${FRAMEWORK_HOME}/VERSION`
|
|
36
|
-
2. `curl -s https://raw.githubusercontent.com/doncheli/don-cheli-sdd/main/VERSION`
|
|
37
|
-
3. Si versiones iguales o falla el curl → silencio
|
|
38
|
-
4. Si hay versión mayor → **
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
35
|
+
1. Leer `${FRAMEWORK_HOME}/VERSION` para obtener la versión local
|
|
36
|
+
2. Ejecutar `curl -s https://raw.githubusercontent.com/doncheli/don-cheli-sdd/main/VERSION` para obtener la versión remota
|
|
37
|
+
3. Si versiones iguales o falla el curl → silencio, no mostrar nada
|
|
38
|
+
4. Si hay versión mayor → **notificar** al usuario (NO auto-aplicar):
|
|
39
|
+
|
|
40
|
+
**Formato de notificación (según idioma configurado):**
|
|
41
|
+
- **es:** `⬆️ Don Cheli v{remota} disponible (instalada: v{local}). Ejecuta /dc:actualizar para actualizar.`
|
|
42
|
+
- **en:** `⬆️ Don Cheli v{remote} available (installed: v{local}). Run /dc:update to upgrade.`
|
|
43
|
+
- **pt:** `⬆️ Don Cheli v{remota} disponível (instalada: v{local}). Execute /dc:atualizar para atualizar.`
|
|
44
|
+
|
|
45
|
+
**Alternativa rápida vía terminal:**
|
|
46
|
+
- `don-cheli update` (si instaló via npm)
|
|
47
|
+
- `bash scripts/actualizar.sh` (si instaló via git clone)
|
|
48
|
+
|
|
49
|
+
**Reglas:**
|
|
50
|
+
- Solo notificar **una vez por sesión** (no repetir en cada mensaje)
|
|
51
|
+
- Si no hay conexión o falla el curl → continuar sin notificar (no bloquear)
|
|
52
|
+
- **Nunca** auto-aplicar actualizaciones sin confirmación del usuario
|
|
45
53
|
5. El proceso NO debe bloquear la interacción del usuario
|
|
46
54
|
|
|
47
55
|
## Idioma (i18n)
|
package/README.es.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</p>
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="#-instalación"><img src="https://img.shields.io/badge/instalación-2_minutos-brightgreen" alt="Install"></a>
|
|
15
|
-
<img src="https://img.shields.io/badge/versión-1.
|
|
15
|
+
<img src="https://img.shields.io/badge/versión-1.23.1-blue" alt="Version">
|
|
16
16
|
<img src="https://img.shields.io/badge/licencia-Apache%202.0-green" alt="License">
|
|
17
17
|
<img src="https://img.shields.io/badge/idiomas-ES%20|%20EN%20|%20PT-red" alt="Languages">
|
|
18
18
|
<img src="https://img.shields.io/badge/comandos-85+-purple" alt="Commands">
|
|
@@ -163,6 +163,7 @@ Paso 4: ✅ Confirmar → Resumen de todo lo seleccionado
|
|
|
163
163
|
|
|
164
164
|
```mermaid
|
|
165
165
|
flowchart LR
|
|
166
|
+
P["📋 PRD"] -.->|opcional| B
|
|
166
167
|
A["💡 Idea"] --> B["📄 Especificar"]
|
|
167
168
|
B --> C["🔍 Clarificar"]
|
|
168
169
|
C --> D["🏗 Planificar"]
|
|
@@ -170,6 +171,7 @@ flowchart LR
|
|
|
170
171
|
E --> F["⚡ Implementar"]
|
|
171
172
|
F --> G["✅ Revisar"]
|
|
172
173
|
|
|
174
|
+
style P fill:#2d3436,color:#dfe6e9,stroke:#6c5ce7,stroke-dasharray: 5 5
|
|
173
175
|
style B fill:#6c5ce7,color:#fff
|
|
174
176
|
style C fill:#0984e3,color:#fff
|
|
175
177
|
style D fill:#00b894,color:#fff
|
|
@@ -178,6 +180,8 @@ flowchart LR
|
|
|
178
180
|
style G fill:#fd79a8,color:#fff
|
|
179
181
|
```
|
|
180
182
|
|
|
183
|
+
> **PRD (opcional):** Si tienes un diseno en Figma, brief de producto o user research, ejecuta `/dc:prd` primero. El PRD alimenta automaticamente a Especificar con user stories, prioridades y riesgos.
|
|
184
|
+
|
|
181
185
|
| # | Fase | Comando | Qué hace |
|
|
182
186
|
|---|------|---------|----------|
|
|
183
187
|
| 1 | **Especificar** | `/dc:especificar` | Convierte tu idea en especificación Gherkin con escenarios de prueba, prioridades y schema DBML |
|
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</p>
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="#-installation"><img src="https://img.shields.io/badge/install-2_minutes-brightgreen" alt="Install"></a>
|
|
15
|
-
<img src="https://img.shields.io/badge/version-1.
|
|
15
|
+
<img src="https://img.shields.io/badge/version-1.23.1-blue" alt="Version">
|
|
16
16
|
<img src="https://img.shields.io/badge/license-Apache%202.0-green" alt="License">
|
|
17
17
|
<img src="https://img.shields.io/badge/languages-ES%20|%20EN%20|%20PT-red" alt="Languages">
|
|
18
18
|
<img src="https://img.shields.io/badge/commands-85+-purple" alt="Commands">
|
|
@@ -163,6 +163,7 @@ Step 4: ✅ Confirm → Summary of everything selected
|
|
|
163
163
|
|
|
164
164
|
```mermaid
|
|
165
165
|
flowchart LR
|
|
166
|
+
P["📋 PRD"] -.->|optional| B
|
|
166
167
|
A["💡 Idea"] --> B["📄 Specify"]
|
|
167
168
|
B --> C["🔍 Clarify"]
|
|
168
169
|
C --> D["🏗 Plan"]
|
|
@@ -170,6 +171,7 @@ flowchart LR
|
|
|
170
171
|
E --> F["⚡ Implement"]
|
|
171
172
|
F --> G["✅ Review"]
|
|
172
173
|
|
|
174
|
+
style P fill:#2d3436,color:#dfe6e9,stroke:#6c5ce7,stroke-dasharray: 5 5
|
|
173
175
|
style B fill:#6c5ce7,color:#fff
|
|
174
176
|
style C fill:#0984e3,color:#fff
|
|
175
177
|
style D fill:#00b894,color:#fff
|
|
@@ -178,6 +180,8 @@ flowchart LR
|
|
|
178
180
|
style G fill:#fd79a8,color:#fff
|
|
179
181
|
```
|
|
180
182
|
|
|
183
|
+
> **PRD (optional):** If you have a Figma design, product brief or user research, run `/dc:prd` first. The PRD auto-feeds into Specify with user stories, priorities and risks.
|
|
184
|
+
|
|
181
185
|
| # | Phase | Command | What it does |
|
|
182
186
|
|---|-------|---------|-------------|
|
|
183
187
|
| 1 | **Specify** | `/dc:specify` | Turns your idea into a Gherkin specification with test scenarios, priorities and DBML schema |
|
package/README.pt.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
</p>
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="#-instalação"><img src="https://img.shields.io/badge/instalação-2_minutos-brightgreen" alt="Install"></a>
|
|
15
|
-
<img src="https://img.shields.io/badge/versão-1.
|
|
15
|
+
<img src="https://img.shields.io/badge/versão-1.23.1-blue" alt="Version">
|
|
16
16
|
<img src="https://img.shields.io/badge/licença-Apache%202.0-green" alt="License">
|
|
17
17
|
<img src="https://img.shields.io/badge/idiomas-ES%20|%20EN%20|%20PT-red" alt="Languages">
|
|
18
18
|
<img src="https://img.shields.io/badge/comandos-85+-purple" alt="Commands">
|
|
@@ -162,6 +162,7 @@ Passo 4: ✅ Confirmar → Resumo de tudo selecionado
|
|
|
162
162
|
|
|
163
163
|
```mermaid
|
|
164
164
|
flowchart LR
|
|
165
|
+
P["📋 PRD"] -.->|opcional| B
|
|
165
166
|
A["💡 Ideia"] --> B["📄 Especificar"]
|
|
166
167
|
B --> C["🔍 Clarificar"]
|
|
167
168
|
C --> D["🏗 Planejar"]
|
|
@@ -169,6 +170,7 @@ flowchart LR
|
|
|
169
170
|
E --> F["⚡ Implementar"]
|
|
170
171
|
F --> G["✅ Revisar"]
|
|
171
172
|
|
|
173
|
+
style P fill:#2d3436,color:#dfe6e9,stroke:#6c5ce7,stroke-dasharray: 5 5
|
|
172
174
|
style B fill:#6c5ce7,color:#fff
|
|
173
175
|
style C fill:#0984e3,color:#fff
|
|
174
176
|
style D fill:#00b894,color:#fff
|
|
@@ -177,6 +179,8 @@ flowchart LR
|
|
|
177
179
|
style G fill:#fd79a8,color:#fff
|
|
178
180
|
```
|
|
179
181
|
|
|
182
|
+
> **PRD (opcional):** Se voce tem um design Figma, brief de produto ou user research, execute `/dc:prd` primeiro. O PRD alimenta automaticamente Especificar com user stories, prioridades e riscos.
|
|
183
|
+
|
|
180
184
|
| # | Fase | Comando | O que faz |
|
|
181
185
|
|---|------|---------|-----------|
|
|
182
186
|
| 1 | **Especificar** | `/dc:especificar` | Transforma sua ideia em especificação Gherkin com cenários de teste, prioridades e schema DBML |
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.23.1
|
package/comandos/dc/comenzar.md
CHANGED
|
@@ -43,12 +43,35 @@ Nivel = max(puntuaciones) // Conservador: gana la dimensión más alta
|
|
|
43
43
|
|
|
44
44
|
## Comportamiento
|
|
45
45
|
|
|
46
|
-
1. **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
1. **Detectar PRD** — ¿Existe `.dc/prd/prd-*.md`? ¿El usuario proporcionó brief, Figma o docs?
|
|
47
|
+
- Si hay PRD existente → usarlo como input para las fases siguientes
|
|
48
|
+
- Si hay brief/Figma/docs pero no PRD → preguntar: "¿Quieres generar un PRD primero? (/dc:prd)"
|
|
49
|
+
- Si no hay nada → continuar sin PRD (flujo normal)
|
|
50
|
+
2. **Analizar** la descripción de la tarea (o el PRD si existe)
|
|
51
|
+
3. **Evaluar** las 4 dimensiones (alcance, incógnitas, riesgo, duración)
|
|
52
|
+
4. **Determinar** nivel de complejidad
|
|
53
|
+
5. **Mostrar** evaluación al usuario
|
|
54
|
+
6. **Preguntar** si está de acuerdo o desea ajustar
|
|
55
|
+
7. **Iniciar** flujo del nivel correspondiente
|
|
56
|
+
|
|
57
|
+
### Flujo con PRD (niveles 2-4)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
¿Se detectó PRD o fuentes de producto?
|
|
61
|
+
│
|
|
62
|
+
├─ SÍ, PRD existe (.dc/prd/prd-*.md)
|
|
63
|
+
│ → Leer PRD
|
|
64
|
+
│ → Extraer user stories, prioridades, riesgos
|
|
65
|
+
│ → Alimentar /dc:especificar automáticamente
|
|
66
|
+
│
|
|
67
|
+
├─ SÍ, hay brief/Figma pero no PRD
|
|
68
|
+
│ → "Se detectaron fuentes de producto. ¿Generar PRD? (s/n)"
|
|
69
|
+
│ → Si sí: /dc:prd → luego continúa el pipeline
|
|
70
|
+
│ → Si no: continuar sin PRD
|
|
71
|
+
│
|
|
72
|
+
└─ NO hay fuentes de producto
|
|
73
|
+
→ Flujo normal (el usuario describe la tarea)
|
|
74
|
+
```
|
|
52
75
|
|
|
53
76
|
## Ejemplo
|
|
54
77
|
|
|
@@ -85,9 +108,11 @@ Inspirada en el framework BMAD: el nivel de planificación se ajusta automática
|
|
|
85
108
|
| **0 — Atómico** | implementar → verificar | spec, clarificar, planificar, desglosar |
|
|
86
109
|
| **1 — Micro** | especificar (light) → implementar → revisar | clarificar, planificar, desglosar, pseudocódigo |
|
|
87
110
|
| **P — PoC** | hipótesis → construir → evaluar → veredicto | todo el pipeline formal |
|
|
88
|
-
| **2 — Estándar** | especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
89
|
-
| **3 — Complejo** | especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
90
|
-
| **4 — Producto** | constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
111
|
+
| **2 — Estándar** | [PRD →] especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
112
|
+
| **3 — Complejo** | [PRD →] especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
113
|
+
| **4 — Producto** | [PRD →] constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
114
|
+
|
|
115
|
+
> **[PRD]** = Fase 0 opcional. Si existe `.dc/prd/prd-*.md` o el usuario proporciona un brief/Figma, se ejecuta `/dc:prd` primero. El PRD alimenta automáticamente a `/dc:especificar` con user stories, prioridades y riesgos.
|
|
91
116
|
|
|
92
117
|
**Principio:** No aplicar el mismo proceso a un micro-fix que a una migración de plataforma. La fricción innecesaria es tan dañina como la falta de estructura.
|
|
93
118
|
|
|
@@ -20,6 +20,16 @@ Convertir un requerimiento en lenguaje natural a una especificación Gherkin est
|
|
|
20
20
|
|
|
21
21
|
## Comportamiento
|
|
22
22
|
|
|
23
|
+
0. **Detectar PRD** — Si existe `.dc/prd/prd-*.md`:
|
|
24
|
+
- Leer el PRD y extraer automáticamente:
|
|
25
|
+
- User stories (sección 6.1) → base para escenarios Gherkin
|
|
26
|
+
- Prioridades MoSCoW → mapear a P1 (Must), P2 (Should), P3+ (Could/Won't)
|
|
27
|
+
- Riesgos (sección 8) → agregar escenarios de error/edge case por riesgo
|
|
28
|
+
- Requirements no funcionales (sección 6.2) → anotar como constraints
|
|
29
|
+
- Data model DBML (sección 6.4) → usar como schema base si existe
|
|
30
|
+
- Informar al usuario: "PRD detectado — extrayendo X user stories, Y riesgos"
|
|
31
|
+
- Si no hay PRD → continuar con el flujo normal (input del usuario)
|
|
32
|
+
|
|
23
33
|
1. **Verificar** si existe `specs/db_schema/<dominio>.dbml`
|
|
24
34
|
- Si **NO existe** → Auto-generar DBML `@provisional` con campos inferidos del requerimiento
|
|
25
35
|
- Si **existe y está ratificado** → Usar como referencia, agregar nuevos campos como `@provisional`
|
package/comandos/dc/revisar.md
CHANGED
|
@@ -31,6 +31,10 @@ Verificar:
|
|
|
31
31
|
- [ ] Edge cases cubiertos con tests
|
|
32
32
|
- [ ] Sin stubs detectados (habilidad detección-stubs)
|
|
33
33
|
- [ ] Criterios de éxito de la spec cumplidos
|
|
34
|
+
- [ ] Conformidad con PRD (si existe .dc/prd/):
|
|
35
|
+
- Features Must Have implementadas
|
|
36
|
+
- Riesgos del PRD mitigados
|
|
37
|
+
- KPIs del PRD son medibles en el código
|
|
34
38
|
```
|
|
35
39
|
|
|
36
40
|
### 2. Tests y Cobertura
|
|
@@ -43,12 +43,35 @@ Nivel = max(puntuaciones) // Conservador: gana la dimensión más alta
|
|
|
43
43
|
|
|
44
44
|
## Comportamiento
|
|
45
45
|
|
|
46
|
-
1. **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
1. **Detectar PRD** — ¿Existe `.dc/prd/prd-*.md`? ¿El usuario proporcionó brief, Figma o docs?
|
|
47
|
+
- Si hay PRD existente → usarlo como input para las fases siguientes
|
|
48
|
+
- Si hay brief/Figma/docs pero no PRD → preguntar: "¿Quieres generar un PRD primero? (/dc:prd)"
|
|
49
|
+
- Si no hay nada → continuar sin PRD (flujo normal)
|
|
50
|
+
2. **Analizar** la descripción de la tarea (o el PRD si existe)
|
|
51
|
+
3. **Evaluar** las 4 dimensiones (alcance, incógnitas, riesgo, duración)
|
|
52
|
+
4. **Determinar** nivel de complejidad
|
|
53
|
+
5. **Mostrar** evaluación al usuario
|
|
54
|
+
6. **Preguntar** si está de acuerdo o desea ajustar
|
|
55
|
+
7. **Iniciar** flujo del nivel correspondiente
|
|
56
|
+
|
|
57
|
+
### Flujo con PRD (niveles 2-4)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
¿Se detectó PRD o fuentes de producto?
|
|
61
|
+
│
|
|
62
|
+
├─ SÍ, PRD existe (.dc/prd/prd-*.md)
|
|
63
|
+
│ → Leer PRD
|
|
64
|
+
│ → Extraer user stories, prioridades, riesgos
|
|
65
|
+
│ → Alimentar /dc:especificar automáticamente
|
|
66
|
+
│
|
|
67
|
+
├─ SÍ, hay brief/Figma pero no PRD
|
|
68
|
+
│ → "Se detectaron fuentes de producto. ¿Generar PRD? (s/n)"
|
|
69
|
+
│ → Si sí: /dc:prd → luego continúa el pipeline
|
|
70
|
+
│ → Si no: continuar sin PRD
|
|
71
|
+
│
|
|
72
|
+
└─ NO hay fuentes de producto
|
|
73
|
+
→ Flujo normal (el usuario describe la tarea)
|
|
74
|
+
```
|
|
52
75
|
|
|
53
76
|
## Ejemplo
|
|
54
77
|
|
|
@@ -85,9 +108,11 @@ Inspirada en el framework BMAD: el nivel de planificación se ajusta automática
|
|
|
85
108
|
| **0 — Atómico** | implementar → verificar | spec, clarificar, planificar, desglosar |
|
|
86
109
|
| **1 — Micro** | especificar (light) → implementar → revisar | clarificar, planificar, desglosar, pseudocódigo |
|
|
87
110
|
| **P — PoC** | hipótesis → construir → evaluar → veredicto | todo el pipeline formal |
|
|
88
|
-
| **2 — Estándar** | especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
89
|
-
| **3 — Complejo** | especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
90
|
-
| **4 — Producto** | constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
111
|
+
| **2 — Estándar** | [PRD →] especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
112
|
+
| **3 — Complejo** | [PRD →] especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
113
|
+
| **4 — Producto** | [PRD →] constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
114
|
+
|
|
115
|
+
> **[PRD]** = Fase 0 opcional. Si existe `.dc/prd/prd-*.md` o el usuario proporciona un brief/Figma, se ejecuta `/dc:prd` primero. El PRD alimenta automáticamente a `/dc:especificar` con user stories, prioridades y riesgos.
|
|
91
116
|
|
|
92
117
|
**Principio:** No aplicar el mismo proceso a un micro-fix que a una migración de plataforma. La fricción innecesaria es tan dañina como la falta de estructura.
|
|
93
118
|
|
|
@@ -20,6 +20,16 @@ Convertir un requerimiento en lenguaje natural a una especificación Gherkin est
|
|
|
20
20
|
|
|
21
21
|
## Comportamiento
|
|
22
22
|
|
|
23
|
+
0. **Detectar PRD** — Si existe `.dc/prd/prd-*.md`:
|
|
24
|
+
- Leer el PRD y extraer automáticamente:
|
|
25
|
+
- User stories (sección 6.1) → base para escenarios Gherkin
|
|
26
|
+
- Prioridades MoSCoW → mapear a P1 (Must), P2 (Should), P3+ (Could/Won't)
|
|
27
|
+
- Riesgos (sección 8) → agregar escenarios de error/edge case por riesgo
|
|
28
|
+
- Requirements no funcionales (sección 6.2) → anotar como constraints
|
|
29
|
+
- Data model DBML (sección 6.4) → usar como schema base si existe
|
|
30
|
+
- Informar al usuario: "PRD detectado — extrayendo X user stories, Y riesgos"
|
|
31
|
+
- Si no hay PRD → continuar con el flujo normal (input del usuario)
|
|
32
|
+
|
|
23
33
|
1. **Verificar** si existe `specs/db_schema/<dominio>.dbml`
|
|
24
34
|
- Si **NO existe** → Auto-generar DBML `@provisional` con campos inferidos del requerimiento
|
|
25
35
|
- Si **existe y está ratificado** → Usar como referencia, agregar nuevos campos como `@provisional`
|
|
@@ -31,6 +31,10 @@ Verificar:
|
|
|
31
31
|
- [ ] Edge cases cubiertos con tests
|
|
32
32
|
- [ ] Sin stubs detectados (habilidad detección-stubs)
|
|
33
33
|
- [ ] Criterios de éxito de la spec cumplidos
|
|
34
|
+
- [ ] Conformidad con PRD (si existe .dc/prd/):
|
|
35
|
+
- Features Must Have implementadas
|
|
36
|
+
- Riesgos del PRD mitigados
|
|
37
|
+
- KPIs del PRD son medibles en el código
|
|
34
38
|
```
|
|
35
39
|
|
|
36
40
|
### 2. Tests y Cobertura
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Iniciar tarea
|
|
2
|
+
description: Iniciar tarea nueva SDD con complejidad auto-detectada (0-4). Usa cuando el usuario dice "quiero iniciar tarea", "empezar feature", "nueva historia", "comenzar desarrollo", "start a new task/feature/story", "iniciar un feature". Detecta si es tarea rápida (nivel 1), normal (nivel 2) o compleja (nivel 3-4) y adapta el flujo TDD. No usar para código existente.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -43,12 +43,35 @@ Nivel = max(puntuaciones) // Conservador: gana la dimensión más alta
|
|
|
43
43
|
|
|
44
44
|
## Comportamiento
|
|
45
45
|
|
|
46
|
-
1. **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
1. **Detectar PRD** — ¿Existe `.dc/prd/prd-*.md`? ¿El usuario proporcionó brief, Figma o docs?
|
|
47
|
+
- Si hay PRD existente → usarlo como input para las fases siguientes
|
|
48
|
+
- Si hay brief/Figma/docs pero no PRD → preguntar: "¿Quieres generar un PRD primero? (/dc:prd)"
|
|
49
|
+
- Si no hay nada → continuar sin PRD (flujo normal)
|
|
50
|
+
2. **Analizar** la descripción de la tarea (o el PRD si existe)
|
|
51
|
+
3. **Evaluar** las 4 dimensiones (alcance, incógnitas, riesgo, duración)
|
|
52
|
+
4. **Determinar** nivel de complejidad
|
|
53
|
+
5. **Mostrar** evaluación al usuario
|
|
54
|
+
6. **Preguntar** si está de acuerdo o desea ajustar
|
|
55
|
+
7. **Iniciar** flujo del nivel correspondiente
|
|
56
|
+
|
|
57
|
+
### Flujo con PRD (niveles 2-4)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
¿Se detectó PRD o fuentes de producto?
|
|
61
|
+
│
|
|
62
|
+
├─ SÍ, PRD existe (.dc/prd/prd-*.md)
|
|
63
|
+
│ → Leer PRD
|
|
64
|
+
│ → Extraer user stories, prioridades, riesgos
|
|
65
|
+
│ → Alimentar /dc:especificar automáticamente
|
|
66
|
+
│
|
|
67
|
+
├─ SÍ, hay brief/Figma pero no PRD
|
|
68
|
+
│ → "Se detectaron fuentes de producto. ¿Generar PRD? (s/n)"
|
|
69
|
+
│ → Si sí: /dc:prd → luego continúa el pipeline
|
|
70
|
+
│ → Si no: continuar sin PRD
|
|
71
|
+
│
|
|
72
|
+
└─ NO hay fuentes de producto
|
|
73
|
+
→ Flujo normal (el usuario describe la tarea)
|
|
74
|
+
```
|
|
52
75
|
|
|
53
76
|
## Ejemplo
|
|
54
77
|
|
|
@@ -75,3 +98,33 @@ Duración: 2 (días)
|
|
|
75
98
|
- Si durante la ejecución se detecta mayor complejidad → escalar nivel
|
|
76
99
|
- Si la complejidad resulta menor → des-escalar nivel
|
|
77
100
|
- Regla de Desviación 4 → escalar al menos 1 nivel
|
|
101
|
+
|
|
102
|
+
## Heurística de Scale-Adaptive Planning
|
|
103
|
+
|
|
104
|
+
Inspirada en el framework BMAD: el nivel de planificación se ajusta automáticamente según la complejidad detectada.
|
|
105
|
+
|
|
106
|
+
| Nivel detectado | Fases que se ejecutan | Fases que se SALTAN |
|
|
107
|
+
|-----------------|----------------------|---------------------|
|
|
108
|
+
| **0 — Atómico** | implementar → verificar | spec, clarificar, planificar, desglosar |
|
|
109
|
+
| **1 — Micro** | especificar (light) → implementar → revisar | clarificar, planificar, desglosar, pseudocódigo |
|
|
110
|
+
| **P — PoC** | hipótesis → construir → evaluar → veredicto | todo el pipeline formal |
|
|
111
|
+
| **2 — Estándar** | [PRD →] especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
112
|
+
| **3 — Complejo** | [PRD →] especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
113
|
+
| **4 — Producto** | [PRD →] constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
114
|
+
|
|
115
|
+
> **[PRD]** = Fase 0 opcional. Si existe `.dc/prd/prd-*.md` o el usuario proporciona un brief/Figma, se ejecuta `/dc:prd` primero. El PRD alimenta automáticamente a `/dc:especificar` con user stories, prioridades y riesgos.
|
|
116
|
+
|
|
117
|
+
**Principio:** No aplicar el mismo proceso a un micro-fix que a una migración de plataforma. La fricción innecesaria es tan dañina como la falta de estructura.
|
|
118
|
+
|
|
119
|
+
### Señales de detección automática
|
|
120
|
+
|
|
121
|
+
| Señal | Sube nivel | Baja nivel |
|
|
122
|
+
|-------|-----------|------------|
|
|
123
|
+
| Archivos afectados > 10 | +1 | |
|
|
124
|
+
| Archivos afectados ≤ 2 | | -1 |
|
|
125
|
+
| Cambio cruza módulos | +1 | |
|
|
126
|
+
| Solo 1 módulo | | -1 |
|
|
127
|
+
| Toca auth/pagos/seguridad | +1 | |
|
|
128
|
+
| Solo wording/config | | -1 |
|
|
129
|
+
| Dependencias externas nuevas | +1 | |
|
|
130
|
+
| Sin dependencias nuevas | | 0 |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Crear
|
|
2
|
+
description: Crear especificaciones Gherkin desde un requerimiento/requisito. Usa cuando el usuario dice "escribir specs", "especificar feature", "crear Gherkin", "escribir requerimientos", "write specs", "requirements to Gherkin", "escribir scenarios", "documentar feature en Gherkin". Genera DBML schema auto-máticamente para persistence. Incluye validación contra el schema IEEE 29148.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -20,6 +20,16 @@ Convertir un requerimiento en lenguaje natural a una especificación Gherkin est
|
|
|
20
20
|
|
|
21
21
|
## Comportamiento
|
|
22
22
|
|
|
23
|
+
0. **Detectar PRD** — Si existe `.dc/prd/prd-*.md`:
|
|
24
|
+
- Leer el PRD y extraer automáticamente:
|
|
25
|
+
- User stories (sección 6.1) → base para escenarios Gherkin
|
|
26
|
+
- Prioridades MoSCoW → mapear a P1 (Must), P2 (Should), P3+ (Could/Won't)
|
|
27
|
+
- Riesgos (sección 8) → agregar escenarios de error/edge case por riesgo
|
|
28
|
+
- Requirements no funcionales (sección 6.2) → anotar como constraints
|
|
29
|
+
- Data model DBML (sección 6.4) → usar como schema base si existe
|
|
30
|
+
- Informar al usuario: "PRD detectado — extrayendo X user stories, Y riesgos"
|
|
31
|
+
- Si no hay PRD → continuar con el flujo normal (input del usuario)
|
|
32
|
+
|
|
23
33
|
1. **Verificar** si existe `specs/db_schema/<dominio>.dbml`
|
|
24
34
|
- Si **NO existe** → Auto-generar DBML `@provisional` con campos inferidos del requerimiento
|
|
25
35
|
- Si **existe y está ratificado** → Usar como referencia, agregar nuevos campos como `@provisional`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Peer review estricto con análisis de rendimiento, arquitectura, seguridad y cumplimiento
|
|
2
|
+
description: Peer review estricto de código con análisis de rendimiento, arquitectura, seguridad y cumplimiento. Usa cuando el usuario dice "revisar código", "code review", "peer review", "revisame este archivo", "review my code", "analizar código", "revisar PR", "revisar feature". Incluye análisis de performance, security OWASP, architecture smells y compliance con specs.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -31,6 +31,10 @@ Verificar:
|
|
|
31
31
|
- [ ] Edge cases cubiertos con tests
|
|
32
32
|
- [ ] Sin stubs detectados (habilidad detección-stubs)
|
|
33
33
|
- [ ] Criterios de éxito de la spec cumplidos
|
|
34
|
+
- [ ] Conformidad con PRD (si existe .dc/prd/):
|
|
35
|
+
- Features Must Have implementadas
|
|
36
|
+
- Riesgos del PRD mitigados
|
|
37
|
+
- KPIs del PRD son medibles en el código
|
|
34
38
|
```
|
|
35
39
|
|
|
36
40
|
### 2. Tests y Cobertura
|
|
@@ -219,3 +223,13 @@ for user in users:
|
|
|
219
223
|
- **Nunca** ignorar hallazgos de seguridad
|
|
220
224
|
- **Siempre** verificar cumplimiento de constitución
|
|
221
225
|
- **Siempre** documentar hallazgos con archivo + línea + sugerencia
|
|
226
|
+
|
|
227
|
+
## Regla Adversarial
|
|
228
|
+
|
|
229
|
+
Inspirada en el framework BMAD: el reviewer DEBE encontrar al menos un hallazgo concreto en cada revisión.
|
|
230
|
+
|
|
231
|
+
- Si el review produce **cero hallazgos**, se activa una segunda pasada obligatoria con instrucción explícita: "Re-analizar buscando específicamente: N+1 queries, race conditions, edge cases no testeados, datos sensibles en logs, y naming inconsistencies."
|
|
232
|
+
- Si la segunda pasada también produce cero hallazgos, se debe incluir una justificación explícita de por qué el código es excepcionalmente limpio.
|
|
233
|
+
- **Nunca** aprobar con "todo se ve bien" sin evidencia de análisis profundo.
|
|
234
|
+
|
|
235
|
+
Esto combate la tendencia natural del LLM a aprobar trabajo propio sin challenge suficiente.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Iniciar tarea
|
|
2
|
+
description: Iniciar tarea nueva SDD con complejidad auto-detectada (0-4). Usa cuando el usuario dice "quiero iniciar tarea", "empezar feature", "nueva historia", "comenzar desarrollo", "start a new task/feature/story", "iniciar un feature". Detecta si es tarea rápida (nivel 1), normal (nivel 2) o compleja (nivel 3-4) y adapta el flujo TDD. No usar para código existente.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -43,12 +43,35 @@ Nivel = max(puntuaciones) // Conservador: gana la dimensión más alta
|
|
|
43
43
|
|
|
44
44
|
## Comportamiento
|
|
45
45
|
|
|
46
|
-
1. **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
46
|
+
1. **Detectar PRD** — ¿Existe `.dc/prd/prd-*.md`? ¿El usuario proporcionó brief, Figma o docs?
|
|
47
|
+
- Si hay PRD existente → usarlo como input para las fases siguientes
|
|
48
|
+
- Si hay brief/Figma/docs pero no PRD → preguntar: "¿Quieres generar un PRD primero? (/dc:prd)"
|
|
49
|
+
- Si no hay nada → continuar sin PRD (flujo normal)
|
|
50
|
+
2. **Analizar** la descripción de la tarea (o el PRD si existe)
|
|
51
|
+
3. **Evaluar** las 4 dimensiones (alcance, incógnitas, riesgo, duración)
|
|
52
|
+
4. **Determinar** nivel de complejidad
|
|
53
|
+
5. **Mostrar** evaluación al usuario
|
|
54
|
+
6. **Preguntar** si está de acuerdo o desea ajustar
|
|
55
|
+
7. **Iniciar** flujo del nivel correspondiente
|
|
56
|
+
|
|
57
|
+
### Flujo con PRD (niveles 2-4)
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
¿Se detectó PRD o fuentes de producto?
|
|
61
|
+
│
|
|
62
|
+
├─ SÍ, PRD existe (.dc/prd/prd-*.md)
|
|
63
|
+
│ → Leer PRD
|
|
64
|
+
│ → Extraer user stories, prioridades, riesgos
|
|
65
|
+
│ → Alimentar /dc:especificar automáticamente
|
|
66
|
+
│
|
|
67
|
+
├─ SÍ, hay brief/Figma pero no PRD
|
|
68
|
+
│ → "Se detectaron fuentes de producto. ¿Generar PRD? (s/n)"
|
|
69
|
+
│ → Si sí: /dc:prd → luego continúa el pipeline
|
|
70
|
+
│ → Si no: continuar sin PRD
|
|
71
|
+
│
|
|
72
|
+
└─ NO hay fuentes de producto
|
|
73
|
+
→ Flujo normal (el usuario describe la tarea)
|
|
74
|
+
```
|
|
52
75
|
|
|
53
76
|
## Ejemplo
|
|
54
77
|
|
|
@@ -75,3 +98,33 @@ Duración: 2 (días)
|
|
|
75
98
|
- Si durante la ejecución se detecta mayor complejidad → escalar nivel
|
|
76
99
|
- Si la complejidad resulta menor → des-escalar nivel
|
|
77
100
|
- Regla de Desviación 4 → escalar al menos 1 nivel
|
|
101
|
+
|
|
102
|
+
## Heurística de Scale-Adaptive Planning
|
|
103
|
+
|
|
104
|
+
Inspirada en el framework BMAD: el nivel de planificación se ajusta automáticamente según la complejidad detectada.
|
|
105
|
+
|
|
106
|
+
| Nivel detectado | Fases que se ejecutan | Fases que se SALTAN |
|
|
107
|
+
|-----------------|----------------------|---------------------|
|
|
108
|
+
| **0 — Atómico** | implementar → verificar | spec, clarificar, planificar, desglosar |
|
|
109
|
+
| **1 — Micro** | especificar (light) → implementar → revisar | clarificar, planificar, desglosar, pseudocódigo |
|
|
110
|
+
| **P — PoC** | hipótesis → construir → evaluar → veredicto | todo el pipeline formal |
|
|
111
|
+
| **2 — Estándar** | [PRD →] especificar → clarificar → planificar → desglosar → implementar → revisar | pseudocódigo (opcional) |
|
|
112
|
+
| **3 — Complejo** | [PRD →] especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
113
|
+
| **4 — Producto** | [PRD →] constitución → proponer → especificar → clarificar → pseudocódigo → planificar → diseñar → desglosar → implementar → revisar | nada se salta |
|
|
114
|
+
|
|
115
|
+
> **[PRD]** = Fase 0 opcional. Si existe `.dc/prd/prd-*.md` o el usuario proporciona un brief/Figma, se ejecuta `/dc:prd` primero. El PRD alimenta automáticamente a `/dc:especificar` con user stories, prioridades y riesgos.
|
|
116
|
+
|
|
117
|
+
**Principio:** No aplicar el mismo proceso a un micro-fix que a una migración de plataforma. La fricción innecesaria es tan dañina como la falta de estructura.
|
|
118
|
+
|
|
119
|
+
### Señales de detección automática
|
|
120
|
+
|
|
121
|
+
| Señal | Sube nivel | Baja nivel |
|
|
122
|
+
|-------|-----------|------------|
|
|
123
|
+
| Archivos afectados > 10 | +1 | |
|
|
124
|
+
| Archivos afectados ≤ 2 | | -1 |
|
|
125
|
+
| Cambio cruza módulos | +1 | |
|
|
126
|
+
| Solo 1 módulo | | -1 |
|
|
127
|
+
| Toca auth/pagos/seguridad | +1 | |
|
|
128
|
+
| Solo wording/config | | -1 |
|
|
129
|
+
| Dependencias externas nuevas | +1 | |
|
|
130
|
+
| Sin dependencias nuevas | | 0 |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Crear
|
|
2
|
+
description: Crear especificaciones Gherkin desde un requerimiento/requisito. Usa cuando el usuario dice "escribir specs", "especificar feature", "crear Gherkin", "escribir requerimientos", "write specs", "requirements to Gherkin", "escribir scenarios", "documentar feature en Gherkin". Genera DBML schema auto-máticamente para persistence. Incluye validación contra el schema IEEE 29148.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -20,6 +20,16 @@ Convertir un requerimiento en lenguaje natural a una especificación Gherkin est
|
|
|
20
20
|
|
|
21
21
|
## Comportamiento
|
|
22
22
|
|
|
23
|
+
0. **Detectar PRD** — Si existe `.dc/prd/prd-*.md`:
|
|
24
|
+
- Leer el PRD y extraer automáticamente:
|
|
25
|
+
- User stories (sección 6.1) → base para escenarios Gherkin
|
|
26
|
+
- Prioridades MoSCoW → mapear a P1 (Must), P2 (Should), P3+ (Could/Won't)
|
|
27
|
+
- Riesgos (sección 8) → agregar escenarios de error/edge case por riesgo
|
|
28
|
+
- Requirements no funcionales (sección 6.2) → anotar como constraints
|
|
29
|
+
- Data model DBML (sección 6.4) → usar como schema base si existe
|
|
30
|
+
- Informar al usuario: "PRD detectado — extrayendo X user stories, Y riesgos"
|
|
31
|
+
- Si no hay PRD → continuar con el flujo normal (input del usuario)
|
|
32
|
+
|
|
23
33
|
1. **Verificar** si existe `specs/db_schema/<dominio>.dbml`
|
|
24
34
|
- Si **NO existe** → Auto-generar DBML `@provisional` con campos inferidos del requerimiento
|
|
25
35
|
- Si **existe y está ratificado** → Usar como referencia, agregar nuevos campos como `@provisional`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Peer review estricto con análisis de rendimiento, arquitectura, seguridad y cumplimiento
|
|
2
|
+
description: Peer review estricto de código con análisis de rendimiento, arquitectura, seguridad y cumplimiento. Usa cuando el usuario dice "revisar código", "code review", "peer review", "revisame este archivo", "review my code", "analizar código", "revisar PR", "revisar feature". Incluye análisis de performance, security OWASP, architecture smells y compliance con specs.
|
|
3
3
|
i18n: true
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -31,6 +31,10 @@ Verificar:
|
|
|
31
31
|
- [ ] Edge cases cubiertos con tests
|
|
32
32
|
- [ ] Sin stubs detectados (habilidad detección-stubs)
|
|
33
33
|
- [ ] Criterios de éxito de la spec cumplidos
|
|
34
|
+
- [ ] Conformidad con PRD (si existe .dc/prd/):
|
|
35
|
+
- Features Must Have implementadas
|
|
36
|
+
- Riesgos del PRD mitigados
|
|
37
|
+
- KPIs del PRD son medibles en el código
|
|
34
38
|
```
|
|
35
39
|
|
|
36
40
|
### 2. Tests y Cobertura
|
|
@@ -219,3 +223,13 @@ for user in users:
|
|
|
219
223
|
- **Nunca** ignorar hallazgos de seguridad
|
|
220
224
|
- **Siempre** verificar cumplimiento de constitución
|
|
221
225
|
- **Siempre** documentar hallazgos con archivo + línea + sugerencia
|
|
226
|
+
|
|
227
|
+
## Regla Adversarial
|
|
228
|
+
|
|
229
|
+
Inspirada en el framework BMAD: el reviewer DEBE encontrar al menos un hallazgo concreto en cada revisión.
|
|
230
|
+
|
|
231
|
+
- Si el review produce **cero hallazgos**, se activa una segunda pasada obligatoria con instrucción explícita: "Re-analizar buscando específicamente: N+1 queries, race conditions, edge cases no testeados, datos sensibles en logs, y naming inconsistencies."
|
|
232
|
+
- Si la segunda pasada también produce cero hallazgos, se debe incluir una justificación explícita de por qué el código es excepcionalmente limpio.
|
|
233
|
+
- **Nunca** aprobar con "todo se ve bien" sin evidencia de análisis profundo.
|
|
234
|
+
|
|
235
|
+
Esto combate la tendencia natural del LLM a aprobar trabajo propio sin challenge suficiente.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.23.1
|
|
@@ -39,7 +39,7 @@ done
|
|
|
39
39
|
# PROGRESS BAR
|
|
40
40
|
# ═══════════════════════════════════════════════════════════════
|
|
41
41
|
|
|
42
|
-
TOTAL_STEPS=
|
|
42
|
+
TOTAL_STEPS=13
|
|
43
43
|
CURRENT_STEP=0
|
|
44
44
|
|
|
45
45
|
progress() {
|
|
@@ -274,11 +274,13 @@ git clone --depth 1 "${REPO_URL}.git" "$TEMP_DIR/don-cheli-sdd" > /dev/null 2>&1
|
|
|
274
274
|
progress "Escaneando scripts por seguridad..."
|
|
275
275
|
|
|
276
276
|
AUDIT_ISSUES=0
|
|
277
|
-
# Check for
|
|
277
|
+
# Check for genuinely dangerous patterns in new scripts (not comments/strings)
|
|
278
278
|
for f in "$TEMP_DIR/don-cheli-sdd/scripts/"*.sh; do
|
|
279
279
|
[ -f "$f" ] || continue
|
|
280
|
-
#
|
|
281
|
-
|
|
280
|
+
# Only flag REAL dangerous code, not patterns inside comments or grep patterns
|
|
281
|
+
# Remove comments before scanning
|
|
282
|
+
CLEAN=$(sed 's/#.*$//' "$f" | sed '/grep/d' | sed '/echo/d')
|
|
283
|
+
SUSPICIOUS=$(echo "$CLEAN" | grep -c 'eval "\$\|rm -rf /[^.]' 2>/dev/null || echo 0)
|
|
282
284
|
if [ "$SUSPICIOUS" -gt 0 ]; then
|
|
283
285
|
AUDIT_ISSUES=$((AUDIT_ISSUES + SUSPICIOUS))
|
|
284
286
|
fi
|
|
@@ -315,7 +317,22 @@ if [ -f "$INSTALL_DIR/perfil" ]; then
|
|
|
315
317
|
INSTALL_FLAGS="$INSTALL_FLAGS --profile $PROFILE"
|
|
316
318
|
fi
|
|
317
319
|
|
|
318
|
-
|
|
320
|
+
# Preserve tools if exists
|
|
321
|
+
if [ -f "$INSTALL_DIR/tools" ]; then
|
|
322
|
+
TOOLS=$(cat "$INSTALL_DIR/tools")
|
|
323
|
+
INSTALL_FLAGS="$INSTALL_FLAGS --tools $TOOLS"
|
|
324
|
+
fi
|
|
325
|
+
|
|
326
|
+
cd "$TEMP_DIR/don-cheli-sdd" && bash scripts/instalar.sh $INSTALL_FLAGS > "$TEMP_DIR/install.log" 2>&1
|
|
327
|
+
INSTALL_EXIT=$?
|
|
328
|
+
|
|
329
|
+
if [ "$INSTALL_EXIT" -ne 0 ]; then
|
|
330
|
+
echo ""
|
|
331
|
+
echo -e " ${RED}❌ Error durante la instalación${NC}"
|
|
332
|
+
echo -e " Log: $TEMP_DIR/install.log"
|
|
333
|
+
tail -10 "$TEMP_DIR/install.log"
|
|
334
|
+
exit 1
|
|
335
|
+
fi
|
|
319
336
|
|
|
320
337
|
progress "Verificando instalación..."
|
|
321
338
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
set -euo pipefail
|
|
6
6
|
|
|
7
|
-
VERSION="1.
|
|
7
|
+
VERSION="1.23.1"
|
|
8
8
|
REPO_URL="https://github.com/doncheli/don-cheli-sdd"
|
|
9
9
|
CLEANUP_TMPDIR=""
|
|
10
10
|
|
|
@@ -1053,7 +1053,8 @@ if [ "$INTERACTIVE_MODE" = true ] && [ -n "${SELECTED_TOOLS:-}" ]; then
|
|
|
1053
1053
|
echo -e " ${YELLOW}⚠ generar-config.sh no encontrado, saltando generación de configs${NC}"
|
|
1054
1054
|
fi
|
|
1055
1055
|
|
|
1056
|
-
# Save profile selection
|
|
1056
|
+
# Save profile and tools selection (for updates)
|
|
1057
1057
|
echo "$SELECTED_PROFILE" > "${FRAMEWORK_HOME}/perfil"
|
|
1058
|
+
echo "$SELECTED_TOOLS" > "${FRAMEWORK_HOME}/tools"
|
|
1058
1059
|
echo -e " ${GREEN}✓${NC} Perfil guardado: ${SELECTED_PROFILE}"
|
|
1059
1060
|
fi
|
package/scripts/actualizar.sh
CHANGED
|
@@ -39,7 +39,7 @@ done
|
|
|
39
39
|
# PROGRESS BAR
|
|
40
40
|
# ═══════════════════════════════════════════════════════════════
|
|
41
41
|
|
|
42
|
-
TOTAL_STEPS=
|
|
42
|
+
TOTAL_STEPS=13
|
|
43
43
|
CURRENT_STEP=0
|
|
44
44
|
|
|
45
45
|
progress() {
|
|
@@ -274,11 +274,13 @@ git clone --depth 1 "${REPO_URL}.git" "$TEMP_DIR/don-cheli-sdd" > /dev/null 2>&1
|
|
|
274
274
|
progress "Escaneando scripts por seguridad..."
|
|
275
275
|
|
|
276
276
|
AUDIT_ISSUES=0
|
|
277
|
-
# Check for
|
|
277
|
+
# Check for genuinely dangerous patterns in new scripts (not comments/strings)
|
|
278
278
|
for f in "$TEMP_DIR/don-cheli-sdd/scripts/"*.sh; do
|
|
279
279
|
[ -f "$f" ] || continue
|
|
280
|
-
#
|
|
281
|
-
|
|
280
|
+
# Only flag REAL dangerous code, not patterns inside comments or grep patterns
|
|
281
|
+
# Remove comments before scanning
|
|
282
|
+
CLEAN=$(sed 's/#.*$//' "$f" | sed '/grep/d' | sed '/echo/d')
|
|
283
|
+
SUSPICIOUS=$(echo "$CLEAN" | grep -c 'eval "\$\|rm -rf /[^.]' 2>/dev/null || echo 0)
|
|
282
284
|
if [ "$SUSPICIOUS" -gt 0 ]; then
|
|
283
285
|
AUDIT_ISSUES=$((AUDIT_ISSUES + SUSPICIOUS))
|
|
284
286
|
fi
|
|
@@ -315,7 +317,22 @@ if [ -f "$INSTALL_DIR/perfil" ]; then
|
|
|
315
317
|
INSTALL_FLAGS="$INSTALL_FLAGS --profile $PROFILE"
|
|
316
318
|
fi
|
|
317
319
|
|
|
318
|
-
|
|
320
|
+
# Preserve tools if exists
|
|
321
|
+
if [ -f "$INSTALL_DIR/tools" ]; then
|
|
322
|
+
TOOLS=$(cat "$INSTALL_DIR/tools")
|
|
323
|
+
INSTALL_FLAGS="$INSTALL_FLAGS --tools $TOOLS"
|
|
324
|
+
fi
|
|
325
|
+
|
|
326
|
+
cd "$TEMP_DIR/don-cheli-sdd" && bash scripts/instalar.sh $INSTALL_FLAGS > "$TEMP_DIR/install.log" 2>&1
|
|
327
|
+
INSTALL_EXIT=$?
|
|
328
|
+
|
|
329
|
+
if [ "$INSTALL_EXIT" -ne 0 ]; then
|
|
330
|
+
echo ""
|
|
331
|
+
echo -e " ${RED}❌ Error durante la instalación${NC}"
|
|
332
|
+
echo -e " Log: $TEMP_DIR/install.log"
|
|
333
|
+
tail -10 "$TEMP_DIR/install.log"
|
|
334
|
+
exit 1
|
|
335
|
+
fi
|
|
319
336
|
|
|
320
337
|
progress "Verificando instalación..."
|
|
321
338
|
|
|
@@ -5,6 +5,23 @@
|
|
|
5
5
|
# Intended to be sourced from instalar.sh, not run standalone.
|
|
6
6
|
# Main entry point: generar_configs()
|
|
7
7
|
|
|
8
|
+
# Helper: detect project root from FRAMEWORK_HOME path
|
|
9
|
+
# .claude/don-cheli → project root is the parent
|
|
10
|
+
_get_project_root() {
|
|
11
|
+
local dir="$1"
|
|
12
|
+
local root
|
|
13
|
+
if [[ "$dir" == *".claude/don-cheli"* ]]; then
|
|
14
|
+
root="${dir%/.claude/don-cheli*}"
|
|
15
|
+
[ -z "$root" ] && root="."
|
|
16
|
+
elif [[ "$dir" == *".claude"* ]]; then
|
|
17
|
+
root="${dir%/.claude*}"
|
|
18
|
+
[ -z "$root" ] && root="."
|
|
19
|
+
else
|
|
20
|
+
root="$dir"
|
|
21
|
+
fi
|
|
22
|
+
echo "$root"
|
|
23
|
+
}
|
|
24
|
+
|
|
8
25
|
generar_configs() {
|
|
9
26
|
local tools="$1"
|
|
10
27
|
local profile="$2"
|
|
@@ -114,11 +131,13 @@ _gen_claude() {
|
|
|
114
131
|
# ─────────────────────────────────────────────
|
|
115
132
|
_gen_codex() {
|
|
116
133
|
local dir="$1" home="$2" locale="$3"
|
|
134
|
+
local project_root
|
|
135
|
+
project_root=$(_get_project_root "$dir")
|
|
117
136
|
|
|
118
|
-
echo -e " ${GREEN:-}✓${NC:-} Codex → AGENTS.md"
|
|
137
|
+
echo -e " ${GREEN:-}✓${NC:-} Codex → AGENTS.md (en $project_root/)"
|
|
119
138
|
|
|
120
139
|
if [ -f "$home/AGENTS.md" ]; then
|
|
121
|
-
cp "$home/AGENTS.md" "$
|
|
140
|
+
cp "$home/AGENTS.md" "$project_root/" 2>/dev/null || true
|
|
122
141
|
else
|
|
123
142
|
# Generate a minimal AGENTS.md if template is missing
|
|
124
143
|
cat > "$dir/AGENTS.md" 2>/dev/null << 'AGENTSEOF' || true
|
|
@@ -142,13 +161,15 @@ AGENTSEOF
|
|
|
142
161
|
# ─────────────────────────────────────────────
|
|
143
162
|
_gen_cursor() {
|
|
144
163
|
local dir="$1" home="$2" locale="$3"
|
|
164
|
+
local project_root
|
|
165
|
+
project_root=$(_get_project_root "$dir")
|
|
145
166
|
|
|
146
|
-
echo -e " ${GREEN:-}✓${NC:-} Cursor → .cursorrules"
|
|
167
|
+
echo -e " ${GREEN:-}✓${NC:-} Cursor → .cursorrules (en $project_root/)"
|
|
147
168
|
|
|
148
169
|
if [ "$locale" != "en" ] && [ -f "$home/.cursorrules.${locale}" ]; then
|
|
149
|
-
cp "$home/.cursorrules.${locale}" "$
|
|
170
|
+
cp "$home/.cursorrules.${locale}" "$project_root/.cursorrules" 2>/dev/null || true
|
|
150
171
|
elif [ -f "$home/.cursorrules" ]; then
|
|
151
|
-
cp "$home/.cursorrules" "$
|
|
172
|
+
cp "$home/.cursorrules" "$project_root/" 2>/dev/null || true
|
|
152
173
|
else
|
|
153
174
|
echo -e " ${YELLOW:-}⚠${NC:-} .cursorrules not found in $home — skipping" >&2
|
|
154
175
|
fi
|
|
@@ -159,19 +180,8 @@ _gen_cursor() {
|
|
|
159
180
|
# ─────────────────────────────────────────────
|
|
160
181
|
_gen_antigravity() {
|
|
161
182
|
local dir="$1" home="$2" locale="$3"
|
|
162
|
-
|
|
163
|
-
# Antigravity needs files at project root, not inside .claude/don-cheli/
|
|
164
|
-
# Detect project root: go up from .claude/don-cheli/ or use current dir
|
|
165
183
|
local project_root
|
|
166
|
-
|
|
167
|
-
project_root="${dir%/.claude/don-cheli*}"
|
|
168
|
-
[ -z "$project_root" ] && project_root="."
|
|
169
|
-
elif [[ "$dir" == *".claude"* ]]; then
|
|
170
|
-
project_root="${dir%/.claude*}"
|
|
171
|
-
[ -z "$project_root" ] && project_root="."
|
|
172
|
-
else
|
|
173
|
-
project_root="$dir"
|
|
174
|
-
fi
|
|
184
|
+
project_root=$(_get_project_root "$dir")
|
|
175
185
|
|
|
176
186
|
echo -e " ${GREEN:-}✓${NC:-} Antigravity → GEMINI.md + .agent/ (en $project_root/)"
|
|
177
187
|
|
|
@@ -194,16 +204,17 @@ _gen_antigravity() {
|
|
|
194
204
|
# ─────────────────────────────────────────────
|
|
195
205
|
_gen_windsurf() {
|
|
196
206
|
local dir="$1" home="$2" locale="$3"
|
|
207
|
+
local project_root
|
|
208
|
+
project_root=$(_get_project_root "$dir")
|
|
197
209
|
|
|
198
|
-
echo -e " ${GREEN:-}✓${NC:-} Windsurf → .windsurf/rules/don-cheli.md"
|
|
210
|
+
echo -e " ${GREEN:-}✓${NC:-} Windsurf → .windsurf/rules/don-cheli.md (en $project_root/)"
|
|
199
211
|
|
|
200
|
-
mkdir -p "$
|
|
212
|
+
mkdir -p "$project_root/.windsurf/rules" 2>/dev/null || true
|
|
201
213
|
|
|
202
|
-
# Prefer a dedicated windsurf template; fall back to .cursorrules
|
|
203
214
|
if [ -f "$home/.windsurf/rules/don-cheli.md" ]; then
|
|
204
|
-
cp "$home/.windsurf/rules/don-cheli.md" "$
|
|
215
|
+
cp "$home/.windsurf/rules/don-cheli.md" "$project_root/.windsurf/rules/don-cheli.md" 2>/dev/null || true
|
|
205
216
|
elif [ -f "$home/.cursorrules" ]; then
|
|
206
|
-
cp "$home/.cursorrules" "$
|
|
217
|
+
cp "$home/.cursorrules" "$project_root/.windsurf/rules/don-cheli.md" 2>/dev/null || true
|
|
207
218
|
else
|
|
208
219
|
echo -e " ${YELLOW:-}⚠${NC:-} No Windsurf template found in $home — skipping" >&2
|
|
209
220
|
fi
|
|
@@ -214,11 +225,13 @@ _gen_windsurf() {
|
|
|
214
225
|
# ─────────────────────────────────────────────
|
|
215
226
|
_gen_amp() {
|
|
216
227
|
local dir="$1" home="$2" locale="$3"
|
|
228
|
+
local project_root
|
|
229
|
+
project_root=$(_get_project_root "$dir")
|
|
217
230
|
|
|
218
|
-
echo -e " ${GREEN:-}✓${NC:-} Amp → prompt.md"
|
|
231
|
+
echo -e " ${GREEN:-}✓${NC:-} Amp → prompt.md (en $project_root/)"
|
|
219
232
|
|
|
220
233
|
if [ -f "$home/prompt.md" ]; then
|
|
221
|
-
cp "$home/prompt.md" "$
|
|
234
|
+
cp "$home/prompt.md" "$project_root/" 2>/dev/null || true
|
|
222
235
|
else
|
|
223
236
|
echo -e " ${YELLOW:-}⚠${NC:-} prompt.md not found in $home — skipping" >&2
|
|
224
237
|
fi
|
|
@@ -229,19 +242,20 @@ _gen_amp() {
|
|
|
229
242
|
# ─────────────────────────────────────────────
|
|
230
243
|
_gen_continue() {
|
|
231
244
|
local dir="$1" home="$2" locale="$3"
|
|
245
|
+
local project_root
|
|
246
|
+
project_root=$(_get_project_root "$dir")
|
|
232
247
|
|
|
233
|
-
echo -e " ${GREEN:-}✓${NC:-} Continue.dev → .continue/config/don-cheli.json"
|
|
248
|
+
echo -e " ${GREEN:-}✓${NC:-} Continue.dev → .continue/config/don-cheli.json (en $project_root/)"
|
|
234
249
|
|
|
235
|
-
mkdir -p "$
|
|
250
|
+
mkdir -p "$project_root/.continue/config" 2>/dev/null || true
|
|
236
251
|
|
|
237
|
-
# Use existing template if available; otherwise generate inline
|
|
238
252
|
if [ -f "$home/.continue/config/don-cheli.json" ]; then
|
|
239
|
-
cp "$home/.continue/config/don-cheli.json" "$
|
|
253
|
+
cp "$home/.continue/config/don-cheli.json" "$project_root/.continue/config/don-cheli.json" 2>/dev/null || true
|
|
240
254
|
else
|
|
241
|
-
cat > "$
|
|
255
|
+
cat > "$project_root/.continue/config/don-cheli.json" 2>/dev/null << 'CONTEOF' || true
|
|
242
256
|
{
|
|
243
257
|
"name": "don-cheli-sdd",
|
|
244
|
-
"version": "1.
|
|
258
|
+
"version": "1.23.1",
|
|
245
259
|
"description": "Don Cheli SDD Framework",
|
|
246
260
|
"rules": [
|
|
247
261
|
"All production code requires tests (TDD: RED → GREEN → REFACTOR)",
|
|
@@ -260,8 +274,19 @@ CONTEOF
|
|
|
260
274
|
# ─────────────────────────────────────────────
|
|
261
275
|
_gen_opencode() {
|
|
262
276
|
local dir="$1" home="$2" locale="$3"
|
|
277
|
+
local project_root
|
|
278
|
+
project_root=$(_get_project_root "$dir")
|
|
279
|
+
|
|
280
|
+
echo -e " ${GREEN:-}✓${NC:-} OpenCode → config + .opencode/ (en $project_root/)"
|
|
263
281
|
|
|
264
|
-
|
|
282
|
+
# Copy opencode.json and .opencode/ to project root
|
|
283
|
+
if [ -f "$home/opencode.json" ]; then
|
|
284
|
+
cp "$home/opencode.json" "$project_root/" 2>/dev/null || true
|
|
285
|
+
fi
|
|
286
|
+
if [ -d "$home/.opencode" ]; then
|
|
287
|
+
mkdir -p "$project_root/.opencode/agents" 2>/dev/null || true
|
|
288
|
+
cp -r "$home/.opencode/"* "$project_root/.opencode/" 2>/dev/null || true
|
|
289
|
+
fi
|
|
265
290
|
|
|
266
291
|
local opencode_config="$HOME/.config/opencode/config.json"
|
|
267
292
|
local skills_path="${home}/.agent/skills"
|
package/scripts/instalar.sh
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
set -euo pipefail
|
|
6
6
|
|
|
7
|
-
VERSION="1.
|
|
7
|
+
VERSION="1.23.1"
|
|
8
8
|
REPO_URL="https://github.com/doncheli/don-cheli-sdd"
|
|
9
9
|
CLEANUP_TMPDIR=""
|
|
10
10
|
|
|
@@ -1053,7 +1053,8 @@ if [ "$INTERACTIVE_MODE" = true ] && [ -n "${SELECTED_TOOLS:-}" ]; then
|
|
|
1053
1053
|
echo -e " ${YELLOW}⚠ generar-config.sh no encontrado, saltando generación de configs${NC}"
|
|
1054
1054
|
fi
|
|
1055
1055
|
|
|
1056
|
-
# Save profile selection
|
|
1056
|
+
# Save profile and tools selection (for updates)
|
|
1057
1057
|
echo "$SELECTED_PROFILE" > "${FRAMEWORK_HOME}/perfil"
|
|
1058
|
+
echo "$SELECTED_TOOLS" > "${FRAMEWORK_HOME}/tools"
|
|
1058
1059
|
echo -e " ${GREEN}✓${NC} Perfil guardado: ${SELECTED_PROFILE}"
|
|
1059
1060
|
fi
|