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,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Ritual de cierre de sesión con auditoría, calidad, aprendizajes y contexto para la próxima sesión
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:cerrar-sesion
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Ritual de fin de sesión que audita cambios, ejecuta checks de calidad, captura aprendizajes y produce un resumen para la próxima sesión. Evita el anti-patrón de cerrar el editor sin guardar contexto.
|
|
11
|
+
|
|
12
|
+
> Adaptado de `wrap-up` de Pro-Workflow (rohitg00/pro-workflow).
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:cerrar-sesion
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Checklist (obligatorio — no saltar pasos)
|
|
21
|
+
|
|
22
|
+
### 1. 📋 Auditoría de Cambios
|
|
23
|
+
- ¿Qué archivos se modificaron?
|
|
24
|
+
- ¿Hay cambios sin commit?
|
|
25
|
+
- ¿Quedaron TODOs en el código?
|
|
26
|
+
- ¿Hay archivos temporales que limpiar?
|
|
27
|
+
|
|
28
|
+
### 2. ✅ Check de Calidad
|
|
29
|
+
- Ejecutar lint
|
|
30
|
+
- Ejecutar typecheck
|
|
31
|
+
- Ejecutar tests
|
|
32
|
+
- ¿Todo pasa? ¿Hay warnings?
|
|
33
|
+
|
|
34
|
+
### 3. 🧠 Captura de Aprendizajes
|
|
35
|
+
- ¿Qué errores se cometieron?
|
|
36
|
+
- ¿Qué patrones funcionaron bien?
|
|
37
|
+
- Formatear como: `[APRENDER] Categoría: Regla`
|
|
38
|
+
|
|
39
|
+
### 4. 🔮 Contexto para Próxima Sesión
|
|
40
|
+
- ¿Cuál es la siguiente tarea lógica?
|
|
41
|
+
- ¿Hay bloqueantes?
|
|
42
|
+
- ¿Qué contexto preservar?
|
|
43
|
+
|
|
44
|
+
### 5. 📝 Resumen
|
|
45
|
+
- Un párrafo: qué se logró, estado actual, qué sigue
|
|
46
|
+
|
|
47
|
+
## Output
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
# Cierre de Sesión — 2026-03-21 16:45
|
|
51
|
+
|
|
52
|
+
## Auditoría
|
|
53
|
+
- Archivos modificados: 8
|
|
54
|
+
- Commits: 3
|
|
55
|
+
- Sin commit: 2 archivos (src/auth.ts, tests/auth.test.ts)
|
|
56
|
+
- TODOs encontrados: 1 (src/auth.ts:45 — "TODO: handle refresh token")
|
|
57
|
+
|
|
58
|
+
## Calidad
|
|
59
|
+
- Lint: ✅ sin errors | ⚠️ 2 warnings
|
|
60
|
+
- TypeCheck: ✅ pasa
|
|
61
|
+
- Tests: ✅ 47/47
|
|
62
|
+
- Coverage: 87%
|
|
63
|
+
|
|
64
|
+
## Aprendizajes
|
|
65
|
+
- [APRENDER] Testing: Siempre mockear el servicio de email en tests de auth
|
|
66
|
+
- [APRENDER] Git: Hacer commits más pequeños — 3 archivos max
|
|
67
|
+
|
|
68
|
+
## Próxima Sesión
|
|
69
|
+
- Tarea: Implementar refresh token (TODO en auth.ts:45)
|
|
70
|
+
- Bloqueante: Ninguno
|
|
71
|
+
- Contexto: Branch feature/oauth, PR #23 abierto
|
|
72
|
+
|
|
73
|
+
## Resumen
|
|
74
|
+
Se completó el login con Google OAuth: 3 endpoints nuevos, 12 tests,
|
|
75
|
+
integración con NextAuth v5. Falta el refresh token (TODO en auth.ts:45).
|
|
76
|
+
PR #23 listo para review excepto por el refresh token.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
🛑 ¿Cambios sin commit? Stash o commit antes de cerrar.
|
|
80
|
+
✅ ¿Listo para cerrar sesión?
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Si Tests Fallan
|
|
84
|
+
|
|
85
|
+
⚠️ **NO cerrar sesión con tests fallando.** Opciones:
|
|
86
|
+
1. Corregir antes de cerrar
|
|
87
|
+
2. Documentar el fallo en el handoff
|
|
88
|
+
3. Crear issue para el próximo que lo agarre
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detectar ambigüedades en una especificación, ejecutar Auto-QA y registrar respuestas
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:clarificar
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Analizar una especificación Gherkin actuando como **Ingeniero QA Estricto**: detectar ambigüedades, ejecutar verificaciones automáticas de consistencia Schema↔Spec, y registrar las respuestas en el archivo `.feature`.
|
|
11
|
+
|
|
12
|
+
> Mejorado con el protocolo Auto-QA de Specular (constitution.md §VIII)
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/especdev:clarificar @specs/features/<dominio>/<Feature>.feature
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Comportamiento
|
|
21
|
+
|
|
22
|
+
### Fase 1: Análisis de Ambigüedades (Original)
|
|
23
|
+
|
|
24
|
+
1. **Leer** el archivo `.feature`
|
|
25
|
+
2. **Analizar** cada escenario buscando:
|
|
26
|
+
- Términos ambiguos o no definidos
|
|
27
|
+
- Casos límite no cubiertos
|
|
28
|
+
- Validaciones implícitas
|
|
29
|
+
- Dependencias no mencionadas
|
|
30
|
+
3. **Formular** hasta 5 preguntas dirigidas
|
|
31
|
+
4. **Registrar** las respuestas en el archivo `.feature` como comentarios
|
|
32
|
+
|
|
33
|
+
### Fase 2: Verificación Auto-QA (De Specular)
|
|
34
|
+
|
|
35
|
+
Ejecutar automáticamente **SIN pedir instrucciones adicionales**:
|
|
36
|
+
|
|
37
|
+
#### 2.1 Verificación de Consistencia Schema-Spec (DBML)
|
|
38
|
+
|
|
39
|
+
- Escanear todos los campos mencionados en el Gherkin
|
|
40
|
+
- Comparar contra el schema DBML en `specs/db_schema/<dominio>.dbml`
|
|
41
|
+
- ❌ Error si nombres de campos no coinciden exactamente (ej: `user_id` vs `userId`)
|
|
42
|
+
- ❌ Error si un campo `NOT NULL` en DBML no tiene escenario de validación en Gherkin
|
|
43
|
+
|
|
44
|
+
#### 2.2 Verificación de Convención de Nombres
|
|
45
|
+
|
|
46
|
+
- **Feature COMMAND:** Usar patrón de precondición + postcondición
|
|
47
|
+
- **Feature QUERY:** Usar patrón de precondición + éxito
|
|
48
|
+
|
|
49
|
+
#### 2.3 Auditoría de Escenarios Auto-Generados
|
|
50
|
+
|
|
51
|
+
- Revisar escenarios tagueados `@auto_generado`
|
|
52
|
+
- Marcar los que sean redundantes o lógicamente imposibles
|
|
53
|
+
|
|
54
|
+
### Fase 3: Generar Checklist de Requisitos
|
|
55
|
+
|
|
56
|
+
Generar automáticamente `requisitos.md` con evidencia citada para cada item.
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
=== Reporte Auto-QA ===
|
|
62
|
+
|
|
63
|
+
Feature: CrearUsuario.feature
|
|
64
|
+
|
|
65
|
+
## Ambigüedades Detectadas: 3
|
|
66
|
+
1. ¿Qué longitud mínima/máxima debe tener la contraseña?
|
|
67
|
+
2. ¿Se permite registro con proveedores OAuth (Google, GitHub)?
|
|
68
|
+
3. ¿El email de bienvenida es síncrono o asíncrono?
|
|
69
|
+
|
|
70
|
+
## Verificación Schema-Spec
|
|
71
|
+
✅ PASS: Campo "email" coincide con usuario.dbml
|
|
72
|
+
✅ PASS: Campo "password_hash" tiene escenario de validación
|
|
73
|
+
❌ FAIL: Campo "nombre" en DBML es NOT NULL pero no tiene escenario de validación
|
|
74
|
+
|
|
75
|
+
## Verificación de Convenciones
|
|
76
|
+
✅ PASS: Feature COMMAND usa patrón precondición/postcondición
|
|
77
|
+
⚠️ WARNING: Escenario "Contraseña débil" no verifica postcondición
|
|
78
|
+
|
|
79
|
+
## Auditoría Auto-Generado
|
|
80
|
+
✅ PASS: Sin escenarios redundantes
|
|
81
|
+
|
|
82
|
+
## Resultado
|
|
83
|
+
NO-AVANZAR (1 FAIL)
|
|
84
|
+
→ Acción requerida: Agregar escenario de validación para campo "nombre"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Transición de Estado
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
@borrador → (clarificar pasa Auto-QA) → @lista
|
|
91
|
+
@borrador → (clarificar falla Auto-QA) → @borrador (corregir y re-clarificar)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Puerta de Calidad Asociada
|
|
95
|
+
|
|
96
|
+
Esta comando implementa la **Puerta 2+3** del pipeline:
|
|
97
|
+
- Puerta 2: El header contiene `@lista` (solo si pasa)
|
|
98
|
+
- Puerta 3: Reporte Auto-QA sin ❌ FALLA
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Iniciar tarea con nivel de complejidad auto-detectado (0-4)
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:comenzar
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Iniciar una tarea detectando automáticamente el nivel de complejidad (0-4) y ejecutando el flujo apropiado.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/especdev:comenzar <descripción de la tarea>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Auto-Detección de Nivel
|
|
19
|
+
|
|
20
|
+
Evaluar cada dimensión de 0 a 4:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Alcance: 0=1 archivo 1=2-3 archivos 2=módulo 3=multi-módulo 4=sistema
|
|
24
|
+
Incógnitas: 0=ninguna 1=menores 2=algunas 3=significativas 4=fundamentales
|
|
25
|
+
Riesgo: 0=trivial 1=bajo 2=medio 3=alto 4=crítico
|
|
26
|
+
Duración: 0=<30min 1=horas 2=días 3=1-2 semanas 4=semanas+
|
|
27
|
+
|
|
28
|
+
Nivel = max(puntuaciones) // Conservador: gana la dimensión más alta
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Niveles
|
|
32
|
+
|
|
33
|
+
| Nivel | Nombre | Proceso |
|
|
34
|
+
|-------|--------|---------|
|
|
35
|
+
| **0** | Atómico | Ejecutar directamente |
|
|
36
|
+
| **P** | PoC | Hipótesis → Construir → Evaluar → Veredicto |
|
|
37
|
+
| **1** | Micro | Planear → Ejecutar → Verificar |
|
|
38
|
+
| **2** | Estándar | 5 fases (sin Descubrimiento/Crecimiento) |
|
|
39
|
+
| **3** | Complejo | 7 fases completas |
|
|
40
|
+
| **4** | Producto | 7 fases + artefactos completos |
|
|
41
|
+
|
|
42
|
+
**Detección de PoC:** Si la tarea es una pregunta ("¿se puede...?", "¿funciona...?", "¿vale la pena...?") o incluye palabras como "probar", "viabilidad", "validar", "explorar opción" → sugerir `/especdev:poc`.
|
|
43
|
+
|
|
44
|
+
## Comportamiento
|
|
45
|
+
|
|
46
|
+
1. **Analizar** la descripción de la tarea
|
|
47
|
+
2. **Evaluar** las 4 dimensiones (alcance, incógnitas, riesgo, duración)
|
|
48
|
+
3. **Determinar** nivel de complejidad
|
|
49
|
+
4. **Mostrar** evaluación al usuario
|
|
50
|
+
5. **Preguntar** si está de acuerdo o desea ajustar
|
|
51
|
+
6. **Iniciar** flujo del nivel correspondiente
|
|
52
|
+
|
|
53
|
+
## Ejemplo
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
/especdev:comenzar Implementar autenticación JWT con refresh tokens
|
|
57
|
+
|
|
58
|
+
=== Evaluación de Complejidad ===
|
|
59
|
+
|
|
60
|
+
Tarea: Implementar autenticación JWT con refresh tokens
|
|
61
|
+
|
|
62
|
+
Alcance: 3 (multi-módulo: auth, middleware, database)
|
|
63
|
+
Incógnitas: 2 (algunas: estrategia de refresh)
|
|
64
|
+
Riesgo: 3 (alto: seguridad)
|
|
65
|
+
Duración: 2 (días)
|
|
66
|
+
|
|
67
|
+
→ Nivel detectado: 3 (Complejo)
|
|
68
|
+
→ Proceso: 7 fases completas
|
|
69
|
+
|
|
70
|
+
¿Proceder con Nivel 3? (s/n/ajustar)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Escalamiento y Des-escalamiento
|
|
74
|
+
|
|
75
|
+
- Si durante la ejecución se detecta mayor complejidad → escalar nivel
|
|
76
|
+
- Si la complejidad resulta menor → des-escalar nivel
|
|
77
|
+
- Regla de Desviación 4 → escalar al menos 1 nivel
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Modo completo para proyectos grandes y complejos (Nivel 3)
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:completo
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Iniciar modo completo (Nivel 3 - Complejo) para proyectos que requieren las 7 fases del ciclo de vida.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/especdev:completo <descripción del proyecto>
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Las 7 Fases
|
|
19
|
+
|
|
20
|
+
| Fase | Duración | Actividades |
|
|
21
|
+
|------|----------|-------------|
|
|
22
|
+
| 1. Descubrimiento | 1-2 días | Validar problema, investigar, descubrimientos |
|
|
23
|
+
| 2. Estrategia | 1 día | Hoja de ruta, hitos, decisiones |
|
|
24
|
+
| 3. Diseño | 2-3 días | Arquitectura, UX, especificaciones |
|
|
25
|
+
| 4. Desarrollo | Variable | TDD, implementación, iteración |
|
|
26
|
+
| 5. Calidad | 1-2 días | Testing, validación, rendimiento |
|
|
27
|
+
| 6. Lanzamiento | 1 día | Despliegue, documentación, release |
|
|
28
|
+
| 7. Crecimiento | Continuo | Monitoreo, feedback, iteración |
|
|
29
|
+
|
|
30
|
+
## Transiciones de Fase
|
|
31
|
+
|
|
32
|
+
Cada fase requiere criterios de Avance/No-Avance:
|
|
33
|
+
|
|
34
|
+
```markdown
|
|
35
|
+
## Fase [N] Completada
|
|
36
|
+
|
|
37
|
+
### Lista de Verificación Avance/No-Avance
|
|
38
|
+
- [ ] Todas las tareas de la fase completadas
|
|
39
|
+
- [ ] Entregables verificados
|
|
40
|
+
- [ ] Sin bloqueadores
|
|
41
|
+
- [ ] Listo para siguiente fase
|
|
42
|
+
|
|
43
|
+
**Decisión:** AVANZAR / NO-AVANZAR
|
|
44
|
+
**Motivo:** [por qué]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Des-escalamiento
|
|
48
|
+
|
|
49
|
+
Si después de la Estrategia el alcance es menor → des-escalar a `/especdev:rapido`
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Recuperar sesión previa y generar reporte de puesta al día
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:continuar
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Recuperar el contexto de una sesión previa y generar un reporte de puesta al día.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/especdev:continuar
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Comportamiento
|
|
19
|
+
|
|
20
|
+
1. **Detectar** directorio `.especdev/` existente
|
|
21
|
+
2. **Leer** archivos de contexto
|
|
22
|
+
3. **Generar** Reporte de Puesta al Día:
|
|
23
|
+
|
|
24
|
+
```markdown
|
|
25
|
+
## 🔄 Recuperación de Sesión
|
|
26
|
+
|
|
27
|
+
**Proyecto:** api-pagos
|
|
28
|
+
**Última Sesión:** 2026-03-21 15:30
|
|
29
|
+
|
|
30
|
+
**Estado Actual:**
|
|
31
|
+
- Fase: 3/7 (Diseño)
|
|
32
|
+
- Tarea: Diseñar esquema de base de datos
|
|
33
|
+
- Progreso: 40%
|
|
34
|
+
|
|
35
|
+
**Hallazgos Recientes:**
|
|
36
|
+
- JWT preferido sobre sesiones
|
|
37
|
+
- La API legacy tiene vulnerabilidades
|
|
38
|
+
|
|
39
|
+
**Próximos Pasos:**
|
|
40
|
+
1. Completar esquema de base de datos
|
|
41
|
+
2. Agregar reset de contraseña
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Test de 5 Preguntas
|
|
45
|
+
|
|
46
|
+
Para verificar que el contexto está completo:
|
|
47
|
+
|
|
48
|
+
| # | Pregunta | Fuente | Estado |
|
|
49
|
+
|---|----------|--------|--------|
|
|
50
|
+
| 1 | ¿Dónde estoy? | `estado.md` | Fase actual |
|
|
51
|
+
| 2 | ¿A dónde voy? | `plan.md` | Fases restantes |
|
|
52
|
+
| 3 | ¿Cuál es la meta? | `config.yaml` | Objetivo del proyecto |
|
|
53
|
+
| 4 | ¿Qué he aprendido? | `hallazgos.md` | Descubrimientos clave |
|
|
54
|
+
| 5 | ¿Qué he hecho? | `progreso.md` | Acciones recientes |
|
|
55
|
+
|
|
56
|
+
**Estado del Contexto:**
|
|
57
|
+
- ✅ Completo (5/5) → Listo para continuar
|
|
58
|
+
- ⚠️ Parcial (3-4/5) → Proceder con precaución
|
|
59
|
+
- ❌ Incompleto (0-2/5) → Ejecutar `/especdev:iniciar --reparar`
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Diseñar contratos de API, webhooks e integraciones con manejo de errores y reintentos
|
|
3
|
+
i18n: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# /especdev:contrato-api
|
|
7
|
+
|
|
8
|
+
## Objetivo
|
|
9
|
+
|
|
10
|
+
Diseñar contratos de API completos (REST o GraphQL), definir webhooks, planificar manejo de errores y reintentos para asegurar la resiliencia de integraciones con plataformas externas.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/especdev:contrato-api <descripción de la integración>
|
|
16
|
+
/especdev:contrato-api --tipo rest "Integración con Stripe para pagos"
|
|
17
|
+
/especdev:contrato-api --tipo graphql "API de catálogo de productos"
|
|
18
|
+
/especdev:contrato-api --tipo webhook "Recibir eventos de Shopify"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Diferencia con `/especdev:planificar-tecnico`
|
|
22
|
+
|
|
23
|
+
| Aspecto | `planificar-tecnico` | `contrato-api` |
|
|
24
|
+
|---------|---------------------|----------------|
|
|
25
|
+
| **Alcance** | Blueprint completo de una feature | Solo el contrato de API/integración |
|
|
26
|
+
| **Profundidad** | Contrato básico (request/response) | Contrato completo (errores, reintentos, webhooks, idempotencia) |
|
|
27
|
+
| **Cuándo** | Después de spec | Cuando la integración es el foco principal |
|
|
28
|
+
|
|
29
|
+
## Output para API REST
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
## Contrato API: Integración de Pagos con Stripe
|
|
33
|
+
|
|
34
|
+
### Endpoints
|
|
35
|
+
|
|
36
|
+
#### POST /api/v1/pagos
|
|
37
|
+
**Propósito:** Crear un cobro
|
|
38
|
+
**Auth:** Bearer token (JWT)
|
|
39
|
+
**Rate limit:** 100 req/min por usuario
|
|
40
|
+
**Idempotencia:** Sí (header `Idempotency-Key`)
|
|
41
|
+
|
|
42
|
+
**Request:**
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"monto": 5000, // centavos, min: 100, max: 99999900
|
|
46
|
+
"moneda": "USD", // ISO 4217
|
|
47
|
+
"cliente_id": "uuid",
|
|
48
|
+
"metodo_pago_id": "pm_xxx",
|
|
49
|
+
"descripcion": "Pedido #1234",
|
|
50
|
+
"metadata": {} // opcional, max 50 keys
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
**Responses:**
|
|
55
|
+
| Status | Significado | Body |
|
|
56
|
+
|--------|------------|------|
|
|
57
|
+
| 201 | Cobro creado | `{ id, status, monto, stripe_id, created_at }` |
|
|
58
|
+
| 400 | Datos inválidos | `{ error, field, message }` |
|
|
59
|
+
| 402 | Pago rechazado | `{ error, decline_code, message }` |
|
|
60
|
+
| 409 | Idempotency conflict | `{ error, original_id }` |
|
|
61
|
+
| 429 | Rate limit | `{ error, retry_after }` |
|
|
62
|
+
| 500 | Error interno | `{ error, request_id }` |
|
|
63
|
+
|
|
64
|
+
**Headers de respuesta:**
|
|
65
|
+
```
|
|
66
|
+
X-Request-Id: uuid // Para soporte/debugging
|
|
67
|
+
X-RateLimit-Remaining: 95
|
|
68
|
+
X-RateLimit-Reset: 1616544000
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Webhooks (recibir desde Stripe)
|
|
72
|
+
|
|
73
|
+
#### POST /api/v1/webhooks/stripe
|
|
74
|
+
**Verificación:** HMAC-SHA256 con `Stripe-Signature` header
|
|
75
|
+
**Tolerancia de timestamp:** 300 segundos (5 min)
|
|
76
|
+
**Respuesta esperada:** 200 OK (body vacío) en < 5s
|
|
77
|
+
|
|
78
|
+
**Eventos soportados:**
|
|
79
|
+
| Evento | Acción | Idempotente |
|
|
80
|
+
|--------|--------|-------------|
|
|
81
|
+
| `payment_intent.succeeded` | Marcar pedido como pagado | Sí |
|
|
82
|
+
| `payment_intent.payment_failed` | Notificar al usuario | Sí |
|
|
83
|
+
| `charge.refunded` | Procesar reembolso | Sí |
|
|
84
|
+
| `charge.dispute.created` | Alertar al equipo | Sí |
|
|
85
|
+
|
|
86
|
+
**Procesamiento:**
|
|
87
|
+
```
|
|
88
|
+
1. Verificar firma HMAC
|
|
89
|
+
2. Parsear evento
|
|
90
|
+
3. Verificar idempotencia (event.id en tabla processed_events)
|
|
91
|
+
4. Responder 200 INMEDIATAMENTE
|
|
92
|
+
5. Procesar en cola async (no bloquear respuesta)
|
|
93
|
+
6. Registrar en audit log
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Manejo de Errores
|
|
97
|
+
|
|
98
|
+
**Errores del cliente (4xx):**
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"error": {
|
|
102
|
+
"tipo": "validation_error",
|
|
103
|
+
"mensaje": "El monto debe ser mayor a $1.00",
|
|
104
|
+
"campo": "monto",
|
|
105
|
+
"codigo": "MONTO_INVALIDO"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
**Errores del servidor (5xx):**
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"error": {
|
|
114
|
+
"tipo": "internal_error",
|
|
115
|
+
"mensaje": "Error procesando el pago",
|
|
116
|
+
"request_id": "req_abc123"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Códigos de error consistentes:**
|
|
122
|
+
| Código | Significado | HTTP |
|
|
123
|
+
|--------|------------|------|
|
|
124
|
+
| `MONTO_INVALIDO` | Monto fuera de rango | 400 |
|
|
125
|
+
| `MONEDA_NO_SOPORTADA` | Moneda no en whitelist | 400 |
|
|
126
|
+
| `PAGO_RECHAZADO` | Tarjeta rechazada | 402 |
|
|
127
|
+
| `DUPLICADO` | Idempotency conflict | 409 |
|
|
128
|
+
| `RATE_LIMIT` | Demasiadas requests | 429 |
|
|
129
|
+
| `STRIPE_ERROR` | Error de comunicación con Stripe | 502 |
|
|
130
|
+
|
|
131
|
+
### Política de Reintentos
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Estrategia: Exponential backoff con jitter
|
|
135
|
+
|
|
136
|
+
Intento 1: inmediato
|
|
137
|
+
Intento 2: 1s + jitter (0-500ms)
|
|
138
|
+
Intento 3: 2s + jitter (0-1000ms)
|
|
139
|
+
Intento 4: 4s + jitter (0-2000ms)
|
|
140
|
+
Max intentos: 4
|
|
141
|
+
|
|
142
|
+
Reintentar en:
|
|
143
|
+
✅ 429 (rate limit) — respetar Retry-After header
|
|
144
|
+
✅ 500, 502, 503, 504 (errores transitorios)
|
|
145
|
+
❌ 400, 401, 402, 403, 404, 409 (errores definitivos)
|
|
146
|
+
|
|
147
|
+
Circuit breaker:
|
|
148
|
+
- Abrir después de 5 fallos consecutivos
|
|
149
|
+
- Half-open después de 30 segundos
|
|
150
|
+
- Cerrar después de 2 éxitos consecutivos
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Timeouts
|
|
154
|
+
|
|
155
|
+
| Operación | Timeout | Acción si timeout |
|
|
156
|
+
|-----------|---------|-------------------|
|
|
157
|
+
| Crear cobro | 10s | Reintentar (idempotente) |
|
|
158
|
+
| Verificar webhook | 2s | Rechazar (400) |
|
|
159
|
+
| Procesar evento async | 30s | Cola de dead-letter |
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Output para GraphQL
|
|
163
|
+
|
|
164
|
+
```markdown
|
|
165
|
+
### Schema GraphQL
|
|
166
|
+
|
|
167
|
+
```graphql
|
|
168
|
+
type Mutation {
|
|
169
|
+
crearPago(input: CrearPagoInput!): PagoResult!
|
|
170
|
+
reembolsar(pagoId: ID!, monto: Int): ReembolsoResult!
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
type Query {
|
|
174
|
+
pago(id: ID!): Pago
|
|
175
|
+
pagos(filtro: PagoFiltro, paginacion: Paginacion): PagoConnection!
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
input CrearPagoInput {
|
|
179
|
+
monto: Int! # centavos
|
|
180
|
+
moneda: Moneda!
|
|
181
|
+
clienteId: ID!
|
|
182
|
+
metodoPagoId: String!
|
|
183
|
+
descripcion: String
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
type PagoResult {
|
|
187
|
+
pago: Pago
|
|
188
|
+
error: APIError
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Almacenamiento
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
specs/api/
|
|
197
|
+
├── openapi.yaml # Spec completa (auto-generada)
|
|
198
|
+
├── contratos/
|
|
199
|
+
│ ├── pagos.contrato.md # Contrato de pagos
|
|
200
|
+
│ ├── webhooks.contrato.md
|
|
201
|
+
│ └── catalogo.contrato.md
|
|
202
|
+
└── postman/
|
|
203
|
+
└── coleccion.json # Colección Postman exportada
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Integración con Pipeline
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
/especdev:contrato-api → contrato + OpenAPI parcial
|
|
210
|
+
→ /especdev:planificar-tecnico → incorpora contrato al plan
|
|
211
|
+
→ /especdev:desglosar → tareas incluyen implementación del contrato
|
|
212
|
+
→ Documentación Viva → actualiza OpenAPI global
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Guardrails
|
|
216
|
+
|
|
217
|
+
- **Nunca** diseñar API sin definir manejo de errores
|
|
218
|
+
- **Nunca** omitir idempotencia en operaciones de escritura
|
|
219
|
+
- **Nunca** confiar en input externo sin validación
|
|
220
|
+
- **Siempre** definir timeouts y política de reintentos
|
|
221
|
+
- **Siempre** incluir `request_id` en respuestas de error
|
|
222
|
+
- **Siempre** verificar firma de webhooks antes de procesar
|
|
223
|
+
- **Siempre** responder rápido a webhooks (< 5s), procesar async
|