13 KiB
version, updated, tags
| version | updated | tags | ||||
|---|---|---|---|---|---|---|
| 1.0.0 | 2026-03-11 |
|
Command: parallel-issues
Analiza las issues pendientes en dev/issues/ y genera un plan de ejecución paralela (PARALLEL_EXECUTION_ORDER.md) agrupando issues independientes que no tienen conflictos entre sí.
Para el usuario
Cuándo usar este comando
- Cuando quieres identificar qué issues puedes desarrollar en paralelo sin conflictos
- Para acelerar el desarrollo trabajando en múltiples issues simultáneamente
- Antes de iniciar una sesión de desarrollo intensivo con múltiples desarrolladores
- Para planificar el uso de git worktrees con issues independientes
Sintaxis
/issues:parallel [--dry-run]
Ejemplos
Ejemplo 1:
/issues:parallel
Analiza todas las issues pendientes y genera el archivo PARALLEL_EXECUTION_ORDER.md con grupos de issues paralelizables.
Ejemplo 2:
/issues:parallel --dry-run
Muestra el análisis de paralelización en consola sin crear el archivo (útil para vista previa).
Para Claude
Precondiciones
Verificar antes de ejecutar:
- Existe el directorio
dev/issues/ - Hay al menos una issue pendiente en formato
NNNN-*.md - El proyecto sigue la estructura funcional (core/shell/app)
Inputs
Se necesitan los siguientes datos. Si no se proporcionan, preguntar al usuario:
--dry-run(opcional): Si está presente, solo muestra el análisis sin crear archivo
Flujo obligatorio
1. Detectar contexto del proyecto
Determinar si estamos en el proyecto padre (Dataforge) o en un proyecto hijo (workspaces/).
# Verificar si estamos en un proyecto hijo
if [[ "$PWD" == *"/workspaces/"* ]]; then
PROJECT_TYPE="child"
PROJECT_NAME=$(basename "$PWD")
else
PROJECT_TYPE="parent"
PROJECT_NAME="Dataforge"
fi
echo "Analizando issues en proyecto: $PROJECT_NAME ($PROJECT_TYPE)"
Verificar que existe dev/issues/:
if [ ! -d "dev/issues" ]; then
echo "Error: No existe el directorio dev/issues/"
exit 1
fi
2. Listar issues pendientes
Obtener todas las issues que no están marcadas como completadas:
# Listar archivos de issues
ls -1 dev/issues/*.md | grep -E '[0-9]{4}-.*\.md$' | sort
Para cada issue, extraer:
- Número de issue (NNNN)
- Título (del nombre del archivo)
- Estado (revisar si está en el índice como completada)
- Archivos mencionados (parsear el contenido del issue)
- Dependencias explícitas (buscar referencias a
#NNNN)
Parseo de archivos mencionados:
Buscar patrones como:
core/archivo.goshell/archivo.goapp/archivo.go- Cualquier path con extensión de código
Parseo de dependencias:
Buscar patrones como:
- "depende de #0001"
- "requiere #0002"
- "bloqueado por #0003"
3. Analizar conflictos y dependencias
Para cada par de issues (A, B), determinar si son paralelizables:
Criterios de conflicto (NO paralelizables):
- Archivos compartidos: Si ambas issues modifican el mismo archivo
- Dependencias explícitas: Si A menciona "#B" o viceversa
- Dependencias transitivas: Si A depende de C y B depende de C
Criterios de paralelización (SÍ paralelizables):
- Archivos disjuntos: Modifican archivos completamente diferentes
- Capas diferentes: Una toca
core/y otrashell/sin archivos comunes - Sin referencias cruzadas: Ninguna menciona a la otra
Estructura de datos sugerida:
Issue #0001:
- Archivos: [core/types.go, core/workspace.go]
- Depende de: []
- Capa principal: core
Issue #0002:
- Archivos: [shell/gitea.go, shell/http.go]
- Depende de: [#0001]
- Capa principal: shell
Conflictos detectados:
- #0002 → #0001 (dependencia explícita)
4. Agrupar issues por independencia
Usar algoritmo de agrupación por grafos:
-
Construir grafo de dependencias:
- Nodos = issues
- Aristas = conflictos/dependencias
-
Detectar componentes independientes:
- Issues sin aristas entre sí → mismo grupo paralelo
- Issues con aristas → grupos secuenciales
-
Priorizar grupos:
- Grupo 1: Issues sin dependencias (pueden ejecutarse YA)
- Grupo 2: Issues que dependen solo de Grupo 1
- Grupo N: Issues que dependen de grupos anteriores
Algoritmo simple:
Grupo_actual = 1
Issues_restantes = todas las issues pendientes
Issues_completadas = []
while Issues_restantes no está vacío:
Grupo[Grupo_actual] = []
for issue in Issues_restantes:
tiene_conflictos = false
# Verificar conflictos con issues ya en el grupo actual
for otra in Grupo[Grupo_actual]:
if conflicto(issue, otra):
tiene_conflictos = true
break
# Verificar dependencias no resueltas
for dep in issue.dependencias:
if dep not in Issues_completadas:
tiene_conflictos = true
break
if not tiene_conflictos:
Grupo[Grupo_actual].append(issue)
# Si no pudimos agregar ninguna issue al grupo, hay dependencias circulares
if Grupo[Grupo_actual] está vacío:
ERROR: "Dependencias circulares detectadas"
break
# Marcar issues del grupo como completadas para próxima iteración
Issues_completadas += Grupo[Grupo_actual]
Issues_restantes -= Grupo[Grupo_actual]
Grupo_actual++
5. Estimar tiempos de desarrollo
Para cada issue, calcular complejidad basada en:
Factores:
-
Cantidad de archivos:
- 1-2 archivos = Simple (1-2 horas)
- 3-5 archivos = Moderada (2-4 horas)
- 6+ archivos = Compleja (4-8 horas)
-
Capa afectada:
- Solo
core/= Moderada (requiere tests extensivos) - Solo
shell/= Alta (I/O, manejo de errores) app/= Baja (orquestación)- Múltiples capas = Alta (integración compleja)
- Solo
-
Palabras clave en descripción:
- "refactor", "reestructurar" = +50% tiempo
- "nuevo", "implementar" = tiempo base
- "fix", "corregir" = -30% tiempo
- "documentar" = tiempo muy bajo
Estimación por grupo:
- Tiempo de grupo = MAX(tiempos individuales) ← porque se ejecutan en paralelo
- Tiempo total = SUM(tiempos de grupos) ← porque los grupos son secuenciales
6. Generar archivo PARALLEL_EXECUTION_ORDER.md
Crear el archivo con la siguiente estructura:
# Plan de Ejecución Paralela
**Proyecto:** {{PROJECT_NAME}}
**Fecha de análisis:** {{FECHA}}
**Issues analizadas:** {{TOTAL_ISSUES}}
**Grupos paralelos:** {{TOTAL_GRUPOS}}
---
## Grupo 1: Issues Independientes (ejecutar en paralelo)
### Issue #0003 - Implementar shell/gitea.go
- **Archivos afectados:**
- `shell/gitea.go`
- `shell/gitea_test.go`
- **Capa:** shell
- **Complejidad:** Moderada
- **Tiempo estimado:** 3 horas
- **Dependencias:** Ninguna
- **Worktree sugerido:** `worktrees/issue-0003`
- **Branch sugerida:** `quick/issues:fix-issue-0003`
### Issue #0006 - Añadir logging estructurado
- **Archivos afectados:**
- `shell/logger.go`
- `app/main.go`
- **Capa:** shell, app
- **Complejidad:** Simple
- **Tiempo estimado:** 2 horas
- **Dependencias:** Ninguna
- **Worktree sugerido:** `worktrees/issue-0006`
- **Branch sugerida:** `quick/issues:fix-issue-0006`
### Issue #0008 - Documentación de módulos
- **Archivos afectados:**
- `README.md`
- `docs/architecture.md`
- **Capa:** docs
- **Complejidad:** Simple
- **Tiempo estimado:** 1.5 horas
- **Dependencias:** Ninguna
- **Worktree sugerido:** `worktrees/issue-0008`
- **Branch sugerida:** `quick/issues:fix-issue-0008`
**Tiempo estimado del grupo:** 3 horas (máximo en paralelo)
---
## Grupo 2: Issues Dependientes (ejecutar después de Grupo 1)
### Issue #0004 - Implementar app/orchestrator.go
- **Archivos afectados:**
- `app/orchestrator.go`
- `app/orchestrator_test.go`
- **Capa:** app
- **Complejidad:** Alta
- **Tiempo estimado:** 5 horas
- **Dependencias:**
- `#0003` (requiere shell/gitea.go)
- **Worktree sugerido:** `worktrees/issue-0004`
- **Branch sugerida:** `quick/issues:fix-issue-0004`
**Tiempo estimado del grupo:** 5 horas
---
## Grupo 3: Issues Finales
### Issue #0005 - Integración completa
- **Archivos afectados:**
- `app/main.go`
- `cmd/dataforge/main.go`
- **Capa:** app
- **Complejidad:** Moderada
- **Tiempo estimado:** 3 horas
- **Dependencias:**
- `#0004` (requiere orchestrator)
- **Worktree sugerido:** `worktrees/issue-0005`
- **Branch sugerida:** `quick/issues:fix-issue-0005`
**Tiempo estimado del grupo:** 3 horas
---
## Conflictos Detectados
### Conflictos por archivos compartidos:
- `#0002` y `#0003`: ambos modifican `core/types.go`
- **Solución:** Ejecutar secuencialmente (están en grupos diferentes)
### Dependencias explícitas:
- `#0004` depende de `#0003`
- `#0005` depende de `#0004`
### Advertencias:
- Ninguna circular detectada ✓
---
## Resumen
| Métrica | Valor |
|---------|-------|
| Issues totales | 8 |
| Issues en Grupo 1 (paralelas) | 3 |
| Issues secuenciales | 5 |
| Grupos paralelos | 3 |
| Tiempo total secuencial | 28 horas |
| Tiempo total paralelo | 11 horas |
| **Ahorro de tiempo** | **61%** |
---
## Recomendaciones
1. **Ejecutar Grupo 1 en paralelo:** Usar git worktrees para trabajar en las 3 issues simultáneamente
2. **Esperar a Grupo 2:** No iniciar #0004 hasta que #0003 esté mergeada
3. **Validar integraciones:** Después de cada grupo, ejecutar tests completos
4. **Monitoring:** Si encuentras nuevas dependencias durante desarrollo, actualiza el plan
---
## Comandos para Setup de Worktrees
```bash
# Grupo 1 - Crear worktrees para issues paralelas
git worktree add worktrees/issue-0003 -b quick/issues:fix-issue-0003
git worktree add worktrees/issue-0006 -b quick/issues:fix-issue-0006
git worktree add worktrees/issue-0008 -b quick/issues:fix-issue-0008
# Ejecutar /issues:fix-issue en cada worktree (manual)
# cd worktrees/issue-0003 && /issues:fix-issue 0003
# cd worktrees/issue-0006 && /issues:fix-issue 0006
# cd worktrees/issue-0008 && /issues:fix-issue 0008
# Después de mergear Grupo 1, crear worktree para Grupo 2
git worktree add worktrees/issue-0004 -b quick/issues:fix-issue-0004
# Limpiar worktrees después de merge
git worktree remove worktrees/issue-0003
git worktree remove worktrees/issue-0006
git worktree remove worktrees/issue-0008
**Notas importantes:**
- Usar formato markdown claro y estructurado
- Incluir tabla de resumen con métricas
- Calcular ahorro de tiempo (tiempo secuencial vs paralelo)
- Sugerir comandos de worktree para facilitar setup
- Documentar advertencias y conflictos detectados
#### 7. Mostrar resultado
Si se ejecutó con `--dry-run`:
- Mostrar todo el contenido en consola
- NO crear archivo
- Terminar aquí
Si se ejecutó sin flags:
- Crear archivo `PARALLEL_EXECUTION_ORDER.md`
- Mostrar resumen en consola
```bash
cat PARALLEL_EXECUTION_ORDER.md
Verificación final
# Verificar que el archivo fue creado
ls -lh PARALLEL_EXECUTION_ORDER.md
# Contar grupos generados
grep -c "^## Grupo" PARALLEL_EXECUTION_ORDER.md
Informar al usuario:
✓ Plan de ejecución paralela generado
Archivo: PARALLEL_EXECUTION_ORDER.md
Resumen:
- Issues analizadas: {{N}}
- Grupos paralelos: {{M}}
- Ahorro estimado: {{X}}%
Próximos pasos:
1. Revisar el plan generado
2. Crear worktrees para Grupo 1
3. Ejecutar /issues:fix-issue en cada worktree
4. Mergear y continuar con siguientes grupos
Convenciones
- Nombres de grupo: "Grupo N" donde N empieza en 1
- Worktrees sugeridos: Siempre bajo
worktrees/issue-NNNN - Branches sugeridas: Formato
quick/issues:fix-issue-NNNN - Estimación de tiempo: En horas, redondeado a .5 (ej: 2.5h, 3h, 4.5h)
- Conflictos: Documentar TODOS los conflictos detectados aunque estén resueltos en el plan
Troubleshooting
Error: "No se encontraron issues pendientes"
Causa: No hay archivos .md en dev/issues/ o todos están marcados como completados
Solución:
# Verificar issues existentes
ls -1 dev/issues/*.md
# Verificar índice de issues completadas
cat dev/issues/README.md
Error: "Dependencias circulares detectadas"
Causa: Las issues tienen dependencias que forman un ciclo (A→B→C→A)
Solución:
- Revisar manualmente las dependencias en los archivos de issues
- Identificar el ciclo
- Romper una de las dependencias refactorizando el alcance de una issue
- Re-ejecutar el comando
Warning: "Múltiples issues modifican el mismo archivo"
Causa: Varias issues tocan el mismo archivo pero no tienen dependencias explícitas
Solución:
- El algoritmo las colocará en grupos secuenciales automáticamente
- Considerar refactorizar las issues para que sean más granulares
- O agregar dependencias explícitas si hay un orden lógico
Reglas críticas
- NUNCA ejecutar issues en paralelo si comparten archivos - causará conflictos de merge
- SIEMPRE respetar dependencias explícitas - aunque no compartan archivos
- NUNCA asumir independencia sin analizar el contenido - leer cada issue completamente
- SIEMPRE calcular el tiempo del grupo como MAX(tiempos) - no como suma (son paralelas)
- NUNCA crear el archivo si hay errores en el análisis - informar al usuario y terminar
- SIEMPRE documentar conflictos detectados - transparencia total en el análisis