specleap-framework 2.1.0 → 2.1.5
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/.agents/backend.md +3 -3
- package/.agents/frontend.md +2 -2
- package/.agents/producto.md +9 -11
- package/.claude/hooks/spec-guard.sh +132 -0
- package/.claude/settings.json.template +15 -0
- package/.clinerules +3 -3
- package/.coderabbit.yaml +2 -4
- package/.commands/compliance.md +89 -0
- package/.commands/inicio.md +15 -15
- package/.commands/nuevo/README.md +2 -2
- package/.commands/planificar.md +1 -1
- package/.continue/rules/04-git-workflow.md +5 -5
- package/.continuerules +3 -4
- package/.cursorrules +1 -1
- package/.github/copilot-instructions.md +1 -1
- package/.specleap/i18n/en.json +177 -0
- package/.specleap/i18n/es.json +177 -0
- package/.specleap/i18n.sh +63 -0
- package/CHANGELOG.md +276 -0
- package/CLAUDE.md +54 -13
- package/README.md +169 -528
- package/SETUP.md +16 -13
- package/openspec/INDEX.md +53 -0
- package/openspec/README.md +104 -0
- package/openspec/SPEC-FORMAT.md +168 -0
- package/openspec/changes/.gitkeep +0 -0
- package/openspec/cli/COMMAND_REFERENCE.md +817 -0
- package/openspec/cli/README.md +189 -0
- package/openspec/cli/apply.sh +229 -0
- package/openspec/cli/archive.sh +240 -0
- package/openspec/cli/code-review.sh +207 -0
- package/openspec/cli/common.sh +171 -0
- package/openspec/cli/enrich.sh +188 -0
- package/openspec/cli/ff.sh +329 -0
- package/openspec/cli/new.sh +260 -0
- package/openspec/cli/openspec +82 -0
- package/openspec/cli/report.sh +244 -0
- package/openspec/cli/status.sh +178 -0
- package/openspec/cli/verify.sh +246 -0
- package/openspec/config.yaml +76 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/00-original-user-story.md +5 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/01-refined-user-story.md +106 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/README.md +333 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/design.md +461 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/proposal.md +124 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/specs/functional/F001-authentication.spec.md +399 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/specs/technical/T001-jwt-implementation.spec.md +606 -0
- package/openspec/examples/CHANGE-SAMPLE-001-user-authentication/tasks.md +433 -0
- package/openspec/examples/MERMAID_DIAGRAMS.md +481 -0
- package/openspec/examples/README.md +334 -0
- package/openspec/specs/functional/.gitkeep +0 -0
- package/openspec/specs/integration/.gitkeep +0 -0
- package/openspec/specs/security/.gitkeep +0 -0
- package/openspec/specs/technical/.gitkeep +0 -0
- package/openspec/templates/.coderabbit.yaml +259 -0
- package/openspec/templates/design.md +181 -0
- package/openspec/templates/proposal.md +79 -0
- package/openspec/templates/tasks.md +193 -0
- package/package.json +10 -5
- package/rules/git-workflow.md +3 -3
- package/rules/session-protocol.md +3 -3
- package/scripts/README.md +13 -25
- package/scripts/compliance-audit.sh +325 -0
- package/scripts/generate-contract.sh +4 -4
- package/scripts/install-skills.sh +12 -11
- package/scripts/lib/render-contrato.py +1 -1
- package/scripts/quality-baseline.sh +210 -0
- package/scripts/quality-healing.sh +241 -0
- package/setup.sh +3 -3
- 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/scripts/lib/jira-project-utils.sh +0 -222
- package/scripts/setup-mcp.sh +0 -654
- package/scripts/test-cuestionario.sh +0 -428
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# OpenSpec Configuration
|
|
2
|
+
# DevFlow Pro — Spec-Driven Development
|
|
3
|
+
|
|
4
|
+
version: "1.0"
|
|
5
|
+
|
|
6
|
+
# Estructura de directorios
|
|
7
|
+
directories:
|
|
8
|
+
specs: "specs" # Source of truth
|
|
9
|
+
changes: "changes" # Propuestas de cambios
|
|
10
|
+
templates: "templates" # Plantillas
|
|
11
|
+
|
|
12
|
+
# Dominios de specs
|
|
13
|
+
domains:
|
|
14
|
+
- functional # Specs funcionales
|
|
15
|
+
- technical # Specs técnicas
|
|
16
|
+
- integration # Specs de integración
|
|
17
|
+
- security # Specs de seguridad
|
|
18
|
+
|
|
19
|
+
# Estados de specs
|
|
20
|
+
spec_states:
|
|
21
|
+
- draft # Borrador
|
|
22
|
+
- review # En revisión
|
|
23
|
+
- approved # Aprobada
|
|
24
|
+
- implemented # Implementada
|
|
25
|
+
- deprecated # Deprecada
|
|
26
|
+
|
|
27
|
+
# Estados de cambios (propuestas)
|
|
28
|
+
change_states:
|
|
29
|
+
- draft # Borrador de propuesta
|
|
30
|
+
- review # En revisión
|
|
31
|
+
- approved # Aprobada para desarrollo
|
|
32
|
+
- in_progress # En desarrollo
|
|
33
|
+
- testing # En testing
|
|
34
|
+
- completed # Completada
|
|
35
|
+
- archived # Archivada
|
|
36
|
+
- rejected # Rechazada
|
|
37
|
+
|
|
38
|
+
# Formato de IDs
|
|
39
|
+
id_format:
|
|
40
|
+
spec: "SPEC-{number:04d}" # SPEC-0001
|
|
41
|
+
change: "CHANGE-{number:04d}" # CHANGE-0001
|
|
42
|
+
task: "TASK-{number:03d}" # TASK-001
|
|
43
|
+
|
|
44
|
+
# Integración con ticket tracker
|
|
45
|
+
tracker:
|
|
46
|
+
enabled: true
|
|
47
|
+
project_key: "PROJ" # Cambiar por proyecto
|
|
48
|
+
epic_prefix: "Epic: "
|
|
49
|
+
story_prefix: "Story: "
|
|
50
|
+
labels:
|
|
51
|
+
- devflow
|
|
52
|
+
- has-spec
|
|
53
|
+
- sdd
|
|
54
|
+
|
|
55
|
+
# Integración con Git
|
|
56
|
+
git:
|
|
57
|
+
branch_prefix:
|
|
58
|
+
feature: "feat/"
|
|
59
|
+
bugfix: "fix/"
|
|
60
|
+
hotfix: "hotfix/"
|
|
61
|
+
docs: "docs/"
|
|
62
|
+
commit_refs: true # Incluir refs en commits
|
|
63
|
+
|
|
64
|
+
# Integración con CodeRabbit
|
|
65
|
+
coderabbit:
|
|
66
|
+
required: true # Obligatorio para PRs
|
|
67
|
+
profile: assertive # Perfil de review
|
|
68
|
+
language: es # Idioma de reviews
|
|
69
|
+
|
|
70
|
+
# Testing
|
|
71
|
+
testing:
|
|
72
|
+
coverage_threshold:
|
|
73
|
+
business_logic: 80
|
|
74
|
+
utilities: 90
|
|
75
|
+
components: 70
|
|
76
|
+
report_required: true # Testing report obligatorio
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# [US-AUTH-001] Autenticación de Usuario con Email y Contraseña
|
|
2
|
+
|
|
3
|
+
## User Story
|
|
4
|
+
Como **usuario registrado del sistema**, quiero **autenticarme con mi email y contraseña** para **acceder de forma segura a mi cuenta y funcionalidades personalizadas**.
|
|
5
|
+
|
|
6
|
+
## Contexto del Negocio
|
|
7
|
+
La autenticación es la primera barrera de seguridad del sistema. Permite identificar usuarios, proteger datos personales, y habilitar funcionalidades específicas según permisos. Sin autenticación robusta, no podemos garantizar privacidad ni cumplir con regulaciones de protección de datos.
|
|
8
|
+
|
|
9
|
+
## Criterios de Aceptación
|
|
10
|
+
|
|
11
|
+
### Escenario 1: Login exitoso con credenciales válidas
|
|
12
|
+
- **GIVEN** un usuario registrado con email `usuario@example.com` y contraseña válida
|
|
13
|
+
- **WHEN** ingresa sus credenciales correctas en el formulario de login
|
|
14
|
+
- **THEN** el sistema valida las credenciales contra la base de datos
|
|
15
|
+
- **AND** genera un token JWT válido por 24 horas
|
|
16
|
+
- **AND** redirige al usuario al dashboard principal
|
|
17
|
+
- **AND** registra el login en el log de auditoría
|
|
18
|
+
|
|
19
|
+
### Escenario 2: Login fallido por credenciales inválidas
|
|
20
|
+
- **GIVEN** un usuario intenta hacer login
|
|
21
|
+
- **WHEN** ingresa un email válido pero contraseña incorrecta
|
|
22
|
+
- **THEN** el sistema muestra error genérico "Credenciales inválidas"
|
|
23
|
+
- **AND** NO revela si el email existe en el sistema
|
|
24
|
+
- **AND** registra el intento fallido con IP y timestamp
|
|
25
|
+
- **AND** incrementa contador de intentos fallidos
|
|
26
|
+
|
|
27
|
+
### Escenario 3: Cuenta bloqueada por intentos fallidos
|
|
28
|
+
- **GIVEN** un usuario ha fallado 5 intentos de login en 15 minutos
|
|
29
|
+
- **WHEN** intenta hacer login nuevamente
|
|
30
|
+
- **THEN** el sistema bloquea la cuenta por 30 minutos
|
|
31
|
+
- **AND** muestra mensaje "Cuenta temporalmente bloqueada"
|
|
32
|
+
- **AND** envía notificación de seguridad al email del usuario
|
|
33
|
+
- **AND** registra el bloqueo en logs de seguridad
|
|
34
|
+
|
|
35
|
+
### Escenario 4: Email no registrado
|
|
36
|
+
- **GIVEN** un usuario intenta login con email no registrado
|
|
37
|
+
- **WHEN** envía el formulario
|
|
38
|
+
- **THEN** muestra error genérico "Credenciales inválidas" (sin revelar que el email no existe)
|
|
39
|
+
- **AND** registra el intento con IP
|
|
40
|
+
|
|
41
|
+
## Casos de Uso Adicionales
|
|
42
|
+
|
|
43
|
+
### Caso 1: Recordar sesión (Remember Me)
|
|
44
|
+
- Checkbox opcional "Recordar en este dispositivo"
|
|
45
|
+
- Si marcado, token válido por 30 días (en lugar de 24h)
|
|
46
|
+
- Almacenado en cookie HttpOnly
|
|
47
|
+
|
|
48
|
+
### Caso 2: Logout
|
|
49
|
+
- Invalidar token JWT actual
|
|
50
|
+
- Redirigir a página de login
|
|
51
|
+
- Limpiar sesión del navegador
|
|
52
|
+
|
|
53
|
+
### Caso 3: Token expirado
|
|
54
|
+
- Detectar token expirado en requests
|
|
55
|
+
- Redirigir automáticamente a login
|
|
56
|
+
- Mostrar mensaje "Sesión expirada, inicia sesión nuevamente"
|
|
57
|
+
|
|
58
|
+
## Requisitos No Funcionales
|
|
59
|
+
|
|
60
|
+
### Performance
|
|
61
|
+
- Tiempo de respuesta < 500ms para validación de credenciales
|
|
62
|
+
- Soporte para 100 logins simultáneos sin degradación
|
|
63
|
+
|
|
64
|
+
### Seguridad
|
|
65
|
+
- Contraseñas hasheadas con bcrypt (cost factor 12)
|
|
66
|
+
- Protección contra brute force (rate limiting)
|
|
67
|
+
- Tokens JWT firmados con RS256
|
|
68
|
+
- HTTPS obligatorio en producción
|
|
69
|
+
- Sanitización de inputs (prevenir SQL injection)
|
|
70
|
+
- Headers de seguridad (CSP, X-Frame-Options, etc.)
|
|
71
|
+
|
|
72
|
+
### UX
|
|
73
|
+
- Formulario accesible (WCAG 2.1 nivel AA)
|
|
74
|
+
- Mensajes de error claros pero seguros
|
|
75
|
+
- Indicador de carga durante autenticación
|
|
76
|
+
- Feedback visual en campos inválidos
|
|
77
|
+
- Soporte para password managers (autocomplete)
|
|
78
|
+
|
|
79
|
+
### Auditoría
|
|
80
|
+
- Logs detallados de todos los intentos de login
|
|
81
|
+
- Registro de IPs, user agents, timestamps
|
|
82
|
+
- Alertas automáticas para patrones sospechosos
|
|
83
|
+
|
|
84
|
+
## Estimación Inicial
|
|
85
|
+
|
|
86
|
+
- **Complejidad:** Alta (seguridad crítica, múltiples casos edge)
|
|
87
|
+
- **Esfuerzo:** M (2-3 sprints)
|
|
88
|
+
- **Riesgos:**
|
|
89
|
+
- Vulnerabilidades de seguridad si no se implementa correctamente
|
|
90
|
+
- Bloqueo legítimo de usuarios por falsos positivos
|
|
91
|
+
- Problemas de performance con alta carga
|
|
92
|
+
|
|
93
|
+
## Fuera de Alcance
|
|
94
|
+
|
|
95
|
+
- Autenticación con redes sociales (OAuth)
|
|
96
|
+
- Autenticación de dos factores (2FA)
|
|
97
|
+
- Recuperación de contraseña
|
|
98
|
+
- Registro de nuevos usuarios
|
|
99
|
+
- SSO (Single Sign-On)
|
|
100
|
+
|
|
101
|
+
Estas funcionalidades se abordarán en propuestas separadas.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
**Generado con:** `openspec enrich`
|
|
106
|
+
**Fecha:** 2026-02-12
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# CHANGE-SAMPLE-001 — Ejemplo Completo: Autenticación de Usuario
|
|
2
|
+
|
|
3
|
+
Este directorio contiene un ejemplo completo del workflow de SpecLeap, desde la user story original hasta la propuesta completada y archivada.
|
|
4
|
+
|
|
5
|
+
## 📋 Contenido
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
CHANGE-SAMPLE-001-user-authentication/
|
|
9
|
+
├── README.md # Este archivo
|
|
10
|
+
├── 00-original-user-story.md # User story inicial (INPUT)
|
|
11
|
+
├── 01-refined-user-story.md # User story refinada (output de /enrich)
|
|
12
|
+
├── proposal.md # QUÉ y POR QUÉ (output de /new)
|
|
13
|
+
├── design.md # CÓMO técnico (output de /ff o manual)
|
|
14
|
+
├── tasks.md # Tareas + Testing Report
|
|
15
|
+
├── specs/ # Delta specs aplicados
|
|
16
|
+
│ ├── functional/
|
|
17
|
+
│ │ └── F001-authentication.spec.md
|
|
18
|
+
│ └── technical/
|
|
19
|
+
│ └── T001-jwt-implementation.spec.md
|
|
20
|
+
└── COMPLETION_REPORT.md # Reporte final (output de /archive)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 🔄 Workflow Completo
|
|
24
|
+
|
|
25
|
+
### Fase 1: ENRICH — Refinar User Story
|
|
26
|
+
|
|
27
|
+
**Input:**
|
|
28
|
+
```markdown
|
|
29
|
+
Como usuario del sistema,
|
|
30
|
+
quiero poder hacer login con email y contraseña
|
|
31
|
+
para acceder a mi cuenta de forma segura.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Comando:**
|
|
35
|
+
```bash
|
|
36
|
+
openspec enrich "Como usuario quiero hacer login" \
|
|
37
|
+
--output 01-refined-user-story.md
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Output:** `01-refined-user-story.md`
|
|
41
|
+
- User story en formato completo
|
|
42
|
+
- Contexto de negocio
|
|
43
|
+
- Criterios de aceptación (GIVEN/WHEN/THEN)
|
|
44
|
+
- Requisitos no funcionales
|
|
45
|
+
- Estimación inicial
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### Fase 2: NEW — Crear Propuesta
|
|
50
|
+
|
|
51
|
+
**Comando:**
|
|
52
|
+
```bash
|
|
53
|
+
openspec new --auto "Implementar autenticación JWT" \
|
|
54
|
+
--from 01-refined-user-story.md \
|
|
55
|
+
--ticket app-tienda-23 \
|
|
56
|
+
--priority high
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Output:** `CHANGE-SAMPLE-001-user-authentication/`
|
|
60
|
+
- `proposal.md` — Propuesta con contexto, problema, solución, alcance
|
|
61
|
+
- `design.md` — Template vacío para diseño técnico
|
|
62
|
+
- `tasks.md` — Template vacío para tareas
|
|
63
|
+
- `README.md` — Guía de próximos pasos
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
### Fase 3: FF — Fast-Forward (Generar con AI)
|
|
68
|
+
|
|
69
|
+
**Comando:**
|
|
70
|
+
```bash
|
|
71
|
+
openspec ff CHANGE-SAMPLE-001
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Output:**
|
|
75
|
+
- `design.md` completado con AI:
|
|
76
|
+
- Arquitectura de componentes
|
|
77
|
+
- Modelo de datos
|
|
78
|
+
- API contracts
|
|
79
|
+
- Decisiones técnicas (ADRs)
|
|
80
|
+
- Testing strategy
|
|
81
|
+
|
|
82
|
+
- `tasks.md` completado con AI:
|
|
83
|
+
- Desglose de tareas (TASK-001, TASK-002, ...)
|
|
84
|
+
- Estimaciones (story points)
|
|
85
|
+
- Dependencias entre tareas
|
|
86
|
+
- Template de Testing Report
|
|
87
|
+
|
|
88
|
+
**IMPORTANTE:** Revisar y ajustar outputs del AI antes de aplicar.
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
### Fase 4: APPLY — Implementar Propuesta
|
|
93
|
+
|
|
94
|
+
**Comando:**
|
|
95
|
+
```bash
|
|
96
|
+
openspec apply CHANGE-SAMPLE-001
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**Acciones:**
|
|
100
|
+
1. Crea branch Git: `feat/CHANGE-SAMPLE-001-user-authentication`
|
|
101
|
+
2. Aplica delta specs a `openspec/specs/`
|
|
102
|
+
3. Actualiza estado a `in_progress`
|
|
103
|
+
4. Commit inicial del setup
|
|
104
|
+
|
|
105
|
+
**Próximo paso:** Implementar código según design.md y tasks.md usando AI assistant (Continue, Copilot, Cursor).
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### Fase 5: VERIFY — Verificar Tests y Specs
|
|
110
|
+
|
|
111
|
+
**Durante el desarrollo, ejecutar:**
|
|
112
|
+
```bash
|
|
113
|
+
openspec verify CHANGE-SAMPLE-001
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Verifica:**
|
|
117
|
+
- Tests unitarios + integración pasan
|
|
118
|
+
- Cobertura mínima alcanzada (>80%)
|
|
119
|
+
- Specs aplicadas correctamente
|
|
120
|
+
- Sin placeholders en archivos
|
|
121
|
+
|
|
122
|
+
**Output:** Testing Report actualizado en `tasks.md`
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Fase 6: CODE-REVIEW — Solicitar Review
|
|
127
|
+
|
|
128
|
+
**Comando:**
|
|
129
|
+
```bash
|
|
130
|
+
openspec code-review CHANGE-SAMPLE-001 --create-pr
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Acciones:**
|
|
134
|
+
1. Ejecuta `openspec verify` primero
|
|
135
|
+
2. Pushea branch a remoto
|
|
136
|
+
3. Crea Pull Request en GitHub
|
|
137
|
+
4. CodeRabbit hace review automático
|
|
138
|
+
5. Actualiza estado a `testing`
|
|
139
|
+
|
|
140
|
+
**Revisar comentarios de CodeRabbit y aplicar cambios sugeridos.**
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### Fase 7: ARCHIVE — Archivar al Completar
|
|
145
|
+
|
|
146
|
+
**Tras mergear PR:**
|
|
147
|
+
```bash
|
|
148
|
+
openspec archive CHANGE-SAMPLE-001
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Acciones:**
|
|
152
|
+
1. Verifica que PR esté mergeado
|
|
153
|
+
2. Actualiza estado a `completed`
|
|
154
|
+
3. Marca specs como `implemented`
|
|
155
|
+
4. Elimina branch feature
|
|
156
|
+
5. Genera `COMPLETION_REPORT.md`
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## 📊 Ejemplo de Testing Report
|
|
161
|
+
|
|
162
|
+
Ver `tasks.md` para el reporte completo. Resumen:
|
|
163
|
+
|
|
164
|
+
| Suite | Tests | Passed | Failed | Coverage |
|
|
165
|
+
|-------|-------|--------|--------|----------|
|
|
166
|
+
| Unit | 45 | 45 | 0 | 91% |
|
|
167
|
+
| Integration | 12 | 12 | 0 | N/A |
|
|
168
|
+
| E2E | 3 | 3 | 0 | N/A |
|
|
169
|
+
|
|
170
|
+
**CodeRabbit:** ✅ Aprobado (8 issues encontrados, 8 resueltos)
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 🎯 Especificaciones Generadas
|
|
175
|
+
|
|
176
|
+
### Functional Spec: F001-authentication.spec.md
|
|
177
|
+
|
|
178
|
+
Especificación funcional completa con:
|
|
179
|
+
- 12 escenarios (GIVEN/WHEN/THEN)
|
|
180
|
+
- Reglas de negocio
|
|
181
|
+
- Dependencias
|
|
182
|
+
- Métricas y KPIs
|
|
183
|
+
|
|
184
|
+
### Technical Spec: T001-jwt-implementation.spec.md
|
|
185
|
+
|
|
186
|
+
Especificación técnica detallada:
|
|
187
|
+
- Arquitectura de componentes
|
|
188
|
+
- Interfaces de clases
|
|
189
|
+
- Modelo de datos
|
|
190
|
+
- Endpoints API
|
|
191
|
+
- Configuración de seguridad
|
|
192
|
+
- Benchmarks de performance
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 💡 Lecciones Aprendidas
|
|
197
|
+
|
|
198
|
+
### Lo que Funcionó Bien
|
|
199
|
+
|
|
200
|
+
1. **Refinar user story ANTES de diseñar:** Ahorró re-trabajo al tener requisitos claros desde el inicio.
|
|
201
|
+
|
|
202
|
+
2. **Fast-forward con AI:** Generó 80% del diseño técnico correcto. El 20% restante fue ajuste manual.
|
|
203
|
+
|
|
204
|
+
3. **Testing Report automático:** Actualización automática desde results de PHPUnit/Jest evitó errores manuales.
|
|
205
|
+
|
|
206
|
+
4. **CodeRabbit integration:** Detectó 8 issues que hubieran pasado code review manual.
|
|
207
|
+
|
|
208
|
+
5. **Delta specs:** Mantener specs separadas en `changes/` permitió review sin contaminar source of truth.
|
|
209
|
+
|
|
210
|
+
### Problemas Encontrados
|
|
211
|
+
|
|
212
|
+
1. **Rate limiting en DB lento:** Solución temporal. Migrar a Redis en CHANGE-002.
|
|
213
|
+
|
|
214
|
+
2. **AI generó placeholders:** Template de tasks.md tenía "TODO" que requirió limpieza manual.
|
|
215
|
+
|
|
216
|
+
3. **Bloqueo de IPs compartidas:** Rate limiting solo por IP bloqueó usuarios legítimos en NAT corporativo. Ajustado a IP+email.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 📚 Referencias
|
|
221
|
+
|
|
222
|
+
### Documentación
|
|
223
|
+
|
|
224
|
+
- [OpenSpec CLI](../cli/README.md)
|
|
225
|
+
- [Metodología SDD](../../.continue/rules/01-sdd-methodology.md)
|
|
226
|
+
- [Templates](../templates/)
|
|
227
|
+
|
|
228
|
+
### Specs Relacionadas
|
|
229
|
+
|
|
230
|
+
- `openspec/specs/functional/F001-authentication.spec.md` (aplicada desde delta)
|
|
231
|
+
- `openspec/specs/technical/T001-jwt-implementation.spec.md` (aplicada desde delta)
|
|
232
|
+
|
|
233
|
+
### PRs y Commits
|
|
234
|
+
|
|
235
|
+
- **PR #45:** feat: Implementar autenticación JWT (merged)
|
|
236
|
+
- **Commits:** 12 commits en branch feature
|
|
237
|
+
- **Deploy:** Production v1.1.0
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 🚀 Cómo Usar Este Ejemplo
|
|
242
|
+
|
|
243
|
+
### Para Aprender el Flujo
|
|
244
|
+
|
|
245
|
+
1. Lee los archivos en orden:
|
|
246
|
+
- `00-original-user-story.md`
|
|
247
|
+
- `01-refined-user-story.md`
|
|
248
|
+
- `proposal.md`
|
|
249
|
+
- `design.md`
|
|
250
|
+
- `tasks.md`
|
|
251
|
+
- `specs/`
|
|
252
|
+
|
|
253
|
+
2. Observa la evolución desde user story simple hasta propuesta completa.
|
|
254
|
+
|
|
255
|
+
3. Nota los detalles:
|
|
256
|
+
- Criterios de aceptación específicos
|
|
257
|
+
- Arquitectura de componentes
|
|
258
|
+
- ADRs (decisiones técnicas justificadas)
|
|
259
|
+
- Testing strategy completo
|
|
260
|
+
|
|
261
|
+
### Para Replicar en Tu Proyecto
|
|
262
|
+
|
|
263
|
+
1. **Copia la estructura:**
|
|
264
|
+
```bash
|
|
265
|
+
cp -r openspec/examples/CHANGE-SAMPLE-001-* openspec/changes/
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
2. **Adapta a tu stack:**
|
|
269
|
+
- Reemplaza referencias de Laravel/PHP por tu framework
|
|
270
|
+
- Ajusta nombres de componentes
|
|
271
|
+
- Modifica testing frameworks
|
|
272
|
+
|
|
273
|
+
3. **Ejecuta el workflow completo:**
|
|
274
|
+
- Empieza con tu user story
|
|
275
|
+
- Sigue los comandos documentados arriba
|
|
276
|
+
- Ajusta outputs del AI según tu contexto
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## ❓ FAQ
|
|
281
|
+
|
|
282
|
+
### ¿Qué es un "delta spec"?
|
|
283
|
+
|
|
284
|
+
Un spec que vive en `changes/CHANGE-XXX/specs/` temporalmente, y se aplica al source of truth en `openspec/specs/` tras aprobación. Permite revisar cambios sin contaminar specs existentes.
|
|
285
|
+
|
|
286
|
+
### ¿Por qué `proposal.md` + `design.md` separados?
|
|
287
|
+
|
|
288
|
+
- **proposal.md:** QUÉ y POR QUÉ (para Product Owner, stakeholders)
|
|
289
|
+
- **design.md:** CÓMO técnico (para desarrolladores, arquitectos)
|
|
290
|
+
|
|
291
|
+
Separarlos permite reviews independientes.
|
|
292
|
+
|
|
293
|
+
### ¿Puedo omitir `/ff` y escribir manualmente?
|
|
294
|
+
|
|
295
|
+
Sí. `/ff` es opcional. Genera propuesta rápida con AI, pero siempre requiere revisión manual. Puedes escribir design.md y tasks.md directamente.
|
|
296
|
+
|
|
297
|
+
### ¿Qué pasa si no uso CodeRabbit?
|
|
298
|
+
|
|
299
|
+
El flujo funciona sin CodeRabbit, pero pierdes:
|
|
300
|
+
- Review automático de código
|
|
301
|
+
- Detección de issues de seguridad/performance
|
|
302
|
+
- Sugerencias de mejora
|
|
303
|
+
|
|
304
|
+
Puedes sustituir con:
|
|
305
|
+
- Review manual más exhaustivo
|
|
306
|
+
- Herramientas SAST (Semgrep, SonarQube)
|
|
307
|
+
- Linters configurados
|
|
308
|
+
|
|
309
|
+
### ¿Cómo escalo esto a equipos grandes?
|
|
310
|
+
|
|
311
|
+
1. **Prefijos por equipo:**
|
|
312
|
+
- `CHANGE-FE-001` (Frontend)
|
|
313
|
+
- `CHANGE-BE-001` (Backend)
|
|
314
|
+
- `CHANGE-INFRA-001` (Infraestructura)
|
|
315
|
+
|
|
316
|
+
2. **Ticket integration:**
|
|
317
|
+
- Vincular `CHANGE-XXX` con Epics/Stories
|
|
318
|
+
- Sincronizar estados
|
|
319
|
+
|
|
320
|
+
3. **Templates personalizados:**
|
|
321
|
+
- Crear templates específicos por tipo de proyecto
|
|
322
|
+
- Ejemplo: `template-microservice.md`, `template-feature.md`
|
|
323
|
+
|
|
324
|
+
4. **CI/CD checks:**
|
|
325
|
+
- Validar que PRs incluyan Testing Report
|
|
326
|
+
- Verificar cobertura mínima
|
|
327
|
+
- Requerir aprobación de CodeRabbit
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
**Creado:** 2026-02-12
|
|
332
|
+
**Última actualización:** 2026-02-12
|
|
333
|
+
**Estado:** Ejemplo completado y archivado
|