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,817 @@
|
|
|
1
|
+
# 📖 Referencia Completa de Comandos — OpenSpec CLI
|
|
2
|
+
|
|
3
|
+
Documentación detallada de todos los comandos del workflow de SpecLeap.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📋 Índice de Comandos
|
|
8
|
+
|
|
9
|
+
| Comando | Fase | Descripción |
|
|
10
|
+
|---------|-----------|-------------|
|
|
11
|
+
| [`openspec`](#openspec) | — | Dispatcher principal + ayuda |
|
|
12
|
+
| [`enrich`](#enrich) | Learn | Refinar user story con AI |
|
|
13
|
+
| [`new`](#new) | Learn | Crear propuesta de cambio |
|
|
14
|
+
| [`ff`](#ff) | Learn | Fast-forward (generar con AI) |
|
|
15
|
+
| [`apply`](#apply) | Implement | Aplicar propuesta (branch + deltas) |
|
|
16
|
+
| [`verify`](#verify) | Deploy | Verificar tests + specs |
|
|
17
|
+
| [`code-review`](#code-review) | Review | Solicitar review + crear PR |
|
|
18
|
+
| [`archive`](#archive) | Review | Archivar propuesta completada |
|
|
19
|
+
| [`report`](#report) | Deploy | Generar testing report |
|
|
20
|
+
| [`status`](#status) | — | Ver estado de propuestas |
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## `openspec`
|
|
25
|
+
|
|
26
|
+
Dispatcher principal que ejecuta subcomandos.
|
|
27
|
+
|
|
28
|
+
### Uso
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
openspec <comando> [opciones]
|
|
32
|
+
openspec --help
|
|
33
|
+
openspec --version
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Opciones
|
|
37
|
+
|
|
38
|
+
| Opción | Descripción |
|
|
39
|
+
|--------|-------------|
|
|
40
|
+
| `-h, --help` | Mostrar ayuda |
|
|
41
|
+
| `-v, --version` | Mostrar versión |
|
|
42
|
+
|
|
43
|
+
### Ejemplos
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Ver ayuda general
|
|
47
|
+
openspec --help
|
|
48
|
+
|
|
49
|
+
# Ver versión
|
|
50
|
+
openspec --version
|
|
51
|
+
|
|
52
|
+
# Ejecutar comando
|
|
53
|
+
openspec new CHANGE-001 "Mi feature"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Exit Codes
|
|
57
|
+
|
|
58
|
+
- `0` — Éxito
|
|
59
|
+
- `1` — Comando no encontrado
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## `enrich`
|
|
64
|
+
|
|
65
|
+
Refina una user story simple con AI, añadiendo contexto, criterios de aceptación, y estimaciones.
|
|
66
|
+
|
|
67
|
+
### Uso
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
openspec enrich <user-story> [opciones]
|
|
71
|
+
openspec enrich --file <path> [opciones]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Opciones
|
|
75
|
+
|
|
76
|
+
| Opción | Tipo | Descripción |
|
|
77
|
+
|--------|------|-------------|
|
|
78
|
+
| `--file <path>` | string | Leer user story desde archivo |
|
|
79
|
+
| `--output <path>` | string | Guardar resultado (default: STDOUT) |
|
|
80
|
+
| `--model <model>` | string | Modelo AI a usar (default: auto) |
|
|
81
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
82
|
+
|
|
83
|
+
### AI CLI Soportados
|
|
84
|
+
|
|
85
|
+
- **oracle** — Preferido si está instalado
|
|
86
|
+
- **gh copilot** — Requiere `gh extension install github/gh-copilot`
|
|
87
|
+
- **ai-cli** — Requiere AI CLI instalado
|
|
88
|
+
|
|
89
|
+
### Ejemplos
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# User story inline
|
|
93
|
+
openspec enrich "Como usuario quiero hacer login"
|
|
94
|
+
|
|
95
|
+
# Desde archivo
|
|
96
|
+
openspec enrich --file stories/US-123.md
|
|
97
|
+
|
|
98
|
+
# Guardar resultado
|
|
99
|
+
openspec enrich "Como usuario..." --output us-refined.md
|
|
100
|
+
|
|
101
|
+
# Especificar modelo
|
|
102
|
+
openspec enrich "Como usuario..." --model anthropic/claude-sonnet-4
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Output
|
|
106
|
+
|
|
107
|
+
User story refinada en markdown con:
|
|
108
|
+
- Título y descripción
|
|
109
|
+
- Contexto del negocio
|
|
110
|
+
- Criterios de aceptación (GIVEN/WHEN/THEN)
|
|
111
|
+
- Casos de uso adicionales
|
|
112
|
+
- Requisitos no funcionales
|
|
113
|
+
- Estimación inicial
|
|
114
|
+
- Fuera de alcance
|
|
115
|
+
|
|
116
|
+
### Exit Codes
|
|
117
|
+
|
|
118
|
+
- `0` — Éxito
|
|
119
|
+
- `1` — AI CLI no encontrado
|
|
120
|
+
- `1` — Input vacío o inválido
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## `new`
|
|
125
|
+
|
|
126
|
+
Crea una nueva propuesta de cambio con estructura completa (proposal, design, tasks).
|
|
127
|
+
|
|
128
|
+
### Uso
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
openspec new [CHANGE-ID] <título> [opciones]
|
|
132
|
+
openspec new --auto <título> [opciones]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Opciones
|
|
136
|
+
|
|
137
|
+
| Opción | Tipo | Descripción |
|
|
138
|
+
|--------|------|-------------|
|
|
139
|
+
| `--auto` | — | Generar ID automáticamente |
|
|
140
|
+
| `--from <file>` | string | Crear desde user story refinada |
|
|
141
|
+
| `--ticket <id>` | string | Asociar con ID del ticket (ej: app-tienda-23) |
|
|
142
|
+
| `--priority <level>` | string | Prioridad: critical\|high\|medium\|low |
|
|
143
|
+
| `--author <name>` | string | Autor (default: git user) |
|
|
144
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
145
|
+
|
|
146
|
+
### Ejemplos
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
# ID manual
|
|
150
|
+
openspec new CHANGE-001 "Implementar autenticación JWT"
|
|
151
|
+
|
|
152
|
+
# ID automático
|
|
153
|
+
openspec new --auto "Sistema de notificaciones"
|
|
154
|
+
|
|
155
|
+
# Con ticket y prioridad
|
|
156
|
+
openspec new --auto "Login social" --ticket app-tienda-23 --priority high
|
|
157
|
+
|
|
158
|
+
# Desde user story refinada
|
|
159
|
+
openspec new --auto "Auth" --from us-refined.md --ticket app-tienda-24
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Output
|
|
163
|
+
|
|
164
|
+
Crea directorio: `openspec/changes/CHANGE-XXX-nombre/`
|
|
165
|
+
|
|
166
|
+
**Archivos creados:**
|
|
167
|
+
- `proposal.md` — QUÉ y POR QUÉ
|
|
168
|
+
- `design.md` — CÓMO (diseño técnico)
|
|
169
|
+
- `tasks.md` — Tareas y Testing Report
|
|
170
|
+
- `README.md` — Guía de próximos pasos
|
|
171
|
+
- `specs/` — Directorio para delta specs
|
|
172
|
+
|
|
173
|
+
### Exit Codes
|
|
174
|
+
|
|
175
|
+
- `0` — Éxito
|
|
176
|
+
- `1` — ID inválido o ya existe
|
|
177
|
+
- `1` — Título vacío
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## `ff`
|
|
182
|
+
|
|
183
|
+
Fast-forward: genera automáticamente con AI el contenido de proposal.md, design.md y tasks.md.
|
|
184
|
+
|
|
185
|
+
### Uso
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
openspec ff <CHANGE-ID> [opciones]
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Opciones
|
|
192
|
+
|
|
193
|
+
| Opción | Tipo | Descripción |
|
|
194
|
+
|--------|------|-------------|
|
|
195
|
+
| `--model <model>` | string | Modelo AI a usar (default: auto) |
|
|
196
|
+
| `--skip-proposal` | — | Omitir generación de proposal.md |
|
|
197
|
+
| `--skip-design` | — | Omitir generación de design.md |
|
|
198
|
+
| `--skip-tasks` | — | Omitir generación de tasks.md |
|
|
199
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
200
|
+
|
|
201
|
+
### Prerequisitos
|
|
202
|
+
|
|
203
|
+
- Propuesta creada con `openspec new`
|
|
204
|
+
- Al menos `proposal.md` con contexto básico
|
|
205
|
+
|
|
206
|
+
### Ejemplos
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Generar todo
|
|
210
|
+
openspec ff CHANGE-001
|
|
211
|
+
|
|
212
|
+
# Solo design y tasks (proposal ya completo)
|
|
213
|
+
openspec ff CHANGE-002 --skip-proposal
|
|
214
|
+
|
|
215
|
+
# Usar modelo específico
|
|
216
|
+
openspec ff CHANGE-003 --model anthropic/claude-opus-4
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Output
|
|
220
|
+
|
|
221
|
+
**Archivos actualizados:**
|
|
222
|
+
- `design.md` — Diseño técnico completo (arquitectura, API, ADRs)
|
|
223
|
+
- `tasks.md` — Tareas desglosadas con estimaciones
|
|
224
|
+
- *(proposal.md no se toca si ya tiene contenido)*
|
|
225
|
+
|
|
226
|
+
### Notas Importantes
|
|
227
|
+
|
|
228
|
+
⚠️ **REVISAR SIEMPRE** el output del AI antes de aplicar. El AI puede generar:
|
|
229
|
+
- Placeholders ("TODO", "...", "XXX")
|
|
230
|
+
- Suposiciones incorrectas
|
|
231
|
+
- Código que no se ajusta a tu stack
|
|
232
|
+
|
|
233
|
+
### Exit Codes
|
|
234
|
+
|
|
235
|
+
- `0` — Éxito
|
|
236
|
+
- `1` — Propuesta no encontrada
|
|
237
|
+
- `1` — AI CLI no disponible
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## `apply`
|
|
242
|
+
|
|
243
|
+
Aplica una propuesta aprobada: crea branch Git, aplica delta specs, y actualiza estado.
|
|
244
|
+
|
|
245
|
+
### Uso
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
openspec apply <CHANGE-ID> [opciones]
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Opciones
|
|
252
|
+
|
|
253
|
+
| Opción | Tipo | Descripción |
|
|
254
|
+
|--------|------|-------------|
|
|
255
|
+
| `--no-branch` | — | No crear branch de Git |
|
|
256
|
+
| `--base <branch>` | string | Branch base (default: develop) |
|
|
257
|
+
| `--dry-run` | — | Simular sin hacer cambios |
|
|
258
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
259
|
+
|
|
260
|
+
### Prerequisitos
|
|
261
|
+
|
|
262
|
+
- Propuesta completada y revisada
|
|
263
|
+
- Git repositorio inicializado
|
|
264
|
+
- Base branch existente
|
|
265
|
+
|
|
266
|
+
### Ejemplos
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Aplicar propuesta
|
|
270
|
+
openspec apply CHANGE-001
|
|
271
|
+
|
|
272
|
+
# Con base branch diferente
|
|
273
|
+
openspec apply CHANGE-002 --base main
|
|
274
|
+
|
|
275
|
+
# Simular (sin hacer cambios)
|
|
276
|
+
openspec apply CHANGE-003 --dry-run
|
|
277
|
+
|
|
278
|
+
# Sin crear branch (ya estás en uno)
|
|
279
|
+
openspec apply CHANGE-004 --no-branch
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Acciones Realizadas
|
|
283
|
+
|
|
284
|
+
1. ✅ Crea branch: `feat/CHANGE-XXX-nombre` (desde `develop`)
|
|
285
|
+
2. ✅ Aplica delta specs desde `changes/CHANGE-XXX/specs/` a `specs/`
|
|
286
|
+
3. ✅ Actualiza estado de propuesta: `draft` → `in_progress`
|
|
287
|
+
4. ✅ Commit inicial del setup
|
|
288
|
+
|
|
289
|
+
### Output
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
✓ Branch creado: feat/CHANGE-001-autenticacion
|
|
293
|
+
✓ Delta specs aplicadas: 2 archivos
|
|
294
|
+
✓ Estado actualizado: in_progress
|
|
295
|
+
✓ Commit: chore(openspec): iniciar implementación de CHANGE-001
|
|
296
|
+
|
|
297
|
+
Próximos pasos:
|
|
298
|
+
1. Implementar según design.md y tasks.md
|
|
299
|
+
2. Usar AI assistant (Continue, Copilot) con las specs
|
|
300
|
+
3. Escribir tests según Testing Strategy
|
|
301
|
+
4. openspec verify CHANGE-001
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Exit Codes
|
|
305
|
+
|
|
306
|
+
- `0` — Éxito
|
|
307
|
+
- `1` — Propuesta no encontrada
|
|
308
|
+
- `1` — Branch ya existe
|
|
309
|
+
- `1` — Working directory sucio (cambios sin commitear)
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## `verify`
|
|
314
|
+
|
|
315
|
+
Verifica que una propuesta cumpla requisitos antes de PR: ejecuta tests, valida cobertura, y verifica specs.
|
|
316
|
+
|
|
317
|
+
### Uso
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
openspec verify <CHANGE-ID> [opciones]
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Opciones
|
|
324
|
+
|
|
325
|
+
| Opción | Tipo | Descripción |
|
|
326
|
+
|--------|------|-------------|
|
|
327
|
+
| `--skip-tests` | — | Omitir ejecución de tests |
|
|
328
|
+
| `--skip-specs` | — | Omitir validación de specs |
|
|
329
|
+
| `--coverage <min>` | number | Cobertura mínima (default: 80) |
|
|
330
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
331
|
+
|
|
332
|
+
### Test Frameworks Detectados
|
|
333
|
+
|
|
334
|
+
- **PHPUnit** — `phpunit.xml` o `phpunit.xml.dist`
|
|
335
|
+
- **Jest** — `package.json` con jest configurado
|
|
336
|
+
|
|
337
|
+
### Ejemplos
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# Verificación completa
|
|
341
|
+
openspec verify CHANGE-001
|
|
342
|
+
|
|
343
|
+
# Solo tests (specs ya validadas)
|
|
344
|
+
openspec verify CHANGE-002 --skip-specs
|
|
345
|
+
|
|
346
|
+
# Cobertura personalizada
|
|
347
|
+
openspec verify CHANGE-003 --coverage 90
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
### Verificaciones Realizadas
|
|
351
|
+
|
|
352
|
+
1. ✅ **Tests:**
|
|
353
|
+
- Ejecuta suite completa (unit + integration)
|
|
354
|
+
- Valida que pasen todos los tests
|
|
355
|
+
- Verifica cobertura mínima
|
|
356
|
+
|
|
357
|
+
2. ✅ **Specs:**
|
|
358
|
+
- Valida que delta specs estén aplicados
|
|
359
|
+
- Verifica YAML válido en `config.yaml`
|
|
360
|
+
- Busca placeholders sin completar
|
|
361
|
+
|
|
362
|
+
3. ✅ **Archivos:**
|
|
363
|
+
- Verifica que proposal/design/tasks estén completos
|
|
364
|
+
- Detecta "TODO", "FIXME", "XXX", "..."
|
|
365
|
+
|
|
366
|
+
### Output
|
|
367
|
+
|
|
368
|
+
```
|
|
369
|
+
✓ Tests pasaron: 45/45 (0 fallidos)
|
|
370
|
+
✓ Cobertura: 91% (>= 80%)
|
|
371
|
+
✓ Specs aplicadas: 2 archivos
|
|
372
|
+
✓ Archivos completos: proposal.md, design.md, tasks.md
|
|
373
|
+
|
|
374
|
+
Verificación EXITOSA
|
|
375
|
+
|
|
376
|
+
Próximos pasos:
|
|
377
|
+
1. openspec code-review CHANGE-001 --create-pr
|
|
378
|
+
2. Crear Pull Request
|
|
379
|
+
3. Esperar aprobación de CodeRabbit + equipo
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Exit Codes
|
|
383
|
+
|
|
384
|
+
- `0` — Verificación exitosa
|
|
385
|
+
- `1` — Tests fallidos
|
|
386
|
+
- `1` — Cobertura insuficiente
|
|
387
|
+
- `1` — Specs no aplicadas
|
|
388
|
+
- `1` — Archivos incompletos
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## `code-review`
|
|
393
|
+
|
|
394
|
+
Solicita code review: verifica tests, crea PR, y activa CodeRabbit.
|
|
395
|
+
|
|
396
|
+
### Uso
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
openspec code-review <CHANGE-ID> [opciones]
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Opciones
|
|
403
|
+
|
|
404
|
+
| Opción | Tipo | Descripción |
|
|
405
|
+
|--------|------|-------------|
|
|
406
|
+
| `--create-pr` | — | Crear Pull Request automáticamente |
|
|
407
|
+
| `--base <branch>` | string | Branch base para PR (default: develop) |
|
|
408
|
+
| `--draft` | — | Crear PR como draft |
|
|
409
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
410
|
+
|
|
411
|
+
### Prerequisitos
|
|
412
|
+
|
|
413
|
+
- Branch feature creado
|
|
414
|
+
- Tests pasando (`openspec verify` OK)
|
|
415
|
+
- CLI `gh` configurado (para crear PRs)
|
|
416
|
+
- CodeRabbit activo en el repo
|
|
417
|
+
|
|
418
|
+
### Ejemplos
|
|
419
|
+
|
|
420
|
+
```bash
|
|
421
|
+
# Solo verificar (no crear PR)
|
|
422
|
+
openspec code-review CHANGE-001
|
|
423
|
+
|
|
424
|
+
# Verificar y crear PR
|
|
425
|
+
openspec code-review CHANGE-002 --create-pr
|
|
426
|
+
|
|
427
|
+
# PR como draft
|
|
428
|
+
openspec code-review CHANGE-003 --create-pr --draft
|
|
429
|
+
|
|
430
|
+
# Con base branch diferente
|
|
431
|
+
openspec code-review CHANGE-004 --create-pr --base main
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Acciones Realizadas
|
|
435
|
+
|
|
436
|
+
1. ✅ Ejecuta `openspec verify` primero
|
|
437
|
+
2. ✅ Pushea branch a remoto
|
|
438
|
+
3. ✅ Crea Pull Request (si `--create-pr`)
|
|
439
|
+
4. ✅ Extrae ticket id de proposal.md para título PR
|
|
440
|
+
5. ✅ CodeRabbit hace review automático
|
|
441
|
+
6. ✅ Actualiza estado: `in_progress` → `testing`
|
|
442
|
+
|
|
443
|
+
### Formato del PR
|
|
444
|
+
|
|
445
|
+
**Título:**
|
|
446
|
+
```
|
|
447
|
+
app-tienda-23 — Implementar Autenticación JWT
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Body:**
|
|
451
|
+
```markdown
|
|
452
|
+
## Propuesta
|
|
453
|
+
CHANGE-001 — Implementar Autenticación de Usuario
|
|
454
|
+
|
|
455
|
+
## Descripción
|
|
456
|
+
[Resumen ejecutivo desde proposal.md]
|
|
457
|
+
|
|
458
|
+
## Archivos Clave
|
|
459
|
+
- `openspec/changes/CHANGE-001/proposal.md` — QUÉ y POR QUÉ
|
|
460
|
+
- `openspec/changes/CHANGE-001/design.md` — CÓMO
|
|
461
|
+
- `openspec/changes/CHANGE-001/tasks.md` — Testing Report
|
|
462
|
+
|
|
463
|
+
## Testing Report
|
|
464
|
+
Ver `tasks.md` para resultados completos.
|
|
465
|
+
|
|
466
|
+
## Referencias
|
|
467
|
+
- Propuesta: openspec/changes/CHANGE-001/
|
|
468
|
+
- Ticket: app-tienda-23
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
**Code Review:** CodeRabbit está activo.
|
|
472
|
+
```
|
|
473
|
+
|
|
474
|
+
### Output
|
|
475
|
+
|
|
476
|
+
```
|
|
477
|
+
✓ Verificación pasada
|
|
478
|
+
✓ Branch pusheado: feat/CHANGE-001-auth
|
|
479
|
+
✓ Pull Request creado: #45
|
|
480
|
+
✓ Estado actualizado: testing
|
|
481
|
+
|
|
482
|
+
CodeRabbit revisará automáticamente el PR
|
|
483
|
+
Revisa los comentarios y aplica cambios sugeridos
|
|
484
|
+
|
|
485
|
+
Cuando el review esté aprobado:
|
|
486
|
+
openspec archive CHANGE-001
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Exit Codes
|
|
490
|
+
|
|
491
|
+
- `0` — Éxito
|
|
492
|
+
- `1` — Verificación falló
|
|
493
|
+
- `1` — No se pudo pushear branch
|
|
494
|
+
- `1` — Error al crear PR
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## `archive`
|
|
499
|
+
|
|
500
|
+
Archiva una propuesta completada y mergeada: actualiza estado, elimina branch, y genera reporte final.
|
|
501
|
+
|
|
502
|
+
### Uso
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
openspec archive <CHANGE-ID> [opciones]
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
### Opciones
|
|
509
|
+
|
|
510
|
+
| Opción | Tipo | Descripción |
|
|
511
|
+
|--------|------|-------------|
|
|
512
|
+
| `--keep-branch` | — | No eliminar branch feature |
|
|
513
|
+
| `--no-merge` | — | No verificar merge (útil si ya mergeado) |
|
|
514
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
515
|
+
|
|
516
|
+
### Prerequisitos
|
|
517
|
+
|
|
518
|
+
- PR mergeado a base branch
|
|
519
|
+
- Code review aprobado
|
|
520
|
+
|
|
521
|
+
### Ejemplos
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
# Archivar y eliminar branch
|
|
525
|
+
openspec archive CHANGE-001
|
|
526
|
+
|
|
527
|
+
# Conservar branch
|
|
528
|
+
openspec archive CHANGE-002 --keep-branch
|
|
529
|
+
|
|
530
|
+
# Sin verificar merge (ya mergeado manualmente)
|
|
531
|
+
openspec archive CHANGE-003 --no-merge
|
|
532
|
+
```
|
|
533
|
+
|
|
534
|
+
### Acciones Realizadas
|
|
535
|
+
|
|
536
|
+
1. ✅ Verifica que PR esté mergeado (si gh disponible)
|
|
537
|
+
2. ✅ Actualiza estado: `testing` → `completed`
|
|
538
|
+
3. ✅ Añade fecha de completación a proposal.md
|
|
539
|
+
4. ✅ Marca specs como `implemented`
|
|
540
|
+
5. ✅ Elimina branch feature (local + remoto)
|
|
541
|
+
6. ✅ Genera `COMPLETION_REPORT.md`
|
|
542
|
+
|
|
543
|
+
### Output
|
|
544
|
+
|
|
545
|
+
```
|
|
546
|
+
✓ PR verificado como mergeado
|
|
547
|
+
✓ Propuesta archivada: CHANGE-001
|
|
548
|
+
✓ Specs actualizadas: 2 archivos (state: implemented)
|
|
549
|
+
✓ Branch eliminado: feat/CHANGE-001-auth
|
|
550
|
+
✓ Reporte generado: COMPLETION_REPORT.md
|
|
551
|
+
|
|
552
|
+
Propuesta completada exitosamente
|
|
553
|
+
|
|
554
|
+
Reporte final: openspec/changes/CHANGE-001-auth/COMPLETION_REPORT.md
|
|
555
|
+
```
|
|
556
|
+
|
|
557
|
+
### Reporte Generado
|
|
558
|
+
|
|
559
|
+
**`COMPLETION_REPORT.md` incluye:**
|
|
560
|
+
- Fecha de completación
|
|
561
|
+
- Archivos generados
|
|
562
|
+
- Specs actualizadas
|
|
563
|
+
- Commits relacionados
|
|
564
|
+
- Estado final
|
|
565
|
+
|
|
566
|
+
### Exit Codes
|
|
567
|
+
|
|
568
|
+
- `0` — Éxito
|
|
569
|
+
- `1` — Propuesta no encontrada
|
|
570
|
+
- `1` — PR no mergeado (si verificando)
|
|
571
|
+
|
|
572
|
+
---
|
|
573
|
+
|
|
574
|
+
## `report`
|
|
575
|
+
|
|
576
|
+
Genera testing report automáticamente desde resultados de tests (PHPUnit, Jest, etc.).
|
|
577
|
+
|
|
578
|
+
### Uso
|
|
579
|
+
|
|
580
|
+
```bash
|
|
581
|
+
openspec report [CHANGE-ID] [opciones]
|
|
582
|
+
```
|
|
583
|
+
|
|
584
|
+
### Opciones
|
|
585
|
+
|
|
586
|
+
| Opción | Tipo | Descripción |
|
|
587
|
+
|--------|------|-------------|
|
|
588
|
+
| `--format <fmt>` | string | Formato: markdown\|json\|text (default: markdown) |
|
|
589
|
+
| `--output <file>` | string | Archivo de salida (default: STDOUT) |
|
|
590
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
591
|
+
|
|
592
|
+
### Ejemplos
|
|
593
|
+
|
|
594
|
+
```bash
|
|
595
|
+
# Generar para proyecto
|
|
596
|
+
openspec report
|
|
597
|
+
|
|
598
|
+
# Generar para propuesta específica
|
|
599
|
+
openspec report CHANGE-001
|
|
600
|
+
|
|
601
|
+
# Formato JSON
|
|
602
|
+
openspec report --format json --output report.json
|
|
603
|
+
|
|
604
|
+
# Formato texto plano
|
|
605
|
+
openspec report CHANGE-002 --format text
|
|
606
|
+
```
|
|
607
|
+
|
|
608
|
+
### Test Frameworks Detectados
|
|
609
|
+
|
|
610
|
+
- **PHPUnit** — Parse output de `phpunit --testdox --coverage-text`
|
|
611
|
+
- **Jest** — Parse output de `npm test -- --coverage --json`
|
|
612
|
+
|
|
613
|
+
### Output (markdown)
|
|
614
|
+
|
|
615
|
+
```markdown
|
|
616
|
+
## Testing Report
|
|
617
|
+
|
|
618
|
+
| Suite | Tests | Passed | Failed | Coverage |
|
|
619
|
+
|-------|-------|--------|--------|----------|
|
|
620
|
+
| Unit | 45 | 45 | 0 | 91% |
|
|
621
|
+
| Integration | 12 | 12 | 0 | N/A |
|
|
622
|
+
| E2E | 3 | 3 | 0 | N/A |
|
|
623
|
+
|
|
624
|
+
**Fecha:** 2026-02-12 22:45:00
|
|
625
|
+
|
|
626
|
+
### Resumen
|
|
627
|
+
- Total tests: 60
|
|
628
|
+
- Pasados: 60
|
|
629
|
+
- Fallidos: 0
|
|
630
|
+
- Cobertura: 91%
|
|
631
|
+
|
|
632
|
+
### CodeRabbit Status
|
|
633
|
+
- [ ] Review pendiente
|
|
634
|
+
- [ ] Cambios requeridos
|
|
635
|
+
- [ ] Aprobado
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
### Actualización Automática
|
|
639
|
+
|
|
640
|
+
Si se proporciona `CHANGE-ID`, actualiza automáticamente `tasks.md` con el reporte.
|
|
641
|
+
|
|
642
|
+
### Exit Codes
|
|
643
|
+
|
|
644
|
+
- `0` — Éxito
|
|
645
|
+
- `1` — Test framework no detectado
|
|
646
|
+
- `1` — Tests fallaron (exit code del framework)
|
|
647
|
+
|
|
648
|
+
---
|
|
649
|
+
|
|
650
|
+
## `status`
|
|
651
|
+
|
|
652
|
+
Muestra el estado actual de todas las propuestas (activas o todas).
|
|
653
|
+
|
|
654
|
+
### Uso
|
|
655
|
+
|
|
656
|
+
```bash
|
|
657
|
+
openspec status [opciones]
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
### Opciones
|
|
661
|
+
|
|
662
|
+
| Opción | Tipo | Descripción |
|
|
663
|
+
|--------|------|-------------|
|
|
664
|
+
| `--all` | — | Mostrar todas (incluidas completadas) |
|
|
665
|
+
| `--state <state>` | string | Filtrar por estado |
|
|
666
|
+
| `--format <fmt>` | string | Formato: table\|json\|list (default: table) |
|
|
667
|
+
| `-h, --help` | — | Mostrar ayuda |
|
|
668
|
+
|
|
669
|
+
### Estados Disponibles
|
|
670
|
+
|
|
671
|
+
- `draft` — Borrador
|
|
672
|
+
- `review` — En revisión
|
|
673
|
+
- `approved` — Aprobada
|
|
674
|
+
- `in_progress` — En desarrollo
|
|
675
|
+
- `testing` — En testing
|
|
676
|
+
- `completed` — Completada
|
|
677
|
+
- `archived` — Archivada
|
|
678
|
+
- `rejected` — Rechazada
|
|
679
|
+
|
|
680
|
+
### Ejemplos
|
|
681
|
+
|
|
682
|
+
```bash
|
|
683
|
+
# Ver propuestas activas
|
|
684
|
+
openspec status
|
|
685
|
+
|
|
686
|
+
# Ver todas (incluidas completadas)
|
|
687
|
+
openspec status --all
|
|
688
|
+
|
|
689
|
+
# Filtrar por estado
|
|
690
|
+
openspec status --state in_progress
|
|
691
|
+
|
|
692
|
+
# Formato JSON
|
|
693
|
+
openspec status --format json
|
|
694
|
+
|
|
695
|
+
# Formato lista
|
|
696
|
+
openspec status --format list
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
### Output (table)
|
|
700
|
+
|
|
701
|
+
```
|
|
702
|
+
ID | Título | Estado | Prioridad | Autor | Fecha
|
|
703
|
+
------------|--------------------------------|--------------|-----------|--------------|----------
|
|
704
|
+
CHANGE-001 | Autenticación JWT | in_progress | high | SpecLeap Team | 2026-02-12
|
|
705
|
+
CHANGE-002 | Sistema notificaciones | draft | medium | SpecLeap Team | 2026-02-13
|
|
706
|
+
CHANGE-003 | Optimizar queries DB | testing | high | Backend Team | 2026-02-10
|
|
707
|
+
|
|
708
|
+
Total: 3 propuesta(s)
|
|
709
|
+
|
|
710
|
+
in_progress: 1
|
|
711
|
+
draft: 1
|
|
712
|
+
testing: 1
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
### Exit Codes
|
|
716
|
+
|
|
717
|
+
- `0` — Éxito (siempre, incluso si 0 propuestas)
|
|
718
|
+
|
|
719
|
+
---
|
|
720
|
+
|
|
721
|
+
## 🔧 Variables de Entorno
|
|
722
|
+
|
|
723
|
+
El CLI respeta estas variables (si están definidas):
|
|
724
|
+
|
|
725
|
+
| Variable | Descripción | Default |
|
|
726
|
+
|----------|-------------|---------|
|
|
727
|
+
| `OPENSPEC_AI_CLI` | Forzar AI CLI: oracle\|gh\|ai-cli | auto-detect |
|
|
728
|
+
| `OPENSPEC_MODEL` | Modelo AI por defecto | auto |
|
|
729
|
+
| `OPENSPEC_BASE_BRANCH` | Branch base | develop |
|
|
730
|
+
| `OPENSPEC_COVERAGE_MIN` | Cobertura mínima | 80 |
|
|
731
|
+
|
|
732
|
+
**Ejemplo:**
|
|
733
|
+
|
|
734
|
+
```bash
|
|
735
|
+
export OPENSPEC_AI_CLI=oracle
|
|
736
|
+
export OPENSPEC_MODEL=anthropic/claude-sonnet-4
|
|
737
|
+
export OPENSPEC_COVERAGE_MIN=90
|
|
738
|
+
|
|
739
|
+
openspec enrich "Como usuario..." # Usará oracle + sonnet-4
|
|
740
|
+
openspec verify CHANGE-001 # Requerirá 90% coverage
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
---
|
|
744
|
+
|
|
745
|
+
## 📊 Exit Codes Comunes
|
|
746
|
+
|
|
747
|
+
| Código | Significado |
|
|
748
|
+
|--------|-------------|
|
|
749
|
+
| `0` | Éxito |
|
|
750
|
+
| `1` | Error general (ver output) |
|
|
751
|
+
| `127` | Comando no encontrado |
|
|
752
|
+
|
|
753
|
+
---
|
|
754
|
+
|
|
755
|
+
## 🐛 Troubleshooting
|
|
756
|
+
|
|
757
|
+
### "Comando no encontrado: openspec"
|
|
758
|
+
|
|
759
|
+
**Causa:** CLI no está en `$PATH`
|
|
760
|
+
|
|
761
|
+
**Solución:**
|
|
762
|
+
```bash
|
|
763
|
+
export PATH="$PATH:$(pwd)/openspec/cli"
|
|
764
|
+
# O añadir a ~/.zshrc o ~/.bashrc
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
### "No se encontró CLI de AI"
|
|
768
|
+
|
|
769
|
+
**Causa:** oracle, gh copilot, u ai-cli no instalados
|
|
770
|
+
|
|
771
|
+
**Solución:**
|
|
772
|
+
```bash
|
|
773
|
+
# Instalar oracle (recomendado)
|
|
774
|
+
npm install -g @anthropic-ai/oracle
|
|
775
|
+
|
|
776
|
+
# O gh copilot
|
|
777
|
+
gh extension install github/gh-copilot
|
|
778
|
+
|
|
779
|
+
# O ai-cli
|
|
780
|
+
# Ver https://specleap.com
|
|
781
|
+
```
|
|
782
|
+
|
|
783
|
+
### "Tests fallaron"
|
|
784
|
+
|
|
785
|
+
**Causa:** Tests no pasan en `openspec verify`
|
|
786
|
+
|
|
787
|
+
**Solución:**
|
|
788
|
+
1. Ejecutar tests manualmente: `phpunit` o `npm test`
|
|
789
|
+
2. Corregir código hasta que pasen
|
|
790
|
+
3. Re-intentar `openspec verify`
|
|
791
|
+
|
|
792
|
+
### "Branch ya existe"
|
|
793
|
+
|
|
794
|
+
**Causa:** Ya existe `feat/CHANGE-XXX-nombre`
|
|
795
|
+
|
|
796
|
+
**Solución:**
|
|
797
|
+
```bash
|
|
798
|
+
# Eliminar branch existente
|
|
799
|
+
git branch -D feat/CHANGE-001-nombre
|
|
800
|
+
|
|
801
|
+
# O usar --no-branch si ya estás en el branch correcto
|
|
802
|
+
openspec apply CHANGE-001 --no-branch
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
---
|
|
806
|
+
|
|
807
|
+
## 📚 Ver También
|
|
808
|
+
|
|
809
|
+
- [CLI README](./README.md) — Guía de uso general
|
|
810
|
+
- [Ejemplo Completo](../examples/CHANGE-SAMPLE-001-user-authentication/README.md)
|
|
811
|
+
- [Metodología SDD](../../.continue/rules/01-sdd-methodology.md)
|
|
812
|
+
- [Templates](../templates/)
|
|
813
|
+
|
|
814
|
+
---
|
|
815
|
+
|
|
816
|
+
**Última actualización:** 2026-02-12
|
|
817
|
+
**Versión CLI:** 1.0.0
|