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,159 @@
|
|
|
1
|
+
# Habilidad: Detección de Loops en Auto-Corrección
|
|
2
|
+
|
|
3
|
+
**Versión:** 1.0.0
|
|
4
|
+
**Categoría:** Calidad
|
|
5
|
+
**Tipo:** Rígida
|
|
6
|
+
|
|
7
|
+
> Adaptado de DeepCode (HKUDS/DeepCode) — Loop Detection & Error Correction.
|
|
8
|
+
|
|
9
|
+
## Cómo Mejora el Framework
|
|
10
|
+
|
|
11
|
+
Don Cheli ya tiene auto-corrección (aprendizajes acumulados), pero carece de un **guard contra ciclos infinitos de fix**. Cuando el agente intenta corregir un error y la corrección genera otro error similar, puede entrar en un loop destructivo que consume tokens sin avanzar.
|
|
12
|
+
|
|
13
|
+
Esta habilidad detecta y rompe esos ciclos automáticamente.
|
|
14
|
+
|
|
15
|
+
## El Problema
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Intento 1: Fix A → genera Error B
|
|
19
|
+
Intento 2: Fix B → genera Error A (¡loop!)
|
|
20
|
+
Intento 3: Fix A → genera Error B
|
|
21
|
+
... (infinito, consumiendo tokens)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Mecanismo de Detección
|
|
25
|
+
|
|
26
|
+
### 1. Registro de Intentos
|
|
27
|
+
|
|
28
|
+
Cada corrección se registra con su firma:
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
[INTENTO] #N | Error: <firma> | Archivo: <ruta> | Fix: <descripción>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
La **firma del error** es un hash del tipo + mensaje + ubicación:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
firma = hash(tipo_error + mensaje_normalizado + archivo + línea)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. Detección de Patrones
|
|
41
|
+
|
|
42
|
+
El sistema detecta loops cuando:
|
|
43
|
+
|
|
44
|
+
| Patrón | Condición | Ejemplo |
|
|
45
|
+
|--------|-----------|---------|
|
|
46
|
+
| **Loop directo** | Misma firma aparece 2+ veces | Error A → Fix → Error A |
|
|
47
|
+
| **Loop ping-pong** | Dos firmas alternan | Error A → Error B → Error A |
|
|
48
|
+
| **Loop espiral** | 3+ firmas en ciclo | A → B → C → A |
|
|
49
|
+
| **Estancamiento** | 3+ intentos sin progreso medible | Fix no cambia resultado de tests |
|
|
50
|
+
|
|
51
|
+
### 3. Umbrales
|
|
52
|
+
|
|
53
|
+
| Umbral | Valor | Acción |
|
|
54
|
+
|--------|-------|--------|
|
|
55
|
+
| **Max intentos por error** | 3 | Escalar después del 3er intento |
|
|
56
|
+
| **Max intentos totales por tarea** | 8 | Stop-loss de la tarea |
|
|
57
|
+
| **Ventana de detección** | Últimos 10 intentos | Firmas se comparan en ventana deslizante |
|
|
58
|
+
| **Timeout por intento** | 60 segundos | Prevenir fixes que cuelgan |
|
|
59
|
+
|
|
60
|
+
## Flujo de Corrección con Guard
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
1. Detectar error
|
|
64
|
+
2. ¿Firma ya vista en ventana?
|
|
65
|
+
├── NO → Intentar fix, registrar intento
|
|
66
|
+
│ └── ¿Fix exitoso?
|
|
67
|
+
│ ├── SÍ → Limpiar registro, continuar
|
|
68
|
+
│ └── NO → Volver a paso 2
|
|
69
|
+
│
|
|
70
|
+
└── SÍ → ¿Cuántas veces?
|
|
71
|
+
├── 2 veces → Cambiar estrategia de fix
|
|
72
|
+
├── 3 veces → ⛔ PARAR, reportar al usuario
|
|
73
|
+
└── Escalar con contexto completo
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Estrategias de Escape
|
|
77
|
+
|
|
78
|
+
Cuando se detecta un loop, antes de escalar al usuario se intentan **estrategias alternativas** (en orden):
|
|
79
|
+
|
|
80
|
+
### Nivel 1: Cambiar Estrategia (automático)
|
|
81
|
+
```
|
|
82
|
+
1. Si el fix fue en el mismo archivo → intentar fix en archivo diferente
|
|
83
|
+
2. Si el fix fue sintáctico → intentar fix semántico
|
|
84
|
+
3. Si el fix fue local → intentar fix en dependencia
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Nivel 2: Ampliar Contexto (automático)
|
|
88
|
+
```
|
|
89
|
+
1. Leer archivos adyacentes (imports, dependencias)
|
|
90
|
+
2. Revisar tests para entender comportamiento esperado
|
|
91
|
+
3. Consultar historial git del archivo
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Nivel 3: Escalar al Usuario (manual)
|
|
95
|
+
```
|
|
96
|
+
⛔ LOOP DETECTADO
|
|
97
|
+
|
|
98
|
+
Error: TypeError: Cannot read property 'id' of undefined
|
|
99
|
+
Archivo: src/services/auth.ts:42
|
|
100
|
+
Intentos: 3
|
|
101
|
+
Estrategias probadas:
|
|
102
|
+
1. Agregar null check → generó error en caller
|
|
103
|
+
2. Inicializar objeto vacío → falló validación
|
|
104
|
+
3. Agregar default parameter → TypeScript error
|
|
105
|
+
|
|
106
|
+
Contexto del loop:
|
|
107
|
+
- El objeto `user` llega como undefined desde `getSession()`
|
|
108
|
+
- `getSession()` devuelve undefined cuando el token expira
|
|
109
|
+
- El fix necesita decisión de negocio: ¿redirigir al login o renovar token?
|
|
110
|
+
|
|
111
|
+
Opciones sugeridas:
|
|
112
|
+
A) Redirigir al login cuando el token expira
|
|
113
|
+
B) Implementar refresh token automático
|
|
114
|
+
C) Otro enfoque: [tu input]
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Integración con Auto-Corrección Existente
|
|
118
|
+
|
|
119
|
+
Esta habilidad **extiende** la auto-corrección existente, no la reemplaza:
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
Auto-Corrección (aprendizajes) Detección de Loops (guard)
|
|
123
|
+
├── Registra correcciones ├── Registra intentos de fix
|
|
124
|
+
├── Acumula reglas ├── Detecta ciclos
|
|
125
|
+
├── Previene errores futuros ├── Previene loops presentes
|
|
126
|
+
└── Propone al usuario └── Escala al usuario
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Registro en Memoria
|
|
130
|
+
|
|
131
|
+
Cuando un loop se resuelve, se registra en `.especdev/memoria/loops-resueltos.md`:
|
|
132
|
+
|
|
133
|
+
```markdown
|
|
134
|
+
## Loop Resuelto: 2026-03-21
|
|
135
|
+
|
|
136
|
+
- **Error:** TypeError en auth.ts:42
|
|
137
|
+
- **Causa raíz:** Token expirado no manejado
|
|
138
|
+
- **Intentos antes de resolución:** 3
|
|
139
|
+
- **Estrategia exitosa:** Nivel 3 (decisión del usuario: refresh token)
|
|
140
|
+
- **Regla aprendida:** Siempre manejar caso de token expirado en servicios auth
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Métricas
|
|
144
|
+
|
|
145
|
+
El sistema trackea:
|
|
146
|
+
|
|
147
|
+
| Métrica | Propósito |
|
|
148
|
+
|---------|-----------|
|
|
149
|
+
| Loops detectados por sesión | Medir frecuencia |
|
|
150
|
+
| Intentos promedio antes de detección | Medir eficiencia |
|
|
151
|
+
| Estrategia de escape más efectiva | Optimizar respuesta |
|
|
152
|
+
| Tokens ahorrados vs sin detección | Justificar la habilidad |
|
|
153
|
+
|
|
154
|
+
## Guardrails
|
|
155
|
+
|
|
156
|
+
- **Nunca** silenciar un loop — siempre informar
|
|
157
|
+
- **Nunca** superar el stop-loss (8 intentos) sin escalar
|
|
158
|
+
- **Siempre** registrar el loop resuelto para aprendizaje futuro
|
|
159
|
+
- **Siempre** proponer opciones al usuario, no decidir en loops de Nivel 3
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# Habilidad: Detección de Stubs (Código Placeholder)
|
|
2
|
+
|
|
3
|
+
**Versión:** 1.0.0
|
|
4
|
+
**Categoría:** Calidad
|
|
5
|
+
**Tipo:** Rígida
|
|
6
|
+
|
|
7
|
+
> Adaptado de Get Shit Done (gsd-build/get-shit-done) — Stub Detection Patterns.
|
|
8
|
+
|
|
9
|
+
## Cómo Mejora el Framework
|
|
10
|
+
|
|
11
|
+
Un problema frecuente del desarrollo asistido por IA: el agente genera código placeholder (stubs) y lo reporta como "implementado". Don Cheli tiene revisión de código, pero no un sistema específico para detectar stubs que pasan como código completo.
|
|
12
|
+
|
|
13
|
+
## El Problema
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Agente: "✅ Implementé el servicio de pagos"
|
|
17
|
+
Código real:
|
|
18
|
+
async processPayment(data) {
|
|
19
|
+
// TODO: implement payment processing
|
|
20
|
+
return { success: true };
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
El agente "completó" la tarea, pero el código es un stub.
|
|
25
|
+
|
|
26
|
+
## Patrones de Detección
|
|
27
|
+
|
|
28
|
+
### Indicadores Universales
|
|
29
|
+
|
|
30
|
+
| Patrón | Ejemplo | Severidad |
|
|
31
|
+
|--------|---------|-----------|
|
|
32
|
+
| **TODO/FIXME/HACK** | `// TODO: implement this` | ❌ Crítico |
|
|
33
|
+
| **Return vacío o hardcoded** | `return {};`, `return true;`, `return []` | ❌ Crítico |
|
|
34
|
+
| **Throw no implementado** | `throw new Error('Not implemented')` | ❌ Crítico |
|
|
35
|
+
| **Console.log como lógica** | `console.log('called')` sin más lógica | ⚠️ Alto |
|
|
36
|
+
| **Valores hardcoded** | `return 42;`, `return "test"` | ⚠️ Alto |
|
|
37
|
+
| **Lorem ipsum** | `"Lorem ipsum dolor sit amet"` | ⚠️ Alto |
|
|
38
|
+
| **Pass/noop** | `pass` (Python), `{}` (cuerpo vacío) | ⚠️ Alto |
|
|
39
|
+
| **Placeholder de config** | `"your-api-key-here"`, `"xxx"`, `"changeme"` | ❌ Crítico |
|
|
40
|
+
|
|
41
|
+
### Patrones por Tipo de Artefacto
|
|
42
|
+
|
|
43
|
+
#### React/Frontend
|
|
44
|
+
```
|
|
45
|
+
❌ Componente que solo renderiza <div>placeholder</div>
|
|
46
|
+
❌ Handler onClick vacío: onClick={() => {}}
|
|
47
|
+
❌ Estilos inline con valores mágicos sin design token
|
|
48
|
+
❌ Imágenes placeholder sin src real
|
|
49
|
+
⚠️ Componente sin props tipados (any)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
#### API/Backend
|
|
53
|
+
```
|
|
54
|
+
❌ Endpoint que retorna data mockeada/hardcoded
|
|
55
|
+
❌ Middleware que no hace nada (next() directo)
|
|
56
|
+
❌ Validación que acepta todo (return true)
|
|
57
|
+
❌ Error handler que traga excepciones silenciosamente
|
|
58
|
+
⚠️ Service con un solo método implementado de N declarados
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Base de Datos
|
|
62
|
+
```
|
|
63
|
+
❌ Migración vacía (up/down sin operaciones)
|
|
64
|
+
❌ Seed con datos obviamente falsos ("test@test.com", "John Doe")
|
|
65
|
+
❌ Query que retorna SELECT * sin filtro ni paginación
|
|
66
|
+
⚠️ Índices declarados pero sin justificación de uso
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### Tests
|
|
70
|
+
```
|
|
71
|
+
❌ Test que siempre pasa: expect(true).toBe(true)
|
|
72
|
+
❌ Test sin assertions
|
|
73
|
+
❌ Test que solo verifica que no lanza error (sin verificar output)
|
|
74
|
+
⚠️ Test con un solo caso (falta edge cases)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Verificación de Cableado (Wiring)
|
|
78
|
+
|
|
79
|
+
Detectar que los componentes están realmente conectados:
|
|
80
|
+
|
|
81
|
+
| Conexión | Verificación |
|
|
82
|
+
|----------|-------------|
|
|
83
|
+
| **Componente → API** | Componente hace fetch/call real, no datos hardcoded |
|
|
84
|
+
| **API → Base de Datos** | Endpoint ejecuta query real, no retorna mock |
|
|
85
|
+
| **Form → Handler** | Submit ejecuta lógica, no solo console.log |
|
|
86
|
+
| **Error → UI** | Errores se muestran al usuario, no solo se loggean |
|
|
87
|
+
|
|
88
|
+
## Cuándo Ejecutar
|
|
89
|
+
|
|
90
|
+
| Momento | Trigger |
|
|
91
|
+
|---------|---------|
|
|
92
|
+
| **Post-implementación** | Después de cada tarea GREEN en `/especdev:implementar` |
|
|
93
|
+
| **Pre-revisión** | Antes de `/especdev:revisar` |
|
|
94
|
+
| **Pre-merge** | Como parte de la Puerta 6 (Merge de Código) |
|
|
95
|
+
|
|
96
|
+
## Flujo de Detección
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
1. Escanear archivos modificados/creados
|
|
100
|
+
2. Aplicar patrones universales
|
|
101
|
+
3. Aplicar patrones por tipo de artefacto
|
|
102
|
+
4. Verificar cableado entre capas
|
|
103
|
+
5. Generar reporte
|
|
104
|
+
|
|
105
|
+
¿Stubs encontrados?
|
|
106
|
+
├── SÍ → ⛔ BLOQUEAR tarea como incompleta
|
|
107
|
+
│ └── Listar cada stub con ubicación y severidad
|
|
108
|
+
└── NO → ✅ Tarea genuinamente completa
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Reporte de Stubs
|
|
112
|
+
|
|
113
|
+
```markdown
|
|
114
|
+
## Detección de Stubs: CrearUsuario
|
|
115
|
+
|
|
116
|
+
Archivos escaneados: 8
|
|
117
|
+
Stubs detectados: 3
|
|
118
|
+
|
|
119
|
+
### ❌ Crítico
|
|
120
|
+
|
|
121
|
+
1. **src/services/email_service.py:15**
|
|
122
|
+
Patrón: Return hardcoded
|
|
123
|
+
```python
|
|
124
|
+
async def send_welcome_email(user):
|
|
125
|
+
return True # No envía email real
|
|
126
|
+
```
|
|
127
|
+
Acción: Implementar envío con servicio de email
|
|
128
|
+
|
|
129
|
+
2. **src/controllers/usuario_controller.py:42**
|
|
130
|
+
Patrón: TODO pendiente
|
|
131
|
+
```python
|
|
132
|
+
# TODO: add rate limiting
|
|
133
|
+
```
|
|
134
|
+
Acción: Implementar rate limiting o remover TODO si no aplica
|
|
135
|
+
|
|
136
|
+
### ⚠️ Alto
|
|
137
|
+
|
|
138
|
+
3. **tests/unit/test_email.py:8**
|
|
139
|
+
Patrón: Test sin assertion real
|
|
140
|
+
```python
|
|
141
|
+
def test_send_email():
|
|
142
|
+
result = send_welcome_email(mock_user)
|
|
143
|
+
assert result is not None # No verifica comportamiento
|
|
144
|
+
```
|
|
145
|
+
Acción: Verificar que el servicio de email fue llamado con los parámetros correctos
|
|
146
|
+
|
|
147
|
+
### Resultado: ❌ NO-AVANZAR (2 críticos, 1 alto)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Integración con Pipeline
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
/especdev:implementar (cada tarea GREEN)
|
|
154
|
+
→ [DETECCIÓN STUBS] ← automática
|
|
155
|
+
→ ¿Stubs encontrados?
|
|
156
|
+
├── SÍ → Tarea regresa a RED (implementar de verdad)
|
|
157
|
+
└── NO → Tarea completa, siguiente tarea
|
|
158
|
+
|
|
159
|
+
/especdev:revisar
|
|
160
|
+
→ [DETECCIÓN STUBS] ← segunda pasada
|
|
161
|
+
→ Reporte incluido en review
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Integración con Puertas de Calidad
|
|
165
|
+
|
|
166
|
+
Se integra como verificación en la **Puerta 6** (Merge de Código):
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
Puerta 6: Merge de Código
|
|
170
|
+
├── Tests verdes ✅
|
|
171
|
+
├── Lint limpio ✅
|
|
172
|
+
├── Type-check pasa ✅
|
|
173
|
+
├── Coverage ≥ 85% ✅
|
|
174
|
+
├── Sin diff no relacionado ✅
|
|
175
|
+
└── Sin stubs detectados ✅ ← NUEVA
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Excepciones
|
|
179
|
+
|
|
180
|
+
Hay casos legítimos donde un "stub" es intencional:
|
|
181
|
+
|
|
182
|
+
| Caso | Cómo marcar | Ejemplo |
|
|
183
|
+
|------|------------|---------|
|
|
184
|
+
| Feature flag deshabilitado | `// STUB:feature-flag:nombre-flag` | Funcionalidad para release futuro |
|
|
185
|
+
| Mock en test | No aplica (stubs en tests de mock son válidos) | `jest.fn()` |
|
|
186
|
+
| Interface/abstract | No aplica (declaraciones sin cuerpo son válidas) | `abstract class` |
|
|
187
|
+
|
|
188
|
+
Usar el comentario `// STUB:razón` para excluir de detección.
|
|
189
|
+
|
|
190
|
+
## Guardrails
|
|
191
|
+
|
|
192
|
+
- **Nunca** marcar una tarea como completa si tiene stubs críticos
|
|
193
|
+
- **Nunca** ignorar stubs silenciosamente — siempre reportar
|
|
194
|
+
- **Siempre** verificar cableado entre capas (no solo código individual)
|
|
195
|
+
- **Siempre** respetar excepciones marcadas con `// STUB:razón`
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Habilidad: DevLog — Bitácora de Desarrollo
|
|
2
|
+
|
|
3
|
+
**Versión:** 1.0.0
|
|
4
|
+
**Categoría:** Observabilidad
|
|
5
|
+
**Tipo:** Flexible
|
|
6
|
+
|
|
7
|
+
> Adaptado de DevilDev — DevLog para historial de desarrollo.
|
|
8
|
+
|
|
9
|
+
## Cómo Mejora el Framework
|
|
10
|
+
|
|
11
|
+
El DevLog es una bitácora cronológica de TODOS los cambios significativos del proyecto. Complementa la memoria persistente con un registro temporal ordenado.
|
|
12
|
+
|
|
13
|
+
## Diferencia con Memoria Persistente
|
|
14
|
+
|
|
15
|
+
| Memoria Persistente | DevLog |
|
|
16
|
+
|--------------------|--------|
|
|
17
|
+
| Decisiones y convenciones | Historial cronológico |
|
|
18
|
+
| "QUÉ decidimos" | "QUÉ pasó y CUÁNDO" |
|
|
19
|
+
| Se actualiza (sobrescribe) | Solo se agrega (append) |
|
|
20
|
+
| Para contexto | Para auditoría |
|
|
21
|
+
|
|
22
|
+
## Formato
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
# DevLog: mi-proyecto
|
|
26
|
+
|
|
27
|
+
## 2026-03-21
|
|
28
|
+
|
|
29
|
+
### 16:30 — Feature: OAuth Login (PROJ-42)
|
|
30
|
+
- **Tipo:** Feature
|
|
31
|
+
- **Archivos:** 8 modificados, +234 -45 líneas
|
|
32
|
+
- **Arquitectura:** Nuevo componente "OAuth Provider"
|
|
33
|
+
- **Spec:** auth-oauth.delta.md
|
|
34
|
+
- **Tests:** 12 nuevos (todos pasan)
|
|
35
|
+
- **Tokens:** 58,120 | Costo: $0.14
|
|
36
|
+
- **Notas:** Se eligió Strategy Pattern para extensibilidad
|
|
37
|
+
|
|
38
|
+
### 14:15 — Fix: Login timeout (PROJ-41)
|
|
39
|
+
- **Tipo:** Bugfix
|
|
40
|
+
- **Archivos:** 2 modificados, +8 -4 líneas
|
|
41
|
+
- **Tests:** 1 nuevo (regression test)
|
|
42
|
+
- **Tokens:** 12,500 | Costo: $0.03
|
|
43
|
+
- **Notas:** Timeout aumentado de 30s a 60s
|
|
44
|
+
|
|
45
|
+
## 2026-03-20
|
|
46
|
+
|
|
47
|
+
### 11:00 — Refactor: Separar servicio de email
|
|
48
|
+
- **Tipo:** Refactor
|
|
49
|
+
- **Archivos:** 5 modificados, +120 -180 líneas
|
|
50
|
+
- **Arquitectura:** Componente "Email Service" extraído de "API"
|
|
51
|
+
- **Tests:** Sin cambios (todos siguen pasando)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Auto-Registro
|
|
55
|
+
|
|
56
|
+
El DevLog se actualiza automáticamente cuando:
|
|
57
|
+
1. `/especdev:archivar` completa un cambio
|
|
58
|
+
2. `/especdev:aplicar` termina una implementación
|
|
59
|
+
3. Se crea un commit significativo
|
|
60
|
+
|
|
61
|
+
## Ubicación
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
.especdev/devlog/
|
|
65
|
+
├── 2026-03.md # Log del mes
|
|
66
|
+
├── 2026-02.md # Mes anterior
|
|
67
|
+
└── indice.md # Índice con conteos por mes
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Valor para el Equipo
|
|
71
|
+
|
|
72
|
+
- **Onboarding:** "¿Qué pasó este mes?" → DevLog
|
|
73
|
+
- **Retrospectivas:** Datos reales de qué se hizo
|
|
74
|
+
- **Debugging:** "¿Cuándo se cambió esto?" → Buscar en DevLog
|
|
75
|
+
- **Estimados:** Datos históricos de duración y costo por tipo de cambio
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# Habilidad: Documentación Técnica Viva
|
|
2
|
+
|
|
3
|
+
**Versión:** 1.0.0
|
|
4
|
+
**Categoría:** Documentación
|
|
5
|
+
**Tipo:** Flexible
|
|
6
|
+
|
|
7
|
+
## Cómo Mejora el Framework
|
|
8
|
+
|
|
9
|
+
Don Cheli tiene devlog (registro cronológico) y trazabilidad (pipeline de artefactos), pero carece de un sistema para generar y mantener documentación técnica **que evoluciona con el código**: ADRs, specs OpenAPI, y documentación de decisiones.
|
|
10
|
+
|
|
11
|
+
## Tipos de Documentación
|
|
12
|
+
|
|
13
|
+
### 1. ADRs — Architecture Decision Records
|
|
14
|
+
|
|
15
|
+
Documentan el **por qué** detrás de decisiones técnicas.
|
|
16
|
+
|
|
17
|
+
```markdown
|
|
18
|
+
# ADR-001: Usar PostgreSQL en vez de MongoDB
|
|
19
|
+
|
|
20
|
+
**Estado:** Aceptado
|
|
21
|
+
**Fecha:** 2026-03-21
|
|
22
|
+
**Contexto:** Necesitamos una base de datos para el sistema de pedidos.
|
|
23
|
+
**Decisión:** Usar PostgreSQL 16.
|
|
24
|
+
**Consecuencias:**
|
|
25
|
+
- (+) Transacciones ACID para pedidos
|
|
26
|
+
- (+) JSON support para datos semi-estructurados
|
|
27
|
+
- (-) Requiere schema upfront (menos flexible que Mongo)
|
|
28
|
+
- (-) Más configuración inicial
|
|
29
|
+
|
|
30
|
+
**Alternativas evaluadas:**
|
|
31
|
+
- MongoDB: descartada por falta de transacciones multi-documento nativas
|
|
32
|
+
- SQLite: descartada por límites de concurrencia (ver PoC poc/sqlite-mvp/)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Ubicación:** `.especdev/memoria/decisiones/ADR-###.md`
|
|
36
|
+
|
|
37
|
+
**Cuándo crear:**
|
|
38
|
+
- Elección de tecnología/librería
|
|
39
|
+
- Decisión arquitectónica (monolito vs micro, REST vs GraphQL)
|
|
40
|
+
- Trade-off significativo con alternativas válidas
|
|
41
|
+
- Checkpoint tipo `decisión` en `/especdev:implementar`
|
|
42
|
+
|
|
43
|
+
**Cuándo NO crear:**
|
|
44
|
+
- Decisiones obvias sin alternativas reales
|
|
45
|
+
- Elecciones de estilo/formato
|
|
46
|
+
- Configuraciones menores
|
|
47
|
+
|
|
48
|
+
### 2. Specs OpenAPI / Swagger
|
|
49
|
+
|
|
50
|
+
Generación automática de especificaciones de API desde los contratos del plan.
|
|
51
|
+
|
|
52
|
+
**Trigger:** Después de `/especdev:planificar-tecnico` si el plan incluye contratos API.
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# specs/api/openapi.yaml (auto-generado)
|
|
56
|
+
openapi: 3.1.0
|
|
57
|
+
info:
|
|
58
|
+
title: Mi Proyecto API
|
|
59
|
+
version: 1.0.0
|
|
60
|
+
|
|
61
|
+
paths:
|
|
62
|
+
/api/v1/usuarios:
|
|
63
|
+
post:
|
|
64
|
+
summary: Crear usuario
|
|
65
|
+
operationId: crearUsuario
|
|
66
|
+
requestBody:
|
|
67
|
+
required: true
|
|
68
|
+
content:
|
|
69
|
+
application/json:
|
|
70
|
+
schema:
|
|
71
|
+
$ref: '#/components/schemas/CrearUsuarioRequest'
|
|
72
|
+
responses:
|
|
73
|
+
'201':
|
|
74
|
+
description: Usuario creado
|
|
75
|
+
content:
|
|
76
|
+
application/json:
|
|
77
|
+
schema:
|
|
78
|
+
$ref: '#/components/schemas/UsuarioResponse'
|
|
79
|
+
'400':
|
|
80
|
+
description: Datos inválidos
|
|
81
|
+
'409':
|
|
82
|
+
description: Email duplicado
|
|
83
|
+
|
|
84
|
+
components:
|
|
85
|
+
schemas:
|
|
86
|
+
CrearUsuarioRequest:
|
|
87
|
+
type: object
|
|
88
|
+
required: [email, password, nombre]
|
|
89
|
+
properties:
|
|
90
|
+
email:
|
|
91
|
+
type: string
|
|
92
|
+
format: email
|
|
93
|
+
password:
|
|
94
|
+
type: string
|
|
95
|
+
minLength: 8
|
|
96
|
+
nombre:
|
|
97
|
+
type: string
|
|
98
|
+
maxLength: 100
|
|
99
|
+
UsuarioResponse:
|
|
100
|
+
type: object
|
|
101
|
+
properties:
|
|
102
|
+
id:
|
|
103
|
+
type: string
|
|
104
|
+
format: uuid
|
|
105
|
+
email:
|
|
106
|
+
type: string
|
|
107
|
+
nombre:
|
|
108
|
+
type: string
|
|
109
|
+
createdAt:
|
|
110
|
+
type: string
|
|
111
|
+
format: date-time
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Ubicación:** `specs/api/openapi.yaml`
|
|
115
|
+
|
|
116
|
+
**Auto-actualización:** Cuando `/especdev:planificar-tecnico` genera un nuevo contrato API, el OpenAPI spec se actualiza automáticamente.
|
|
117
|
+
|
|
118
|
+
### 3. Docstrings/JSDoc Significativos
|
|
119
|
+
|
|
120
|
+
Guía para generar comentarios que aportan valor (no ruido).
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
✅ Documentar:
|
|
124
|
+
- WHY (por qué existe esta función/clase)
|
|
125
|
+
- Parámetros con tipos y restricciones
|
|
126
|
+
- Excepciones que puede lanzar
|
|
127
|
+
- Efectos secundarios (escribe en BD, envía email)
|
|
128
|
+
- Invariantes y precondiciones
|
|
129
|
+
|
|
130
|
+
❌ NO documentar:
|
|
131
|
+
- WHAT (qué hace — si el nombre no lo dice, renombrar)
|
|
132
|
+
- Código obvio (// incrementar contador → i++)
|
|
133
|
+
- Getters/setters triviales
|
|
134
|
+
- Re-describir los tipos que ya son explícitos
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**Ejemplo bueno:**
|
|
138
|
+
```python
|
|
139
|
+
def process_refund(payment_id: str, amount: Decimal | None = None) -> RefundResult:
|
|
140
|
+
"""Procesa reembolso total o parcial via Stripe.
|
|
141
|
+
|
|
142
|
+
Si amount es None, reembolsa el total. Reembolsos parciales
|
|
143
|
+
acumulativos no pueden exceder el monto original.
|
|
144
|
+
|
|
145
|
+
Raises:
|
|
146
|
+
PaymentNotFoundError: payment_id no existe
|
|
147
|
+
RefundExceedsPaymentError: monto acumulado > original
|
|
148
|
+
StripeError: error de comunicación con Stripe (auto-retry 3x)
|
|
149
|
+
|
|
150
|
+
Side effects:
|
|
151
|
+
- Crea registro en tabla refunds
|
|
152
|
+
- Envía email de confirmación al usuario (async)
|
|
153
|
+
"""
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 4. Diagramas como Código
|
|
157
|
+
|
|
158
|
+
Usar Mermaid para diagramas que viven con el código:
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
## Flujo de Autenticación
|
|
162
|
+
|
|
163
|
+
```mermaid
|
|
164
|
+
sequenceDiagram
|
|
165
|
+
participant U as Usuario
|
|
166
|
+
participant A as API
|
|
167
|
+
participant S as AuthService
|
|
168
|
+
participant D as Database
|
|
169
|
+
|
|
170
|
+
U->>A: POST /login {email, password}
|
|
171
|
+
A->>S: authenticate(email, password)
|
|
172
|
+
S->>D: findByEmail(email)
|
|
173
|
+
D-->>S: User | null
|
|
174
|
+
alt Usuario existe
|
|
175
|
+
S->>S: verifyPassword(password, hash)
|
|
176
|
+
S-->>A: JWT token
|
|
177
|
+
A-->>U: 200 {token}
|
|
178
|
+
else No existe
|
|
179
|
+
S-->>A: throw UnauthorizedError
|
|
180
|
+
A-->>U: 401 {error}
|
|
181
|
+
end
|
|
182
|
+
```
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Ubicación:** Inline en specs, plans, o ADRs.
|
|
186
|
+
|
|
187
|
+
## Ciclo de Vida de la Documentación
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
Código cambia → ¿Docs afectadas?
|
|
191
|
+
├── API cambió → Actualizar OpenAPI
|
|
192
|
+
├── Decisión arquitectónica → Crear/actualizar ADR
|
|
193
|
+
├── Nuevo módulo → Actualizar mapa arquitectónico
|
|
194
|
+
├── Nuevo flujo → Agregar diagrama Mermaid
|
|
195
|
+
└── Solo lógica interna → No requiere docs
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Verificación de Frescura
|
|
199
|
+
|
|
200
|
+
| Documento | Frecuencia de verificación | Cómo verificar |
|
|
201
|
+
|-----------|---------------------------|----------------|
|
|
202
|
+
| OpenAPI | Cada PR con cambio de API | Diff entre spec y código |
|
|
203
|
+
| ADRs | Cada fase de Estrategia | ¿Decisiones siguen vigentes? |
|
|
204
|
+
| Diagramas | Cada cambio arquitectónico | ¿Flujo coincide con código? |
|
|
205
|
+
| README | Cada release | ¿Instrucciones funcionan? |
|
|
206
|
+
|
|
207
|
+
## Integración con Pipeline
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
/especdev:planificar-tecnico → genera OpenAPI si hay API
|
|
211
|
+
/especdev:implementar (checkpoint:decisión) → genera ADR
|
|
212
|
+
/especdev:revisar → verifica frescura de docs
|
|
213
|
+
/especdev:archivar → snapshot de docs con versión
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Guardrails
|
|
217
|
+
|
|
218
|
+
- **Nunca** duplicar información entre docs — referenciar con links
|
|
219
|
+
- **Nunca** documentar código obvio (renombrar en vez de comentar)
|
|
220
|
+
- **Siempre** crear ADR para decisiones con alternativas válidas
|
|
221
|
+
- **Siempre** actualizar OpenAPI cuando cambia un contrato de API
|
|
222
|
+
- **Máximo** ~200 líneas por documento (constitución Art. de concisión)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Habilidad: Estimación de Desarrollo
|
|
2
|
+
|
|
3
|
+
**Versión:** 1.0.0
|
|
4
|
+
**Categoría:** Planificación
|
|
5
|
+
**Tipo:** Flexible
|
|
6
|
+
|
|
7
|
+
## Propósito
|
|
8
|
+
|
|
9
|
+
Generar estimados de desarrollo profesionales usando múltiples modelos en paralelo.
|
|
10
|
+
|
|
11
|
+
## Modelos de Estimación
|
|
12
|
+
|
|
13
|
+
### 1. Puntos de Función
|
|
14
|
+
Evalúa complejidad funcional. Mejor para features nuevas.
|
|
15
|
+
|
|
16
|
+
### 2. Planning Poker IA
|
|
17
|
+
3 agentes independientes estiman la misma tarea. Fórmula PERT: `(O + 4M + P) / 6`
|
|
18
|
+
|
|
19
|
+
### 3. COCOMO Simplificado
|
|
20
|
+
Basado en LOC estimadas. Mejor para proyectos grandes.
|
|
21
|
+
|
|
22
|
+
### 4. Histórico
|
|
23
|
+
Compara con tareas similares completadas. Mejor para equipos maduros.
|
|
24
|
+
|
|
25
|
+
## Flujo
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
Input (PRD/Feature/Tarea)
|
|
29
|
+
│
|
|
30
|
+
├─ Desglosar en componentes
|
|
31
|
+
├─ Aplicar 4 modelos
|
|
32
|
+
├─ Calcular consenso
|
|
33
|
+
├─ Identificar riesgos
|
|
34
|
+
└─ Generar estimado-[fecha].md
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Template de Salida
|
|
38
|
+
|
|
39
|
+
Ver [`plantillas/estimado-desarrollo.md`](../../plantillas/estimado-desarrollo.md)
|