@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,179 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: drift-detection
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
herramientasPermitidas: [Read]
|
|
5
|
+
description: "Detección de drift de métricas de agentes/skills via ventana deslizante (7d) vs baseline (4 semanas). Integrado al operador Reflect del ciclo AGP."
|
|
6
|
+
exclusiones:
|
|
7
|
+
- "No cargar para detectar drift en código de aplicación (regressions de negocio); este skill detecta drift en métricas de uso de agentes/skills del sistema SWL."
|
|
8
|
+
- "No cargar si hay menos de 7 días de trazas en `.planning/traces/`; el baseline de 4 semanas no existirá y los resultados serán estadísticamente inválidos."
|
|
9
|
+
- "No cargar para observabilidad de la aplicación en producción; usar `monitoring-alertas` para eso."
|
|
10
|
+
- "No cargar manualmente cuando el ciclo AGP ya ejecuta `ejecutarDriftAutomatico()` en cada SubagentStop — invocarlo dos veces dobla el trabajo sin beneficio."
|
|
11
|
+
author: swl-ses
|
|
12
|
+
evolvable: true
|
|
13
|
+
evolvable_scope: [content, examples]
|
|
14
|
+
domain: ingeniería-de-software
|
|
15
|
+
tags: [agp, observabilidad, drift, métricas, ciclo-agp]
|
|
16
|
+
---
|
|
17
|
+
# drift-detection — Detección de drift para el ciclo AGP
|
|
18
|
+
|
|
19
|
+
Algoritmo de ventana deslizante que compara métricas recientes (últimos 7 días)
|
|
20
|
+
contra un baseline histórico (4 semanas previas) para detectar degradación de
|
|
21
|
+
skills y agentes antes de que el health score lo refleje.
|
|
22
|
+
|
|
23
|
+
Adaptado de `runDriftCheck`/`getDriftTimeline` en mission-control-main (MIT).
|
|
24
|
+
|
|
25
|
+
## Módulo principal
|
|
26
|
+
|
|
27
|
+
`scripts/lib/drift-detector.js` — zero-deps, Node stdlib únicamente.
|
|
28
|
+
|
|
29
|
+
## Cuándo se activa
|
|
30
|
+
|
|
31
|
+
- Manual: desde cualquier script o agente que necesite análisis de degradación.
|
|
32
|
+
- Automático (vía `hooks/auto-evolucion.js`): el hook ejecuta `ejecutarDriftAutomatico()`
|
|
33
|
+
en cada `SubagentStop` con un throttle de 24 h (configurable con `SWL_DRIFT_THROTTLE_H`).
|
|
34
|
+
Se evalúan los últimos 5 archivos JSONL de trazas. Opt-out total con `SWL_DRIFT_DISABLED=1`.
|
|
35
|
+
- Automático (vía ciclo AGP): `hooks/lib/reflect-classifier.js` expone
|
|
36
|
+
`ejecutarDriftReflect(rutaJsonl, nombreAgente)` como punto de extensión alternativo.
|
|
37
|
+
- Las trazas de agentes viven en `.planning/traces/YYYY-MM-DD.jsonl`.
|
|
38
|
+
|
|
39
|
+
## Exports del módulo
|
|
40
|
+
|
|
41
|
+
```js
|
|
42
|
+
const { detectarDrift, generarLineaTemporal } = require('./scripts/lib/drift-detector');
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### `detectarDrift(opts)`
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
detectarDrift({
|
|
49
|
+
rutaJsonl: '/ruta/a/traces.jsonl',
|
|
50
|
+
ventanaDias: 7, // default
|
|
51
|
+
baselineSemanasBase: 4, // default
|
|
52
|
+
umbralPct: 10, // warn si |drift| > 10%
|
|
53
|
+
metricas: ['tokens_promedio_por_sesion', 'tasa_exito_tool', 'tasa_finalizacion_tarea'],
|
|
54
|
+
agente: 'backend-python-swl', // para nudges
|
|
55
|
+
})
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Retorna:**
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"drifts": [
|
|
63
|
+
{
|
|
64
|
+
"metrica": "tokens_promedio_por_sesion",
|
|
65
|
+
"baseline": 1000,
|
|
66
|
+
"reciente": 2100,
|
|
67
|
+
"driftPct": 110.0,
|
|
68
|
+
"estado": "critico"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"metrica": "tasa_exito_tool",
|
|
72
|
+
"baseline": 0.9,
|
|
73
|
+
"reciente": 0.85,
|
|
74
|
+
"driftPct": -5.56,
|
|
75
|
+
"estado": "ok"
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"timestamp": "2026-04-19T12:00:00.000Z",
|
|
79
|
+
"estado_global": "critico"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**Estados por métrica:**
|
|
84
|
+
|
|
85
|
+
| Condición | Estado |
|
|
86
|
+
|-----------|--------|
|
|
87
|
+
| `abs(driftPct) <= umbralPct` | `ok` |
|
|
88
|
+
| `abs(driftPct) > umbralPct` | `warn` |
|
|
89
|
+
| `abs(driftPct) > umbralPct * 2` | `critico` |
|
|
90
|
+
|
|
91
|
+
**Estado global:** el peor estado entre todas las métricas.
|
|
92
|
+
|
|
93
|
+
### `generarLineaTemporal(opts)`
|
|
94
|
+
|
|
95
|
+
```js
|
|
96
|
+
generarLineaTemporal({
|
|
97
|
+
rutaJsonl: '/ruta/a/traces.jsonl',
|
|
98
|
+
dias: 30, // default
|
|
99
|
+
})
|
|
100
|
+
// → [{ fecha: '2026-04-19', tokens: 3200, exitos: 12, fallos: 1 }, ...]
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Retorna un array de longitud `dias`, uno por día, para visualización en
|
|
104
|
+
el dashboard o en reportes de salud.
|
|
105
|
+
|
|
106
|
+
## Estructura de eventos esperada en el JSONL
|
|
107
|
+
|
|
108
|
+
El módulo es permisivo: extrae métricas de cualquier campo que coincida.
|
|
109
|
+
|
|
110
|
+
| Métrica | Campos aceptados en el evento |
|
|
111
|
+
|---------|-------------------------------|
|
|
112
|
+
| Tokens | `atributos.tokens_totales`, `tokens`, `total_tokens` |
|
|
113
|
+
| Éxito de tool | `success`, `exito`, `atributos.success` |
|
|
114
|
+
| Finalización de tarea | `estado`, `status`, `atributos.estado` (valores: `OK`, `done`, `completado`) |
|
|
115
|
+
| Timestamp | `timestamp`, `ts`, `inicio`, `created_at` |
|
|
116
|
+
|
|
117
|
+
Formato nativo de `.planning/traces/YYYY-MM-DD.jsonl`:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
{"traceId":"...","nombre":"agent:backend-python-swl","inicio":"2026-04-19T10:00:00.000Z","estado":"OK","atributos":{"tokens_totales":1500}}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Integración con el ciclo AGP
|
|
124
|
+
|
|
125
|
+
El operador Reflect (`hooks/lib/reflect-classifier.js`) expone:
|
|
126
|
+
|
|
127
|
+
```js
|
|
128
|
+
const { ejecutarDriftReflect } = require('./hooks/lib/reflect-classifier');
|
|
129
|
+
|
|
130
|
+
const resultado = ejecutarDriftReflect(
|
|
131
|
+
'.planning/traces/2026-04-19.jsonl',
|
|
132
|
+
'backend-python-swl'
|
|
133
|
+
);
|
|
134
|
+
// resultado: { drifts, timestamp, estado_global } o null si módulo no disponible
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Cuando `estado_global === 'critico'`, el módulo emite automáticamente un nudge
|
|
138
|
+
a `.planning/evolucion/nudges.jsonl`:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{
|
|
142
|
+
"timestamp": "2026-04-19T12:00:00.000Z",
|
|
143
|
+
"tipo": "drift-detectado",
|
|
144
|
+
"agente_o_skill": "backend-python-swl",
|
|
145
|
+
"metrica": "tokens_promedio_por_sesion",
|
|
146
|
+
"drift_pct": 110.0,
|
|
147
|
+
"estado": "critico"
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
El agente `auto-evolucion-swl` consume estos nudges para proponer mejoras.
|
|
152
|
+
|
|
153
|
+
## Cómo interpretar los resultados
|
|
154
|
+
|
|
155
|
+
- **`ok`**: métricas estables. Sin acción requerida.
|
|
156
|
+
- **`warn`**: degradación moderada. Revisar en el próximo ciclo de evolución.
|
|
157
|
+
- **`critico`**: degradación severa. Invocar `/swl:evolucionar` con el agente
|
|
158
|
+
identificado. El nudge ya fue emitido — aparecerá en `/swl:salud`.
|
|
159
|
+
|
|
160
|
+
## Cuándo NO cargar
|
|
161
|
+
|
|
162
|
+
- Se busca detectar regresiones en el código de la aplicación (tests fallando, performance degradada); para eso usar `monitoring-alertas` o el revisor de código correspondiente.
|
|
163
|
+
- El proyecto tiene menos de 7 días de trazas — el baseline de 4 semanas no puede calcularse y `detectarDrift` retornará resultados sin significado estadístico.
|
|
164
|
+
- El ciclo AGP ya tiene configurado el throttle automático de 24 h; invocar el drift manualmente en el mismo intervalo produce el mismo nudge dos veces sin nuevo valor.
|
|
165
|
+
|
|
166
|
+
## Gotchas / Errores comunes no obvios
|
|
167
|
+
|
|
168
|
+
- **Timestamps inválidos en eventos JSONL provocan líneas ignoradas silenciosamente**: el módulo es permisivo con los campos pero si ningún campo de timestamp (`timestamp`, `ts`, `inicio`, `created_at`) tiene una fecha ISO válida, el evento se descarta del cálculo. Causa: eventos generados con timestamps de formato local (ej. `"19/04/2026"`) no pasan la validación. Solución: verificar que todos los eventos JSONL del trace tengan al menos un campo de timestamp en formato ISO 8601 — si el baseline aparece como 0, es el primer síntoma de eventos descartados.
|
|
169
|
+
- **Estado `critico` emitido por baseline con muy pocos eventos**: si el baseline de 4 semanas tiene solo 3 eventos y la ventana de 7 días tiene 8, el `driftPct` de tokens se dispara al 166% cuando en realidad el agente está más activo, no degradado. Causa: el módulo no valida que el baseline tenga suficientes eventos para ser estadísticamente válido. Solución: antes de interpretar un estado `critico`, verificar que el baseline tiene al menos 20 eventos — si no, marcar el resultado como `insufficient-data` en lugar de accionar.
|
|
170
|
+
- **Nudge duplicado en `.planning/evolucion/nudges.jsonl` por falta de deduplicación**: el hook se ejecuta dos veces en el mismo `SubagentStop` (por bug de throttle) y emite el mismo nudge dos veces. Causa: el throttle `SWL_DRIFT_THROTTLE_H` no validó correctamente el timestamp del último run. Solución: el archivo `nudges.jsonl` es append-only — antes de emitir un nudge, verificar si el último evento del mismo `agente_o_skill` y `metrica` tiene un timestamp dentro de la ventana de throttle.
|
|
171
|
+
- **`atomicWriteJSON` usado para escribir en nudges.jsonl**: escribir el archivo completo en lugar de hacer append corrompe el historial de nudges previos. Causa: confusión entre archivos de estado mutable (usan `atomicWriteJSON`) y archivos de eventos de alta frecuencia (usan `fs.appendFileSync`). Solución: `nudges.jsonl` es un JSONL de alta frecuencia — siempre usar `fs.appendFileSync(ruta, JSON.stringify(nudge) + '\n')`, nunca reescribir el archivo completo.
|
|
172
|
+
|
|
173
|
+
## Referencia cruzada
|
|
174
|
+
|
|
175
|
+
- Módulo: `scripts/lib/drift-detector.js`
|
|
176
|
+
- Tests: `tests/lib/drift-detector.test.js`
|
|
177
|
+
- Operador Reflect: `hooks/lib/reflect-classifier.js`
|
|
178
|
+
- Ciclo AGP: `.planning/evolucion/nudges.jsonl`
|
|
179
|
+
- Origen (adaptado de): `temp/mission-control-main/src/lib/agent-evals.ts` — MIT
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ejecutar-fase
|
|
3
|
+
description: Ejecuta el PLAN.md de una fase con commits atómicos por tarea. Aplica reglas de desviación, maneja checkpoints HITL, soporta TDD opcional, y mantiene ESTADO.md y HOJA-RUTA.md actualizados tras cada tarea completada.
|
|
4
|
+
version: "1.1.0"
|
|
5
|
+
herramientasPermitidas: [Read, Write, Edit, Bash, Glob, Grep]
|
|
6
|
+
exclusiones:
|
|
7
|
+
- "No cargar si no existe PLAN.md con `estado: aprobado` — ejecutar `planear-fase` primero."
|
|
8
|
+
- "No cargar para ejecutar tareas ad-hoc sin plan formal; si no hay oleadas ni criterios de verificación, no hay fase que ejecutar."
|
|
9
|
+
- "No cargar para retomar una sesión pausada en checkpoint `decision` o `human-action` sin resolverlo primero — el agente no debe avanzar pasando por alto una decisión pendiente del usuario."
|
|
10
|
+
- "No cargar solo para verificar el trabajo ya hecho; en ese caso usar `verificar-trabajo`."
|
|
11
|
+
# Nota: este skill supera el límite estándar de 380 líneas (406 líneas en v1.1.0).
|
|
12
|
+
# Excepción aprobada: las secciones Phase Gates y Dev↔QA Loop formal aportan
|
|
13
|
+
# protocolos de calidad de alto valor que no pueden condensarse sin perder
|
|
14
|
+
# precisión operativa. No eliminar contenido para ajustar al límite.
|
|
15
|
+
evolvable: true # default para skill estandar
|
|
16
|
+
---
|
|
17
|
+
# Habilidad: Ejecutar Fase de Desarrollo
|
|
18
|
+
|
|
19
|
+
## Propósito
|
|
20
|
+
|
|
21
|
+
La ejecución es donde el plan se convierte en código. Esta habilidad convierte
|
|
22
|
+
el PLAN.md en cambios reales, verificables y atómicamente comprometidos, con
|
|
23
|
+
trazabilidad completa entre cada tarea y su commit correspondiente. Evita el
|
|
24
|
+
antipatrón de acumular cambios sin verificar y commitear "todo de golpe".
|
|
25
|
+
|
|
26
|
+
## Cuándo activar
|
|
27
|
+
|
|
28
|
+
- Existe un PLAN.md válido en `.planning/`
|
|
29
|
+
- El usuario dice "ejecuta la fase" o "ejecuta el plan"
|
|
30
|
+
- Se retoma una fase interrumpida (ESTADO.md indica progreso parcial)
|
|
31
|
+
|
|
32
|
+
## Cuándo NO cargar
|
|
33
|
+
|
|
34
|
+
- No hay PLAN.md o el plan tiene `estado: propuesto` (no aprobado) — ejecutar `planear-fase` y obtener aprobación primero.
|
|
35
|
+
- El objetivo es solo verificar calidad del trabajo ya implementado; usar `verificar-trabajo`.
|
|
36
|
+
- Hay un checkpoint `decision` o `human-action` sin resolver en ESTADO.md — resolver el checkpoint antes de continuar la ejecución.
|
|
37
|
+
- Se quiere ejecutar solo una sub-tarea fuera de la secuencia de oleadas del plan; hacerlo rompe el grafo de dependencias y el estado en ESTADO.md.
|
|
38
|
+
|
|
39
|
+
## Prerrequisito obligatorio
|
|
40
|
+
|
|
41
|
+
Leer `.planning/fases/0N-PLAN.md` y `.planning/ESTADO.md` (si existe) antes de
|
|
42
|
+
ejecutar la primera tarea.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Protocolo de ejecución por tarea
|
|
47
|
+
|
|
48
|
+
### Para cada tarea del plan, en orden de oleadas:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
1. Leer la descripción completa de la tarea
|
|
52
|
+
2. Verificar que las dependencias estén marcadas como COMPLETADA en ESTADO.md
|
|
53
|
+
3. Ejecutar la implementación
|
|
54
|
+
4. Ejecutar el criterio de verificación de la tarea
|
|
55
|
+
5. Si pasa: hacer commit atómico + actualizar ESTADO.md
|
|
56
|
+
6. Si falla: aplicar retry con backoff exponencial (ver abajo)
|
|
57
|
+
7. Si agota reintentos: marcar como BLOQUEADA y reportar al usuario
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Protocolo de retry con backoff exponencial
|
|
61
|
+
|
|
62
|
+
Cuando una tarea falla verificacion:
|
|
63
|
+
|
|
64
|
+
| Intento | Delay | Accion |
|
|
65
|
+
|---------|-------|--------|
|
|
66
|
+
| 1 (original) | — | Ejecutar normalmente |
|
|
67
|
+
| 2 | 0s | Leer error, diagnosticar, corregir UNA cosa, re-verificar |
|
|
68
|
+
| 3 | 5s | Repensar enfoque, corregir, re-verificar |
|
|
69
|
+
| 4 (final) | 15s | Ultimo intento con enfoque diferente |
|
|
70
|
+
|
|
71
|
+
Reglas:
|
|
72
|
+
- `maxRetries`: 3 (configurable por tarea en el plan)
|
|
73
|
+
- Si el error es identico en 2 intentos: abortar (loop detectado)
|
|
74
|
+
- Si el error es tipo STOP (Regla 4): no reintentar, reportar
|
|
75
|
+
- Registrar en ESTADO.md: `intentos: N, ultimo_error: "desc"`
|
|
76
|
+
|
|
77
|
+
## Dev↔QA Loop formal
|
|
78
|
+
|
|
79
|
+
Cuando el plan incluye tareas de implementación seguidas de tareas de verificación
|
|
80
|
+
(patrón `T-NN impl → T-NN+1 verify`), aplicar el loop formal de calidad:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
implementador → tdd-qa-swl → [PASS] → siguiente tarea
|
|
84
|
+
↘ [FAIL] → implementador (intento 2)
|
|
85
|
+
→ tdd-qa-swl → [PASS]
|
|
86
|
+
↘ [FAIL] → implementador (intento 3)
|
|
87
|
+
→ tdd-qa-swl → [PASS]
|
|
88
|
+
↘ [FAIL] → ESCALAR
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Reglas del loop
|
|
92
|
+
|
|
93
|
+
- **Máximo 3 ciclos** Dev→QA por tarea. En el ciclo 3, el agente implementador
|
|
94
|
+
DEBE cambiar de enfoque completamente, no hacer el mismo fix.
|
|
95
|
+
- **Loop detectado** (mismo error dos veces seguidas): abortar y escalar a
|
|
96
|
+
`arquitecto-swl` con el diagnóstico completo.
|
|
97
|
+
- **Criterio de PASS**: todos los niveles de validación (1–4) deben pasar,
|
|
98
|
+
no solo los tests.
|
|
99
|
+
- **Criterio de FAIL**: cualquier nivel de validación falla o el criterio de
|
|
100
|
+
aceptación de la tarea no se cumple.
|
|
101
|
+
|
|
102
|
+
### Cómo registrar en ESTADO.md
|
|
103
|
+
|
|
104
|
+
```markdown
|
|
105
|
+
| T-05 | Crear endpoint /pagos | EN_PROGRESO | — | Ciclo QA: 2/3 |
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Cuándo escalar (Regla 4 del loop)
|
|
109
|
+
|
|
110
|
+
Si después de 3 ciclos la tarea sigue fallando:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
ALERTA: Loop Dev↔QA agotado — T-[NN]: [nombre de la tarea]
|
|
114
|
+
|
|
115
|
+
Ciclos intentados: 3
|
|
116
|
+
Último error: [descripción exacta]
|
|
117
|
+
Archivos involucrados: [lista]
|
|
118
|
+
|
|
119
|
+
Escalando a arquitecto-swl para revisión de enfoque.
|
|
120
|
+
NO hacer más intentos de implementación hasta recibir dirección.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Niveles de validación estructurada (después de cada tarea)
|
|
124
|
+
|
|
125
|
+
Ejecutar validaciones en orden ascendente. Si un nivel falla, NO avanzar al siguiente:
|
|
126
|
+
|
|
127
|
+
| Nivel | Qué valida | Ejemplo de comandos |
|
|
128
|
+
|-------|-----------|-------------------|
|
|
129
|
+
| 1. Sintaxis y estilo | Código compila, linter pasa | `ruff check .`, `npx tsc --noEmit`, `cargo clippy`, `go vet ./...` |
|
|
130
|
+
| 2. Tests unitarios | Lógica de negocio correcta | `pytest -x`, `npm test`, `cargo test`, `go test ./...` |
|
|
131
|
+
| 3. Tests de integración | Componentes conectados | `pytest tests/integration/`, `playwright test`, curl a endpoints |
|
|
132
|
+
| 4. Validación de aceptación | Criterio del plan satisfecho | Criterio de verificación específico de la tarea en PLAN.md |
|
|
133
|
+
|
|
134
|
+
Reglas:
|
|
135
|
+
- Nivel 1 se ejecuta SIEMPRE, incluso en tareas triviales
|
|
136
|
+
- Nivel 2 se ejecuta si existen tests en el proyecto
|
|
137
|
+
- Nivel 3 se ejecuta si la tarea toca integración entre componentes
|
|
138
|
+
- Nivel 4 se ejecuta siempre (es el criterio de verificación de la tarea)
|
|
139
|
+
- Si la validación falla: corregir inmediatamente. NUNCA acumular estado roto
|
|
140
|
+
|
|
141
|
+
### Formato de commit atómico
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
[T-NN] tipo(scope): descripción en imperativo
|
|
145
|
+
|
|
146
|
+
- Detalle adicional si es necesario
|
|
147
|
+
- Referencia a la tarea del plan
|
|
148
|
+
|
|
149
|
+
Co-Authored-By: SWL Agent <noreply@swl.dev>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Tipos de commit válidos: `feat`, `fix`, `test`, `refactor`, `docs`, `chore`, `migration`
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Modo Pipeline: acumulación de resultados entre tareas
|
|
157
|
+
|
|
158
|
+
Cuando el PLAN.md tiene **7 o más tareas con dependencias encadenadas**, activar
|
|
159
|
+
el modo pipeline para pasar contexto filtrado entre tareas en lugar del contexto
|
|
160
|
+
completo de la conversación.
|
|
161
|
+
|
|
162
|
+
### Cómo funciona
|
|
163
|
+
|
|
164
|
+
Al completar cada tarea, generar un `stepResult` compacto:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"step": 3,
|
|
169
|
+
"agentName": "backend-python-swl",
|
|
170
|
+
"output": {
|
|
171
|
+
"filesCreated": ["src/models/user.py", "db/migrations/001_users.sql"],
|
|
172
|
+
"endpointsAdded": ["POST /users", "GET /users/{id}"],
|
|
173
|
+
"keyDecisions": ["usé async SQLAlchemy con session factory"]
|
|
174
|
+
},
|
|
175
|
+
"status": "completed"
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Al delegar la siguiente tarea a un agente, construir el `TaskDelegationContext`
|
|
180
|
+
(schema en `manifiestos/handoff-context.json`) incluyendo **solo los stepResults
|
|
181
|
+
que la tarea siguiente necesita** — no el array completo:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
TaskDelegationContext:
|
|
185
|
+
reason: "task_delegation"
|
|
186
|
+
parentAgent: "orquestador-swl"
|
|
187
|
+
transferCount: [incrementar desde handoff previo]
|
|
188
|
+
taskId: "T-04"
|
|
189
|
+
taskDescription: "[descripción exacta del PLAN.md — self-contained]"
|
|
190
|
+
verificationCriteria: "[criterio de verificación del plan]"
|
|
191
|
+
relevantFiles: ["src/models/user.py:1", "db/migrations/001_users.sql"]
|
|
192
|
+
previousTaskOutputs:
|
|
193
|
+
- { taskId: "T-03", output: { endpointsAdded: [...] } }
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Beneficio
|
|
197
|
+
|
|
198
|
+
Un pipeline de 7 tareas pasa ~60% menos contexto a cada agente especializado
|
|
199
|
+
versus pasar el historial completo de la conversación.
|
|
200
|
+
|
|
201
|
+
### Límite de transferCount
|
|
202
|
+
|
|
203
|
+
Si `transferCount >= 10`, reportar al usuario:
|
|
204
|
+
```
|
|
205
|
+
ALERTA: Cadena de delegaciones muy larga (transferCount = N).
|
|
206
|
+
Posible loop de agentes. Revisar el PLAN.md y continuar manualmente.
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## Reglas de desviación
|
|
212
|
+
|
|
213
|
+
Una desviación ocurre cuando la implementación difiere del plan. Hay tres tipos:
|
|
214
|
+
|
|
215
|
+
### Desviación Menor (continuar y registrar)
|
|
216
|
+
- Un nombre de función o archivo difiere del plan
|
|
217
|
+
- Se añade un helper que no estaba planificado pero no cambia el alcance
|
|
218
|
+
- El tiempo real es diferente al estimado
|
|
219
|
+
|
|
220
|
+
**Acción**: Continuar. Registrar en ESTADO.md bajo `## Desviaciones`.
|
|
221
|
+
|
|
222
|
+
### Desviación Moderada (notificar y continuar)
|
|
223
|
+
- Se descubre que una tarea requiere subdivisión en el momento de ejecutar
|
|
224
|
+
- Se encuentra código existente que cubre parcialmente la tarea
|
|
225
|
+
- Una dependencia no funciona como se esperaba
|
|
226
|
+
|
|
227
|
+
**Acción**: Notificar al usuario en el mismo mensaje donde reportas avance.
|
|
228
|
+
Registrar decisión tomada en ESTADO.md.
|
|
229
|
+
|
|
230
|
+
### Desviación Mayor (STOP — requiere replanificación)
|
|
231
|
+
- La tarea no puede completarse sin cambiar el diseño de otra tarea ya completada
|
|
232
|
+
- Se descubre un requerimiento que invalida 2+ tareas del plan
|
|
233
|
+
- La implementación requeriría romper la compatibilidad con código existente
|
|
234
|
+
|
|
235
|
+
**Acción**: PARAR. No hacer commit. Reportar al usuario con:
|
|
236
|
+
1. Qué se encontró
|
|
237
|
+
2. Qué tareas están afectadas
|
|
238
|
+
3. Opciones de resolución propuestas
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Manejo de tareas HITL
|
|
243
|
+
|
|
244
|
+
Cuando el plan llega a una tarea marcada `HITL`:
|
|
245
|
+
|
|
246
|
+
1. Presentar al usuario el resultado del trabajo previo
|
|
247
|
+
2. Describir exactamente qué decisión o revisión se necesita
|
|
248
|
+
3. Esperar confirmación explícita antes de continuar
|
|
249
|
+
4. Registrar la respuesta del usuario en ESTADO.md
|
|
250
|
+
|
|
251
|
+
Formato de presentación de checkpoint:
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
CHECKPOINT HITL — T-[NN]: [Nombre]
|
|
255
|
+
|
|
256
|
+
Estado actual: [descripción de lo implementado hasta aquí]
|
|
257
|
+
|
|
258
|
+
Se necesita tu revisión/decisión:
|
|
259
|
+
[descripción precisa de qué revisar o decidir]
|
|
260
|
+
|
|
261
|
+
Opciones (si aplica):
|
|
262
|
+
A) [opción A]
|
|
263
|
+
B) [opción B]
|
|
264
|
+
|
|
265
|
+
¿Cómo procedo?
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## TDD opcional (activar si el CONTEXTO.md lo requiere)
|
|
271
|
+
|
|
272
|
+
Cuando el CONTEXTO.md indica que la fase requiere TDD:
|
|
273
|
+
|
|
274
|
+
### Ciclo RED → GREEN → REFACTOR por tarea
|
|
275
|
+
|
|
276
|
+
**RED**: Escribir el test que describe el comportamiento esperado.
|
|
277
|
+
El test DEBE fallar. Verificar que falla por la razón correcta, no por error
|
|
278
|
+
de sintaxis o configuración.
|
|
279
|
+
|
|
280
|
+
**GREEN**: Escribir la implementación mínima que hace pasar el test.
|
|
281
|
+
"Mínima" significa: no implementar más de lo que el test exige. Resistir la
|
|
282
|
+
tentación de añadir casos no cubiertos por tests.
|
|
283
|
+
|
|
284
|
+
**REFACTOR**: Limpiar el código sin cambiar el comportamiento.
|
|
285
|
+
El test DEBE seguir pasando después del refactor. Hacer commit solo en este paso.
|
|
286
|
+
|
|
287
|
+
### Cobertura mínima en modo TDD
|
|
288
|
+
|
|
289
|
+
- Toda función pública tiene al menos 1 test de camino feliz
|
|
290
|
+
- Toda función con branches tiene tests de cada rama relevante
|
|
291
|
+
- Toda función que puede lanzar excepción tiene test del caso de error
|
|
292
|
+
|
|
293
|
+
---
|
|
294
|
+
|
|
295
|
+
## Estado de ejecución serializable con execution-state.js
|
|
296
|
+
|
|
297
|
+
Para planes multi-agente complejos, usar `hooks/lib/execution-state.js` para
|
|
298
|
+
mantener el estado de ejecución serializable y recuperable entre sesiones:
|
|
299
|
+
|
|
300
|
+
### API disponible
|
|
301
|
+
|
|
302
|
+
- `nuevo(dir, { planId, tareas })` → inicializa estado de ejecución
|
|
303
|
+
- `leer(dir)` → lee el estado actual (devuelve `null` si no existe)
|
|
304
|
+
- `iniciarAgente(dir, { agente, tareaId })` → marca agente como activo
|
|
305
|
+
- `completarAgente(dir, { agente, tareaId, resultado })` → registra completación
|
|
306
|
+
- `establecerProximo(dir, { agente, tareaId })` → define el siguiente paso
|
|
307
|
+
- `actualizarContexto(dir, datos)` → actualiza contexto compartido entre agentes
|
|
308
|
+
- `formatearResumen(dir)` → resumen legible del estado actual
|
|
309
|
+
- `limpiar(dir)` → elimina el archivo de estado
|
|
310
|
+
|
|
311
|
+
### Integración con el protocolo de ejecución
|
|
312
|
+
|
|
313
|
+
Antes de cada tarea:
|
|
314
|
+
```
|
|
315
|
+
estado = leer(dir)
|
|
316
|
+
iniciarAgente(dir, { agente: "backend-python-swl", tareaId: "T-03" })
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Después de cada tarea completada:
|
|
320
|
+
```
|
|
321
|
+
completarAgente(dir, { agente: "backend-python-swl", tareaId: "T-03", resultado: { ... } })
|
|
322
|
+
establecerProximo(dir, { agente: "tdd-qa-swl", tareaId: "T-04" })
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
### Persistencia
|
|
326
|
+
|
|
327
|
+
El estado se persiste en `.planning/execution-state.json`. Al retomar una sesión
|
|
328
|
+
interrumpida, `leer()` recupera el estado exacto donde se detuvo.
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## Actualización de ESTADO.md
|
|
333
|
+
|
|
334
|
+
Actualizar ESTADO.md después de cada tarea (no al final de la oleada):
|
|
335
|
+
|
|
336
|
+
```markdown
|
|
337
|
+
# ESTADO.md — Fase [N]: [Nombre]
|
|
338
|
+
**Última actualización**: [fecha y hora]
|
|
339
|
+
|
|
340
|
+
## Progreso
|
|
341
|
+
- Tareas totales: N
|
|
342
|
+
- Completadas: M
|
|
343
|
+
- Bloqueadas: K
|
|
344
|
+
- Pendientes: N-M-K
|
|
345
|
+
|
|
346
|
+
## Estado por tarea
|
|
347
|
+
| ID | Nombre | Estado | Commit | Notas |
|
|
348
|
+
|------|--------|--------|--------|-------|
|
|
349
|
+
| T-01 | [nombre] | COMPLETADA | abc1234 | |
|
|
350
|
+
| T-02 | [nombre] | COMPLETADA | def5678 | |
|
|
351
|
+
| T-03 | [nombre] | EN_PROGRESO | — | |
|
|
352
|
+
| T-04 | [nombre] | PENDIENTE | — | depende T-03 |
|
|
353
|
+
| T-05 | [nombre] | BLOQUEADA | — | [descripción del bloqueo] |
|
|
354
|
+
|
|
355
|
+
## Desviaciones registradas
|
|
356
|
+
| Tarea | Tipo | Descripción | Resolución |
|
|
357
|
+
|-------|------|-------------|-----------|
|
|
358
|
+
| | | | |
|
|
359
|
+
|
|
360
|
+
## Decisiones HITL tomadas
|
|
361
|
+
| Tarea | Pregunta | Respuesta del usuario | Fecha |
|
|
362
|
+
|-------|---------|----------------------|-------|
|
|
363
|
+
| | | | |
|
|
364
|
+
|
|
365
|
+
## Próxima acción
|
|
366
|
+
[Qué se ejecuta a continuación y por qué]
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Actualización de HOJA-RUTA.md al completar la fase
|
|
372
|
+
|
|
373
|
+
Al completar todas las tareas del plan:
|
|
374
|
+
|
|
375
|
+
1. Marcar la fase como completada en HOJA-RUTA.md
|
|
376
|
+
2. Actualizar la fecha real de completación
|
|
377
|
+
3. Añadir nota de desviaciones si las hubo
|
|
378
|
+
4. Marcar la siguiente fase como "lista para discutir"
|
|
379
|
+
|
|
380
|
+
---
|
|
381
|
+
|
|
382
|
+
## Modo Ralph: ejecución autónoma hasta completar
|
|
383
|
+
|
|
384
|
+
Cuando el usuario dice "ejecuta hasta terminar", "modo autónomo" o "modo Ralph":
|
|
385
|
+
|
|
386
|
+
1. Ejecutar TODAS las tareas del plan en secuencia de oleadas
|
|
387
|
+
2. Después de cada tarea: ejecutar los 4 niveles de validación
|
|
388
|
+
3. Si una validación falla: corregir y re-validar inmediatamente
|
|
389
|
+
4. Si después de 3 intentos no se resuelve: marcar como BLOQUEADA y continuar con la siguiente tarea que no dependa de ella
|
|
390
|
+
5. Al terminar todas las tareas: ejecutar validación completa del proyecto
|
|
391
|
+
6. Si todo pasa: reportar éxito con resumen de lo completado
|
|
392
|
+
7. Si hay tareas bloqueadas: reportar cuáles y por qué
|
|
393
|
+
|
|
394
|
+
Reglas del modo Ralph:
|
|
395
|
+
- NUNCA preguntar al usuario durante la ejecución (excepto tareas HITL)
|
|
396
|
+
- Registrar CADA decisión tomada en ESTADO.md bajo `## Decisiones autónomas`
|
|
397
|
+
- Si se detecta loop (mismo error 2 veces): abortar esa tarea, NO el modo
|
|
398
|
+
- Al finalizar, producir resumen: tareas completadas, bloqueadas, decisiones tomadas
|
|
399
|
+
- El modo Ralph NO salta el protocolo de retry ni los niveles de validación
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## Phase Gates — criterios para cambiar de fase
|
|
404
|
+
|
|
405
|
+
Un Phase Gate es una verificación formal antes de declarar una fase completa
|
|
406
|
+
y comenzar la siguiente. NO avanzar si algún criterio falla.
|
|
407
|
+
|
|
408
|
+
### Gate de Implementación → Calidad
|
|
409
|
+
|
|
410
|
+
Antes de invocar al equipo de calidad (tdd-qa-swl, revisor-codigo-swl):
|
|
411
|
+
|
|
412
|
+
- [ ] Todas las tareas del plan en estado COMPLETADA o BLOQUEADA documentada
|
|
413
|
+
- [ ] Nivel 1 (linter/tipado) pasa en todo el código nuevo: `ruff`, `tsc --noEmit`, `clippy`
|
|
414
|
+
- [ ] Tests existentes siguen pasando (no hay regresiones)
|
|
415
|
+
- [ ] No hay secrets ni hardcodeos detectados por el hook escaneo-secretos
|
|
416
|
+
|
|
417
|
+
### Gate de Calidad → Deploy
|
|
418
|
+
|
|
419
|
+
Antes de invocar deploy o release:
|
|
420
|
+
|
|
421
|
+
- [ ] Score de revisión de código ≥ 9.0/10 (revisor-codigo-swl)
|
|
422
|
+
- [ ] 0 findings críticos de seguridad (revisor-seguridad-swl)
|
|
423
|
+
- [ ] Cobertura de tests ≥ 80% en código nuevo (tdd-qa-swl)
|
|
424
|
+
- [ ] Validación de accesibilidad si hay cambios de UI (accesibilidad-wcag-swl)
|
|
425
|
+
- [ ] Performance sin regresión: p95 ≤ baseline + 20% (si aplica rendimiento-swl)
|
|
426
|
+
|
|
427
|
+
### Gate de Deploy → Producción
|
|
428
|
+
|
|
429
|
+
Antes de declarar la fase completa en producción:
|
|
430
|
+
|
|
431
|
+
- [ ] Runbook de rollback documentado
|
|
432
|
+
- [ ] Alertas de monitoreo configuradas para la nueva funcionalidad
|
|
433
|
+
- [ ] Feature flag listo si el cambio es de alto riesgo
|
|
434
|
+
- [ ] Release notes actualizadas
|
|
435
|
+
|
|
436
|
+
### Cómo reportar un Gate fallido
|
|
437
|
+
|
|
438
|
+
```
|
|
439
|
+
PHASE GATE FALLIDO — Gate: [Calidad → Deploy]
|
|
440
|
+
|
|
441
|
+
Criterio no cumplido: Score de revisión 7.8/10 (mínimo 9.0)
|
|
442
|
+
Findings pendientes:
|
|
443
|
+
- [CRITICO] Validación de input en endpoint /usuarios/perfil
|
|
444
|
+
- [ALTO] N+1 query en listado de facturas
|
|
445
|
+
|
|
446
|
+
Acción requerida: corregir findings antes de continuar.
|
|
447
|
+
NO proceder con el deploy hasta aprobar este gate.
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
452
|
+
## Gotchas / Errores comunes no obvios
|
|
453
|
+
|
|
454
|
+
- **Dos agentes escriben al mismo archivo en paralelo**: en modo pipeline con oleadas paralelas, dos agentes distintos reciben tareas que tocan el mismo archivo (ej: `ESTADO.md` o un service compartido). Causa: las tareas no tenían dependencia explícita entre sí pero sí tenían acoplamiento de escritura. Solución: en el plan, si dos tareas modifican el mismo archivo, deben estar en oleadas distintas (secuencial), no paralelas.
|
|
455
|
+
- **Commit acumulado al final de la oleada, no por tarea**: el agente ejecuta 3 tareas y hace un solo commit grande al terminar la oleada. Causa: interpretación laxa del protocolo. Solución: el commit se hace inmediatamente después de pasar la verificación de cada tarea individual — si la sesión se interrumpe, el trabajo de las tareas completadas está protegido.
|
|
456
|
+
- **Loop Dev↔QA silencioso**: el mismo error aparece en el ciclo 2 y el ciclo 3 y el agente sigue intentando el mismo fix. Causa: no se detectó que el error era idéntico. Solución: comparar el mensaje de error exacto entre ciclos — si coincide en 2 intentos consecutivos, declarar loop y escalar a `arquitecto-swl`.
|
|
457
|
+
- **ESTADO.md no actualizado tras una tarea completada**: el agente completa T-03 pero no actualiza ESTADO.md antes de iniciar T-04. Causa: se omitió el paso 5 del protocolo. Solución: la actualización de ESTADO.md es parte del protocolo de cada tarea, no opcional — sin ella el estado de ejecución es inconsistente y la reanudación falla.
|
|
458
|
+
- **`transferCount` no incrementado en delegaciones encadenadas**: el orquestador delega 10 tareas sin incrementar el contador, superando el umbral sin alerta. Causa: se olvida actualizar el campo en el `TaskDelegationContext`. Solución: verificar y actualizar `transferCount` antes de cada delegación de tarea; si supera 10, reportar al usuario antes de continuar.
|
|
459
|
+
|
|
460
|
+
## Checklist de cierre de fase
|
|
461
|
+
|
|
462
|
+
- [ ] Todas las tareas en ESTADO.md con estado COMPLETADA o documentadas como BLOQUEADA
|
|
463
|
+
- [ ] Todos los commits hechos y referenciados en ESTADO.md
|
|
464
|
+
- [ ] HOJA-RUTA.md actualizado con la fase completada
|
|
465
|
+
- [ ] Desviaciones documentadas
|
|
466
|
+
- [ ] Decisiones HITL registradas con respuesta del usuario
|
|
467
|
+
- [ ] Tests pasan en el estado final del código
|
|
468
|
+
- [ ] No hay `console.log`, `print()` de debug ni pendientes sin ticket en el código nuevo
|