don-cheli-sdd 1.13.0
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.md +33 -0
- package/CHANGELOG.md +108 -0
- package/CLAUDE.md +114 -0
- package/LICENSE +190 -0
- package/README.es.md +611 -0
- package/README.md +640 -0
- package/README.pt.md +579 -0
- package/VERSION +1 -0
- package/agentes/README.md +28 -0
- package/agentes/prompts/estimador.md +29 -0
- package/comandos/bucle-completar.md +13 -0
- package/comandos/bucle-estado.md +13 -0
- package/comandos/bucle.md +74 -0
- package/comandos/especdev/actualizar.md +200 -0
- package/comandos/especdev/agente.md +43 -0
- package/comandos/especdev/analizar-sesiones.md +158 -0
- package/comandos/especdev/aplicar.md +73 -0
- package/comandos/especdev/archivar.md +69 -0
- package/comandos/especdev/auditar-seguridad.md +234 -0
- package/comandos/especdev/auditar.md +15 -0
- package/comandos/especdev/avance-rapido.md +64 -0
- package/comandos/especdev/cambios.md +14 -0
- package/comandos/especdev/capturar.md +61 -0
- package/comandos/especdev/cerrar-sesion.md +88 -0
- package/comandos/especdev/clarificar.md +98 -0
- package/comandos/especdev/comenzar.md +105 -0
- package/comandos/especdev/completo.md +49 -0
- package/comandos/especdev/continuar.md +59 -0
- package/comandos/especdev/contrato-api.md +223 -0
- package/comandos/especdev/contrato-ui.md +245 -0
- package/comandos/especdev/crear-skill.md +148 -0
- package/comandos/especdev/debate.md +119 -0
- package/comandos/especdev/desglosar.md +172 -0
- package/comandos/especdev/destilar.md +211 -0
- package/comandos/especdev/detectar-ambiguedad.md +81 -0
- package/comandos/especdev/diagnostico.md +92 -0
- package/comandos/especdev/dise/303/261ar.md +74 -0
- package/comandos/especdev/doctor.md +78 -0
- package/comandos/especdev/donde-estoy.md +32 -0
- package/comandos/especdev/especificar.md +189 -0
- package/comandos/especdev/estado.md +46 -0
- package/comandos/especdev/estimar.md +141 -0
- package/comandos/especdev/explorar.md +175 -0
- package/comandos/especdev/guardian.md +99 -0
- package/comandos/especdev/historial.md +14 -0
- package/comandos/especdev/implementar.md +227 -0
- package/comandos/especdev/incorporar.md +71 -0
- package/comandos/especdev/iniciar.md +82 -0
- package/comandos/especdev/limpiar-slop.md +88 -0
- package/comandos/especdev/marketplace.md +109 -0
- package/comandos/especdev/memorizar.md +31 -0
- package/comandos/especdev/mesa-redonda.md +60 -0
- package/comandos/especdev/mesa-tecnica.md +144 -0
- package/comandos/especdev/migrar.md +237 -0
- package/comandos/especdev/minar-referencias.md +214 -0
- package/comandos/especdev/planificar-tecnico.md +186 -0
- package/comandos/especdev/planning.md +264 -0
- package/comandos/especdev/poc.md +302 -0
- package/comandos/especdev/presentar.md +75 -0
- package/comandos/especdev/proponer.md +69 -0
- package/comandos/especdev/pseudocodigo.md +49 -0
- package/comandos/especdev/rapido.md +69 -0
- package/comandos/especdev/reflexionar.md +53 -0
- package/comandos/especdev/retro.md +14 -0
- package/comandos/especdev/reversa.md +155 -0
- package/comandos/especdev/revisar.md +231 -0
- package/comandos/especdev/traspasar.md +76 -0
- package/comandos/especdev/traspaso.md +43 -0
- package/comandos/especdev/uat.md +84 -0
- package/comandos/especdev/validar-spec.md +58 -0
- package/comandos/especdev/validar.md +40 -0
- package/comandos/historias-generar.md +74 -0
- package/comandos/razonar/5-porques.md +42 -0
- package/comandos/razonar/circulo-competencia.md +22 -0
- package/comandos/razonar/costo-oportunidad.md +21 -0
- package/comandos/razonar/inversion.md +40 -0
- package/comandos/razonar/mapa-territorio.md +22 -0
- package/comandos/razonar/minimizar-arrepentimiento.md +20 -0
- package/comandos/razonar/pareto.md +32 -0
- package/comandos/razonar/pre-mortem.md +22 -0
- package/comandos/razonar/primeros-principios.md +57 -0
- package/comandos/razonar/probabilistico.md +21 -0
- package/comandos/razonar/reversibilidad.md +27 -0
- package/comandos/razonar/rlm-cadena-pensamiento.md +189 -0
- package/comandos/razonar/rlm-descomposicion.md +216 -0
- package/comandos/razonar/rlm-verificacion.md +169 -0
- package/comandos/razonar/segundo-orden.md +35 -0
- package/ganchos/parar.md +10 -0
- package/ganchos/post-herramienta.md +9 -0
- package/ganchos/pre-herramienta.md +19 -0
- package/habilidades/arnes-agente/HABILIDAD.md +164 -0
- package/habilidades/auto-correccion/HABILIDAD.md +114 -0
- package/habilidades/brainstorming/HABILIDAD.md +88 -0
- package/habilidades/cambio-carpeta/HABILIDAD.md +100 -0
- package/habilidades/code-rag/HABILIDAD.md +306 -0
- package/habilidades/contabilidad-tokens/HABILIDAD.md +109 -0
- package/habilidades/delta-specs/HABILIDAD.md +102 -0
- package/habilidades/desarrollo-subagentes/HABILIDAD.md +51 -0
- package/habilidades/deteccion-loops/HABILIDAD.md +168 -0
- package/habilidades/deteccion-stubs/HABILIDAD.md +204 -0
- package/habilidades/devlog/HABILIDAD.md +84 -0
- package/habilidades/documentacion-viva/HABILIDAD.md +231 -0
- package/habilidades/estimacion/HABILIDAD.md +48 -0
- package/habilidades/extensiones-presets/HABILIDAD.md +133 -0
- package/habilidades/generador-specs/HABILIDAD.md +37 -0
- package/habilidades/ingenieria-contexto/HABILIDAD.md +34 -0
- package/habilidades/integracion-mcp/HABILIDAD.md +59 -0
- package/habilidades/leyes-hierro/HABILIDAD.md +45 -0
- package/habilidades/mapa-arquitectonico/HABILIDAD.md +93 -0
- package/habilidades/memoria-persistente/HABILIDAD.md +97 -0
- package/habilidades/obsidian/HABILIDAD.md +93 -0
- package/habilidades/optimizacion-tokens/HABILIDAD.md +179 -0
- package/habilidades/optimizador-contexto/HABILIDAD.md +106 -0
- package/habilidades/orquestacion-autonoma/HABILIDAD.md +133 -0
- package/habilidades/permisos-seguridad/HABILIDAD.md +76 -0
- package/habilidades/persona/HABILIDAD.md +66 -0
- package/habilidades/planning-equipo/HABILIDAD.md +169 -0
- package/habilidades/presentaciones/HABILIDAD.md +63 -0
- package/habilidades/proyecciones-costo/HABILIDAD.md +54 -0
- package/habilidades/prueba-trabajo/HABILIDAD.md +131 -0
- package/habilidades/razonamiento/HABILIDAD.md +69 -0
- package/habilidades/recuperacion-sesion/HABILIDAD.md +27 -0
- package/habilidades/refactorizacion-solid/HABILIDAD.md +182 -0
- package/habilidades/reflexion/HABILIDAD.md +37 -0
- package/habilidades/rigor-progresivo/HABILIDAD.md +109 -0
- package/habilidades/rlm/HABILIDAD.md +85 -0
- package/habilidades/routing-modelos/HABILIDAD.md +79 -0
- package/habilidades/salud-habilidades/HABILIDAD.md +63 -0
- package/habilidades/schemas-dbml/HABILIDAD.md +101 -0
- package/habilidades/trazabilidad/HABILIDAD.md +63 -0
- package/habilidades/ui-ux-design/HABILIDAD.md +76 -0
- package/habilidades/validacion-nyquist/HABILIDAD.md +161 -0
- package/habilidades/worktrees/HABILIDAD.md +80 -0
- package/locales/en.json +179 -0
- package/locales/es.json +179 -0
- package/locales/pt.json +179 -0
- package/package.json +48 -0
- package/plantillas/checklist-requisitos.md +31 -0
- package/plantillas/docker/Dockerfile +16 -0
- package/plantillas/docker/docker-compose.yml +28 -0
- package/plantillas/especdev/WORKFLOW.md +118 -0
- package/plantillas/especdev/config.yaml +27 -0
- package/plantillas/especdev/en/config.yaml +27 -0
- package/plantillas/especdev/en/decisions.md +17 -0
- package/plantillas/especdev/en/deferred-work.md +17 -0
- package/plantillas/especdev/en/findings.md +7 -0
- package/plantillas/especdev/en/knowledge.md +19 -0
- package/plantillas/especdev/en/plan.md +35 -0
- package/plantillas/especdev/en/progress.md +7 -0
- package/plantillas/especdev/en/project-constitution.md +53 -0
- package/plantillas/especdev/en/pseudocode.md +35 -0
- package/plantillas/especdev/en/runtime.md +26 -0
- package/plantillas/especdev/en/status.md +16 -0
- package/plantillas/especdev/es/config.yaml +27 -0
- package/plantillas/especdev/es/conocimiento.md +19 -0
- package/plantillas/especdev/es/constitucion-proyecto.md +53 -0
- package/plantillas/especdev/es/decisiones.md +17 -0
- package/plantillas/especdev/es/deuda-scope.md +17 -0
- package/plantillas/especdev/es/estado.md +16 -0
- package/plantillas/especdev/es/hallazgos.md +7 -0
- package/plantillas/especdev/es/plan.md +35 -0
- package/plantillas/especdev/es/progreso.md +7 -0
- package/plantillas/especdev/es/pseudocodigo.md +35 -0
- package/plantillas/especdev/es/runtime.md +26 -0
- package/plantillas/especdev/estado.md +16 -0
- package/plantillas/especdev/hallazgos.md +7 -0
- package/plantillas/especdev/isa.yml +152 -0
- package/plantillas/especdev/plan.md +35 -0
- package/plantillas/especdev/progreso.md +7 -0
- package/plantillas/especdev/pt/config.yaml +27 -0
- package/plantillas/especdev/pt/conhecimento.md +19 -0
- package/plantillas/especdev/pt/constituicao-projeto.md +53 -0
- package/plantillas/especdev/pt/decisoes.md +17 -0
- package/plantillas/especdev/pt/descobertas.md +7 -0
- package/plantillas/especdev/pt/estado.md +16 -0
- package/plantillas/especdev/pt/plano.md +35 -0
- package/plantillas/especdev/pt/progresso.md +7 -0
- package/plantillas/especdev/pt/pseudocodigo.md +35 -0
- package/plantillas/especdev/pt/runtime.md +26 -0
- package/plantillas/especdev/pt/trabalho-diferido.md +17 -0
- package/plantillas/estimado-desarrollo.md +43 -0
- package/prompt.md +16 -0
- package/reglas/constitucion.md +122 -0
- package/reglas/hooks-parar.md +102 -0
- package/reglas/i18n.md +47 -0
- package/reglas/leyes-hierro.md +18 -0
- package/reglas/puertas-calidad.md +87 -0
- package/reglas/reglas-desviacion.md +36 -0
- package/reglas/reglas-trabajo-globales.md +171 -0
- package/reglas/skills-best-practices.md +109 -0
- package/scripts/.claude/commands/bucle-completar.md +13 -0
- package/scripts/.claude/commands/bucle-estado.md +13 -0
- package/scripts/.claude/commands/bucle.md +74 -0
- package/scripts/.claude/commands/especdev/actualizar.md +200 -0
- package/scripts/.claude/commands/especdev/agente.md +43 -0
- package/scripts/.claude/commands/especdev/analizar-sesiones.md +158 -0
- package/scripts/.claude/commands/especdev/aplicar.md +73 -0
- package/scripts/.claude/commands/especdev/archivar.md +69 -0
- package/scripts/.claude/commands/especdev/auditar-seguridad.md +234 -0
- package/scripts/.claude/commands/especdev/auditar.md +15 -0
- package/scripts/.claude/commands/especdev/avance-rapido.md +64 -0
- package/scripts/.claude/commands/especdev/cambios.md +14 -0
- package/scripts/.claude/commands/especdev/cerrar-sesion.md +88 -0
- package/scripts/.claude/commands/especdev/clarificar.md +98 -0
- package/scripts/.claude/commands/especdev/comenzar.md +77 -0
- package/scripts/.claude/commands/especdev/completo.md +49 -0
- package/scripts/.claude/commands/especdev/continuar.md +59 -0
- package/scripts/.claude/commands/especdev/contrato-api.md +223 -0
- package/scripts/.claude/commands/especdev/contrato-ui.md +245 -0
- package/scripts/.claude/commands/especdev/desglosar.md +172 -0
- package/scripts/.claude/commands/especdev/destilar.md +211 -0
- package/scripts/.claude/commands/especdev/detectar-ambiguedad.md +81 -0
- package/scripts/.claude/commands/especdev/diagnostico.md +92 -0
- package/scripts/.claude/commands/especdev/dise/303/261ar.md +74 -0
- package/scripts/.claude/commands/especdev/donde-estoy.md +32 -0
- package/scripts/.claude/commands/especdev/especificar.md +189 -0
- package/scripts/.claude/commands/especdev/estado.md +46 -0
- package/scripts/.claude/commands/especdev/estimar.md +141 -0
- package/scripts/.claude/commands/especdev/explorar.md +175 -0
- package/scripts/.claude/commands/especdev/guardian.md +99 -0
- package/scripts/.claude/commands/especdev/historial.md +14 -0
- package/scripts/.claude/commands/especdev/implementar.md +227 -0
- package/scripts/.claude/commands/especdev/incorporar.md +71 -0
- package/scripts/.claude/commands/especdev/iniciar.md +82 -0
- package/scripts/.claude/commands/especdev/limpiar-slop.md +88 -0
- package/scripts/.claude/commands/especdev/memorizar.md +31 -0
- package/scripts/.claude/commands/especdev/mesa-redonda.md +60 -0
- package/scripts/.claude/commands/especdev/mesa-tecnica.md +144 -0
- package/scripts/.claude/commands/especdev/migrar.md +237 -0
- package/scripts/.claude/commands/especdev/minar-referencias.md +214 -0
- package/scripts/.claude/commands/especdev/planificar-tecnico.md +186 -0
- package/scripts/.claude/commands/especdev/planning.md +264 -0
- package/scripts/.claude/commands/especdev/poc.md +302 -0
- package/scripts/.claude/commands/especdev/proponer.md +69 -0
- package/scripts/.claude/commands/especdev/rapido.md +69 -0
- package/scripts/.claude/commands/especdev/reflexionar.md +53 -0
- package/scripts/.claude/commands/especdev/retro.md +14 -0
- package/scripts/.claude/commands/especdev/reversa.md +155 -0
- package/scripts/.claude/commands/especdev/revisar.md +221 -0
- package/scripts/.claude/commands/especdev/traspasar.md +76 -0
- package/scripts/.claude/commands/especdev/traspaso.md +43 -0
- package/scripts/.claude/commands/especdev/validar.md +40 -0
- package/scripts/.claude/commands/historias-generar.md +74 -0
- package/scripts/.claude/commands/razonar/5-porques.md +42 -0
- package/scripts/.claude/commands/razonar/circulo-competencia.md +22 -0
- package/scripts/.claude/commands/razonar/costo-oportunidad.md +21 -0
- package/scripts/.claude/commands/razonar/inversion.md +40 -0
- package/scripts/.claude/commands/razonar/mapa-territorio.md +22 -0
- package/scripts/.claude/commands/razonar/minimizar-arrepentimiento.md +20 -0
- package/scripts/.claude/commands/razonar/pareto.md +32 -0
- package/scripts/.claude/commands/razonar/pre-mortem.md +22 -0
- package/scripts/.claude/commands/razonar/primeros-principios.md +57 -0
- package/scripts/.claude/commands/razonar/probabilistico.md +21 -0
- package/scripts/.claude/commands/razonar/reversibilidad.md +27 -0
- package/scripts/.claude/commands/razonar/rlm-cadena-pensamiento.md +189 -0
- package/scripts/.claude/commands/razonar/rlm-descomposicion.md +216 -0
- package/scripts/.claude/commands/razonar/rlm-verificacion.md +169 -0
- package/scripts/.claude/commands/razonar/segundo-orden.md +35 -0
- package/scripts/.claude/don-cheli/AGENTS.md +20 -0
- package/scripts/.claude/don-cheli/CLAUDE.md +114 -0
- package/scripts/.claude/don-cheli/NOTICE +17 -0
- package/scripts/.claude/don-cheli/VERSION +1 -0
- package/scripts/.claude/don-cheli/agentes/README.md +28 -0
- package/scripts/.claude/don-cheli/agentes/prompts/estimador.md +29 -0
- package/scripts/.claude/don-cheli/folder-map.json +19 -0
- package/scripts/.claude/don-cheli/ganchos/parar.md +10 -0
- package/scripts/.claude/don-cheli/ganchos/post-herramienta.md +9 -0
- package/scripts/.claude/don-cheli/ganchos/pre-herramienta.md +19 -0
- package/scripts/.claude/don-cheli/habilidades/arnes-agente/HABILIDAD.md +155 -0
- package/scripts/.claude/don-cheli/habilidades/auto-correccion/HABILIDAD.md +105 -0
- package/scripts/.claude/don-cheli/habilidades/brainstorming/HABILIDAD.md +79 -0
- package/scripts/.claude/don-cheli/habilidades/cambio-carpeta/HABILIDAD.md +91 -0
- package/scripts/.claude/don-cheli/habilidades/code-rag/HABILIDAD.md +297 -0
- package/scripts/.claude/don-cheli/habilidades/contabilidad-tokens/HABILIDAD.md +100 -0
- package/scripts/.claude/don-cheli/habilidades/delta-specs/HABILIDAD.md +93 -0
- package/scripts/.claude/don-cheli/habilidades/desarrollo-subagentes/HABILIDAD.md +42 -0
- package/scripts/.claude/don-cheli/habilidades/deteccion-loops/HABILIDAD.md +159 -0
- package/scripts/.claude/don-cheli/habilidades/deteccion-stubs/HABILIDAD.md +195 -0
- package/scripts/.claude/don-cheli/habilidades/devlog/HABILIDAD.md +75 -0
- package/scripts/.claude/don-cheli/habilidades/documentacion-viva/HABILIDAD.md +222 -0
- package/scripts/.claude/don-cheli/habilidades/estimacion/HABILIDAD.md +39 -0
- package/scripts/.claude/don-cheli/habilidades/extensiones-presets/HABILIDAD.md +124 -0
- package/scripts/.claude/don-cheli/habilidades/generador-specs/HABILIDAD.md +28 -0
- package/scripts/.claude/don-cheli/habilidades/ingenieria-contexto/HABILIDAD.md +25 -0
- package/scripts/.claude/don-cheli/habilidades/integracion-mcp/HABILIDAD.md +50 -0
- package/scripts/.claude/don-cheli/habilidades/leyes-hierro/HABILIDAD.md +36 -0
- package/scripts/.claude/don-cheli/habilidades/mapa-arquitectonico/HABILIDAD.md +84 -0
- package/scripts/.claude/don-cheli/habilidades/memoria-persistente/HABILIDAD.md +88 -0
- package/scripts/.claude/don-cheli/habilidades/obsidian/HABILIDAD.md +84 -0
- package/scripts/.claude/don-cheli/habilidades/optimizacion-tokens/HABILIDAD.md +170 -0
- package/scripts/.claude/don-cheli/habilidades/optimizador-contexto/HABILIDAD.md +97 -0
- package/scripts/.claude/don-cheli/habilidades/orquestacion-autonoma/HABILIDAD.md +124 -0
- package/scripts/.claude/don-cheli/habilidades/permisos-seguridad/HABILIDAD.md +67 -0
- package/scripts/.claude/don-cheli/habilidades/persona/HABILIDAD.md +57 -0
- package/scripts/.claude/don-cheli/habilidades/presentaciones/HABILIDAD.md +54 -0
- package/scripts/.claude/don-cheli/habilidades/prueba-trabajo/HABILIDAD.md +122 -0
- package/scripts/.claude/don-cheli/habilidades/razonamiento/HABILIDAD.md +60 -0
- package/scripts/.claude/don-cheli/habilidades/recuperacion-sesion/HABILIDAD.md +18 -0
- package/scripts/.claude/don-cheli/habilidades/refactorizacion-solid/HABILIDAD.md +173 -0
- package/scripts/.claude/don-cheli/habilidades/reflexion/HABILIDAD.md +15 -0
- package/scripts/.claude/don-cheli/habilidades/rigor-progresivo/HABILIDAD.md +100 -0
- package/scripts/.claude/don-cheli/habilidades/rlm/HABILIDAD.md +76 -0
- package/scripts/.claude/don-cheli/habilidades/schemas-dbml/HABILIDAD.md +92 -0
- package/scripts/.claude/don-cheli/habilidades/trazabilidad/HABILIDAD.md +54 -0
- package/scripts/.claude/don-cheli/habilidades/ui-ux-design/HABILIDAD.md +67 -0
- package/scripts/.claude/don-cheli/habilidades/validacion-nyquist/HABILIDAD.md +152 -0
- package/scripts/.claude/don-cheli/habilidades/worktrees/HABILIDAD.md +71 -0
- package/scripts/.claude/don-cheli/locale +1 -0
- package/scripts/.claude/don-cheli/locales/en.json +179 -0
- package/scripts/.claude/don-cheli/locales/es.json +179 -0
- package/scripts/.claude/don-cheli/locales/pt.json +179 -0
- package/scripts/.claude/don-cheli/plantillas/checklist-requisitos.md +31 -0
- package/scripts/.claude/don-cheli/plantillas/docker/Dockerfile +16 -0
- package/scripts/.claude/don-cheli/plantillas/docker/docker-compose.yml +28 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/WORKFLOW.md +118 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/config.yaml +27 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/en/config.yaml +27 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/en/findings.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/en/plan.md +35 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/en/progress.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/en/status.md +16 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/es/config.yaml +27 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/es/estado.md +16 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/es/hallazgos.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/es/plan.md +35 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/es/progreso.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/estado.md +16 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/hallazgos.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/isa.yml +152 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/plan.md +35 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/progreso.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/pt/config.yaml +27 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/pt/descobertas.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/pt/estado.md +16 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/pt/plano.md +35 -0
- package/scripts/.claude/don-cheli/plantillas/especdev/pt/progresso.md +7 -0
- package/scripts/.claude/don-cheli/plantillas/estimado-desarrollo.md +43 -0
- package/scripts/.claude/don-cheli/prompt.md +16 -0
- package/scripts/.claude/don-cheli/reglas/constitucion.md +122 -0
- package/scripts/.claude/don-cheli/reglas/hooks-parar.md +102 -0
- package/scripts/.claude/don-cheli/reglas/i18n.md +47 -0
- package/scripts/.claude/don-cheli/reglas/leyes-hierro.md +18 -0
- package/scripts/.claude/don-cheli/reglas/puertas-calidad.md +87 -0
- package/scripts/.claude/don-cheli/reglas/reglas-desviacion.md +36 -0
- package/scripts/.claude/don-cheli/reglas/reglas-trabajo-globales.md +171 -0
- package/scripts/.claude/don-cheli/scripts/bucle.sh +103 -0
- package/scripts/.claude/don-cheli/scripts/instalar.sh +522 -0
- package/scripts/.claude/don-cheli/scripts/validar.sh +70 -0
- package/scripts/bucle.sh +103 -0
- package/scripts/instalar.sh +587 -0
- package/scripts/validar.sh +70 -0
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Bloquear estándares visuales antes de codear frontend (UI Design Contract)
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:contrato-ui
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Definir y bloquear los estándares visuales de una feature frontend **antes** de escribir código. Previene el problema más común del desarrollo frontend con IA: inconsistencia visual entre componentes porque no hay un contrato de diseño.
|
|
11
|
+
|
|
12
|
+
> Adaptado de Get Shit Done (gsd-build/get-shit-done) — UI Design Contracts: "lock visual standards before coding to prevent visually inconsistent AI-generated components."
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:contrato-ui # Crear contrato para el proyecto
|
|
18
|
+
/especdev:contrato-ui @specs/features/ui/ # Crear para un módulo específico
|
|
19
|
+
/especdev:contrato-ui --desde @figma-export # Derivar de un export de Figma
|
|
20
|
+
/especdev:contrato-ui --extender # Extender contrato existente
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Por Qué Existe
|
|
24
|
+
|
|
25
|
+
| Sin Contrato UI | Con Contrato UI |
|
|
26
|
+
|-----------------|-----------------|
|
|
27
|
+
| Componente A usa `padding: 16px`, B usa `padding: 1rem`, C usa `padding: 20px` | Todos usan `--spacing-md: 1rem` |
|
|
28
|
+
| Cada componente elige sus propios colores | Paleta definida, tokens de diseño |
|
|
29
|
+
| Tipografía inconsistente entre páginas | Escala tipográfica fija |
|
|
30
|
+
| Copywriting variable ("Click here" vs "Continuar" vs "Submit") | Voz y tono definidos |
|
|
31
|
+
| IA genera componentes "bonitos" pero incompatibles entre sí | Todos los componentes siguen el mismo contrato |
|
|
32
|
+
|
|
33
|
+
## Comportamiento
|
|
34
|
+
|
|
35
|
+
### Paso 1: Detectar Stack Frontend
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Detectando stack frontend...
|
|
39
|
+
├── Framework: React 19 / Next.js 15
|
|
40
|
+
├── Estilos: TailwindCSS 4.x
|
|
41
|
+
├── Componentes: shadcn/ui
|
|
42
|
+
├── Iconos: Lucide Icons
|
|
43
|
+
└── Design system existente: No detectado
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Paso 2: Definir Contrato
|
|
47
|
+
|
|
48
|
+
El contrato cubre 6 dimensiones:
|
|
49
|
+
|
|
50
|
+
#### 1. Espaciado (Spacing)
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
spacing:
|
|
54
|
+
base: 4px # Unidad mínima
|
|
55
|
+
scale:
|
|
56
|
+
xs: 4px # 1 unidad
|
|
57
|
+
sm: 8px # 2 unidades
|
|
58
|
+
md: 16px # 4 unidades (default)
|
|
59
|
+
lg: 24px # 6 unidades
|
|
60
|
+
xl: 32px # 8 unidades
|
|
61
|
+
2xl: 48px # 12 unidades
|
|
62
|
+
regla: "Todo espaciado DEBE ser múltiplo de 4px"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
#### 2. Tipografía (Typography)
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
typography:
|
|
69
|
+
familia:
|
|
70
|
+
primaria: "Inter, system-ui, sans-serif"
|
|
71
|
+
monospace: "JetBrains Mono, monospace"
|
|
72
|
+
escala:
|
|
73
|
+
xs: "0.75rem / 1rem" # 12px, captions
|
|
74
|
+
sm: "0.875rem / 1.25rem" # 14px, labels
|
|
75
|
+
base: "1rem / 1.5rem" # 16px, body
|
|
76
|
+
lg: "1.125rem / 1.75rem" # 18px, lead
|
|
77
|
+
xl: "1.25rem / 1.75rem" # 20px, h4
|
|
78
|
+
2xl: "1.5rem / 2rem" # 24px, h3
|
|
79
|
+
3xl: "1.875rem / 2.25rem" # 30px, h2
|
|
80
|
+
4xl: "2.25rem / 2.5rem" # 36px, h1
|
|
81
|
+
peso:
|
|
82
|
+
normal: 400
|
|
83
|
+
medium: 500
|
|
84
|
+
semibold: 600
|
|
85
|
+
bold: 700
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
#### 3. Color (Palette)
|
|
89
|
+
|
|
90
|
+
```yaml
|
|
91
|
+
color:
|
|
92
|
+
brand:
|
|
93
|
+
primary: "#2563EB" # Acciones principales
|
|
94
|
+
primary-hover: "#1D4ED8"
|
|
95
|
+
secondary: "#64748B" # Acciones secundarias
|
|
96
|
+
semantic:
|
|
97
|
+
success: "#16A34A"
|
|
98
|
+
warning: "#D97706"
|
|
99
|
+
error: "#DC2626"
|
|
100
|
+
info: "#2563EB"
|
|
101
|
+
neutral:
|
|
102
|
+
background: "#FFFFFF"
|
|
103
|
+
surface: "#F8FAFC"
|
|
104
|
+
border: "#E2E8F0"
|
|
105
|
+
text-primary: "#0F172A"
|
|
106
|
+
text-secondary: "#64748B"
|
|
107
|
+
text-muted: "#94A3B8"
|
|
108
|
+
modo_oscuro: true # Si aplica, definir variantes
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### 4. Componentes (Patterns)
|
|
112
|
+
|
|
113
|
+
```yaml
|
|
114
|
+
componentes:
|
|
115
|
+
botones:
|
|
116
|
+
primario: "bg-primary text-white rounded-md px-4 py-2 font-medium"
|
|
117
|
+
secundario: "bg-white border border-border text-secondary rounded-md px-4 py-2"
|
|
118
|
+
destructivo: "bg-error text-white rounded-md px-4 py-2"
|
|
119
|
+
fantasma: "text-secondary hover:bg-surface rounded-md px-4 py-2"
|
|
120
|
+
tamanos: [sm, md, lg]
|
|
121
|
+
inputs:
|
|
122
|
+
estilo: "border rounded-md px-3 py-2 focus:ring-2 focus:ring-primary"
|
|
123
|
+
error: "border-error focus:ring-error"
|
|
124
|
+
label: "text-sm font-medium text-text-primary mb-1"
|
|
125
|
+
cards:
|
|
126
|
+
estilo: "bg-white border rounded-lg p-6 shadow-sm"
|
|
127
|
+
modales:
|
|
128
|
+
overlay: "bg-black/50 backdrop-blur-sm"
|
|
129
|
+
contenido: "bg-white rounded-xl shadow-xl max-w-md mx-auto p-6"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
#### 5. Layout
|
|
133
|
+
|
|
134
|
+
```yaml
|
|
135
|
+
layout:
|
|
136
|
+
contenedor: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"
|
|
137
|
+
grid: "12 columnas"
|
|
138
|
+
breakpoints:
|
|
139
|
+
sm: "640px"
|
|
140
|
+
md: "768px"
|
|
141
|
+
lg: "1024px"
|
|
142
|
+
xl: "1280px"
|
|
143
|
+
sidebar: "w-64 fixed"
|
|
144
|
+
navbar: "h-16 fixed top-0"
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
#### 6. Voz y Tono (Copywriting)
|
|
148
|
+
|
|
149
|
+
```yaml
|
|
150
|
+
copywriting:
|
|
151
|
+
idioma_ui: "es" # Del config.yaml
|
|
152
|
+
voz: "Profesional pero cercano"
|
|
153
|
+
reglas:
|
|
154
|
+
- "Usar 'tú' (no 'usted') para el usuario"
|
|
155
|
+
- "Botones: verbos en infinitivo ('Crear', 'Guardar', 'Cancelar')"
|
|
156
|
+
- "Errores: explicar qué pasó Y qué hacer ('El email ya existe. Intenta con otro.')"
|
|
157
|
+
- "Éxito: confirmar la acción completada ('Usuario creado exitosamente')"
|
|
158
|
+
- "Vacíos: guiar al usuario ('Aún no tienes proyectos. Crea el primero.')"
|
|
159
|
+
prohibido:
|
|
160
|
+
- "Click here / Haga clic aquí"
|
|
161
|
+
- "Error genérico sin contexto"
|
|
162
|
+
- "Jerga técnica en mensajes al usuario"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Paso 3: Generar Artefacto
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
Contrato UI generado:
|
|
169
|
+
→ specs/ui/contrato-ui.yaml (contrato completo)
|
|
170
|
+
→ specs/ui/tokens.css (custom properties generadas)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Output
|
|
174
|
+
|
|
175
|
+
### Archivo de Contrato (`specs/ui/contrato-ui.yaml`)
|
|
176
|
+
|
|
177
|
+
YAML completo con las 6 dimensiones definidas arriba.
|
|
178
|
+
|
|
179
|
+
### Tokens CSS generados (`specs/ui/tokens.css`)
|
|
180
|
+
|
|
181
|
+
```css
|
|
182
|
+
:root {
|
|
183
|
+
/* Spacing */
|
|
184
|
+
--spacing-xs: 4px;
|
|
185
|
+
--spacing-sm: 8px;
|
|
186
|
+
--spacing-md: 16px;
|
|
187
|
+
--spacing-lg: 24px;
|
|
188
|
+
--spacing-xl: 32px;
|
|
189
|
+
|
|
190
|
+
/* Colors */
|
|
191
|
+
--color-primary: #2563EB;
|
|
192
|
+
--color-primary-hover: #1D4ED8;
|
|
193
|
+
--color-success: #16A34A;
|
|
194
|
+
--color-error: #DC2626;
|
|
195
|
+
--color-text-primary: #0F172A;
|
|
196
|
+
--color-text-secondary: #64748B;
|
|
197
|
+
--color-border: #E2E8F0;
|
|
198
|
+
--color-surface: #F8FAFC;
|
|
199
|
+
|
|
200
|
+
/* Typography */
|
|
201
|
+
--font-primary: 'Inter', system-ui, sans-serif;
|
|
202
|
+
--font-mono: 'JetBrains Mono', monospace;
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Integración con Pipeline
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
/especdev:contrato-ui → contrato-ui.yaml + tokens.css
|
|
210
|
+
→ /especdev:especificar → escenarios referencian tokens
|
|
211
|
+
→ /especdev:planificar-tecnico → plan incluye contrato como dependencia
|
|
212
|
+
→ /especdev:implementar → agente usa tokens, NO inventa estilos
|
|
213
|
+
→ /especdev:revisar → verifica cumplimiento del contrato
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Verificación de Cumplimiento
|
|
217
|
+
|
|
218
|
+
Durante `/especdev:revisar`, se verifica:
|
|
219
|
+
|
|
220
|
+
| Verificación | Criterio | Severidad |
|
|
221
|
+
|--------------|----------|-----------|
|
|
222
|
+
| Colores | Solo usa colores del contrato | ❌ Crítico |
|
|
223
|
+
| Espaciado | Múltiplos de la base (4px) | ⚠️ Alto |
|
|
224
|
+
| Tipografía | Solo usa escala definida | ⚠️ Alto |
|
|
225
|
+
| Copywriting | Sigue reglas de voz y tono | ℹ️ Info |
|
|
226
|
+
| Componentes | Usa patterns definidos | ⚠️ Alto |
|
|
227
|
+
| Responsive | Respeta breakpoints | ⚠️ Alto |
|
|
228
|
+
|
|
229
|
+
## Cuándo Usar
|
|
230
|
+
|
|
231
|
+
| Situación | Usar contrato |
|
|
232
|
+
|-----------|--------------|
|
|
233
|
+
| Feature con UI nueva | ✅ Sí |
|
|
234
|
+
| Modificación de UI existente | ✅ Sí (extender contrato existente) |
|
|
235
|
+
| API/backend sin UI | ❌ No |
|
|
236
|
+
| Fix de bug visual | ❌ No (contrato ya existe) |
|
|
237
|
+
| Prototipo/POC | ⚠️ Opcional (contrato mínimo) |
|
|
238
|
+
|
|
239
|
+
## Guardrails
|
|
240
|
+
|
|
241
|
+
- **Nunca** generar componentes frontend sin contrato UI vigente
|
|
242
|
+
- **Nunca** usar valores hardcoded de color/spacing en código (usar tokens)
|
|
243
|
+
- **Siempre** verificar cumplimiento del contrato en revisión
|
|
244
|
+
- **Siempre** extender (no reemplazar) el contrato cuando se agregan patrones
|
|
245
|
+
- **Siempre** generar tokens CSS/variables junto al contrato
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Dividir un blueprint técnico en tareas con TDD (RED→GREEN) y marcadores de paralelismo
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:desglosar
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Convertir un blueprint técnico en una lista de tareas ordenadas con enfoque TDD (RED → GREEN → REFACTOR), marcadores de paralelismo `[P]` y fases de ejecución estandarizadas.
|
|
11
|
+
|
|
12
|
+
> Alineado con spec-kit (github/spec-kit) — formato `[ID] [P?] [Story] Descripción` y 5 fases de ejecución
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:desglosar @specs/features/<dominio>/<Feature>.plan.md
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Formato de Tareas
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
[TID] [P?] [Historia] Descripción
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
| Campo | Significado | Ejemplo |
|
|
27
|
+
|-------|-------------|---------|
|
|
28
|
+
| `TID` | ID único de tarea | `T001` |
|
|
29
|
+
| `[P]` | Paralelizable (puede ejecutarse en paralelo con otras `[P]` de la misma fase) | `[P]` o vacío |
|
|
30
|
+
| `[Historia]` | Historia de usuario asociada | `[US1]` |
|
|
31
|
+
| Descripción | Qué hacer | Crear modelo de Usuario |
|
|
32
|
+
|
|
33
|
+
## Output
|
|
34
|
+
|
|
35
|
+
Genera `specs/features/<dominio>/<Feature>.tasks.md`:
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
# Tareas: CrearUsuario
|
|
39
|
+
|
|
40
|
+
**Feature:** usuario/CrearUsuario
|
|
41
|
+
**Plan:** specs/features/usuario/CrearUsuario.plan.md
|
|
42
|
+
**Creado:** 2026-03-21
|
|
43
|
+
|
|
44
|
+
## Formato: [TID] [P?] [Historia] Descripción
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Fase 1: Setup (Paralelizable)
|
|
49
|
+
|
|
50
|
+
Inicialización del entorno y estructura del proyecto.
|
|
51
|
+
|
|
52
|
+
- [T001] [P] Setup: Crear estructura de directorios del módulo usuario
|
|
53
|
+
- [T002] [P] Setup: Inicializar configuración de testing
|
|
54
|
+
- [T003] [P] Setup: Configurar Docker compose para tests
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Fase 2: Fundación (Secuencial después de Setup)
|
|
59
|
+
|
|
60
|
+
Infraestructura crítica que el resto del código necesita.
|
|
61
|
+
|
|
62
|
+
- [T004] [US1] RED: Escribir test para modelo Usuario
|
|
63
|
+
- [T005] [US1] GREEN: Implementar modelo Usuario con validaciones
|
|
64
|
+
- Archivos: `models/usuario.py`, `tests/unit/test_usuario.py`
|
|
65
|
+
|
|
66
|
+
- [T006] [US1] RED: Escribir test para UsuarioRepository (crear/buscar)
|
|
67
|
+
- [T007] [US1] GREEN: Implementar UsuarioRepository
|
|
68
|
+
- Archivos: `repositories/usuario_repo.py`, `tests/unit/test_usuario_repo.py`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Fase 3: Historias de Usuario (Por prioridad)
|
|
73
|
+
|
|
74
|
+
### P1: Camino Crítico
|
|
75
|
+
|
|
76
|
+
- [T008] [US1] RED: Test para registro exitoso (happy path)
|
|
77
|
+
- [T009] [US1] RED: Test para email duplicado (sad path)
|
|
78
|
+
- [T010] [US1] GREEN: Implementar UsuarioService.crear()
|
|
79
|
+
- Archivos: `services/usuario_service.py`, `tests/unit/test_usuario_service.py`
|
|
80
|
+
- [T011] [P] [US1] RED: Test de integración para POST /usuarios
|
|
81
|
+
- [T012] [P] [US1] RED: Test BDD desde escenarios Gherkin P1
|
|
82
|
+
- [T013] [US1] GREEN: Implementar UsuarioController
|
|
83
|
+
- Archivos: `controllers/usuario_controller.py`, `tests/integration/test_crear_usuario.py`
|
|
84
|
+
|
|
85
|
+
### P2: Importante
|
|
86
|
+
|
|
87
|
+
- [T014] [US2] RED: Test para campo obligatorio vacío
|
|
88
|
+
- [T015] [US2] RED: Test para contraseña débil
|
|
89
|
+
- [T016] [US2] GREEN: Implementar validaciones adicionales
|
|
90
|
+
- [T017] [P] [US2] RED: Test BDD desde escenarios Gherkin P2
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Fase 4: Polish (Paralelizable)
|
|
95
|
+
|
|
96
|
+
Refinamientos transversales.
|
|
97
|
+
|
|
98
|
+
- [T018] [P] Refactor: Extraer validaciones a módulo compartido (si aplica)
|
|
99
|
+
- [T019] [P] Docs: Actualizar API docs con nuevo endpoint
|
|
100
|
+
- [T020] [P] Lint: Ejecutar linter y corregir warnings
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Fase 5: Verificación Final
|
|
105
|
+
|
|
106
|
+
- [T021] Ejecutar suite completa de tests
|
|
107
|
+
- [T022] Verificar coverage ≥ 85% sobre código nuevo
|
|
108
|
+
- [T023] Verificar lint y type-check sin errores
|
|
109
|
+
- [T024] Verificar build exitoso
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Orden de Ejecución
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
Fase 1: T001 ║ T002 ║ T003 (paralelo)
|
|
117
|
+
↓
|
|
118
|
+
Fase 2: T004 → T005 → T006 → T007 (secuencial)
|
|
119
|
+
↓
|
|
120
|
+
Fase 3: T008 → T009 → T010 → T011 ║ T012 → T013 (mixto)
|
|
121
|
+
T014 → T015 → T016 → T017 (secuencial)
|
|
122
|
+
↓
|
|
123
|
+
Fase 4: T018 ║ T019 ║ T020 (paralelo)
|
|
124
|
+
↓
|
|
125
|
+
Fase 5: T021 → T022 → T023 → T024 (secuencial)
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Leyenda:** `→` secuencial | `║` paralelo
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Las 5 Fases de Ejecución
|
|
132
|
+
|
|
133
|
+
| Fase | Nombre | Tipo | Propósito |
|
|
134
|
+
|------|--------|------|-----------|
|
|
135
|
+
| 1 | **Setup** | Paralelo | Inicialización de entorno y estructura |
|
|
136
|
+
| 2 | **Fundación** | Secuencial | Modelos, repos, infraestructura base |
|
|
137
|
+
| 3 | **Historias de Usuario** | Por prioridad | Features P1 → P2 → P3+ con TDD |
|
|
138
|
+
| 4 | **Polish** | Paralelo | Refactoring, docs, limpieza |
|
|
139
|
+
| 5 | **Verificación Final** | Secuencial | Tests, coverage, lint, build |
|
|
140
|
+
|
|
141
|
+
## Reglas de Paralelismo
|
|
142
|
+
|
|
143
|
+
- Tareas marcadas con `[P]` pueden ejecutarse en paralelo con otras `[P]` **de la misma fase**
|
|
144
|
+
- Tareas sin `[P]` son secuenciales y dependen de la tarea anterior
|
|
145
|
+
- **Nunca** ejecutar tareas de fases diferentes en paralelo
|
|
146
|
+
- Las fases 1 y 4 son predominantemente paralelas
|
|
147
|
+
- Las fases 2 y 5 son predominantemente secuenciales
|
|
148
|
+
- La fase 3 es mixta: secuencial dentro de cada historia, potencialmente paralelo entre historias independientes
|
|
149
|
+
|
|
150
|
+
## Ciclo TDD por Tarea
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
RED: Escribir test que FALLA
|
|
154
|
+
→ Ejecutar: verificar que falla por la razón correcta
|
|
155
|
+
|
|
156
|
+
GREEN: Implementar el código MÍNIMO para que el test pase
|
|
157
|
+
→ Ejecutar: verificar que PASA
|
|
158
|
+
|
|
159
|
+
REFACTOR: Limpiar sin cambiar comportamiento (solo en Fase 4)
|
|
160
|
+
→ Ejecutar: verificar que sigue pasando
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Puerta de Calidad
|
|
164
|
+
|
|
165
|
+
Este comando implementa la **Puerta 5 (Preparación de Tareas)**:
|
|
166
|
+
|
|
167
|
+
- Todas las tareas tienen IDs únicos (`T###`)
|
|
168
|
+
- Todas las tareas de implementación tienen rutas exactas de archivos
|
|
169
|
+
- Tareas paralelizables marcadas con `[P]`
|
|
170
|
+
- Historias asociadas con `[US#]`
|
|
171
|
+
- Las 5 fases están presentes
|
|
172
|
+
- Orden de ejecución documentado
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Extraer especificaciones compactas desde código existente (Blueprint Distillation)
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:destilar
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Analizar un codebase existente y extraer un **blueprint compacto**: especificaciones, contratos, reglas de negocio y decisiones arquitectónicas implícitas en el código. Es ingeniería inversa de specs, no de arquitectura (para eso existe `/especdev:reversa`).
|
|
11
|
+
|
|
12
|
+
> Adaptado de DeepCode (HKUDS/DeepCode) — Blueprint Distillation: "comprimir código fuente para extraer especificaciones esenciales, filtrando ruido y preservando patrones críticos."
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:destilar # Destilar el proyecto actual
|
|
18
|
+
/especdev:destilar @ruta/al/modulo # Destilar un módulo específico
|
|
19
|
+
/especdev:destilar --formato gherkin # Output en formato Gherkin
|
|
20
|
+
/especdev:destilar --formato resumen # Output como resumen ejecutivo
|
|
21
|
+
/especdev:destilar --formato contratos # Solo interfaces y contratos
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Por Qué Existe
|
|
25
|
+
|
|
26
|
+
| Situación | Sin Destilar | Con Destilar |
|
|
27
|
+
|-----------|-------------|--------------|
|
|
28
|
+
| Proyecto heredado sin docs | Leer todo el código | Blueprint de 200 líneas |
|
|
29
|
+
| Migración a nueva versión | Riesgo de perder reglas implícitas | Spec explícita para validar |
|
|
30
|
+
| Onboarding de nuevo dev | Semanas entendiendo el código | Blueprint + mapa en 1 hora |
|
|
31
|
+
| Rewrite parcial | ¿Qué comportamiento preservar? | Contratos explícitos |
|
|
32
|
+
|
|
33
|
+
## Diferencia con `/especdev:reversa`
|
|
34
|
+
|
|
35
|
+
| Aspecto | `/especdev:reversa` | `/especdev:destilar` |
|
|
36
|
+
|---------|--------------------|--------------------|
|
|
37
|
+
| **Foco** | Arquitectura (componentes, conexiones) | Comportamiento (reglas, contratos) |
|
|
38
|
+
| **Output** | Mapa de componentes | Especificaciones compactas |
|
|
39
|
+
| **Pregunta** | "¿Cómo está construido?" | "¿Qué hace y por qué?" |
|
|
40
|
+
| **Formato** | Diagrama + tabla | Gherkin / contratos / resumen |
|
|
41
|
+
|
|
42
|
+
Se complementan: `reversa` te da el **mapa**, `destilar` te da las **reglas**.
|
|
43
|
+
|
|
44
|
+
## Comportamiento
|
|
45
|
+
|
|
46
|
+
### Paso 1: Análisis de Superficie
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Escaneando módulo src/services/payment/...
|
|
50
|
+
├── 8 archivos, 1,247 líneas de código
|
|
51
|
+
├── 23 funciones exportadas
|
|
52
|
+
├── 4 interfaces/tipos públicos
|
|
53
|
+
├── 12 tests encontrados
|
|
54
|
+
└── 3 dependencias externas (Stripe, Redis, Logger)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Paso 2: Extracción de Reglas de Negocio
|
|
58
|
+
|
|
59
|
+
El destilador busca reglas implícitas en:
|
|
60
|
+
|
|
61
|
+
| Fuente | Qué Extrae | Ejemplo |
|
|
62
|
+
|--------|-----------|---------|
|
|
63
|
+
| **Validaciones** | Reglas de dominio | "Monto mínimo: $1.00, máximo: $999,999" |
|
|
64
|
+
| **Condicionales** | Lógica de negocio | "Si el usuario es premium, no cobra comisión" |
|
|
65
|
+
| **Error handling** | Casos límite | "Reintentar 3 veces si Stripe devuelve 429" |
|
|
66
|
+
| **Tests** | Comportamiento esperado | "Webhook debe ser idempotente" |
|
|
67
|
+
| **Tipos/Interfaces** | Contratos | "PaymentIntent requiere: amount, currency, customerId" |
|
|
68
|
+
| **Comentarios** | Intención del dev original | "// HACK: Stripe no soporta ARS, convertir a USD" |
|
|
69
|
+
|
|
70
|
+
### Paso 3: Compresión
|
|
71
|
+
|
|
72
|
+
Eliminar ruido, preservar esencia:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Código original: 1,247 líneas
|
|
76
|
+
├── Boilerplate eliminado: 400 líneas (imports, exports, logging)
|
|
77
|
+
├── Implementación interna eliminada: 500 líneas
|
|
78
|
+
├── Duplicación eliminada: 100 líneas
|
|
79
|
+
└── Blueprint resultante: ~247 líneas (ratio 5:1)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Regla de compresión:** El blueprint debe ser ≤20% del código original.
|
|
83
|
+
|
|
84
|
+
### Paso 4: Formato de Output
|
|
85
|
+
|
|
86
|
+
#### Formato Gherkin (default)
|
|
87
|
+
|
|
88
|
+
```gherkin
|
|
89
|
+
Feature: Procesamiento de Pagos
|
|
90
|
+
El sistema procesa pagos a través de Stripe
|
|
91
|
+
con reintentos automáticos y manejo de moneda.
|
|
92
|
+
|
|
93
|
+
Reglas de Negocio:
|
|
94
|
+
- Monto mínimo: $1.00 USD
|
|
95
|
+
- Monto máximo: $999,999.00 USD
|
|
96
|
+
- Monedas soportadas: USD, EUR, BRL
|
|
97
|
+
- Usuarios premium: sin comisión de procesamiento
|
|
98
|
+
- Comisión estándar: 2.9% + $0.30
|
|
99
|
+
|
|
100
|
+
Escenario: Pago exitoso
|
|
101
|
+
Dado un usuario con customerId válido en Stripe
|
|
102
|
+
Y un monto de $50.00 USD
|
|
103
|
+
Cuando se procesa el pago
|
|
104
|
+
Entonces se crea un PaymentIntent en Stripe
|
|
105
|
+
Y se registra la transacción en la base de datos
|
|
106
|
+
Y se emite el evento "payment.completed"
|
|
107
|
+
|
|
108
|
+
Escenario: Reintento por rate limit
|
|
109
|
+
Dado que Stripe responde con HTTP 429
|
|
110
|
+
Cuando se procesa el pago
|
|
111
|
+
Entonces se reintenta hasta 3 veces con backoff exponencial
|
|
112
|
+
Y si todos fallan, se marca como "payment.failed"
|
|
113
|
+
Y se notifica al equipo de soporte
|
|
114
|
+
|
|
115
|
+
Escenario: Moneda no soportada
|
|
116
|
+
Dado un monto en ARS (peso argentino)
|
|
117
|
+
Cuando se procesa el pago
|
|
118
|
+
Entonces se convierte a USD usando el tipo de cambio del día
|
|
119
|
+
Y se procesa en USD
|
|
120
|
+
Y se registra el tipo de cambio usado
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
#### Formato Contratos
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
// Blueprint: Contratos del Módulo de Pagos
|
|
127
|
+
// Extraído de: src/services/payment/ (8 archivos, 1,247 LOC)
|
|
128
|
+
// Fecha: 2026-03-21
|
|
129
|
+
|
|
130
|
+
interface PaymentIntent {
|
|
131
|
+
amount: number; // centavos, min: 100, max: 99999900
|
|
132
|
+
currency: 'USD' | 'EUR' | 'BRL';
|
|
133
|
+
customerId: string; // Stripe customer ID
|
|
134
|
+
metadata?: Record<string, string>;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
interface PaymentResult {
|
|
138
|
+
id: string;
|
|
139
|
+
status: 'succeeded' | 'failed' | 'pending';
|
|
140
|
+
stripePaymentIntentId: string;
|
|
141
|
+
amount: number;
|
|
142
|
+
fee: number; // 0 para premium, 2.9% + 30 para estándar
|
|
143
|
+
createdAt: Date;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Contratos de servicio
|
|
147
|
+
type ProcessPayment = (intent: PaymentIntent) => Promise<PaymentResult>;
|
|
148
|
+
type RefundPayment = (paymentId: string, amount?: number) => Promise<RefundResult>;
|
|
149
|
+
type GetPaymentStatus = (paymentId: string) => Promise<PaymentResult>;
|
|
150
|
+
|
|
151
|
+
// Invariantes
|
|
152
|
+
// - ProcessPayment es idempotente (mismo intent = mismo resultado)
|
|
153
|
+
// - RefundPayment parcial: amount <= payment.amount
|
|
154
|
+
// - Retry policy: 3 intentos, backoff exponencial (1s, 2s, 4s)
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### Formato Resumen
|
|
158
|
+
|
|
159
|
+
```markdown
|
|
160
|
+
## Blueprint: Módulo de Pagos
|
|
161
|
+
|
|
162
|
+
### Responsabilidad
|
|
163
|
+
Procesar pagos a través de Stripe con reintentos y conversión de moneda.
|
|
164
|
+
|
|
165
|
+
### Reglas de Negocio
|
|
166
|
+
1. Montos: $1.00 - $999,999.00 USD
|
|
167
|
+
2. Monedas: USD, EUR, BRL (ARS se convierte a USD)
|
|
168
|
+
3. Comisión: 2.9% + $0.30 (premium: 0%)
|
|
169
|
+
4. Reintentos: 3x con backoff exponencial ante rate limit
|
|
170
|
+
5. Idempotencia: mismo PaymentIntent = mismo resultado
|
|
171
|
+
|
|
172
|
+
### Dependencias Externas
|
|
173
|
+
- Stripe API v3 (pagos, reembolsos)
|
|
174
|
+
- Redis (cache de tipos de cambio, idempotency keys)
|
|
175
|
+
|
|
176
|
+
### Riesgos Identificados
|
|
177
|
+
- Conversión ARS→USD usa hack manual (comentario en código)
|
|
178
|
+
- No hay circuit breaker para Stripe
|
|
179
|
+
- Tests no cubren reembolsos parciales
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Integración con Pipeline
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
/especdev:destilar → blueprint
|
|
186
|
+
→ /especdev:especificar → .feature (informada por blueprint)
|
|
187
|
+
→ /especdev:clarificar → validar contra blueprint
|
|
188
|
+
→ /especdev:planificar-tecnico → usar contratos como base
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
El blueprint alimenta el pipeline de specs, cerrando el ciclo:
|
|
192
|
+
**Código existente → Blueprint → Spec → Nuevo código validado**
|
|
193
|
+
|
|
194
|
+
## Almacenamiento
|
|
195
|
+
|
|
196
|
+
El blueprint se guarda en:
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
.especdev/blueprints/
|
|
200
|
+
├── payment.blueprint.md # Blueprint del módulo de pagos
|
|
201
|
+
├── auth.blueprint.md # Blueprint del módulo de auth
|
|
202
|
+
└── _index.md # Índice de blueprints
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Guardrails
|
|
206
|
+
|
|
207
|
+
- **Nunca** incluir credenciales o secretos en el blueprint
|
|
208
|
+
- **Nunca** exceder 20% del tamaño del código original
|
|
209
|
+
- **Siempre** indicar qué archivos se analizaron
|
|
210
|
+
- **Siempre** marcar los "hacks" o workarounds encontrados como riesgos
|
|
211
|
+
- **Siempre** distinguir entre reglas de negocio confirmadas (por tests) y supuestas (por código)
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detectar ambigüedades y contradicciones en specs de forma exhaustiva
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:detectar-ambiguedad
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Escanear specs en busca de ambigüedades, contradicciones, requisitos implícitos y campos faltantes. Va más allá de la clarificación básica — es un análisis exhaustivo de la calidad de la spec.
|
|
11
|
+
|
|
12
|
+
> Basado en la práctica de MELI: "La ambigüedad es el bottleneck #1 del AI coding."
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:detectar-ambiguedad @specs/features/<dominio>/<Feature>.feature
|
|
18
|
+
/especdev:detectar-ambiguedad --todos # Escanear todas las specs activas
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Qué Detecta
|
|
22
|
+
|
|
23
|
+
### 1. Ambigüedades Lingüísticas
|
|
24
|
+
- Pronombres sin referente claro ("esto se envía", "eso se valida")
|
|
25
|
+
- Cuantificadores vagos ("algunos", "varios", "muchos")
|
|
26
|
+
- Verbos pasivos sin sujeto ("será procesado", "se debe validar")
|
|
27
|
+
|
|
28
|
+
### 2. Contradicciones Internas
|
|
29
|
+
- Escenario A dice "email obligatorio", Escenario B no lo valida
|
|
30
|
+
- Plan dice "async", tasks dice "sync"
|
|
31
|
+
- Schema dice `NOT NULL`, spec no tiene escenario de validación
|
|
32
|
+
|
|
33
|
+
### 3. Requisitos Implícitos No Documentados
|
|
34
|
+
- "El usuario se registra" → ¿Qué pasa con confirmación por email?
|
|
35
|
+
- "Se guarda en BD" → ¿Qué campos son obligatorios?
|
|
36
|
+
- "Se envía notificación" → ¿A quién? ¿Cuándo? ¿Cómo?
|
|
37
|
+
|
|
38
|
+
### 4. Gaps de Cobertura
|
|
39
|
+
- Happy path sin sad path correspondiente
|
|
40
|
+
- Campos en DBML sin validación en Gherkin
|
|
41
|
+
- Endpoints sin manejo de errores
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
=== Análisis de Ambigüedad ===
|
|
47
|
+
|
|
48
|
+
Feature: GestionarPedidos.feature
|
|
49
|
+
Score de Claridad: 72/100
|
|
50
|
+
|
|
51
|
+
## 🔴 Contradicciones (3)
|
|
52
|
+
1. Línea 15: "el pedido se crea" vs Línea 42: "el pedido requiere aprobación"
|
|
53
|
+
→ ¿Se crea directo o necesita aprobación?
|
|
54
|
+
2. Línea 23: campo "estado" acepta "activo" vs DBML: enum no incluye "activo"
|
|
55
|
+
3. Escenario 3 y Escenario 7 usan distinto formato de fecha
|
|
56
|
+
|
|
57
|
+
## 🟡 Ambigüedades (5)
|
|
58
|
+
1. Línea 8: "se notifica al usuario" → ¿email? ¿push? ¿in-app?
|
|
59
|
+
2. Línea 31: "se valida el pago" → ¿qué proveedor? ¿qué criterios?
|
|
60
|
+
3. Línea 45: "datos del cliente" → ¿cuáles exactamente?
|
|
61
|
+
4. Línea 52: "en tiempo razonable" → ¿cuánto es razonable?
|
|
62
|
+
5. Línea 67: "se procesa" → ¿quién? ¿cuándo? ¿cómo?
|
|
63
|
+
|
|
64
|
+
## 🟢 Requisitos Implícitos Detectados (2)
|
|
65
|
+
1. No hay escenario para cancelar pedido después de pago
|
|
66
|
+
2. No hay manejo de timeout en validación de pago
|
|
67
|
+
|
|
68
|
+
## Recomendaciones
|
|
69
|
+
- Resolver contradicciones ANTES de avanzar a fase Plan
|
|
70
|
+
- Score mínimo recomendado: 85/100
|
|
71
|
+
- Score actual: 72/100 → NO AVANZAR
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Score de Claridad
|
|
75
|
+
|
|
76
|
+
| Rango | Clasificación | Acción |
|
|
77
|
+
|-------|--------------|--------|
|
|
78
|
+
| 90-100 | Cristalino | ✅ Avanzar |
|
|
79
|
+
| 80-89 | Claro | ✅ Avanzar con notas |
|
|
80
|
+
| 70-79 | Aceptable | ⚠️ Resolver ambigüedades primero |
|
|
81
|
+
| <70 | Ambiguo | ❌ NO avanzar, reescribir |
|