@saulwade/swl-ses 1.0.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/CLAUDE.md +238 -0
- package/README.md +560 -0
- package/_userland/agentes/.gitkeep +0 -0
- package/_userland/habilidades/.gitkeep +0 -0
- package/agentes/.evolved.json +9 -0
- package/agentes/accesibilidad-wcag-swl.md +692 -0
- package/agentes/arquitecto-swl.md +238 -0
- package/agentes/auto-evolucion-swl.md +854 -0
- package/agentes/backend-api-swl.md +470 -0
- package/agentes/backend-csharp-swl.md +418 -0
- package/agentes/backend-go-swl.md +388 -0
- package/agentes/backend-java-swl.md +279 -0
- package/agentes/backend-node-swl.md +477 -0
- package/agentes/backend-python-swl.md +608 -0
- package/agentes/backend-rust-swl.md +362 -0
- package/agentes/backend-workers-swl.md +480 -0
- package/agentes/cloud-infra-swl.md +485 -0
- package/agentes/consolidador-swl.md +539 -0
- package/agentes/datos-swl.md +584 -0
- package/agentes/depurador-swl.md +349 -0
- package/agentes/devops-ci-swl.md +374 -0
- package/agentes/disenador-ui-swl.md +558 -0
- package/agentes/documentador-swl.md +343 -0
- package/agentes/evals/arquitecto-swl.evals.json +56 -0
- package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
- package/agentes/evals/implementador-swl.evals.json +56 -0
- package/agentes/evals/orquestador-swl.evals.json +60 -0
- package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
- package/agentes/evals/red-team-swl.evals.json +59 -0
- package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
- package/agentes/frontend-angular-swl.md +627 -0
- package/agentes/frontend-css-swl.md +720 -0
- package/agentes/frontend-react-swl.md +696 -0
- package/agentes/frontend-swl.md +500 -0
- package/agentes/frontend-tailwind-swl.md +830 -0
- package/agentes/implementador-swl.md +328 -0
- package/agentes/investigador-swl.md +430 -0
- package/agentes/investigador-ux-swl.md +500 -0
- package/agentes/llm-apps-swl.md +276 -0
- package/agentes/migrador-swl.md +417 -0
- package/agentes/mobile-android-swl.md +509 -0
- package/agentes/mobile-cross-swl.md +539 -0
- package/agentes/mobile-ios-swl.md +500 -0
- package/agentes/mobile-testing-swl.md +300 -0
- package/agentes/notificador-swl.md +916 -0
- package/agentes/observabilidad-swl.md +436 -0
- package/agentes/orquestador-swl.md +884 -0
- package/agentes/pagos-swl.md +283 -0
- package/agentes/perfilador-usuario-swl.md +306 -0
- package/agentes/planificador-swl.md +402 -0
- package/agentes/producto-prd-swl.md +587 -0
- package/agentes/red-team-swl.md +216 -0
- package/agentes/release-manager-swl.md +568 -0
- package/agentes/rendimiento-swl.md +714 -0
- package/agentes/resolutor-build-swl.md +243 -0
- package/agentes/revisor-angular-swl.md +276 -0
- package/agentes/revisor-codigo-swl.md +348 -0
- package/agentes/revisor-csharp-swl.md +262 -0
- package/agentes/revisor-go-swl.md +257 -0
- package/agentes/revisor-java-swl.md +255 -0
- package/agentes/revisor-kotlin-swl.md +271 -0
- package/agentes/revisor-nextjs-swl.md +279 -0
- package/agentes/revisor-php-swl.md +269 -0
- package/agentes/revisor-react-swl.md +276 -0
- package/agentes/revisor-rust-swl.md +344 -0
- package/agentes/revisor-seguridad-swl.md +390 -0
- package/agentes/revisor-swift-swl.md +266 -0
- package/agentes/revisor-typescript-swl.md +344 -0
- package/agentes/sre-swl.md +265 -0
- package/agentes/tdd-qa-swl.md +354 -0
- package/agentes/ux-disenador-swl.md +501 -0
- package/bin/lib/bot-comandos.js +1030 -0
- package/bin/lib/bot-discovery.js +182 -0
- package/bin/lib/bot-git.js +142 -0
- package/bin/swl-ses.js +325 -0
- package/bin/swl-telegram-bot.js +442 -0
- package/bin/swl-telegram-bot.plist +21 -0
- package/bin/swl-telegram-bot.service +14 -0
- package/comandos/swl/.evolved.json +23 -0
- package/comandos/swl/actualizar.md +174 -0
- package/comandos/swl/adoptar-proyecto.md +207 -0
- package/comandos/swl/aprender.md +701 -0
- package/comandos/swl/auditar-deps.md +134 -0
- package/comandos/swl/autoresearch.md +170 -0
- package/comandos/swl/ayuda.md +224 -0
- package/comandos/swl/brainstorm.md +50 -0
- package/comandos/swl/checkpoint.md +330 -0
- package/comandos/swl/compactar.md +283 -0
- package/comandos/swl/configurar-ci.md +227 -0
- package/comandos/swl/contexto.md +112 -0
- package/comandos/swl/contribuir.md +233 -0
- package/comandos/swl/crear-skill.md +292 -0
- package/comandos/swl/cron.md +196 -0
- package/comandos/swl/dashboard.md +146 -0
- package/comandos/swl/discutir-fase.md +230 -0
- package/comandos/swl/ejecutar-fase.md +135 -0
- package/comandos/swl/evaluar-skill.md +487 -0
- package/comandos/swl/evolucion-estado.md +142 -0
- package/comandos/swl/evolucionar.md +259 -0
- package/comandos/swl/exportar-vault.md +189 -0
- package/comandos/swl/gateway.md +158 -0
- package/comandos/swl/inbox.md +116 -0
- package/comandos/swl/instalar.md +220 -0
- package/comandos/swl/instintos.md +86 -0
- package/comandos/swl/mapear-codebase.md +312 -0
- package/comandos/swl/mcp-status.md +175 -0
- package/comandos/swl/metricas.md +270 -0
- package/comandos/swl/modelo.md +102 -0
- package/comandos/swl/notificaciones.md +396 -0
- package/comandos/swl/nuevo-proyecto.md +154 -0
- package/comandos/swl/planear-fase.md +221 -0
- package/comandos/swl/plugins.md +256 -0
- package/comandos/swl/reflect-skills.md +125 -0
- package/comandos/swl/release.md +217 -0
- package/comandos/swl/revisar-impacto.md +206 -0
- package/comandos/swl/revisar.md +330 -0
- package/comandos/swl/salud.md +363 -0
- package/comandos/swl/sesiones.md +200 -0
- package/comandos/swl/skill-search.md +113 -0
- package/comandos/swl/verificar.md +585 -0
- package/comandos/swl/wiki.md +620 -0
- package/contextos/dev.md +32 -0
- package/contextos/research.md +30 -0
- package/contextos/review.md +31 -0
- package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
- package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
- package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
- package/habilidades/agent-browser/SKILL.md +218 -0
- package/habilidades/agentes-como-servicio/SKILL.md +218 -0
- package/habilidades/ai-runtime-security/SKILL.md +273 -0
- package/habilidades/angular-avanzado/SKILL.md +164 -0
- package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
- package/habilidades/angular-moderno/SKILL.md +186 -0
- package/habilidades/angular-moderno/evals/evals.json +45 -0
- package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
- package/habilidades/api-rest-diseno/SKILL.md +191 -0
- package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
- package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
- package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
- package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
- package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
- package/habilidades/async-python/SKILL.md +149 -0
- package/habilidades/async-python/evals/evals.json +47 -0
- package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
- package/habilidades/auth-patrones/.evolved.json +9 -0
- package/habilidades/auth-patrones/SKILL.md +413 -0
- package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
- package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
- package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
- package/habilidades/autoresearch/SKILL.md +268 -0
- package/habilidades/autoresearch/evals/evals.json +41 -0
- package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
- package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
- package/habilidades/azure-cloud/SKILL.md +308 -0
- package/habilidades/azure-cloud/recursos/aks.md +327 -0
- package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
- package/habilidades/backend-production-resilience/SKILL.md +288 -0
- package/habilidades/brainstorming/SKILL.md +295 -0
- package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
- package/habilidades/build-errors-cpp/SKILL.md +270 -0
- package/habilidades/build-errors-csharp/SKILL.md +265 -0
- package/habilidades/build-errors-go/SKILL.md +306 -0
- package/habilidades/build-errors-java/SKILL.md +278 -0
- package/habilidades/build-errors-kotlin/SKILL.md +303 -0
- package/habilidades/build-errors-nextjs/SKILL.md +312 -0
- package/habilidades/build-errors-php/SKILL.md +270 -0
- package/habilidades/build-errors-python/SKILL.md +292 -0
- package/habilidades/build-errors-rust/SKILL.md +284 -0
- package/habilidades/build-errors-swift/SKILL.md +272 -0
- package/habilidades/build-errors-typescript/SKILL.md +369 -0
- package/habilidades/checklist-calidad/SKILL.md +271 -0
- package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
- package/habilidades/checklist-seguridad/SKILL.md +285 -0
- package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
- package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
- package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
- package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
- package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
- package/habilidades/cloud-aws/SKILL.md +142 -0
- package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
- package/habilidades/compactacion-contexto/SKILL.md +247 -0
- package/habilidades/contenedores-docker/SKILL.md +137 -0
- package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
- package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
- package/habilidades/context-builder/SKILL.md +170 -0
- package/habilidades/control-profundidad/SKILL.md +128 -0
- package/habilidades/csharp-experto/SKILL.md +322 -0
- package/habilidades/csharp-patrones/SKILL.md +316 -0
- package/habilidades/csharp-testing/SKILL.md +286 -0
- package/habilidades/css-moderno/SKILL.md +166 -0
- package/habilidades/css-moderno/evals/evals.json +43 -0
- package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
- package/habilidades/datos-etl/SKILL.md +129 -0
- package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
- package/habilidades/dbml-experto/SKILL.md +339 -0
- package/habilidades/dbml-experto/evals/evals.json +56 -0
- package/habilidades/dependencias-auditoria/SKILL.md +320 -0
- package/habilidades/deprecacion-migracion/SKILL.md +169 -0
- package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
- package/habilidades/design-tokens/SKILL.md +158 -0
- package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
- package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
- package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
- package/habilidades/discutir-fase/SKILL.md +188 -0
- package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
- package/habilidades/diseno-responsivo/SKILL.md +186 -0
- package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
- package/habilidades/django-experto/SKILL.md +205 -0
- package/habilidades/django-experto/recursos/async-django.md +390 -0
- package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
- package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
- package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
- package/habilidades/django-experto/recursos/testing-django.md +415 -0
- package/habilidades/doc-sync/SKILL.md +280 -0
- package/habilidades/drift-detection/SKILL.md +179 -0
- package/habilidades/ejecutar-fase/SKILL.md +468 -0
- package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
- package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
- package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
- package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
- package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
- package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
- package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
- package/habilidades/evaluacion-agentes/SKILL.md +314 -0
- package/habilidades/event-driven/SKILL.md +153 -0
- package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
- package/habilidades/extraccion-documentos/SKILL.md +221 -0
- package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
- package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
- package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
- package/habilidades/fastapi-experto/SKILL.md +221 -0
- package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
- package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
- package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
- package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
- package/habilidades/filament-admin/SKILL.md +290 -0
- package/habilidades/frontend-avanzado/SKILL.md +257 -0
- package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
- package/habilidades/gcp-cloud/SKILL.md +260 -0
- package/habilidades/gcp-cloud/recursos/gke.md +234 -0
- package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
- package/habilidades/generacion-mermaid/SKILL.md +229 -0
- package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
- package/habilidades/go-experto/SKILL.md +305 -0
- package/habilidades/go-patrones/SKILL.md +299 -0
- package/habilidades/go-testing/SKILL.md +291 -0
- package/habilidades/graphql-experto/SKILL.md +323 -0
- package/habilidades/guardrail-semantico/SKILL.md +282 -0
- package/habilidades/harness-claude-code/SKILL.md +299 -0
- package/habilidades/iam-secretos/SKILL.md +265 -0
- package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
- package/habilidades/infra-github-actions/SKILL.md +166 -0
- package/habilidades/instalar-sistema/.evolved.json +9 -0
- package/habilidades/instalar-sistema/SKILL.md +221 -0
- package/habilidades/java-experto/SKILL.md +290 -0
- package/habilidades/java-patrones/SKILL.md +275 -0
- package/habilidades/java-testing/SKILL.md +288 -0
- package/habilidades/kotlin-compose/SKILL.md +278 -0
- package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
- package/habilidades/kotlin-experto/SKILL.md +318 -0
- package/habilidades/kotlin-testing/SKILL.md +267 -0
- package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
- package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
- package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
- package/habilidades/langchain-langraph/SKILL.md +386 -0
- package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
- package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
- package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
- package/habilidades/legacy-code-rescue/SKILL.md +267 -0
- package/habilidades/likec4-experto/SKILL.md +412 -0
- package/habilidades/likec4-experto/evals/evals.json +69 -0
- package/habilidades/manejo-errores/.evolved.json +9 -0
- package/habilidades/manejo-errores/SKILL.md +407 -0
- package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
- package/habilidades/mapear-codebase/SKILL.md +275 -0
- package/habilidades/memoria-busqueda/SKILL.md +194 -0
- package/habilidades/memoria-busqueda/evals/evals.json +44 -0
- package/habilidades/meta-skills-estandar/SKILL.md +298 -0
- package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
- package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
- package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
- package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
- package/habilidades/microservicios/SKILL.md +155 -0
- package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
- package/habilidades/mobile-flutter/SKILL.md +199 -0
- package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
- package/habilidades/mobile-react-native/SKILL.md +176 -0
- package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
- package/habilidades/mongodb-experto/SKILL.md +302 -0
- package/habilidades/monitoring-alertas/SKILL.md +201 -0
- package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
- package/habilidades/nestjs-experto/SKILL.md +307 -0
- package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
- package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
- package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
- package/habilidades/nextjs-experto/SKILL.md +335 -0
- package/habilidades/nextjs-patrones/SKILL.md +303 -0
- package/habilidades/nextjs-testing/SKILL.md +331 -0
- package/habilidades/node-experto/.evolved.json +9 -0
- package/habilidades/node-experto/SKILL.md +266 -0
- package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
- package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
- package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
- package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
- package/habilidades/nuevo-proyecto/SKILL.md +204 -0
- package/habilidades/orquestacion-async/SKILL.md +303 -0
- package/habilidades/paid-media-tracking/SKILL.md +269 -0
- package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
- package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
- package/habilidades/patrones-python/SKILL.md +228 -0
- package/habilidades/patrones-python/evals/evals.json +56 -0
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
- package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
- package/habilidades/perfil-usuario/SKILL.md +200 -0
- package/habilidades/perfil-usuario/evals/evals.json +55 -0
- package/habilidades/performance-baseline/SKILL.md +297 -0
- package/habilidades/php-experto/SKILL.md +291 -0
- package/habilidades/php-patrones/SKILL.md +306 -0
- package/habilidades/php-testing/SKILL.md +280 -0
- package/habilidades/planear-fase/SKILL.md +269 -0
- package/habilidades/postgresql-experto/SKILL.md +151 -0
- package/habilidades/postgresql-experto/evals/evals.json +53 -0
- package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
- package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
- package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
- package/habilidades/privacy-memoria/SKILL.md +141 -0
- package/habilidades/privacy-memoria/evals/evals.json +43 -0
- package/habilidades/prompt-engineering/SKILL.md +518 -0
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
- package/habilidades/rag-arquitectura/SKILL.md +338 -0
- package/habilidades/rails-experto/SKILL.md +237 -0
- package/habilidades/rails-experto/recursos/active-record.md +260 -0
- package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
- package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
- package/habilidades/react-experto/SKILL.md +209 -0
- package/habilidades/react-experto/evals/evals.json +55 -0
- package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
- package/habilidades/react-optimizacion/SKILL.md +174 -0
- package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
- package/habilidades/redis-experto/SKILL.md +305 -0
- package/habilidades/release-semver/.evolved.json +9 -0
- package/habilidades/release-semver/SKILL.md +248 -0
- package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
- package/habilidades/rust-experto/SKILL.md +400 -0
- package/habilidades/rust-patrones/SKILL.md +296 -0
- package/habilidades/rust-testing/SKILL.md +311 -0
- package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
- package/habilidades/sql-optimizacion/SKILL.md +200 -0
- package/habilidades/sql-optimizacion/evals/evals.json +54 -0
- package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
- package/habilidades/sre-patrones/SKILL.md +333 -0
- package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
- package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
- package/habilidades/stripe-pagos/SKILL.md +550 -0
- package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
- package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
- package/habilidades/structured-outputs/SKILL.md +343 -0
- package/habilidades/swift-experto/SKILL.md +320 -0
- package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
- package/habilidades/swift-patrones/SKILL.md +313 -0
- package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
- package/habilidades/swift-testing/SKILL.md +254 -0
- package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
- package/habilidades/swl-dashboard/SKILL.md +370 -0
- package/habilidades/swl-markitdown/SKILL.md +285 -0
- package/habilidades/swl-markitdown/evals/evals.json +52 -0
- package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
- package/habilidades/tailwind-experto/SKILL.md +240 -0
- package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
- package/habilidades/tdd-workflow/SKILL.md +293 -0
- package/habilidades/terraform-experto/SKILL.md +321 -0
- package/habilidades/testing-python/SKILL.md +340 -0
- package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
- package/habilidades/threat-model-lite/SKILL.md +246 -0
- package/habilidades/tracing-processor/SKILL.md +212 -0
- package/habilidades/tracking-measurement/SKILL.md +239 -0
- package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
- package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
- package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
- package/habilidades/typescript-avanzado/SKILL.md +144 -0
- package/habilidades/typescript-avanzado/evals/evals.json +55 -0
- package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
- package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
- package/habilidades/ux-diseno/SKILL.md +116 -0
- package/habilidades/ux-diseno/evals/evals.json +43 -0
- package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
- package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
- package/habilidades/verificacion-evidencia/SKILL.md +160 -0
- package/habilidades/verificar-trabajo/SKILL.md +303 -0
- package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
- package/habilidades/wiki-conocimiento/SKILL.md +276 -0
- package/habilidades/wireframes-flujos/SKILL.md +212 -0
- package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
- package/habilidades/workflow-claude-code/SKILL.md +260 -0
- package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
- package/hooks/_run-hook.sh +57 -0
- package/hooks/actualizar-perfil-usuario.js +364 -0
- package/hooks/agente-lifecycle.js +71 -0
- package/hooks/aiisms-detector.js +173 -0
- package/hooks/audit-trail.js +204 -0
- package/hooks/auto-background.js +97 -0
- package/hooks/auto-consolidacion.js +178 -0
- package/hooks/auto-evolucion.js +666 -0
- package/hooks/auto-restaurar-settings.js +360 -0
- package/hooks/calidad-pre-commit.js +929 -0
- package/hooks/calidad-typescript.js +511 -0
- package/hooks/captura-feedback-usuario.js +148 -0
- package/hooks/check-update.js +211 -0
- package/hooks/clasificador-mensajes.js +271 -0
- package/hooks/degradacion-instintos.js +272 -0
- package/hooks/escaneo-secretos.js +389 -0
- package/hooks/extraccion-aprendizajes.js +763 -0
- package/hooks/grafo-contexto.js +129 -0
- package/hooks/graph-update.js +67 -0
- package/hooks/guardrail-modelo.js +247 -0
- package/hooks/inbox-aviso.js +75 -0
- package/hooks/inyeccion-contexto.js +246 -0
- package/hooks/lib/abort-registry.js +214 -0
- package/hooks/lib/agent-backend.js +210 -0
- package/hooks/lib/agent-comms.js +263 -0
- package/hooks/lib/agent-issue-codes.js +284 -0
- package/hooks/lib/agent-matcher.js +189 -0
- package/hooks/lib/async-hook-registry.js +252 -0
- package/hooks/lib/atomic-write.js +130 -0
- package/hooks/lib/auto-consolidator.js +335 -0
- package/hooks/lib/canary-skills.js +187 -0
- package/hooks/lib/consolidation-lock.js +291 -0
- package/hooks/lib/context-builder.js +430 -0
- package/hooks/lib/context-compressor.js +657 -0
- package/hooks/lib/convergence-detector.js +105 -0
- package/hooks/lib/delegation-tracker.js +198 -0
- package/hooks/lib/detectar-package-manager.js +423 -0
- package/hooks/lib/edit-accumulator.js +171 -0
- package/hooks/lib/error-classifier.js +308 -0
- package/hooks/lib/event-bus.js +112 -0
- package/hooks/lib/evolution-tracker.js +442 -0
- package/hooks/lib/execution-state.js +316 -0
- package/hooks/lib/fingerprint-id.js +135 -0
- package/hooks/lib/gateway-notify.js +116 -0
- package/hooks/lib/graph-security.js +75 -0
- package/hooks/lib/guardrail-metrics.js +202 -0
- package/hooks/lib/hook-circuit-breaker.js +206 -0
- package/hooks/lib/loop-detector.js +267 -0
- package/hooks/lib/mcp-health.js +184 -0
- package/hooks/lib/mcp-pool.js +436 -0
- package/hooks/lib/memory-search.js +506 -0
- package/hooks/lib/merkle-audit.js +96 -0
- package/hooks/lib/model-router.js +222 -0
- package/hooks/lib/normalize-error.js +324 -0
- package/hooks/lib/normalize-input.js +65 -0
- package/hooks/lib/nudge-tracker.js +306 -0
- package/hooks/lib/otlp-exporter.js +365 -0
- package/hooks/lib/performance-marks.js +239 -0
- package/hooks/lib/privacy-filter.js +128 -0
- package/hooks/lib/prompt-injection-scanner.js +209 -0
- package/hooks/lib/provenance-tracker.js +183 -0
- package/hooks/lib/rate-limit-tracker.js +253 -0
- package/hooks/lib/reflect-classifier.js +164 -0
- package/hooks/lib/resource-quota.js +122 -0
- package/hooks/lib/retry-jitter.js +165 -0
- package/hooks/lib/risk-engine.js +368 -0
- package/hooks/lib/run-log.js +408 -0
- package/hooks/lib/session-fts.js +379 -0
- package/hooks/lib/session-store.js +293 -0
- package/hooks/lib/singleton-guard.js +159 -0
- package/hooks/lib/skill-auditor.js +588 -0
- package/hooks/lib/sync-status.js +228 -0
- package/hooks/lib/taint-tracker.js +107 -0
- package/hooks/lib/task-service.js +295 -0
- package/hooks/lib/tech-skills-map.js +146 -0
- package/hooks/lib/telegram-cliente.js +159 -0
- package/hooks/lib/telegram-config.js +170 -0
- package/hooks/lib/token-budget.js +156 -0
- package/hooks/lib/token-estimator.js +420 -0
- package/hooks/lib/toon-compressor.js +245 -0
- package/hooks/lib/usage-model.js +183 -0
- package/hooks/lib/variable-resolver.js +230 -0
- package/hooks/linea-estado.js +324 -0
- package/hooks/metricas-evolucion.js +209 -0
- package/hooks/monitor-contexto.js +325 -0
- package/hooks/notificacion-sesion-stop.js +198 -0
- package/hooks/notificacion-telegram-notification.js +4 -0
- package/hooks/notificacion-telegram-subagent.js +4 -0
- package/hooks/notificacion-telegram.js +267 -0
- package/hooks/preservar-estado-pre-compact.js +150 -0
- package/hooks/proteccion-rutas.js +366 -0
- package/hooks/registro-turnos.js +209 -0
- package/hooks/resumen-sesion.js +249 -0
- package/hooks/risk-scoring.js +323 -0
- package/hooks/rotar-audit-auto.js +122 -0
- package/hooks/sugerir-regenerar-inventario.js +170 -0
- package/hooks/telemetria-agentes.js +167 -0
- package/hooks/tracking-costos.js +688 -0
- package/instintos/global.yaml +8 -0
- package/instintos/perfil-usuario.yaml +53 -0
- package/instintos/prompt-appendices.yaml +57 -0
- package/instintos/proyecto.yaml +372 -0
- package/manifiestos/gateway-config.json +77 -0
- package/manifiestos/handoff-context.json +223 -0
- package/manifiestos/hook-profiles.json +44 -0
- package/manifiestos/hooks-config.json +360 -0
- package/manifiestos/modulos.json +1173 -0
- package/manifiestos/perfiles.json +404 -0
- package/package.json +86 -0
- package/plantillas/ESTADO.md +109 -0
- package/plantillas/HOJA-RUTA.md +143 -0
- package/plantillas/PROYECTO.md +122 -0
- package/plantillas/REQUISITOS.md +132 -0
- package/plantillas/auditor-veto-template.md +105 -0
- package/plantillas/github-workflows/README.md +47 -0
- package/plantillas/github-workflows/release-please.yml +44 -0
- package/plantillas/github-workflows/swl-ci.yml +107 -0
- package/plantillas/github-workflows/swl-security.yml +51 -0
- package/plantillas/mcp-mineru.json +13 -0
- package/plantillas/research/ARQUITECTURA.md +220 -0
- package/plantillas/research/FUNCIONALIDADES.md +175 -0
- package/plantillas/research/RESUMEN.md +165 -0
- package/plantillas/research/STACK.md +233 -0
- package/plantillas/research/TRAMPAS.md +299 -0
- package/plantillas/skill-evals-template.json +44 -0
- package/plugin.json +343 -0
- package/reglas/accesibilidad.md +269 -0
- package/reglas/api-diseno.md +400 -0
- package/reglas/arquitectura.md +352 -0
- package/reglas/brevedad-output.md +124 -0
- package/reglas/cloud-infra.md +247 -0
- package/reglas/docs.md +245 -0
- package/reglas/estilo-codigo.md +201 -0
- package/reglas/git-workflow.md +245 -0
- package/reglas/gobernanza.md +271 -0
- package/reglas/harness-claude-code.md +213 -0
- package/reglas/hooks.md +186 -0
- package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
- package/reglas/lenguajes/csharp/hooks.md +281 -0
- package/reglas/lenguajes/csharp/patrones.md +226 -0
- package/reglas/lenguajes/csharp/seguridad.md +258 -0
- package/reglas/lenguajes/csharp/testing.md +176 -0
- package/reglas/lenguajes/go/estilo-codigo.md +195 -0
- package/reglas/lenguajes/go/hooks.md +249 -0
- package/reglas/lenguajes/go/patrones.md +249 -0
- package/reglas/lenguajes/go/seguridad.md +225 -0
- package/reglas/lenguajes/go/testing.md +272 -0
- package/reglas/lenguajes/java/estilo-codigo.md +217 -0
- package/reglas/lenguajes/java/hooks.md +251 -0
- package/reglas/lenguajes/java/patrones.md +226 -0
- package/reglas/lenguajes/java/seguridad.md +233 -0
- package/reglas/lenguajes/java/testing.md +238 -0
- package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
- package/reglas/lenguajes/kotlin/hooks.md +245 -0
- package/reglas/lenguajes/kotlin/patrones.md +201 -0
- package/reglas/lenguajes/kotlin/seguridad.md +202 -0
- package/reglas/lenguajes/kotlin/testing.md +236 -0
- package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
- package/reglas/lenguajes/nextjs/hooks.md +186 -0
- package/reglas/lenguajes/nextjs/patrones.md +225 -0
- package/reglas/lenguajes/nextjs/seguridad.md +216 -0
- package/reglas/lenguajes/nextjs/testing.md +193 -0
- package/reglas/lenguajes/php/estilo-codigo.md +228 -0
- package/reglas/lenguajes/php/hooks.md +165 -0
- package/reglas/lenguajes/php/patrones.md +233 -0
- package/reglas/lenguajes/php/seguridad.md +186 -0
- package/reglas/lenguajes/php/testing.md +205 -0
- package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
- package/reglas/lenguajes/rust/hooks.md +240 -0
- package/reglas/lenguajes/rust/patrones.md +250 -0
- package/reglas/lenguajes/rust/seguridad.md +221 -0
- package/reglas/lenguajes/rust/testing.md +194 -0
- package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
- package/reglas/lenguajes/swift/hooks.md +257 -0
- package/reglas/lenguajes/swift/patrones.md +235 -0
- package/reglas/lenguajes/swift/seguridad.md +248 -0
- package/reglas/lenguajes/swift/testing.md +242 -0
- package/reglas/markitdown.md +60 -0
- package/reglas/memoria-consolidada.md +209 -0
- package/reglas/patrones.md +225 -0
- package/reglas/performance.md +195 -0
- package/reglas/pruebas.md +159 -0
- package/reglas/seguridad-agentes.md +351 -0
- package/reglas/seguridad.md +151 -0
- package/reglas/skills-estandar.md +373 -0
- package/reglas/testing.md +193 -0
- package/schemas/agent-contract.json +176 -0
- package/schemas/agent-frontmatter.schema.json +149 -0
- package/schemas/agent-message.schema.json +53 -0
- package/schemas/agent-output-implementacion.schema.json +85 -0
- package/schemas/agent-output-planificacion.schema.json +113 -0
- package/schemas/agent-output-review.schema.json +78 -0
- package/schemas/diary-entry.schema.json +80 -0
- package/schemas/hook-profiles.schema.json +39 -0
- package/schemas/hooks-config.schema.json +74 -0
- package/schemas/instinct.schema.json +115 -0
- package/schemas/modulos.schema.json +29 -0
- package/schemas/perfiles.schema.json +28 -0
- package/schemas/plugin.schema.json +64 -0
- package/schemas/skill-evals.schema.json +95 -0
- package/schemas/skill-frontmatter.schema.json +170 -0
- package/scripts/actualizar.js +145 -0
- package/scripts/audit-skills.sh +78 -0
- package/scripts/auditar-agentes-gaps.js +149 -0
- package/scripts/auditar-cobertura-frameworks.js +241 -0
- package/scripts/auditar-skills-gaps.js +206 -0
- package/scripts/bootstrap-instintos.js +259 -0
- package/scripts/check-update.js +109 -0
- package/scripts/comandos/agents.js +105 -0
- package/scripts/comandos/info.js +108 -0
- package/scripts/comandos/install-asistido.js +186 -0
- package/scripts/comandos/skills.js +211 -0
- package/scripts/configurar-branch-protection.js +418 -0
- package/scripts/daemon-swl.py +388 -0
- package/scripts/desinstalar.js +130 -0
- package/scripts/doctor.js +559 -0
- package/scripts/field-report.js +199 -0
- package/scripts/generar-inventario.js +317 -0
- package/scripts/inbox-tmux-inject.js +161 -0
- package/scripts/inferir-herramientas-permitidas.js +586 -0
- package/scripts/inicializar.js +133 -0
- package/scripts/instalador.js +1031 -0
- package/scripts/instalar-git-hook.js +122 -0
- package/scripts/lib/agp-frontmatter.js +222 -0
- package/scripts/lib/append-con-marcadores.js +199 -0
- package/scripts/lib/artefactos-python.js +43 -0
- package/scripts/lib/audit-query.js +221 -0
- package/scripts/lib/autostart-linux.js +347 -0
- package/scripts/lib/autostart-macos.js +360 -0
- package/scripts/lib/autostart-windows.js +307 -0
- package/scripts/lib/budget-enforcer.js +252 -0
- package/scripts/lib/claude-sessions.js +285 -0
- package/scripts/lib/configurar-ci.js +380 -0
- package/scripts/lib/console-span-exporter.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -0
- package/scripts/lib/dashboard-widgets.js +290 -0
- package/scripts/lib/detectar-runtime.js +279 -0
- package/scripts/lib/detectar-stack.js +187 -0
- package/scripts/lib/diary-entry.js +234 -0
- package/scripts/lib/drift-detector.js +545 -0
- package/scripts/lib/estado.js +124 -0
- package/scripts/lib/gestor-componentes.js +243 -0
- package/scripts/lib/gitignore-manifest.js +305 -0
- package/scripts/lib/graph-analyze.py +556 -0
- package/scripts/lib/graph-builder.py +485 -0
- package/scripts/lib/graph-cluster.py +259 -0
- package/scripts/lib/health-row.js +168 -0
- package/scripts/lib/hooks-settings.js +789 -0
- package/scripts/lib/manifiestos.js +138 -0
- package/scripts/lib/mc-client.js +137 -0
- package/scripts/lib/notificaciones-telegram.js +1107 -0
- package/scripts/lib/npm-version.js +261 -0
- package/scripts/lib/paquetes-conocidos.js +50 -0
- package/scripts/lib/preservar-usuario.js +586 -0
- package/scripts/lib/prompt-builder.js +264 -0
- package/scripts/lib/resolver-externo.js +332 -0
- package/scripts/lib/schedule-parser.js +305 -0
- package/scripts/lib/scoring-instintos.js +240 -0
- package/scripts/lib/seguridad.js +160 -0
- package/scripts/lib/selector-interactivo.js +152 -0
- package/scripts/lib/semantic-search.js +242 -0
- package/scripts/lib/skill-discovery.js +234 -0
- package/scripts/lib/skill-metrics.js +246 -0
- package/scripts/lib/skill-normalizer.js +112 -0
- package/scripts/lib/skills-hub.js +340 -0
- package/scripts/lib/span-schema.js +134 -0
- package/scripts/lib/tool-cost-analyzer.js +255 -0
- package/scripts/lib/tracing-processor-interface.js +286 -0
- package/scripts/lib/transformadores/base.js +80 -0
- package/scripts/lib/transformadores/claude.js +124 -0
- package/scripts/lib/transformadores/codex.js +115 -0
- package/scripts/lib/transformadores/copilot.js +106 -0
- package/scripts/lib/transformadores/gemini.js +74 -0
- package/scripts/lib/transformadores/index.js +35 -0
- package/scripts/lib/transformadores/opencode.js +75 -0
- package/scripts/lib/ui.js +259 -0
- package/scripts/limpiar-artefactos-python.js +131 -0
- package/scripts/mcp-orchestrator.py +386 -0
- package/scripts/mcp-pool-manager.py +352 -0
- package/scripts/mcp-telemetry.py +378 -0
- package/scripts/poblar-evolvable.js +226 -0
- package/scripts/publicar.js +287 -0
- package/scripts/reflect-skills.js +403 -0
- package/scripts/rotar-audit-logs.js +185 -0
- package/scripts/run-skill-evals.js +242 -0
- package/scripts/smoke-test.js +374 -0
- package/scripts/token-analysis.py +471 -0
- package/scripts/validar-manifest.js +195 -0
- package/scripts/validar-memoria.js +321 -0
- package/scripts/validar-tests-aislamiento.js +184 -0
- package/scripts/validar-tokens-test.js +208 -0
- package/scripts/validar.js +147 -0
- package/scripts/validate-markdown.py +339 -0
- package/scripts/validate-skills.py +385 -0
- package/scripts/vendor/claude-usage/README.md +116 -0
- package/scripts/vendor/claude-usage/cli.py +334 -0
- package/scripts/vendor/claude-usage/dashboard.py +795 -0
- package/scripts/vendor/claude-usage/scanner.py +467 -0
- package/scripts/vendor/markitdown/cli.py +194 -0
- package/scripts/verificar-evolucion.js +289 -0
- package/scripts/verificar-release.js +494 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
# CI/CD Pipelines — Pipelines Completos de Referencia
|
|
2
|
+
|
|
3
|
+
Ejemplos completos de pipelines para GitHub Actions y GitLab CI.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## GitHub Actions — Pipeline Python/FastAPI Completo
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
# .github/workflows/ci.yml
|
|
11
|
+
name: CI Pipeline
|
|
12
|
+
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
branches: [main, develop]
|
|
16
|
+
pull_request:
|
|
17
|
+
branches: [main, develop]
|
|
18
|
+
|
|
19
|
+
concurrency:
|
|
20
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
21
|
+
cancel-in-progress: true
|
|
22
|
+
|
|
23
|
+
env:
|
|
24
|
+
PYTHON_VERSION: "3.12"
|
|
25
|
+
REGISTRY: ghcr.io
|
|
26
|
+
IMAGE_NAME: ${{ github.repository }}
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
lint:
|
|
30
|
+
name: Lint y Type Check
|
|
31
|
+
runs-on: ubuntu-latest
|
|
32
|
+
steps:
|
|
33
|
+
- uses: actions/checkout@v4
|
|
34
|
+
- uses: actions/setup-python@v5
|
|
35
|
+
with:
|
|
36
|
+
python-version: ${{ env.PYTHON_VERSION }}
|
|
37
|
+
cache: pip
|
|
38
|
+
- name: Instalar herramientas de lint
|
|
39
|
+
run: pip install ruff mypy
|
|
40
|
+
- name: Ruff — linting
|
|
41
|
+
run: ruff check . --output-format=github
|
|
42
|
+
- name: Ruff — formato
|
|
43
|
+
run: ruff format --check .
|
|
44
|
+
- name: MyPy — type checking
|
|
45
|
+
run: mypy app/ --ignore-missing-imports
|
|
46
|
+
|
|
47
|
+
test:
|
|
48
|
+
name: Tests (${{ matrix.python-version }})
|
|
49
|
+
runs-on: ubuntu-latest
|
|
50
|
+
needs: lint
|
|
51
|
+
strategy:
|
|
52
|
+
matrix:
|
|
53
|
+
python-version: ["3.11", "3.12"]
|
|
54
|
+
fail-fast: false
|
|
55
|
+
services:
|
|
56
|
+
postgres:
|
|
57
|
+
image: postgres:15-alpine
|
|
58
|
+
env:
|
|
59
|
+
POSTGRES_DB: test_db
|
|
60
|
+
POSTGRES_USER: test
|
|
61
|
+
POSTGRES_PASSWORD: test
|
|
62
|
+
options: >-
|
|
63
|
+
--health-cmd pg_isready
|
|
64
|
+
--health-interval 10s
|
|
65
|
+
--health-timeout 5s
|
|
66
|
+
--health-retries 5
|
|
67
|
+
ports:
|
|
68
|
+
- 5432:5432
|
|
69
|
+
redis:
|
|
70
|
+
image: redis:7-alpine
|
|
71
|
+
options: >-
|
|
72
|
+
--health-cmd "redis-cli ping"
|
|
73
|
+
--health-interval 10s
|
|
74
|
+
--health-timeout 5s
|
|
75
|
+
--health-retries 5
|
|
76
|
+
ports:
|
|
77
|
+
- 6379:6379
|
|
78
|
+
env:
|
|
79
|
+
DATABASE_URL: postgresql+asyncpg://test:test@localhost:5432/test_db
|
|
80
|
+
REDIS_URL: redis://localhost:6379/0
|
|
81
|
+
SECRET_KEY: test-secret-key-no-usar-en-produccion
|
|
82
|
+
steps:
|
|
83
|
+
- uses: actions/checkout@v4
|
|
84
|
+
- uses: actions/setup-python@v5
|
|
85
|
+
with:
|
|
86
|
+
python-version: ${{ matrix.python-version }}
|
|
87
|
+
cache: pip
|
|
88
|
+
- name: Instalar dependencias
|
|
89
|
+
run: pip install -r requirements-dev.txt
|
|
90
|
+
- name: Ejecutar migraciones
|
|
91
|
+
run: alembic upgrade head
|
|
92
|
+
- name: Pytest con cobertura
|
|
93
|
+
run: |
|
|
94
|
+
pytest \
|
|
95
|
+
--cov=app \
|
|
96
|
+
--cov-report=xml \
|
|
97
|
+
--cov-report=term-missing \
|
|
98
|
+
--cov-fail-under=80 \
|
|
99
|
+
--junit-xml=test-results.xml \
|
|
100
|
+
-v
|
|
101
|
+
- name: Subir cobertura a Codecov
|
|
102
|
+
uses: codecov/codecov-action@v4
|
|
103
|
+
with:
|
|
104
|
+
file: ./coverage.xml
|
|
105
|
+
flags: python-${{ matrix.python-version }}
|
|
106
|
+
- name: Publicar resultados de tests
|
|
107
|
+
uses: dorny/test-reporter@v1
|
|
108
|
+
if: always()
|
|
109
|
+
with:
|
|
110
|
+
name: Tests Python ${{ matrix.python-version }}
|
|
111
|
+
path: test-results.xml
|
|
112
|
+
reporter: java-junit
|
|
113
|
+
|
|
114
|
+
security:
|
|
115
|
+
name: Security Scan
|
|
116
|
+
runs-on: ubuntu-latest
|
|
117
|
+
needs: lint
|
|
118
|
+
permissions:
|
|
119
|
+
security-events: write
|
|
120
|
+
steps:
|
|
121
|
+
- uses: actions/checkout@v4
|
|
122
|
+
- name: Bandit — vulnerabilidades en código Python
|
|
123
|
+
uses: PyCQA/bandit-action@v1
|
|
124
|
+
with:
|
|
125
|
+
targets: app/
|
|
126
|
+
level: medium
|
|
127
|
+
- name: pip-audit — vulnerabilidades en dependencias
|
|
128
|
+
run: |
|
|
129
|
+
pip install pip-audit
|
|
130
|
+
pip-audit -r requirements.txt --format=json > audit.json
|
|
131
|
+
cat audit.json
|
|
132
|
+
- name: Trivy — escaneo del repositorio
|
|
133
|
+
uses: aquasecurity/trivy-action@master
|
|
134
|
+
with:
|
|
135
|
+
scan-type: fs
|
|
136
|
+
format: sarif
|
|
137
|
+
output: trivy.sarif
|
|
138
|
+
severity: CRITICAL,HIGH
|
|
139
|
+
- name: Subir resultados de seguridad
|
|
140
|
+
uses: github/codeql-action/upload-sarif@v3
|
|
141
|
+
with:
|
|
142
|
+
sarif_file: trivy.sarif
|
|
143
|
+
|
|
144
|
+
build:
|
|
145
|
+
name: Build Docker Image
|
|
146
|
+
runs-on: ubuntu-latest
|
|
147
|
+
needs: [test, security]
|
|
148
|
+
if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop'
|
|
149
|
+
permissions:
|
|
150
|
+
contents: read
|
|
151
|
+
packages: write
|
|
152
|
+
outputs:
|
|
153
|
+
image-digest: ${{ steps.build.outputs.digest }}
|
|
154
|
+
image-tag: ${{ steps.meta.outputs.tags }}
|
|
155
|
+
steps:
|
|
156
|
+
- uses: actions/checkout@v4
|
|
157
|
+
- name: Docker meta
|
|
158
|
+
id: meta
|
|
159
|
+
uses: docker/metadata-action@v5
|
|
160
|
+
with:
|
|
161
|
+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
162
|
+
tags: |
|
|
163
|
+
type=semver,pattern={{version}}
|
|
164
|
+
type=sha,prefix=sha-
|
|
165
|
+
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
|
166
|
+
- name: Set up Docker Buildx
|
|
167
|
+
uses: docker/setup-buildx-action@v3
|
|
168
|
+
- name: Login a GitHub Container Registry
|
|
169
|
+
uses: docker/login-action@v3
|
|
170
|
+
with:
|
|
171
|
+
registry: ${{ env.REGISTRY }}
|
|
172
|
+
username: ${{ github.actor }}
|
|
173
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
174
|
+
- name: Build y Push
|
|
175
|
+
id: build
|
|
176
|
+
uses: docker/build-push-action@v5
|
|
177
|
+
with:
|
|
178
|
+
context: .
|
|
179
|
+
push: true
|
|
180
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
181
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
182
|
+
cache-from: type=gha
|
|
183
|
+
cache-to: type=gha,mode=max
|
|
184
|
+
platforms: linux/amd64,linux/arm64
|
|
185
|
+
|
|
186
|
+
deploy-staging:
|
|
187
|
+
name: Deploy a Staging
|
|
188
|
+
runs-on: ubuntu-latest
|
|
189
|
+
needs: build
|
|
190
|
+
if: github.ref == 'refs/heads/develop'
|
|
191
|
+
environment:
|
|
192
|
+
name: staging
|
|
193
|
+
url: https://staging-api.empresa.com.mx
|
|
194
|
+
steps:
|
|
195
|
+
- name: Deploy a Kubernetes (staging)
|
|
196
|
+
uses: azure/k8s-deploy@v4
|
|
197
|
+
with:
|
|
198
|
+
namespace: staging
|
|
199
|
+
images: ${{ needs.build.outputs.image-tag }}
|
|
200
|
+
manifests: k8s/staging/
|
|
201
|
+
- name: Smoke tests en staging
|
|
202
|
+
run: |
|
|
203
|
+
sleep 30
|
|
204
|
+
curl -f https://staging-api.empresa.com.mx/health
|
|
205
|
+
|
|
206
|
+
deploy-production:
|
|
207
|
+
name: Deploy a Producción
|
|
208
|
+
runs-on: ubuntu-latest
|
|
209
|
+
needs: build
|
|
210
|
+
if: github.ref == 'refs/heads/main'
|
|
211
|
+
environment:
|
|
212
|
+
name: production
|
|
213
|
+
url: https://api.empresa.com.mx
|
|
214
|
+
steps:
|
|
215
|
+
- name: Deploy a Kubernetes (producción)
|
|
216
|
+
uses: azure/k8s-deploy@v4
|
|
217
|
+
with:
|
|
218
|
+
namespace: produccion
|
|
219
|
+
images: ${{ needs.build.outputs.image-tag }}
|
|
220
|
+
manifests: k8s/production/
|
|
221
|
+
strategy: canary
|
|
222
|
+
percentage: 20
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## GitLab CI — Equivalente
|
|
228
|
+
|
|
229
|
+
```yaml
|
|
230
|
+
# .gitlab-ci.yml
|
|
231
|
+
stages:
|
|
232
|
+
- lint
|
|
233
|
+
- test
|
|
234
|
+
- security
|
|
235
|
+
- build
|
|
236
|
+
- deploy-staging
|
|
237
|
+
- deploy-production
|
|
238
|
+
|
|
239
|
+
variables:
|
|
240
|
+
PYTHON_VERSION: "3.12"
|
|
241
|
+
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
|
|
242
|
+
DOCKER_BUILDKIT: "1"
|
|
243
|
+
|
|
244
|
+
.python-cache: &python-cache
|
|
245
|
+
cache:
|
|
246
|
+
key:
|
|
247
|
+
files:
|
|
248
|
+
- requirements*.txt
|
|
249
|
+
paths:
|
|
250
|
+
- .cache/pip
|
|
251
|
+
- venv/
|
|
252
|
+
policy: pull-push
|
|
253
|
+
|
|
254
|
+
lint:ruff:
|
|
255
|
+
stage: lint
|
|
256
|
+
image: python:3.12-slim
|
|
257
|
+
<<: *python-cache
|
|
258
|
+
script:
|
|
259
|
+
- pip install ruff
|
|
260
|
+
- ruff check . --output-format=gitlab
|
|
261
|
+
- ruff format --check .
|
|
262
|
+
rules:
|
|
263
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
264
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
265
|
+
|
|
266
|
+
test:unit:
|
|
267
|
+
stage: test
|
|
268
|
+
image: python:3.12-slim
|
|
269
|
+
<<: *python-cache
|
|
270
|
+
services:
|
|
271
|
+
- name: postgres:15-alpine
|
|
272
|
+
alias: postgres
|
|
273
|
+
variables:
|
|
274
|
+
POSTGRES_DB: test_db
|
|
275
|
+
POSTGRES_USER: test
|
|
276
|
+
POSTGRES_PASSWORD: test
|
|
277
|
+
variables:
|
|
278
|
+
DATABASE_URL: "postgresql+asyncpg://test:test@postgres:5432/test_db"
|
|
279
|
+
script:
|
|
280
|
+
- pip install -r requirements-dev.txt
|
|
281
|
+
- pytest --cov=app --cov-report=xml --cov-fail-under=80
|
|
282
|
+
coverage: '/TOTAL.*\s+(\d+%)$/'
|
|
283
|
+
artifacts:
|
|
284
|
+
reports:
|
|
285
|
+
coverage_report:
|
|
286
|
+
coverage_format: cobertura
|
|
287
|
+
path: coverage.xml
|
|
288
|
+
junit: test-results.xml
|
|
289
|
+
expire_in: 1 week
|
|
290
|
+
|
|
291
|
+
build:image:
|
|
292
|
+
stage: build
|
|
293
|
+
image: docker:24
|
|
294
|
+
services:
|
|
295
|
+
- docker:24-dind
|
|
296
|
+
script:
|
|
297
|
+
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
|
|
298
|
+
- |
|
|
299
|
+
docker build \
|
|
300
|
+
--cache-from $CI_REGISTRY_IMAGE:latest \
|
|
301
|
+
--build-arg BUILDKIT_INLINE_CACHE=1 \
|
|
302
|
+
--tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA \
|
|
303
|
+
--tag $CI_REGISTRY_IMAGE:latest \
|
|
304
|
+
.
|
|
305
|
+
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
|
|
306
|
+
- docker push $CI_REGISTRY_IMAGE:latest
|
|
307
|
+
rules:
|
|
308
|
+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## Caching Efectivo
|
|
314
|
+
|
|
315
|
+
```yaml
|
|
316
|
+
# GitHub Actions — caché de dependencias Python
|
|
317
|
+
- uses: actions/setup-python@v5
|
|
318
|
+
with:
|
|
319
|
+
python-version: "3.12"
|
|
320
|
+
cache: pip
|
|
321
|
+
|
|
322
|
+
# Caché manual para casos especiales
|
|
323
|
+
- uses: actions/cache@v4
|
|
324
|
+
with:
|
|
325
|
+
path: |
|
|
326
|
+
~/.cache/pip
|
|
327
|
+
.venv
|
|
328
|
+
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements*.txt') }}
|
|
329
|
+
restore-keys: |
|
|
330
|
+
${{ runner.os }}-pip-
|
|
331
|
+
|
|
332
|
+
# Docker layer cache con GitHub Actions
|
|
333
|
+
- uses: docker/build-push-action@v5
|
|
334
|
+
with:
|
|
335
|
+
cache-from: type=gha
|
|
336
|
+
cache-to: type=gha,mode=max
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## Matrix Builds — Múltiples Configuraciones
|
|
342
|
+
|
|
343
|
+
```yaml
|
|
344
|
+
test:
|
|
345
|
+
strategy:
|
|
346
|
+
matrix:
|
|
347
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
348
|
+
python: ["3.11", "3.12"]
|
|
349
|
+
exclude:
|
|
350
|
+
- os: windows-latest
|
|
351
|
+
python: "3.11"
|
|
352
|
+
include:
|
|
353
|
+
- os: ubuntu-latest
|
|
354
|
+
python: "3.12"
|
|
355
|
+
coverage: true
|
|
356
|
+
fail-fast: false
|
|
357
|
+
runs-on: ${{ matrix.os }}
|
|
358
|
+
steps:
|
|
359
|
+
- name: Cobertura (solo en ubuntu+3.12)
|
|
360
|
+
if: matrix.coverage == true
|
|
361
|
+
run: pytest --cov=app
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## Gestión de Secrets
|
|
367
|
+
|
|
368
|
+
```yaml
|
|
369
|
+
# GitHub Actions — secrets del repositorio
|
|
370
|
+
- name: Deploy
|
|
371
|
+
env:
|
|
372
|
+
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
|
373
|
+
API_KEY: ${{ secrets.PROD_API_KEY }}
|
|
374
|
+
run: ./scripts/deploy.sh
|
|
375
|
+
|
|
376
|
+
# Environment-scoped secrets
|
|
377
|
+
jobs:
|
|
378
|
+
deploy:
|
|
379
|
+
environment: production
|
|
380
|
+
steps:
|
|
381
|
+
- run: echo ${{ secrets.DEPLOY_KEY }}
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
```bash
|
|
385
|
+
# Agregar secrets via CLI de GitHub
|
|
386
|
+
gh secret set DATABASE_URL --body "postgresql://..." --env production
|
|
387
|
+
gh secret set DATABASE_URL --body "postgresql://..." --env staging
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Pipeline para Monorepo
|
|
393
|
+
|
|
394
|
+
```yaml
|
|
395
|
+
name: Monorepo CI
|
|
396
|
+
|
|
397
|
+
on:
|
|
398
|
+
push:
|
|
399
|
+
branches: [main]
|
|
400
|
+
pull_request:
|
|
401
|
+
|
|
402
|
+
jobs:
|
|
403
|
+
changes:
|
|
404
|
+
runs-on: ubuntu-latest
|
|
405
|
+
outputs:
|
|
406
|
+
api: ${{ steps.filter.outputs.api }}
|
|
407
|
+
frontend: ${{ steps.filter.outputs.frontend }}
|
|
408
|
+
infra: ${{ steps.filter.outputs.infra }}
|
|
409
|
+
steps:
|
|
410
|
+
- uses: actions/checkout@v4
|
|
411
|
+
- uses: dorny/paths-filter@v3
|
|
412
|
+
id: filter
|
|
413
|
+
with:
|
|
414
|
+
filters: |
|
|
415
|
+
api:
|
|
416
|
+
- 'apps/api/**'
|
|
417
|
+
- 'packages/shared/**'
|
|
418
|
+
frontend:
|
|
419
|
+
- 'apps/frontend/**'
|
|
420
|
+
- 'packages/shared/**'
|
|
421
|
+
infra:
|
|
422
|
+
- 'infra/**'
|
|
423
|
+
- 'k8s/**'
|
|
424
|
+
|
|
425
|
+
test-api:
|
|
426
|
+
needs: changes
|
|
427
|
+
if: ${{ needs.changes.outputs.api == 'true' }}
|
|
428
|
+
uses: ./.github/workflows/api-test.yml
|
|
429
|
+
|
|
430
|
+
test-frontend:
|
|
431
|
+
needs: changes
|
|
432
|
+
if: ${{ needs.changes.outputs.frontend == 'true' }}
|
|
433
|
+
uses: ./.github/workflows/frontend-test.yml
|
|
434
|
+
|
|
435
|
+
deploy-infra:
|
|
436
|
+
needs: changes
|
|
437
|
+
if: ${{ needs.changes.outputs.infra == 'true' && github.ref == 'refs/heads/main' }}
|
|
438
|
+
uses: ./.github/workflows/infra-deploy.yml
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Notificaciones y Reportes
|
|
444
|
+
|
|
445
|
+
```yaml
|
|
446
|
+
- name: Notificar fallo en Slack
|
|
447
|
+
if: failure() && github.ref == 'refs/heads/main'
|
|
448
|
+
uses: slackapi/slack-github-action@v1.26.0
|
|
449
|
+
with:
|
|
450
|
+
channel-id: alertas-deploy
|
|
451
|
+
slack-message: |
|
|
452
|
+
*Pipeline fallido en main* :red_circle:
|
|
453
|
+
Repositorio: ${{ github.repository }}
|
|
454
|
+
Commit: ${{ github.sha }}
|
|
455
|
+
Autor: ${{ github.actor }}
|
|
456
|
+
<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|Ver pipeline>
|
|
457
|
+
env:
|
|
458
|
+
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
---
|
|
462
|
+
|
|
463
|
+
## Uso en CI del Sistema SWL
|
|
464
|
+
|
|
465
|
+
```yaml
|
|
466
|
+
# .github/workflows/validate-system.yml
|
|
467
|
+
name: Validar integridad del sistema SWL
|
|
468
|
+
|
|
469
|
+
on:
|
|
470
|
+
push:
|
|
471
|
+
branches: [main]
|
|
472
|
+
pull_request:
|
|
473
|
+
|
|
474
|
+
jobs:
|
|
475
|
+
validate:
|
|
476
|
+
runs-on: ubuntu-latest
|
|
477
|
+
steps:
|
|
478
|
+
- uses: actions/checkout@v4
|
|
479
|
+
- uses: actions/setup-node@v4
|
|
480
|
+
with: { node-version: '20' }
|
|
481
|
+
- run: npm ci
|
|
482
|
+
- run: npm run validate:catalog
|
|
483
|
+
- uses: actions/upload-artifact@v4
|
|
484
|
+
with:
|
|
485
|
+
name: catalogo-sistema
|
|
486
|
+
path: .claude/catalogo.json
|
|
487
|
+
```
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cloud-aws
|
|
3
|
+
description: Mejores prácticas de AWS. EC2, S3, RDS, Lambda, ECS/EKS, CloudFront, IAM, VPC, SQS/SNS, DynamoDB. Well-Architected Framework, optimización de costos, patrones serverless vs containers.
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
herramientasPermitidas: [Read, Grep]
|
|
6
|
+
evolvable: true # default para skill estandar
|
|
7
|
+
exclusiones:
|
|
8
|
+
- "No cargar para despliegues en Azure o GCP — para Azure cargar `azure-cloud`, para GCP cargar `gcp-cloud`."
|
|
9
|
+
- "No cargar para configurar servicios AWS de machine learning (SageMaker, Bedrock, Rekognition) sin relación con arquitectura de aplicación — para ML en AWS usar la documentación del servicio directamente."
|
|
10
|
+
- "No cargar para auditoría de costos detallada o reservas de instancias Reserved/Savings Plans — para optimización de costos avanzada usar AWS Cost Explorer y Trusted Advisor directamente."
|
|
11
|
+
- "No cargar para configuración de AWS Organizations, Control Tower o multi-account strategy — para governance multi-cuenta consultar la documentación de AWS Organizations directamente."
|
|
12
|
+
---
|
|
13
|
+
# AWS — Mejores Prácticas de Nube
|
|
14
|
+
|
|
15
|
+
## Cuándo NO cargar
|
|
16
|
+
|
|
17
|
+
- La tarea es desplegar en Azure: cargar `azure-cloud`.
|
|
18
|
+
- La tarea es desplegar en GCP: cargar `gcp-cloud`.
|
|
19
|
+
- La tarea es configurar SageMaker, Bedrock o servicios de ML de AWS: usar la documentación del servicio directamente.
|
|
20
|
+
- La tarea es auditoría de costos avanzada o multi-account strategy: usar AWS Cost Explorer y Organizations directamente.
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
Este skill cubre decisiones de arquitectura, seguridad y costos en AWS para sistemas
|
|
24
|
+
de producción. Los ejemplos usan Python (boto3) y configuración de infraestructura.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Well-Architected Framework — 6 Pilares
|
|
29
|
+
|
|
30
|
+
| Pilar | Pregunta clave |
|
|
31
|
+
|-------|---------------|
|
|
32
|
+
| **Excelencia operativa** | Puedes operar y mejorar continuamente? |
|
|
33
|
+
| **Seguridad** | Proteges la información y los sistemas? |
|
|
34
|
+
| **Confiabilidad** | Recuperas de fallos automáticamente? |
|
|
35
|
+
| **Eficiencia de desempeño** | Usas recursos eficientemente? |
|
|
36
|
+
| **Optimización de costos** | Pagas solo por lo que usas? |
|
|
37
|
+
| **Sostenibilidad** | Minimizas impacto ambiental? |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. IAM — Mínimo Privilegio Siempre
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
// BIEN: solo lo que necesita la función
|
|
45
|
+
{
|
|
46
|
+
"Version": "2012-10-17",
|
|
47
|
+
"Statement": [
|
|
48
|
+
{
|
|
49
|
+
"Sid": "LeerBucketNomina",
|
|
50
|
+
"Effect": "Allow",
|
|
51
|
+
"Action": ["s3:GetObject", "s3:ListBucket"],
|
|
52
|
+
"Resource": [
|
|
53
|
+
"arn:aws:s3:::empresa-nomina-prod",
|
|
54
|
+
"arn:aws:s3:::empresa-nomina-prod/*"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
]
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
NUNCA usar `"Action": "*"` ni `"Resource": "*"` en políticas IAM de producción.
|
|
62
|
+
|
|
63
|
+
```python
|
|
64
|
+
# NUNCA hardcodear credenciales AWS
|
|
65
|
+
# BIEN: usar IAM roles (en EC2/ECS/Lambda automático)
|
|
66
|
+
cliente_s3 = boto3.client('s3', region_name='us-east-1')
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. VPC — Red Segura
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
VPC: 10.0.0.0/16
|
|
75
|
+
├── Public Subnets (2 AZs) — ALB, NAT Gateway, Bastion
|
|
76
|
+
│ ├── 10.0.1.0/24 (us-east-1a)
|
|
77
|
+
│ └── 10.0.2.0/24 (us-east-1b)
|
|
78
|
+
├── Private App Subnets (2 AZs) — ECS Tasks, EC2 App servers
|
|
79
|
+
│ ├── 10.0.11.0/24 (us-east-1a)
|
|
80
|
+
│ └── 10.0.12.0/24 (us-east-1b)
|
|
81
|
+
└── Private Data Subnets (2 AZs) — RDS, ElastiCache
|
|
82
|
+
├── 10.0.21.0/24 (us-east-1a)
|
|
83
|
+
└── 10.0.22.0/24 (us-east-1b)
|
|
84
|
+
|
|
85
|
+
Reglas:
|
|
86
|
+
- Internet → ALB (80, 443) OK
|
|
87
|
+
- ALB → App Servers (8000) OK
|
|
88
|
+
- App Servers → RDS (5432) OK
|
|
89
|
+
- RDS → Internet NUNCA
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Servicios Detallados
|
|
95
|
+
|
|
96
|
+
Para implementaciones completas de S3 (cifrado, lifecycle), RDS (configuración producción),
|
|
97
|
+
Lambda (handlers, partial batch), ECS Fargate (task definitions), SQS/SNS (mensajería),
|
|
98
|
+
CloudFront (CDN) y optimización de costos, ver
|
|
99
|
+
[recursos/servicios-aws-referencia.md](recursos/servicios-aws-referencia.md).
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Checklist de Arquitectura AWS
|
|
104
|
+
|
|
105
|
+
### Seguridad
|
|
106
|
+
- [ ] Sin credenciales hardcodeadas — IAM roles siempre
|
|
107
|
+
- [ ] MFA activado en cuenta root y usuarios IAM admin
|
|
108
|
+
- [ ] CloudTrail habilitado en todas las regiones
|
|
109
|
+
- [ ] Config Rules para compliance
|
|
110
|
+
- [ ] GuardDuty habilitado para detección de amenazas
|
|
111
|
+
|
|
112
|
+
### Confiabilidad
|
|
113
|
+
- [ ] Multi-AZ en RDS, ElastiCache, ALB
|
|
114
|
+
- [ ] Auto Scaling Groups con mínimo 2 instancias
|
|
115
|
+
- [ ] Health checks en ALB y ECS
|
|
116
|
+
- [ ] Backups automatizados con retención mínima 7 días
|
|
117
|
+
- [ ] Runbooks documentados para fallos comunes
|
|
118
|
+
|
|
119
|
+
### Costos
|
|
120
|
+
- [ ] Budget alerts configuradas ($X USD/mes)
|
|
121
|
+
- [ ] Lifecycle policies en S3
|
|
122
|
+
- [ ] Snapshots de RDS/EBS con retención limitada
|
|
123
|
+
- [ ] Recursos de dev/staging apagados fuera de horario laboral
|
|
124
|
+
- [ ] Reserved instances para carga base predecible
|
|
125
|
+
|
|
126
|
+
### Desempeño
|
|
127
|
+
- [ ] CloudFront para assets estáticos
|
|
128
|
+
- [ ] ElastiCache para queries frecuentes
|
|
129
|
+
- [ ] Connection pooling en aplicación
|
|
130
|
+
- [ ] Read replicas para reportes pesados
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## Gotchas / Errores comunes no obvios
|
|
135
|
+
|
|
136
|
+
**Una política IAM con `"Effect": "Allow"` en todas las acciones S3 sobre el bucket pero sin el ARN del bucket con `/*` al final no permite operar sobre los objetos del bucket — solo sobre el bucket mismo**: la política `"Resource": "arn:aws:s3:::mi-bucket"` permite `ListBucket` pero no `GetObject`, `PutObject` ni `DeleteObject` porque estas operaciones actúan sobre objetos (`mi-bucket/*`), no sobre el bucket. Causa: en IAM, el recurso bucket y el recurso objeto son ARNs distintos; `s3:GetObject` requiere `arn:aws:s3:::mi-bucket/*`. Fix: para permisos completos sobre un bucket, siempre incluir ambos ARNs en el array `Resource`: `["arn:aws:s3:::mi-bucket", "arn:aws:s3:::mi-bucket/*"]`. `ListBucket` va al ARN del bucket; `GetObject`/`PutObject`/`DeleteObject` van al ARN de objetos.
|
|
137
|
+
|
|
138
|
+
**ECS Fargate con `awsvpc` network mode asigna una IP privada al task que cambia en cada deployment, y el Security Group que permite tráfico del task al RDS por IP no funciona después de un redeploy porque la IP cambió**: el Security Group del RDS tiene una inbound rule de `10.0.11.45/32` (la IP anterior del task) pero el task nuevo tiene `10.0.11.67/32`. La aplicación no puede conectarse a RDS hasta que alguien actualiza la regla manualmente. Causa: con `awsvpc`, cada task tiene su propia Elastic Network Interface con IP dinámica; confiar en IPs fijas para Security Groups es un anti-patrón. Fix: en el Security Group del RDS, usar el Security Group del ECS task como source en lugar de una IP: `aws ec2 authorize-security-group-ingress --group-id sg-rds --protocol tcp --port 5432 --source-group sg-ecs-tasks`. Los Security Groups como source se actualizan automáticamente cuando cambian las IPs.
|
|
139
|
+
|
|
140
|
+
**`boto3.client('s3').upload_file()` en Lambda con un archivo de más de 5GB falla con `EntityTooLarge` porque S3 requiere multipart upload para objetos mayores a 5GB pero `upload_file()` usa multipart automático solo para objetos mayores al `multipart_threshold` del `TransferConfig` (por defecto 8MB)**: la Lambda que procesa exportaciones grandes funciona para archivos de 500MB pero falla esporádicamente para archivos de 7GB. Causa: `upload_file()` usa multipart cuando el archivo supera `multipart_threshold`, pero hay un límite absoluto de S3 de 5GB para single-part PUT. Para archivos entre 8MB y 5GB, el comportamiento es correcto; para mayores de 5GB, `upload_file()` intenta single-part y S3 rechaza. Fix: siempre usar `config=TransferConfig(multipart_threshold=1024*25, multipart_chunksize=1024*25)` (25MB) para uploads desde Lambda con archivos de tamaño variable. El multipart threshold bajo garantiza multipart independientemente del tamaño.
|
|
141
|
+
|
|
142
|
+
**CloudWatch Logs Insights cobra por el volumen de datos escaneado en cada query, y las queries sin filtro de tiempo ejecutadas por el equipo en modo debug durante un incidente pueden generar costos de $50-200 USD en una sola sesión**: una query `fields @message | filter @message like 'ERROR'` sin `| limit 100` sobre un log group de 50GB de los últimos 90 días escanea los 50GB y puede costar $12.50 (a $0.005/GB escaneado en us-east-1). Varios ingenieros ejecutando queries similares durante un incidente de 2 horas puede acumular $100+. Causa: CloudWatch Insights cobra por GB escaneado, no por número de queries ni por resultado. Fix: siempre incluir filtro de tiempo en las queries de Insights: `filter @timestamp > datefloor(@timestamp, 1h)` o seleccionar el rango de tiempo en la UI antes de ejecutar. Para debugging frecuente, exportar logs a S3 + Athena que cobra $5/TB escaneado (40x más barato que Insights).
|